diff --git a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/XmlTagImpl.java b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/XmlTagImpl.java index 2a182d6f8ea4..205b82dd1c11 100644 --- a/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/XmlTagImpl.java +++ b/xml/xml-psi-impl/src/com/intellij/psi/impl/source/xml/XmlTagImpl.java @@ -35,10 +35,7 @@ import com.intellij.psi.tree.IElementType; import com.intellij.psi.util.*; import com.intellij.psi.util.CachedValueProvider.Result; import com.intellij.psi.xml.*; -import com.intellij.util.ArrayUtil; -import com.intellij.util.CharTable; -import com.intellij.util.IncorrectOperationException; -import com.intellij.util.PlatformIcons; +import com.intellij.util.*; import com.intellij.util.containers.BidirectionalMap; import com.intellij.util.containers.ContainerUtil; import com.intellij.xml.XmlAttributeDescriptor; @@ -174,7 +171,7 @@ public class XmlTagImpl extends XmlElementImpl implements XmlTag, HintedReferenc final ASTNode startTagName = XmlChildRole.START_TAG_NAME_FINDER.findChild(this); if (startTagName == null) return PsiReference.EMPTY_ARRAY; final ASTNode endTagName = XmlChildRole.CLOSING_TAG_NAME_FINDER.findChild(this); - List refs = new ArrayList<>(); + List refs = new SmartList<>(); String prefix = getNamespacePrefix(); boolean inStartTag = hints.offsetInElement == null || childContainsOffset(startTagName.getPsi(), hints.offsetInElement); @@ -184,7 +181,7 @@ public class XmlTagImpl extends XmlElementImpl implements XmlTag, HintedReferenc refs.add(startTagRef); } if (!prefix.isEmpty()) { - refs.add(createPrefixReference(startTagName, prefix, startTagRef)); + refs.addAll(createPrefixReferences(startTagName, prefix, startTagRef)); } } boolean inEndTag = endTagName != null && (hints.offsetInElement == null || childContainsOffset(endTagName.getPsi(), hints.offsetInElement)); @@ -193,9 +190,9 @@ public class XmlTagImpl extends XmlElementImpl implements XmlTag, HintedReferenc if (endTagRef != null) { refs.add(endTagRef); } - prefix = XmlUtil.findPrefixByQualifiedName(endTagName.getText()); + prefix = getNamespacePrefix(endTagName.getText()); if (StringUtil.isNotEmpty(prefix)) { - refs.add(createPrefixReference(endTagName, prefix, endTagRef)); + refs.addAll(createPrefixReferences(endTagName, prefix, endTagRef)); } } @@ -236,9 +233,10 @@ public class XmlTagImpl extends XmlElementImpl implements XmlTag, HintedReferenc return elements; } - private SchemaPrefixReference createPrefixReference(ASTNode startTagName, String prefix, TagNameReference tagRef) { - return new SchemaPrefixReference(this, TextRange.from(startTagName.getStartOffset() - getStartOffset(), prefix.length()), prefix, - tagRef); + @NotNull + protected Collection createPrefixReferences(ASTNode startTagName, String prefix, TagNameReference tagRef) { + return Collections.singleton(new SchemaPrefixReference(this, TextRange.from(startTagName.getStartOffset() - getStartOffset(), prefix.length()), prefix, + tagRef)); } @Override @@ -786,7 +784,12 @@ public class XmlTagImpl extends XmlElementImpl implements XmlTag, HintedReferenc @Override @NotNull public String getNamespacePrefix() { - return XmlUtil.findPrefixByQualifiedName(getName()); + return getNamespacePrefix(getName()); + } + + @NotNull + protected String getNamespacePrefix(@NotNull String name) { + return XmlUtil.findPrefixByQualifiedName(name); } @Override