mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-13 09:19:13 +07:00
don't let DomCompletionContributor process java class references in plugin.xml (IDEA-92934)
This commit is contained in:
+1
-4
@@ -53,10 +53,7 @@ public class JavaClassReferenceCompletionContributor extends CompletionContribut
|
||||
JavaClassNameCompletionContributor.addAllClasses(parameters, result);
|
||||
}
|
||||
else {
|
||||
CompletionData data = CompletionUtil.getCompletionDataByElement(position, parameters.getOriginalFile());
|
||||
if (data != null) {
|
||||
LegacyCompletionContributor.completeReference(parameters, result, data);
|
||||
}
|
||||
LegacyCompletionContributor.completeReference(parameters, result);
|
||||
}
|
||||
result.stopHere();
|
||||
}
|
||||
|
||||
+27
-35
@@ -18,16 +18,12 @@ package com.intellij.codeInsight.completion;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.openapi.paths.PsiDynaReference;
|
||||
import com.intellij.openapi.util.Ref;
|
||||
import com.intellij.patterns.PlatformPatterns;
|
||||
import com.intellij.patterns.PsiElementPattern;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiReference;
|
||||
import com.intellij.psi.ReferenceRange;
|
||||
import com.intellij.psi.impl.source.resolve.reference.impl.PsiMultiReference;
|
||||
import com.intellij.util.PairConsumer;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.LinkedHashSet;
|
||||
@@ -37,43 +33,34 @@ import java.util.Set;
|
||||
* @author peter
|
||||
*/
|
||||
public class LegacyCompletionContributor extends CompletionContributor {
|
||||
public static boolean DEBUG = false;
|
||||
|
||||
public LegacyCompletionContributor() {
|
||||
final PsiElementPattern.Capture<PsiElement> everywhere = PlatformPatterns.psiElement();
|
||||
extend(CompletionType.BASIC, everywhere, new CompletionProvider<CompletionParameters>() {
|
||||
@Override
|
||||
public void addCompletions(@NotNull final CompletionParameters parameters,
|
||||
final ProcessingContext matchingContext,
|
||||
@NotNull final CompletionResultSet _result) {
|
||||
final PsiFile file = parameters.getOriginalFile();
|
||||
final int startOffset = parameters.getOffset();
|
||||
final PsiElement insertedElement = parameters.getPosition();
|
||||
CompletionData completionData = CompletionUtil.getCompletionDataByElement(insertedElement, file);
|
||||
if (completionData == null) return;
|
||||
@Override
|
||||
public void fillCompletionVariants(CompletionParameters parameters, CompletionResultSet _result) {
|
||||
if (parameters.getCompletionType() != CompletionType.BASIC) {
|
||||
return;
|
||||
}
|
||||
CompletionData completionData = getCompletionData(parameters);
|
||||
if (completionData == null) return;
|
||||
|
||||
final CompletionResultSet result = _result.withPrefixMatcher(completionData.findPrefix(insertedElement, startOffset));
|
||||
|
||||
|
||||
completeReference(parameters, result, completionData);
|
||||
|
||||
final Set<LookupElement> lookupSet = new LinkedHashSet<LookupElement>();
|
||||
final Set<CompletionVariant> keywordVariants = new HashSet<CompletionVariant>();
|
||||
completionData.addKeywordVariants(keywordVariants, insertedElement, parameters.getOriginalFile());
|
||||
completionData
|
||||
.completeKeywordsBySet(lookupSet, keywordVariants, insertedElement, result.getPrefixMatcher(), file);
|
||||
for (final LookupElement item : lookupSet) {
|
||||
result.addElement(item);
|
||||
}
|
||||
}
|
||||
});
|
||||
final PsiElement insertedElement = parameters.getPosition();
|
||||
final CompletionResultSet result = _result.withPrefixMatcher(completionData.findPrefix(insertedElement, parameters.getOffset()));
|
||||
|
||||
completeReference(parameters, result);
|
||||
|
||||
final Set<LookupElement> lookupSet = new LinkedHashSet<LookupElement>();
|
||||
final Set<CompletionVariant> keywordVariants = new HashSet<CompletionVariant>();
|
||||
PsiFile file = parameters.getOriginalFile();
|
||||
completionData.addKeywordVariants(keywordVariants, insertedElement, file);
|
||||
completionData.completeKeywordsBySet(lookupSet, keywordVariants, insertedElement, result.getPrefixMatcher(), file);
|
||||
result.addAllElements(lookupSet);
|
||||
}
|
||||
|
||||
public static boolean completeReference(final CompletionParameters parameters,
|
||||
final CompletionResultSet result,
|
||||
final CompletionData completionData) {
|
||||
public static boolean completeReference(final CompletionParameters parameters, final CompletionResultSet result) {
|
||||
final CompletionData completionData = getCompletionData(parameters);
|
||||
if (completionData == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
final Ref<Boolean> hasVariants = Ref.create(false);
|
||||
processReferences(parameters, result, new PairConsumer<PsiReference, CompletionResultSet>() {
|
||||
@Override
|
||||
@@ -92,6 +79,11 @@ public class LegacyCompletionContributor extends CompletionContributor {
|
||||
return hasVariants.get().booleanValue();
|
||||
}
|
||||
|
||||
private static CompletionData getCompletionData(CompletionParameters parameters) {
|
||||
final PsiElement position = parameters.getPosition();
|
||||
return CompletionUtil.getCompletionDataByElement(position, parameters.getOriginalFile());
|
||||
}
|
||||
|
||||
public static void processReferences(final CompletionParameters parameters,
|
||||
final CompletionResultSet result,
|
||||
final PairConsumer<PsiReference, CompletionResultSet> consumer) {
|
||||
|
||||
@@ -43,7 +43,7 @@ public class DomCompletionContributor extends CompletionContributor{
|
||||
}
|
||||
|
||||
private boolean domKnowsBetter(final CompletionParameters parameters, final CompletionResultSet result) {
|
||||
final PsiElement element = PsiTreeUtil.getParentOfType(parameters.getPosition(), XmlTag.class, XmlAttributeValue.class);
|
||||
final XmlAttributeValue element = PsiTreeUtil.getParentOfType(parameters.getPosition(), XmlAttributeValue.class);
|
||||
if (element == null) {
|
||||
return false;
|
||||
}
|
||||
@@ -51,9 +51,15 @@ public class DomCompletionContributor extends CompletionContributor{
|
||||
if (isSchemaEnumerated(element)) {
|
||||
return false;
|
||||
}
|
||||
final PsiReference[] references = myProvider.getReferencesByElement(element, new ProcessingContext());
|
||||
if (references.length > 0) {
|
||||
return LegacyCompletionContributor.completeReference(parameters, result, new XmlCompletionData());
|
||||
final PsiElement parent = element.getParent();
|
||||
if (parent instanceof XmlAttribute) {
|
||||
XmlAttributeDescriptor descriptor = ((XmlAttribute)parent).getDescriptor();
|
||||
if (descriptor != null && descriptor.getDefaultValue() != null) {
|
||||
final PsiReference[] references = myProvider.getReferencesByElement(element, new ProcessingContext());
|
||||
if (references.length > 0) {
|
||||
return LegacyCompletionContributor.completeReference(parameters, result);
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user