@NotNull public XmlFile getContainingFile(@NotNull DomElement domElement) { if (domElement instanceof DomFileElement) { return ((DomFileElement) domElement).getFile(); } DomInvocationHandler handler = DomManagerImpl.getDomInvocationHandler(domElement); assert handler != null : domElement; while (handler != null && !(handler instanceof DomRootInvocationHandler) && handler.getXmlTag() == null) { handler = handler.getParentHandler(); } if (handler instanceof DomRootInvocationHandler) { return ((DomRootInvocationHandler) handler).getParent().getFile(); } assert handler != null; XmlTag tag = handler.getXmlTag(); assert tag != null; while (true) { final PsiElement parentTag = PhysicalDomParentStrategy.getParentTagCandidate(tag); if (!(parentTag instanceof XmlTag)) { return (XmlFile) tag.getContainingFile(); } tag = (XmlTag) parentTag; } }
protected XmlElement recomputeXmlElement(@NotNull final DomInvocationHandler parent) { if (!parent.isValid()) return null; final XmlTag tag = parent.getXmlTag(); if (tag == null) return null; return tag.getAttribute(getXmlElementName(), getXmlApiCompatibleNamespace(parent)); }
@Nullable private String getXmlApiCompatibleNamespace(DomInvocationHandler parent) { final XmlTag tag = parent.getXmlTag(); if (tag == null) { return null; } String ns = getXmlName().getNamespace(tag, parent.getFile()); // TODO: this seems ugly return tag.getNamespace().equals(ns) ? null : ns; }
static XmlFile getFile(DomElement domElement) { if (domElement instanceof DomFileElement) { return ((DomFileElement) domElement).getFile(); } DomInvocationHandler handler = DomManagerImpl.getDomInvocationHandler(domElement); assert handler != null : domElement; while (true) { if (handler instanceof DomRootInvocationHandler) { return ((DomRootInvocationHandler) handler).getParent().getFile(); } XmlTag tag = handler.getXmlTag(); if (tag != null) { return getContainingFile(tag); } DomInvocationHandler parent = handler.getParentHandler(); if (parent == null) { throw new AssertionError("No parent for " + handler.toStringEx()); } handler = parent; } }
@Nullable public final XmlTag getXmlTag() { final DomInvocationHandler handler = getParentHandler(); return handler == null ? null : handler.getXmlTag(); }