mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Complete words in XML even if there are classes in the completion list (IDEA-50044)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1 +1 @@
|
||||
Settings Settings other
|
||||
Settings Settings<caret> other
|
||||
@@ -1 +1 @@
|
||||
Settings Settings other
|
||||
Settings Settings<caret> other
|
||||
@@ -1 +1 @@
|
||||
<a>Settings Settings <caret>other</a>
|
||||
<a>Settings Settings<caret> other</a>
|
||||
@@ -1,4 +1,4 @@
|
||||
<root>
|
||||
<a value="Settings"/>
|
||||
<a value="Settings <caret>"></a>
|
||||
<a value="Settings<caret>"></a>
|
||||
</root>
|
||||
@@ -1,4 +1,4 @@
|
||||
public class MyClass {
|
||||
String b = "My";
|
||||
// public <caret>
|
||||
// public<caret>
|
||||
}
|
||||
@@ -1,2 +1,2 @@
|
||||
$test
|
||||
$test <caret>
|
||||
$test<caret>
|
||||
@@ -1,4 +1,4 @@
|
||||
public class MyClass {
|
||||
|
||||
/** comment MyClass <caret>*/
|
||||
/** comment MyClass<caret> */
|
||||
}
|
||||
+10
-8
@@ -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.<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));
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<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>() {
|
||||
@@ -92,10 +95,14 @@ public class XmlCompletionContributor extends CompletionContributor {
|
||||
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));
|
||||
}
|
||||
});
|
||||
@@ -108,7 +115,7 @@ public class XmlCompletionContributor extends CompletionContributor {
|
||||
}
|
||||
|
||||
if (addWordVariants.get().booleanValue()) {
|
||||
WordCompletionContributor.addWordCompletionWariants(result, parameters);
|
||||
WordCompletionContributor.addWordCompletionVariants(result, parameters, usedWords);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user