From 90238478338a15ad981d890d568a662d9e18fbf4 Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 8 Mar 2012 14:46:37 +0400 Subject: [PATCH] dots after package names shouldn't prevent from chained completion --- .../completion/JavaNoVariantsDelegator.java | 11 ++++++++++- .../completion/JavaAutoPopupTest.groovy | 7 +++++++ .../completion/GroovyCompletionContributor.java | 3 ++- .../lang/completion/GroovyNoVariantsDelegator.java | 14 +++++++------- .../groovy/completion/GroovyAutoPopupTest.groovy | 8 ++++++++ 5 files changed, 34 insertions(+), 9 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaNoVariantsDelegator.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaNoVariantsDelegator.java index f0f9d2a59b60..9761c51aca08 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaNoVariantsDelegator.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaNoVariantsDelegator.java @@ -35,7 +35,7 @@ public class JavaNoVariantsDelegator extends CompletionContributor { @Override public void fillCompletionVariants(final CompletionParameters parameters, final CompletionResultSet result) { - final boolean empty = result.runRemainingContributors(parameters, true).isEmpty(); + final boolean empty = containsOnlyPackages(result.runRemainingContributors(parameters, true)); if (!empty && parameters.getInvocationCount() == 0) { result.restartCompletionWhenNothingMatches(); @@ -46,6 +46,15 @@ public class JavaNoVariantsDelegator extends CompletionContributor { } } + public static boolean containsOnlyPackages(LinkedHashSet results) { + for (CompletionResult result : results) { + if (!(CompletionUtil.getTargetElement(result.getLookupElement()) instanceof PsiPackage)) { + return false; + } + } + return true; + } + private static void delegate(CompletionParameters parameters, CompletionResultSet result) { if (parameters.getCompletionType() == CompletionType.BASIC) { PsiElement position = parameters.getPosition(); diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy index 1246b02cb2bc..1d8072a81314 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/JavaAutoPopupTest.groovy @@ -1233,4 +1233,11 @@ class Foo {{ class Foo {{ Util.foo(); }}''' } + public void testPackageQualifier() { + myFixture.addClass("package com.too; public class Util {}") + myFixture.configureByText 'a.java', 'class Foo { void foo(Object command) { }}' + type 'com.t' + assert myFixture.lookupElementStrings.containsAll(['too', 'command.toString']) + } + } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionContributor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionContributor.java index 56b61fa3179e..ddbceac28a54 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionContributor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionContributor.java @@ -435,7 +435,8 @@ public class GroovyCompletionContributor extends CompletionContributor { for (String string : CompleteReferenceExpression.getVariantsWithSameQualifier(matcher, (GrExpression)qualifier, (GrReferenceExpression)reference)) { result.add(GroovyCompletionUtil.getLookupElement(string)); } - if (parameters.getInvocationCount() < 2 && qualifier != null && qualifierType == null) { + if (parameters.getInvocationCount() < 2 && qualifier != null && qualifierType == null && + !(qualifier instanceof GrReferenceExpression && ((GrReferenceExpression)qualifier).resolve() instanceof PsiPackage)) { if (parameters.getInvocationCount() == 1) { showInfo(); } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyNoVariantsDelegator.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyNoVariantsDelegator.java index 957c1ebc3985..70ae6f0bd85f 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyNoVariantsDelegator.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyNoVariantsDelegator.java @@ -19,10 +19,7 @@ import com.intellij.codeInsight.completion.*; import com.intellij.codeInsight.completion.impl.CamelHumpMatcher; import com.intellij.codeInsight.lookup.AutoCompletionPolicy; import com.intellij.codeInsight.lookup.LookupElement; -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import com.intellij.psi.PsiType; +import com.intellij.psi.*; import com.intellij.psi.search.PsiShortNamesCache; import com.intellij.util.Consumer; import org.jetbrains.annotations.NotNull; @@ -40,7 +37,7 @@ public class GroovyNoVariantsDelegator extends CompletionContributor { @Override public void fillCompletionVariants(final CompletionParameters parameters, final CompletionResultSet result) { - final boolean empty = result.runRemainingContributors(parameters, true).isEmpty(); + final boolean empty = JavaNoVariantsDelegator.containsOnlyPackages(result.runRemainingContributors(parameters, true)); if (!empty && parameters.getInvocationCount() == 0) { result.restartCompletionWhenNothingMatches(); @@ -90,8 +87,11 @@ public class GroovyNoVariantsDelegator extends CompletionContributor { } PsiElement qualifier = ((GrReferenceElement)parent).getQualifier(); if (!(qualifier instanceof GrReferenceElement) || - ((GrReferenceElement)qualifier).getQualifier() != null || - ((GrReferenceElement)qualifier).resolve() != null) { + ((GrReferenceElement)qualifier).getQualifier() != null) { + return; + } + PsiElement target = ((GrReferenceElement)qualifier).resolve(); + if (target != null && !(target instanceof PsiPackage)) { return; } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyAutoPopupTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyAutoPopupTest.groovy index af14383470a0..57e82942aeff 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyAutoPopupTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyAutoPopupTest.groovy @@ -260,4 +260,12 @@ class GroovyAutoPopupTest extends CompletionAutoPopupTestCase { myFixture.assertPreferredCompletionItems 0, 'Boolean', 'boolean' } + public void testPackageQualifier() { + myFixture.addClass("package com.too; public class Util {}") + myFixture.configureByText 'a.groovy', 'void foo(Object command) { }' + type 'com.t' + assert myFixture.lookupElementStrings.containsAll(['too', 'command.toString']) + } + + }