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;
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
*/
@Override
public void fillCompletionVariants(final CompletionParameters parameters, final CompletionResultSet result) {
if (parameters.getCompletionType() == CompletionType.BASIC && shouldPerformWordCompletion(parameters)) {
- addWordCompletionWariants(result, parameters);
+ addWordCompletionVariants(result, parameters, Collections.<String>emptySet());
}
}
- public static void addWordCompletionWariants(CompletionResultSet result, CompletionParameters parameters) {
+ public static void addWordCompletionVariants(CompletionResultSet result, CompletionParameters parameters, Set<String> excludes) {
int startOffset = parameters.getOffset();
PsiElement insertedElement = parameters.getPosition();
final CompletionResultSet javaResultSet = result.withPrefixMatcher(CompletionUtil.findJavaIdentifierPrefix(insertedElement, startOffset));
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);
+ }
}
}
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;
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;
* @author Dmitry Avdeev
*/
public class XmlCompletionContributor extends CompletionContributor {
+ public static final Key<Boolean> WORD_COMPLETION_COMPATIBLE = Key.create("WORD_COMPLETION_COMPATIBLE");
@NonNls public static final String TAG_NAME_COMPLETION_FEATURE = "tag.name.completion";
private static final InsertHandlerDecorator<LookupElement> QUOTE_EATER = new InsertHandlerDecorator<LookupElement>() {
return;
}
+ final Set<String> usedWords = new THashSet<String>();
final Ref<Boolean> addWordVariants = Ref.create(true);
result.runRemainingContributors(parameters, new Consumer<LookupElement>() {
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));
}
});
}
if (addWordVariants.get().booleanValue()) {
- WordCompletionContributor.addWordCompletionWariants(result, parameters);
+ WordCompletionContributor.addWordCompletionVariants(result, parameters, usedWords);
}
}
});