From 30b12e3e25d17f570ce51ac3fb8246d04eb960c9 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 30 Sep 2014 14:57:30 +0200 Subject: [PATCH] new inference: same parametrization check tweaked (IDEA-130519) --- .../graphInference/InferenceSession.java | 2 +- ...onCheckTakesTypeParametersIntoAccount.java | 28 +++++++++++++++++++ .../lambda/NewLambdaHighlightingTest.java | 4 +++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/SameParametrizationCheckTakesTypeParametersIntoAccount.java diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java index 66a624d4b61a..542d5b7e7299 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java @@ -549,7 +549,7 @@ public class InferenceSession { final Processor> differentParameterizationProcessor = new Processor>() { @Override public boolean process(Pair pair) { - return pair.first == null || pair.second == null || pair.first.equals(pair.second); + return pair.first == null || pair.second == null || !TypesDistinctProver.provablyDistinct(pair.first, pair.second); } }; if (InferenceIncorporationPhase.findParameterizationOfTheSameGenericClass(bounds, differentParameterizationProcessor)) return true; diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/SameParametrizationCheckTakesTypeParametersIntoAccount.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/SameParametrizationCheckTakesTypeParametersIntoAccount.java new file mode 100644 index 000000000000..3f8e4ea19a9a --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/newLambda/SameParametrizationCheckTakesTypeParametersIntoAccount.java @@ -0,0 +1,28 @@ +import java.util.Optional; + +interface Work { + T execute(); +} + +interface Result {} + +class ResultImpl implements Result {} + +class Provider { + T doWork(Work work) { + return work.execute(); + } +} + +class Main { + public static void main(String[] args) { + final Provider provider = new Provider(); + final Optional result = provider.doWork(() -> { + if (args.length > 1) { + return Optional.of(new ResultImpl()); + } else { + return Optional.of(new ResultImpl()); + } + }); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewLambdaHighlightingTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewLambdaHighlightingTest.java index d6153e6b3d84..7ddecf408499 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewLambdaHighlightingTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/NewLambdaHighlightingTest.java @@ -134,6 +134,10 @@ public class NewLambdaHighlightingTest extends LightDaemonAnalyzerTestCase { doTest(); } + public void testSameParametrizationCheckTakesTypeParametersIntoAccount() throws Exception { + doTest(); + } + @Bombed(month = Calendar.OCTOBER, day = 30) public void testCheckedExceptionsConstraintsSubstitutions() throws Exception { doTest();