junit for Bug 443596 - [1.8][compiler] Failure for overload resolution
in case of Generics and Varags
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java
index 9aaa4b6..b70665a 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest.java
@@ -5485,5 +5485,29 @@
},
"");
}
+// https://bugs.eclipse.org/bugs/show_bug.cgi?id=443596, [1.8][compiler] Failure for overload resolution in case of Generics and Varags
+public void test443596() {
+ if (this.complianceLevel >= ClassFileConstants.JDK1_7)
+ this.runNegativeTest(
+ new String[] {
+ "X.java",
+ "public final class X {\n" +
+ " static interface Predicate<T> { boolean test(T object); }\n" +
+ " public static <T> Predicate<T> in(Predicate<? extends T> arg) { return null; }\n" +
+ " public static <T> Predicate<T> and(Predicate<? super T>... arg) { return null; }\n" +
+ " public static <T> Predicate<T> and(Predicate<? super T> arg0, Predicate<? super T> arg1) { return null; }\n" +
+ " static class FilteredCollection<E> {\n" +
+ " Predicate<? super E> predicate;\n" +
+ " public void error(Predicate<?> arg) { and(predicate, in(arg)); } // no compile\n" +
+ " }\n" +
+ "}\n",
+ },
+ "----------\n" +
+ "1. WARNING in X.java (at line 4)\n" +
+ " public static <T> Predicate<T> and(Predicate<? super T>... arg) { return null; }\n" +
+ " ^^^\n" +
+ "Type safety: Potential heap pollution via varargs parameter arg\n" +
+ "----------\n");
+}
}