class Test {

  interface A {
    A f();
  }
  interface B {}

  static abstract class C implements A, B {}
  static abstract class D implements A, B {}

  interface I<T> {
    <error descr="Method return type missing">m</error>(T arg);
  }

  void bar(C c) {
    foo(c, x -> x.f());
    foo(c, x -> x);
  }

  <T> void foo(T t1, I<T> t3) {}

}

class Test2 {

  interface F {
    <X>  <error descr="Method return type missing">m</error>();
  }

  void g() {}

  {
    F f = this::g;
  }
}
