From ebf8bc4fd9457095c4c986ec695502001e3d51aa Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 8 Mar 2010 21:53:22 +0000 Subject: [PATCH] Complete words in XML even if there are classes in the completion list (IDEA-50044) --- .../completion/BasicToClassNameDelegator.java | 1 + .../completion/word/1_after.properties | 2 +- .../codeInsight/completion/word/1_after.txt | 2 +- .../codeInsight/completion/word/1_after.xml | 2 +- .../codeInsight/completion/word/2_after.xml | 2 +- .../codeInsight/completion/word/4_after.java | 2 +- .../completion/word/DollarsInPrefix_after.txt | 2 +- .../completion/word/TextInComment_after.java | 2 +- .../completion/WordCompletionContributor.java | 18 ++++++++++-------- .../completion/XmlCompletionContributor.java | 13 ++++++++++--- 10 files changed, 28 insertions(+), 18 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/BasicToClassNameDelegator.java b/java/java-impl/src/com/intellij/codeInsight/completion/BasicToClassNameDelegator.java index 25edbf1ffe77..193273af4790 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/BasicToClassNameDelegator.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/BasicToClassNameDelegator.java @@ -75,6 +75,7 @@ public class BasicToClassNameDelegator extends CompletionContributor{ if (lookupElement instanceof JavaPsiClassReferenceElement) { ((JavaPsiClassReferenceElement)lookupElement).setAutoCompletionPolicy(AutoCompletionPolicy.NEVER_AUTOCOMPLETE); } + lookupElement.putUserData(XmlCompletionContributor.WORD_COMPLETION_COMPATIBLE, Boolean.TRUE); //todo think of a less dirty interaction result.addElement(lookupElement); } }); diff --git a/java/java-tests/testData/codeInsight/completion/word/1_after.properties b/java/java-tests/testData/codeInsight/completion/word/1_after.properties index d541cbaae542..d065e4a88c4b 100644 --- a/java/java-tests/testData/codeInsight/completion/word/1_after.properties +++ b/java/java-tests/testData/codeInsight/completion/word/1_after.properties @@ -1 +1 @@ -Settings Settings other \ No newline at end of file +Settings Settings other \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/word/1_after.txt b/java/java-tests/testData/codeInsight/completion/word/1_after.txt index d541cbaae542..d065e4a88c4b 100644 --- a/java/java-tests/testData/codeInsight/completion/word/1_after.txt +++ b/java/java-tests/testData/codeInsight/completion/word/1_after.txt @@ -1 +1 @@ -Settings Settings other \ No newline at end of file +Settings Settings other \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/word/1_after.xml b/java/java-tests/testData/codeInsight/completion/word/1_after.xml index 0e55fb64166c..1acc895d753f 100644 --- a/java/java-tests/testData/codeInsight/completion/word/1_after.xml +++ b/java/java-tests/testData/codeInsight/completion/word/1_after.xml @@ -1 +1 @@ -Settings Settings other \ No newline at end of file +Settings Settings other \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/word/2_after.xml b/java/java-tests/testData/codeInsight/completion/word/2_after.xml index 2b4fb1785afa..d993a9c51b62 100644 --- a/java/java-tests/testData/codeInsight/completion/word/2_after.xml +++ b/java/java-tests/testData/codeInsight/completion/word/2_after.xml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/word/4_after.java b/java/java-tests/testData/codeInsight/completion/word/4_after.java index aad7a3fa2af9..e5fb98f900a7 100644 --- a/java/java-tests/testData/codeInsight/completion/word/4_after.java +++ b/java/java-tests/testData/codeInsight/completion/word/4_after.java @@ -1,4 +1,4 @@ public class MyClass { String b = "My"; - // public + // public } \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/word/DollarsInPrefix_after.txt b/java/java-tests/testData/codeInsight/completion/word/DollarsInPrefix_after.txt index eb7accf1a552..748e2423bcc5 100644 --- a/java/java-tests/testData/codeInsight/completion/word/DollarsInPrefix_after.txt +++ b/java/java-tests/testData/codeInsight/completion/word/DollarsInPrefix_after.txt @@ -1,2 +1,2 @@ $test -$test \ No newline at end of file +$test \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/word/TextInComment_after.java b/java/java-tests/testData/codeInsight/completion/word/TextInComment_after.java index 5e0022979846..aa7b8d70a951 100644 --- a/java/java-tests/testData/codeInsight/completion/word/TextInComment_after.java +++ b/java/java-tests/testData/codeInsight/completion/word/TextInComment_after.java @@ -1,4 +1,4 @@ public class MyClass { - /** comment MyClass */ + /** comment MyClass */ } \ No newline at end of file diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/WordCompletionContributor.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/WordCompletionContributor.java index 676699854611..906898a8a6af 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/WordCompletionContributor.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/WordCompletionContributor.java @@ -16,16 +16,13 @@ package com.intellij.codeInsight.completion; import com.intellij.codeInsight.lookup.LookupElement; -import com.intellij.codeInsight.lookup.TailTypeDecorator; import com.intellij.codeInsight.lookup.LookupElementBuilder; -import com.intellij.codeInsight.TailType; import com.intellij.lang.ASTNode; import com.intellij.lang.LanguageWordCompletion; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.DumbService; import com.intellij.openapi.util.Computable; -import static com.intellij.patterns.StandardPatterns.character; import com.intellij.psi.PlainTextTokenTypes; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; @@ -33,9 +30,12 @@ import com.intellij.psi.PsiReference; import com.intellij.psi.filters.getters.AllWordsGetter; import com.intellij.psi.tree.IElementType; +import java.util.Collections; import java.util.HashSet; import java.util.Set; +import static com.intellij.patterns.StandardPatterns.character; + /** * @author peter */ @@ -44,11 +44,11 @@ public class WordCompletionContributor extends CompletionContributor implements @Override public void fillCompletionVariants(final CompletionParameters parameters, final CompletionResultSet result) { if (parameters.getCompletionType() == CompletionType.BASIC && shouldPerformWordCompletion(parameters)) { - addWordCompletionWariants(result, parameters); + addWordCompletionVariants(result, parameters, Collections.emptySet()); } } - public static void addWordCompletionWariants(CompletionResultSet result, CompletionParameters parameters) { + public static void addWordCompletionVariants(CompletionResultSet result, CompletionParameters parameters, Set excludes) { int startOffset = parameters.getOffset(); PsiElement insertedElement = parameters.getPosition(); final CompletionResultSet javaResultSet = result.withPrefixMatcher(CompletionUtil.findJavaIdentifierPrefix(insertedElement, startOffset)); @@ -57,9 +57,11 @@ public class WordCompletionContributor extends CompletionContributor implements character().javaIdentifierPart().andNot(character().equalTo('$')), character().javaIdentifierStart())); for (final String word : AllWordsGetter.getAllWords(insertedElement, startOffset)) { - final LookupElement item = TailTypeDecorator.withTail(LookupElementBuilder.create(word), TailType.SPACE); - javaResultSet.addElement(item); - plainResultSet.addElement(item); + if (!excludes.contains(word)) { + final LookupElement item = LookupElementBuilder.create(word); + javaResultSet.addElement(item); + plainResultSet.addElement(item); + } } } diff --git a/xml/impl/src/com/intellij/codeInsight/completion/XmlCompletionContributor.java b/xml/impl/src/com/intellij/codeInsight/completion/XmlCompletionContributor.java index 53fe5b0c3685..715b68608600 100644 --- a/xml/impl/src/com/intellij/codeInsight/completion/XmlCompletionContributor.java +++ b/xml/impl/src/com/intellij/codeInsight/completion/XmlCompletionContributor.java @@ -26,6 +26,7 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.util.Computable; +import com.intellij.openapi.util.Key; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.text.StringUtil; @@ -37,12 +38,13 @@ import com.intellij.psi.xml.XmlAttributeValue; import com.intellij.psi.xml.XmlFile; import com.intellij.psi.xml.XmlTag; import com.intellij.psi.xml.XmlTokenType; -import com.intellij.util.ProcessingContext; import com.intellij.util.Consumer; +import com.intellij.util.ProcessingContext; import com.intellij.xml.XmlBundle; import com.intellij.xml.XmlElementDescriptor; import com.intellij.xml.XmlExtension; import com.intellij.xml.impl.schema.AnyXmlElementDescriptor; +import gnu.trove.THashSet; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -54,6 +56,7 @@ import java.util.Set; * @author Dmitry Avdeev */ public class XmlCompletionContributor extends CompletionContributor { + public static final Key WORD_COMPLETION_COMPATIBLE = Key.create("WORD_COMPLETION_COMPATIBLE"); @NonNls public static final String TAG_NAME_COMPLETION_FEATURE = "tag.name.completion"; private static final InsertHandlerDecorator QUOTE_EATER = new InsertHandlerDecorator() { @@ -92,10 +95,14 @@ public class XmlCompletionContributor extends CompletionContributor { return; } + final Set usedWords = new THashSet(); final Ref addWordVariants = Ref.create(true); result.runRemainingContributors(parameters, new Consumer() { public void consume(LookupElement element) { - addWordVariants.set(false); + if (element.getUserData(WORD_COMPLETION_COMPATIBLE) == null) { + addWordVariants.set(false); + } + usedWords.add(element.getLookupString()); result.addElement(LookupElementDecorator.withInsertHandler(element, QUOTE_EATER)); } }); @@ -108,7 +115,7 @@ public class XmlCompletionContributor extends CompletionContributor { } if (addWordVariants.get().booleanValue()) { - WordCompletionContributor.addWordCompletionWariants(result, parameters); + WordCompletionContributor.addWordCompletionVariants(result, parameters, usedWords); } } });