From 3c90060b1ba6d206ab822ed45f1057a2473475a3 Mon Sep 17 00:00:00 2001 From: peter Date: Thu, 8 Mar 2012 14:27:42 +0400 Subject: [PATCH] a more straightforward no-variants delegation --- .../completion/JavaNoVariantsDelegator.java | 25 ++++++++-- .../completion/CompletionResultSet.java | 16 +++++++ .../completion/NoVariantsDelegator.java | 48 ------------------- .../completion/GroovyNoVariantsDelegator.java | 16 ++++++- .../completion/XmlNoVariantsDelegator.java | 15 ++++-- 5 files changed, 60 insertions(+), 60 deletions(-) delete mode 100644 platform/lang-impl/src/com/intellij/codeInsight/completion/NoVariantsDelegator.java 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 a52716124bf7..f0f9d2a59b60 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaNoVariantsDelegator.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaNoVariantsDelegator.java @@ -31,10 +31,22 @@ import java.util.Set; /** * @author peter */ -public class JavaNoVariantsDelegator extends NoVariantsDelegator { +public class JavaNoVariantsDelegator extends CompletionContributor { @Override - protected void delegate(CompletionParameters parameters, CompletionResultSet result, Consumer passResult) { + public void fillCompletionVariants(final CompletionParameters parameters, final CompletionResultSet result) { + final boolean empty = result.runRemainingContributors(parameters, true).isEmpty(); + + if (!empty && parameters.getInvocationCount() == 0) { + result.restartCompletionWhenNothingMatches(); + } + + if (empty) { + delegate(parameters, result); + } + } + + private static void delegate(CompletionParameters parameters, CompletionResultSet result) { if (parameters.getCompletionType() == CompletionType.BASIC) { PsiElement position = parameters.getPosition(); if (parameters.getInvocationCount() <= 1 && @@ -48,7 +60,7 @@ public class JavaNoVariantsDelegator extends NoVariantsDelegator { } if (parameters.getCompletionType() == CompletionType.SMART && parameters.getInvocationCount() == 2) { - result.runRemainingContributors(parameters.withInvocationCount(3), passResult); + result.runRemainingContributors(parameters.withInvocationCount(3), true); } } @@ -59,8 +71,11 @@ public class JavaNoVariantsDelegator extends NoVariantsDelegator { } PsiElement qualifier = ((PsiJavaCodeReferenceElement)parent).getQualifier(); if (!(qualifier instanceof PsiJavaCodeReferenceElement) || - ((PsiJavaCodeReferenceElement)qualifier).isQualified() || - ((PsiJavaCodeReferenceElement)qualifier).resolve() != null) { + ((PsiJavaCodeReferenceElement)qualifier).isQualified()) { + return; + } + PsiElement target = ((PsiJavaCodeReferenceElement)qualifier).resolve(); + if (target != null && !(target instanceof PsiPackage)) { return; } diff --git a/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionResultSet.java b/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionResultSet.java index 9605aadad92b..9fc19839c3d2 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionResultSet.java +++ b/platform/lang-api/src/com/intellij/codeInsight/completion/CompletionResultSet.java @@ -6,6 +6,8 @@ import com.intellij.patterns.PlatformPatterns; import com.intellij.util.Consumer; import org.jetbrains.annotations.NotNull; +import java.util.LinkedHashSet; + /** * {@link com.intellij.codeInsight.completion.CompletionResultSet}s feed on {@link com.intellij.codeInsight.lookup.LookupElement}s, * match them against specified @@ -83,6 +85,20 @@ public abstract class CompletionResultSet { myStopped = true; } + public LinkedHashSet runRemainingContributors(CompletionParameters parameters, final boolean passResult) { + final LinkedHashSet elements = new LinkedHashSet(); + runRemainingContributors(parameters, new Consumer() { + @Override + public void consume(CompletionResult result) { + if (passResult) { + passResult(result); + } + elements.add(result); + } + }); + return elements; + } + public void runRemainingContributors(CompletionParameters parameters, Consumer consumer) { runRemainingContributors(parameters, consumer, true); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/NoVariantsDelegator.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/NoVariantsDelegator.java deleted file mode 100644 index 8830708d4dd9..000000000000 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/NoVariantsDelegator.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2000-2011 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.codeInsight.completion; - -import com.intellij.openapi.util.Ref; -import com.intellij.util.Consumer; - -/** - * @author Dmitry Avdeev - * Date: 12/19/11 - */ -public abstract class NoVariantsDelegator extends CompletionContributor { - - @Override - public void fillCompletionVariants(final CompletionParameters parameters, final CompletionResultSet result) { - final Ref empty = Ref.create(true); - Consumer passResult = new Consumer() { - public void consume(final CompletionResult lookupElement) { - empty.set(false); - result.passResult(lookupElement); - } - }; - result.runRemainingContributors(parameters, passResult); - - if (!empty.get() && parameters.getInvocationCount() == 0) { - result.restartCompletionWhenNothingMatches(); - } - - if (empty.get()) { - delegate(parameters, result, passResult); - } - } - - protected abstract void delegate(CompletionParameters parameters, CompletionResultSet result, Consumer passResult); -} 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 cb283209ff19..957c1ebc3985 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 @@ -36,10 +36,22 @@ import java.util.Set; /** * @author peter */ -public class GroovyNoVariantsDelegator extends NoVariantsDelegator { +public class GroovyNoVariantsDelegator extends CompletionContributor { @Override - protected void delegate(CompletionParameters parameters, CompletionResultSet result, Consumer passResult) { + public void fillCompletionVariants(final CompletionParameters parameters, final CompletionResultSet result) { + final boolean empty = result.runRemainingContributors(parameters, true).isEmpty(); + + if (!empty && parameters.getInvocationCount() == 0) { + result.restartCompletionWhenNothingMatches(); + } + + if (empty) { + delegate(parameters, result); + } + } + + private static void delegate(CompletionParameters parameters, CompletionResultSet result) { if (parameters.getCompletionType() == CompletionType.BASIC) { if (parameters.getInvocationCount() <= 1 && JavaCompletionContributor.mayStartClassName(result, false) && diff --git a/xml/impl/src/com/intellij/codeInsight/completion/XmlNoVariantsDelegator.java b/xml/impl/src/com/intellij/codeInsight/completion/XmlNoVariantsDelegator.java index eee41f147801..9166b67ab532 100644 --- a/xml/impl/src/com/intellij/codeInsight/completion/XmlNoVariantsDelegator.java +++ b/xml/impl/src/com/intellij/codeInsight/completion/XmlNoVariantsDelegator.java @@ -15,18 +15,23 @@ */ package com.intellij.codeInsight.completion; -import com.intellij.util.Consumer; - /** * @author Dmitry Avdeev * Date: 12/19/11 */ -public class XmlNoVariantsDelegator extends NoVariantsDelegator { +public class XmlNoVariantsDelegator extends CompletionContributor { @Override - protected void delegate(CompletionParameters parameters, CompletionResultSet result, Consumer passResult) { - if (parameters.getCompletionType() == CompletionType.BASIC) { + public void fillCompletionVariants(final CompletionParameters parameters, final CompletionResultSet result) { + final boolean empty = result.runRemainingContributors(parameters, true).isEmpty(); + + if (!empty && parameters.getInvocationCount() == 0) { + result.restartCompletionWhenNothingMatches(); + } + + if (empty && parameters.getCompletionType() == CompletionType.BASIC) { XmlCompletionContributor.completeTagName(parameters, result); } } + }