From 50c39a05d23fe25eb32b96681260696e4d419804 Mon Sep 17 00:00:00 2001 From: anna Date: Wed, 17 Aug 2011 18:12:27 +0200 Subject: [PATCH] diamonds: forbid diamonds completion with inapplicable inferred types (IDEA-73068) --- .../completion/JavaInheritorsGetter.java | 31 ++++++++++++++----- ...psedInCaseOfInapplicableInference-out.java | 12 +++++++ ...ollapsedInCaseOfInapplicableInference.java | 12 +++++++ .../completion/SmartType17CompletionTest.java | 4 +++ 4 files changed, 52 insertions(+), 7 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedInCaseOfInapplicableInference-out.java create mode 100644 java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedInCaseOfInapplicableInference.java diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaInheritorsGetter.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaInheritorsGetter.java index 1a55cee49c3c..5cbc97c19593 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaInheritorsGetter.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaInheritorsGetter.java @@ -22,16 +22,14 @@ import com.intellij.openapi.util.Condition; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; import com.intellij.psi.filters.getters.ExpectedTypesGetter; +import com.intellij.psi.infos.MethodCandidateInfo; import com.intellij.psi.statistics.JavaStatisticsManager; import com.intellij.psi.statistics.StatisticsInfo; import com.intellij.psi.statistics.StatisticsManager; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiUtil; import com.intellij.psi.util.TypeConversionUtil; -import com.intellij.util.Consumer; -import com.intellij.util.ProcessingContext; -import com.intellij.util.Processor; -import com.intellij.util.SmartList; +import com.intellij.util.*; import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -137,8 +135,13 @@ public class JavaInheritorsGetter extends CompletionProvider -1) { + final JavaResolveResult resolveResult = methodCallExpression.resolveMethodGenerics(); + return PsiUtil.getApplicabilityLevel((PsiMethod)resolveResult.getElement(), resolveResult.getSubstitutor(), types, PsiUtil.getLanguageLevel(originalPosition)) + != MethodCandidateInfo.ApplicabilityLevel.NOT_APPLICABLE; + } + } + return true; + } + + public static void processInheritors(final CompletionParameters parameters, final Collection expectedClassTypes, final PrefixMatcher matcher, final Consumer consumer) { //quick diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedInCaseOfInapplicableInference-out.java b/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedInCaseOfInapplicableInference-out.java new file mode 100644 index 000000000000..a658060983f6 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedInCaseOfInapplicableInference-out.java @@ -0,0 +1,12 @@ +import java.util.ArrayList; + +public class CompletionWithPassToMethod { + + public static void main(String[] args) { + foo(new ArrayList()); + } + + + static void foo(ArrayList ll) { + } +} diff --git a/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedInCaseOfInapplicableInference.java b/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedInCaseOfInapplicableInference.java new file mode 100644 index 000000000000..4665f7a7612d --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/smartType/DiamondNotCollapsedInCaseOfInapplicableInference.java @@ -0,0 +1,12 @@ +import java.util.ArrayList; + +public class CompletionWithPassToMethod { + + public static void main(String[] args) { + foo(new ArrayL); + } + + + static void foo(ArrayList ll) { + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartType17CompletionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartType17CompletionTest.java index 14436d1336db..70c1ff827755 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartType17CompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartType17CompletionTest.java @@ -45,6 +45,10 @@ public class SmartType17CompletionTest extends LightFixtureCompletionTestCase { doTest(); } + public void testDiamondNotCollapsedInCaseOfInapplicableInference() throws Exception { + doTest(); + } + public void testDiamondPresentation() { configureByFile("/" + getTestName(false) + ".java"); LookupElementPresentation presentation = new LookupElementPresentation();