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;