diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaClassReferenceCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaClassReferenceCompletionContributor.java index 3e5236d14a6d..fd8b67027027 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaClassReferenceCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaClassReferenceCompletionContributor.java @@ -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(); } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/LegacyCompletionContributor.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/LegacyCompletionContributor.java index a8469f74a269..2dba84559130 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/LegacyCompletionContributor.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/LegacyCompletionContributor.java @@ -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 everywhere = PlatformPatterns.psiElement(); - extend(CompletionType.BASIC, everywhere, new CompletionProvider() { - @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 lookupSet = new LinkedHashSet(); - final Set keywordVariants = new HashSet(); - 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 lookupSet = new LinkedHashSet(); + final Set keywordVariants = new HashSet(); + 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 hasVariants = Ref.create(false); processReferences(parameters, result, new PairConsumer() { @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 consumer) { diff --git a/xml/dom-impl/src/com/intellij/util/xml/impl/DomCompletionContributor.java b/xml/dom-impl/src/com/intellij/util/xml/impl/DomCompletionContributor.java index 32b58d1c4716..7d8b2ccdb42a 100644 --- a/xml/dom-impl/src/com/intellij/util/xml/impl/DomCompletionContributor.java +++ b/xml/dom-impl/src/com/intellij/util/xml/impl/DomCompletionContributor.java @@ -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; }