public XmlAttribute getAttribute(String name, String namespace) { if (name != null && name.indexOf(':') != -1 || namespace == null || XmlUtil.EMPTY_URI.equals(namespace) || XmlUtil.ANY_URI.equals(namespace)) { return getAttribute(name); } final String prefix = getPrefixByNamespace(namespace); if (prefix == null || prefix.length() == 0) return null; return getAttribute(prefix + ":" + name); }
@Nullable protected XmlElementDescriptor computeElementDescriptor() { for (XmlElementDescriptorProvider provider : Extensions.getExtensions(XmlElementDescriptorProvider.EP_NAME)) { XmlElementDescriptor elementDescriptor = provider.getDescriptor(this); if (elementDescriptor != null) { return elementDescriptor; } } final String namespace = getNamespace(); if (XmlUtil.EMPTY_URI.equals(namespace)) { // nonqualified items final XmlTag parent = getParentTag(); if (parent != null) { final XmlElementDescriptor descriptor = parent.getDescriptor(); if (descriptor != null) { XmlElementDescriptor fromParent = descriptor.getElementDescriptor(this, parent); if (fromParent != null && !(fromParent instanceof AnyXmlElementDescriptor)) { return fromParent; } } } } XmlElementDescriptor elementDescriptor = null; final XmlNSDescriptor nsDescriptor = getNSDescriptor(namespace, false); LOG.debug( "Descriptor for namespace " + namespace + " is " + (nsDescriptor != null ? nsDescriptor.getClass().getCanonicalName() : "NULL")); if (nsDescriptor != null) { if (!DumbService.getInstance(getProject()).isDumb() || DumbService.isDumbAware(nsDescriptor)) { elementDescriptor = nsDescriptor.getElementDescriptor(this); } } if (elementDescriptor == null) { return XmlUtil.findXmlDescriptorByType(this); } return elementDescriptor; }
private boolean checkElementNameEquivalence( String localName, String namespace, String fqn, XmlTag context) { final String localAttrName = XmlUtil.findLocalNameByQualifiedName(fqn); if (!localAttrName.equals(localName)) return false; final String attrNamespace = context.getNamespaceByPrefix(XmlUtil.findPrefixByQualifiedName(fqn)); if (attrNamespace.equals(namespace)) return true; if (myTargetNamespace == null) { if (XmlUtil.EMPTY_URI.equals(attrNamespace)) return true; } else { final boolean b = myTargetNamespace.equals(namespace); if (b) return b; return context.getNSDescriptor(namespace, true) == this; // schema's targetNamespace could be different from file systemId } return false; }