From 88fdd75397826c304656e2d2efee7c8a169d7fb6 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 1 Mar 2016 12:20:54 +0100 Subject: [PATCH] java smart completion: don't suggest generic call variants with inapplicable types --- .../psi/filters/types/AssignableFromFilter.java | 3 ++- .../completion/smartType/OnlyCompatibleTypes.java | 13 +++++++++++++ .../completion/SmartType18CompletionTest.java | 5 +++++ .../completion/SmartTypeCompletionTest.java | 5 +++++ 4 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/codeInsight/completion/smartType/OnlyCompatibleTypes.java diff --git a/java/java-impl/src/com/intellij/psi/filters/types/AssignableFromFilter.java b/java/java-impl/src/com/intellij/psi/filters/types/AssignableFromFilter.java index e791c926fd58..23309bd687c0 100644 --- a/java/java-impl/src/com/intellij/psi/filters/types/AssignableFromFilter.java +++ b/java/java-impl/src/com/intellij/psi/filters/types/AssignableFromFilter.java @@ -119,7 +119,8 @@ public class AssignableFromFilter implements ElementFilter{ expectedType, false, PsiUtil.getLanguageLevel(place)); - if (substitutionForParameter != PsiType.NULL && !(substitutionForParameter instanceof PsiIntersectionType)) { + if (substitutionForParameter != PsiType.NULL && !(substitutionForParameter instanceof PsiIntersectionType) && + PsiUtil.resolveClassInClassTypeOnly(substitutionForParameter) != parameter) { return true; } } diff --git a/java/java-tests/testData/codeInsight/completion/smartType/OnlyCompatibleTypes.java b/java/java-tests/testData/codeInsight/completion/smartType/OnlyCompatibleTypes.java new file mode 100644 index 000000000000..e10ac9709676 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/smartType/OnlyCompatibleTypes.java @@ -0,0 +1,13 @@ +class A { + { + Func2 f = gex + } + + Func1 get1() {} + Func2 get2() {} + +} + + +interface Func1 {} +interface Func2 {} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartType18CompletionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartType18CompletionTest.java index 372dadf4c287..8db77fabc563 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartType18CompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartType18CompletionTest.java @@ -175,4 +175,9 @@ public void testConvertToObjectStream() { } checkResultByFile("/" + getTestName(false) + "-out.java"); } + + public void testOnlyCompatibleTypes() { + configureByTestName(); + assertOrderedEquals(myFixture.getLookupElementStrings(), "get2"); + } } diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java index 5a4d3b4a41a2..4daca42f2236 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java @@ -1232,4 +1232,9 @@ public class SmartTypeCompletionTest extends LightFixtureCompletionTestCase { private CommonCodeStyleSettings getCodeStyleSettings() { return CodeStyleSettingsManager.getSettings(getProject()).getCommonSettings(JavaLanguage.INSTANCE); } + + public void testOnlyCompatibleTypes() { + configureByTestName(); + assertOrderedEquals(myFixture.getLookupElementStrings(), "get2"); + } }