public PsiFile resolve() { final PsiFile referencedFile = getReferencedFile(); if (referencedFile != null) { return referencedFile; } if (myPsiFile != null) { final PsiElement psiElement = myPsiFile.findElementAt(myLinkInfo.offset); if (psiElement != null) { final PsiElement parent = psiElement.getParent(); if (parent instanceof XmlTag) { final XmlAttribute attribute = ((XmlTag) parent).getAttribute(HREF_ATTR); if (attribute != null) { final XmlAttributeValue value = attribute.getValueElement(); if (value != null) { final PsiReference[] references = value.getReferences(); for (PsiReference reference : references) { final PsiElement element = reference.resolve(); if (element instanceof PsiFile) { return (PsiFile) element; } } } } } } } return null; }
@Nullable private static String getAttributeValue(final XmlTag tag, final String attrName) { final XmlAttribute attribute = tag.getAttribute(attrName); if (attribute != null) { final XmlAttributeValue value = attribute.getValueElement(); if (value != null) { if (PsiTreeUtil.getChildOfType(value, OuterLanguageElement.class) == null) { return value.getValue(); } } } return null; }