From 75179fcfefd736ab66f8c61755e4f08c60e8de56 Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 14 Aug 2017 17:02:26 +0200 Subject: [PATCH] IDEA-177034 A qualified class name should be suggested when there's a shadowing type parameter --- .../codeInsight/completion/JavaCompletionUtil.java | 11 +++-------- .../normal/TypeParameterShadowingClass.java | 8 ++++++++ .../normal/TypeParameterShadowingClass_after.java | 8 ++++++++ .../completion/NormalCompletionTest.groovy | 11 +++++++++++ 4 files changed, 30 insertions(+), 8 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completion/normal/TypeParameterShadowingClass.java create mode 100644 java/java-tests/testData/codeInsight/completion/normal/TypeParameterShadowingClass_after.java diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java index e2ab2590671c..85143e10776b 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java @@ -602,14 +602,9 @@ public class JavaCompletionUtil { final Document document = FileDocumentManager.getInstance().getDocument(file.getViewProvider().getVirtualFile()); - final PsiReference reference = file.findReferenceAt(startOffset); - if (reference != null) { - final PsiElement resolved = reference.resolve(); - if (resolved instanceof PsiClass) { - if (((PsiClass)resolved).getQualifiedName() == null || manager.areElementsEquivalent(psiClass, resolved)) { - return endOffset; - } - } + PsiReference reference = file.findReferenceAt(startOffset); + if (reference != null && manager.areElementsEquivalent(psiClass, reference.resolve())) { + return endOffset; } String name = psiClass.getName(); diff --git a/java/java-tests/testData/codeInsight/completion/normal/TypeParameterShadowingClass.java b/java/java-tests/testData/codeInsight/completion/normal/TypeParameterShadowingClass.java new file mode 100644 index 000000000000..c087fc92576e --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/TypeParameterShadowingClass.java @@ -0,0 +1,8 @@ +class Abc { + + class Tttt {} + + void foo(Tttt t) { + + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/normal/TypeParameterShadowingClass_after.java b/java/java-tests/testData/codeInsight/completion/normal/TypeParameterShadowingClass_after.java new file mode 100644 index 000000000000..1e53e241642b --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/TypeParameterShadowingClass_after.java @@ -0,0 +1,8 @@ +class Abc { + + class Tttt {} + + void foo(Abc.Tttt t) { + + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionTest.groovy index ef0e41c37ca4..1dcc6925547a 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionTest.groovy @@ -14,6 +14,7 @@ * limitations under the License. */ package com.intellij.java.codeInsight.completion + import com.intellij.JavaTestUtil import com.intellij.codeInsight.CodeInsightSettings import com.intellij.codeInsight.JavaProjectCodeInsightSettings @@ -31,6 +32,7 @@ import com.intellij.openapi.actionSystem.IdeActions import com.intellij.psi.PsiClass import com.intellij.psi.PsiDocumentManager import com.intellij.psi.PsiMethod +import com.intellij.psi.PsiTypeParameter import com.intellij.psi.codeStyle.CodeStyleSettingsManager import com.intellij.psi.codeStyle.CommonCodeStyleSettings import com.intellij.psi.codeStyle.JavaCodeStyleSettings @@ -1808,4 +1810,13 @@ class Bar { void testNoCallsInPackageStatement() { doAntiTest() } + void testTypeParameterShadowingClass() { + configure() + myFixture.assertPreferredCompletionItems 0, 'Tttt', 'Tttt' + assert myFixture.lookupElements[0].object instanceof PsiTypeParameter + assert !(myFixture.lookupElements[1].object instanceof PsiTypeParameter) + selectItem(myFixture.lookupElements[1]) + checkResult() + } + }