interface Functional {
  void a(String s);
}

interface NonFunctional {
  void b(String s);
  void c();
}

interface P<<warning descr="Type parameter 'T' is never used">T</warning>> {
  void subscribe(Functional f);
  void subscribe(NonFunctional nf);
}

class Test {
  void foo(P p) {
    p.subscribe(<warning descr="Parameter 's' is never used">s</warning> -> {});
  }
}

interface FunctionalExact {
  void a();
}

interface NonFunctionalExact {
  void b();
  void c();
}

interface PExact<<warning descr="Type parameter 'T' is never used">T</warning>> {
  void subscribe(FunctionalExact f);
  void subscribe(NonFunctionalExact nf);
}

class TestExact {
  void foo(PExact p) {
    p.subscribe(() -> {});
  }
}