From f9fd72ebac4ae9bdd100aa563ff456aab6441dc1 Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Tue, 12 May 2015 14:11:35 +0200 Subject: [PATCH] captured wildcard in subtyping constraints: use upper bound only (IDEA-139046) --- .../constraints/SubtypingConstraint.java | 4 ++-- .../SubtypingConstraintWithSuperCapturedWildcard.java | 11 +++++++++++ .../daemon/lambda/ConstraintsInferenceMiscTest.java | 7 ++++--- 3 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/constraints/SubtypingConstraintWithSuperCapturedWildcard.java diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/SubtypingConstraint.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/SubtypingConstraint.java index d24033fe5521..a70ab65dcfd1 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/SubtypingConstraint.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/SubtypingConstraint.java @@ -72,9 +72,9 @@ public class SubtypingConstraint implements ConstraintFormula { } if (tBound instanceof PsiCapturedWildcardType) { - tBound = ((PsiWildcardType)myT).isExtends() ? ((PsiCapturedWildcardType)tBound).getUpperBound() - : ((PsiCapturedWildcardType)tBound).getLowerBound(); + tBound = ((PsiCapturedWildcardType)tBound).getUpperBound(); } + if (myS instanceof PsiCapturedWildcardType) { myS = ((PsiCapturedWildcardType)myS).getWildcard(); } diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/constraints/SubtypingConstraintWithSuperCapturedWildcard.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/constraints/SubtypingConstraintWithSuperCapturedWildcard.java new file mode 100644 index 000000000000..aca006b05726 --- /dev/null +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/lambda/constraints/SubtypingConstraintWithSuperCapturedWildcard.java @@ -0,0 +1,11 @@ +import java.util.Map; +import java.util.stream.Stream; + +import static java.util.stream.Collectors.toMap; + +class Test { + Map foo(Stream stream) { + return stream.collect(toMap(s -> s, s -> s)); + } +} + diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/ConstraintsInferenceMiscTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/ConstraintsInferenceMiscTest.java index 62a816f1cf8c..6580f2bb942f 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/ConstraintsInferenceMiscTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/daemon/lambda/ConstraintsInferenceMiscTest.java @@ -20,9 +20,6 @@ import com.intellij.openapi.projectRoots.Sdk; import com.intellij.testFramework.IdeaTestUtil; import org.jetbrains.annotations.NonNls; -/** - * Created by anna on 1/31/14. - */ public class ConstraintsInferenceMiscTest extends LightDaemonAnalyzerTestCase { @NonNls static final String BASE_PATH = "/codeInsight/daemonCodeAnalyzer/lambda/constraints"; @@ -62,6 +59,10 @@ public class ConstraintsInferenceMiscTest extends LightDaemonAnalyzerTestCase { doTest(false); } + public void testSubtypingConstraintWithSuperCapturedWildcard() throws Exception { + doTest(false); + } + private void doTest(final boolean checkWarnings) { doTest(BASE_PATH + "/" + getTestName(false) + ".java", checkWarnings, false); }