method refs: check more specific by return type; check used method in test via unused symbol inspection

This commit is contained in:
anna
2012-10-02 21:02:01 +02:00
parent 55c8b4db6c
commit cf0e5a1051
3 changed files with 146 additions and 8 deletions

View File

@@ -16,11 +16,94 @@ class MyTest {
Object m(Foo<Integer> f);
}
static void foo(I1 i) {}
static void foo(I2 i) {}
static void foo(I3 i) {}
private static void <warning descr="Private method 'foo(MyTest.I1)' is never used">foo</warning>(I1 i) {
System.out.println(i);
}
static {
private static void foo(I2 i) {
System.out.println(i);
}
private static void <warning descr="Private method 'foo(MyTest.I3)' is never used">foo</warning>(I3 i) {
System.out.println(i);
}
public static void main(String[] args) {
foo(Foo::m);
}
}
class MyTest1 {
interface I1 {
Foo<?> m(String s);
}
interface I2 {
Foo<?> m(Integer i);
}
interface I3 {
Foo<Number> m(Integer i);
}
static class Foo<T extends Number> {
Foo(T t) {
System.out.println(t);
}
}
private static void <warning descr="Private method 'm(MyTest1.I1)' is never used">m</warning>(I1 i) {
System.out.println(i);
}
private static void m(I2 i) {
System.out.println(i);
}
private static void <warning descr="Private method 'm(MyTest1.I3)' is never used">m</warning>(I3 i) {
System.out.println(i);
}
public static void main(String[] args) {
m(Foo::new);
}
}
class MyTest2 {
interface I1 {
Foo<?> m(String s);
}
interface I2 {
Foo<Integer> m(Integer i);
}
interface I3 {
Foo<Number> m(Integer i);
}
static class Foo<T extends Number> {
Foo(T t) {
System.out.println(t);
}
}
private static void <warning descr="Private method 'm(MyTest2.I1)' is never used">m</warning>(I1 i) {
System.out.println(i);
}
private static void m(I2 i) {
System.out.println(i);
}
private static void <warning descr="Private method 'm(MyTest2.I3)' is never used">m</warning>(I3 i) {
System.out.println(i);
}
public static void main(String[] args) {
m(Foo::new);
}
}