From 324a9127a6da3b7ef49364be5ef4e5be9409ecd5 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 8 Apr 2011 14:02:10 +0200 Subject: [PATCH] don't suggest the same imported class in groovy twice --- .../groovy/lang/completion/GroovyCompletionUtil.java | 11 ++++++++--- .../completion/GroovyClassNameCompletionTest.groovy | 8 +++++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionUtil.java index bb1dfb092112..c3460e93a181 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionUtil.java @@ -228,14 +228,15 @@ public class GroovyCompletionUtil { if (importedName != null) { final GrCodeReferenceElement importReference = ((GrImportStatement)context).getImportReference(); if (importReference != null) { + boolean alias = ((GrImportStatement)context).isAliasedImport(); for (GroovyResolveResult r : importReference.multiResolve(false)) { final PsiElement resolved = r.getElement(); if (context.getManager().areElementsEquivalent(resolved, element)) { - return generateLookupForImportedElement(candidate, importedName); + return generateLookupForImportedElement(candidate, importedName, alias); } else { if (resolved instanceof PsiField && element instanceof PsiMethod && isAccessorFor((PsiMethod)element, (PsiField)resolved)) { - return generateLookupForImportedElement(candidate, getAccessorPrefix((PsiMethod)element) + capitalize(importedName)); + return generateLookupForImportedElement(candidate, getAccessorPrefix((PsiMethod)element) + capitalize(importedName), alias); } } } @@ -268,9 +269,13 @@ public class GroovyCompletionUtil { return AllClassesGetter.createLookupItem(psiClass, new GroovyClassNameInsertHandler()); } - private static LookupElementBuilder generateLookupForImportedElement(GroovyResolveResult resolveResult, String importedName) { + private static LookupElement generateLookupForImportedElement(GroovyResolveResult resolveResult, String importedName, boolean alias) { final PsiElement element = resolveResult.getElement(); assert element != null; + if (!alias && element instanceof PsiClass) { + return createClassLookupItem((PsiClass)element); + } + final PsiSubstitutor substitutor = resolveResult.getSubstitutor(); LookupElementBuilder builder = LookupElementBuilder.create(resolveResult, importedName).setPresentableText(importedName); return setupLookupBuilder(element, substitutor, builder); diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyClassNameCompletionTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyClassNameCompletionTest.groovy index 56f55a2e0c34..3df0a95e34c2 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyClassNameCompletionTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyClassNameCompletionTest.groovy @@ -239,7 +239,6 @@ new Fxoo()\n""" myFixture.configureByText("a.groovy", "new ArrayLi\n") myFixture.completeBasic() myFixture.checkResult "new ArrayList()\n" - } public void testOnlyAnnotationsAfterAt() { @@ -262,5 +261,12 @@ new Fxoo()\n""" myFixture.checkResult 'def s = """a\njava.lang.ArrayIndexOutOfBoundsException\na"""' } + public void testDoubleClass() { + myFixture.addClass "package foo; public class Zooooooo {}" + myFixture.configureByText("a.groovy", """import foo.Zooooooo +Zoooox""") + assertOneElement(myFixture.completeBasic()) + } + }