no tag name completion after declared prefix rubymine/112.219
authorDmitry Avdeev <Dmitry.Avdeev@jetbrains.com>
Tue, 20 Dec 2011 13:55:26 +0000 (17:55 +0400)
committerDmitry Avdeev <Dmitry.Avdeev@jetbrains.com>
Tue, 20 Dec 2011 13:56:56 +0000 (17:56 +0400)
xml/impl/src/com/intellij/codeInsight/completion/XmlCompletionContributor.java

index cc1196429104b0270c183bde8cf3b848bb23aee1..dec9c5de128ce0e3a37c90d9799b4d59a30e0144 100644 (file)
@@ -33,10 +33,7 @@ import com.intellij.patterns.XmlPatterns;
 import com.intellij.psi.PsiElement;
 import com.intellij.psi.PsiReference;
 import com.intellij.psi.util.PsiTreeUtil;
-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.psi.xml.*;
 import com.intellij.util.Consumer;
 import com.intellij.util.ProcessingContext;
 import com.intellij.xml.XmlBundle;
@@ -143,17 +140,20 @@ public class XmlCompletionContributor extends CompletionContributor {
     PsiElement element = parameters.getPosition();
     if (!isXmlNameCompletion(parameters)) return;
     result.stopHere();
-    if (!(element.getParent() instanceof XmlTag) || !(parameters.getOriginalFile() instanceof XmlFile)) {
+    PsiElement parent = element.getParent();
+    if (!(parent instanceof XmlTag) ||
+        !(parameters.getOriginalFile() instanceof XmlFile) ||
+        !((XmlTag)parent).getNamespacePrefix().isEmpty()) {
       return;
     }
-    final XmlTag parent = (XmlTag)element.getParent();
-    final String namespace = parent.getNamespace();
-    final XmlElementDescriptor parentDescriptor = parent.getDescriptor();
+    final XmlTag tag = (XmlTag)parent;
+    final String namespace = tag.getNamespace();
+    final XmlElementDescriptor parentDescriptor = tag.getDescriptor();
     final String prefix = result.getPrefixMatcher().getPrefix();
     final int pos = prefix.indexOf(':');
     final String namespacePrefix = pos > 0 ? prefix.substring(0, pos) : null;
 
-    final PsiReference reference = parent.getReference();
+    final PsiReference reference = tag.getReference();
     if (reference != null && namespace.length() > 0 && parentDescriptor != null && !(parentDescriptor instanceof AnyXmlElementDescriptor)) {
       final Set<LookupElement> set = new HashSet<LookupElement>();
       new XmlCompletionData().completeReference(reference, set, element, parameters.getOriginalFile(), parameters.getOffset());
@@ -166,7 +166,7 @@ public class XmlCompletionContributor extends CompletionContributor {
       final CompletionResultSet newResult = result.withPrefixMatcher(pos >= 0 ? prefix.substring(pos + 1) : prefix);
 
       final XmlFile file = (XmlFile)parameters.getOriginalFile();
-      final List<Pair<String,String>> names = XmlExtension.getExtension(file).getAvailableTagNames(file, parent);
+      final List<Pair<String,String>> names = XmlExtension.getExtension(file).getAvailableTagNames(file, tag);
       for (Pair<String, String> pair : names) {
         final String name = pair.getFirst();
         final String ns = pair.getSecond();