@NotNull public PsiReference[] getReferences() { ProgressManager.checkCanceled(); 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<PsiReference> refs = new ArrayList<PsiReference>(); String prefix = getNamespacePrefix(); TagNameReference startTagRef = TagNameReference.createTagNameReference(this, startTagName, true); refs.add(startTagRef); if (prefix.length() > 0) { refs.add(createPrefixReference(startTagName, prefix, startTagRef)); } if (endTagName != null) { TagNameReference endTagRef = TagNameReference.createTagNameReference(this, endTagName, false); refs.add(endTagRef); prefix = XmlUtil.findPrefixByQualifiedName(endTagName.getText()); if (StringUtil.isNotEmpty(prefix)) { refs.add(createPrefixReference(endTagName, prefix, endTagRef)); } } // ArrayList.addAll() makes a clone of the collection //noinspection ManualArrayToCollectionCopy for (PsiReference ref : ReferenceProvidersRegistry.getReferencesFromProviders(this, XmlTag.class)) { refs.add(ref); } return ContainerUtil.toArray(refs, new PsiReference[refs.size()]); }
@Override @NotNull public PsiReference[] getReferences() { final IElementType elementType = getElementType(); if (elementType == XmlTokenType.XML_DATA_CHARACTERS || elementType == XmlTokenType.XML_CHAR_ENTITY_REF) { return ReferenceProvidersRegistry.getReferencesFromProviders(this); } else if (elementType == XmlTokenType.XML_NAME && getParent() instanceof PsiErrorElement) { final PsiElement element = getPrevSibling(); if (element instanceof XmlToken && ((XmlToken) element).getTokenType() == XmlTokenType.XML_END_TAG_START) { return new PsiReference[] {TagNameReference.createTagNameReference(this, getNode(), false)}; } } return super.getReferences(); }