Bug 511878: [1.8][inference] Type inference error with lambdas and
wildcards
Signed-off-by: Stephan Herrmann <stephan.herrmann@berlin.de>
diff --git a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_1_8.java b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_1_8.java
index 801437d..44cc216 100644
--- a/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_1_8.java
+++ b/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/GenericsRegressionTest_1_8.java
@@ -7946,4 +7946,44 @@
"}\n"
});
}
+
+ public void testBug511878() {
+ // note: type variables renamed to facilitate debugging
+ runConformTest(
+ new String[] {
+ "SimpleParser.java",
+ "import java.util.function.Function;\n" +
+ "\n" +
+ "\n" +
+ "public interface SimpleParser<T> {\n" +
+ "\n" +
+ " static class Tuple<A,B> {\n" +
+ " }\n" +
+ " \n" +
+ " /** the type of the functional interface: Parser<T> :: CharSequence -> Tuple<T, CharSequence>> */\n" +
+ " abstract Tuple<T, CharSequence> parse(CharSequence cs);\n" +
+ " \n" +
+ " default <V> SimpleParser<V> andThenBinding(Function<? super T, SimpleParser<V>> f) {\n" +
+ " return null;\n" +
+ " }\n" +
+ "\n" +
+ " default <W> SimpleParser<W> andThen(SimpleParser<W> p) {\n" +
+ " return null;\n" +
+ " }\n" +
+ " \n" +
+ " static <X> SimpleParser<X> output(X v) {\n" +
+ " return null;\n" +
+ " }\n" +
+ " \n" +
+ " static SimpleParser<String> space() {\n" +
+ " return null;\n" +
+ " }\n" +
+ "\n" +
+ " static <Y> SimpleParser<Y> token(SimpleParser<Y> p) {\n" +
+ " return space().andThen(p.andThenBinding(v -> space().andThen(output(v))));\n" +
+ " }\n" +
+ "\n" +
+ "}\n"
+ });
+ }
}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18.java
index 46d5024..0c58167 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18.java
@@ -561,7 +561,7 @@
MethodBinding innerMethod = invocation.binding();
if (innerMethod != null && innerMethod.isValidBinding()) {
substitution = enrichSubstitution(substitution, invocation, innerMethod);
- return addJDK_8153748ConstraintsFromInvocation(innerArgs, innerMethod.original(), substitution);
+ return addJDK_8153748ConstraintsFromInvocation(innerArgs, innerMethod.shallowOriginal(), substitution);
}
} else if (argument instanceof ConditionalExpression) {
ConditionalExpression ce = (ConditionalExpression) argument;