From 289ee1d04c6a37555f1df258659919b1b92bef17 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 12 Oct 2012 17:09:59 +0200 Subject: [PATCH] lambda: do not override already inferred types from parent (IDEA-92733) --- .../source/resolve/PsiResolveHelperImpl.java | 5 ++++- .../IncompatibleFormalParameterTypes.java | 19 +++++++++++++++++++ .../daemon/lambda/LambdaHighlightingTest.java | 6 +++++- 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/IncompatibleFormalParameterTypes.java diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java index d193ee56081d..a346115cbea3 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java @@ -993,7 +993,10 @@ public class PsiResolveHelperImpl implements PsiResolveHelper { if (method == null || methodParamsDependOn(typeParameter, expression, functionalInterfaceType, method.getParameterList().getParameters(), LambdaUtil.getSubstitutor(method, resolveResult))) { - return getFailedInferenceConstraint(typeParameter); + if (expression instanceof PsiMethodReferenceExpression) { + return getFailedInferenceConstraint(typeParameter); + } + return null; } } } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/IncompatibleFormalParameterTypes.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/IncompatibleFormalParameterTypes.java new file mode 100644 index 000000000000..ce112bb0b0b6 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/highlighting/IncompatibleFormalParameterTypes.java @@ -0,0 +1,19 @@ +class LambdaTest { + + public void highlightsTheBug(Stream stream) { + stream.flatMap((Block sink, String element) -> {}); + } + + public interface Block { + void apply(B t); + } + + public interface Stream { + Stream flatMap(FlatMapper mapper); + + } + + public interface FlatMapper { + void flatMapInto(Block sink, F element); + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/LambdaHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/LambdaHighlightingTest.java index a4fa1a498b3e..6dac84473075 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/LambdaHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/LambdaHighlightingTest.java @@ -152,7 +152,11 @@ public class LambdaHighlightingTest extends LightDaemonAnalyzerTestCase { public void testRecursiveAccess() throws Exception { doTest(); } - + + public void testIncompatibleFormalParameterTypes() throws Exception { + doTest(); + } + private void doTest() throws Exception { doTest(BASE_PATH + "/" + getTestName(false) + ".java", false, false); }