protected @Nullable XmlElementDescriptor computeElementDescriptor() {
    for (XmlElementDescriptorProvider provider : XmlElementDescriptorProvider.EP_NAME.getExtensionList()) {
      XmlElementDescriptor elementDescriptor = provider.getDescriptor(myTag);
      if (elementDescriptor != null) {
        return elementDescriptor;
      }
    }

    final String namespace = myTag.getNamespace();
    if (XmlUtil.EMPTY_URI.equals(namespace)) { //nonqualified items
      final XmlTag parent = myTag.getParentTag();
      if (parent != null) {
        final XmlElementDescriptor descriptor = parent.getDescriptor();
        if (descriptor != null) {
          XmlElementDescriptor fromParent = descriptor.getElementDescriptor(myTag, parent);
          if (fromParent != null && !(fromParent instanceof AnyXmlElementDescriptor)) {
            return fromParent;
          }
        }
      }
    }

    XmlElementDescriptor elementDescriptor = null;
    final XmlNSDescriptor nsDescriptor = myTag.getNSDescriptor(namespace, false);

    if (LOG.isDebugEnabled()) {
      LOG.debug(
        "Descriptor for namespace " + namespace + " is " + (nsDescriptor != null ? nsDescriptor.getClass().getCanonicalName() : "NULL"));
    }

    if (nsDescriptor != null) {
      if (DumbService.getInstance(myTag.getProject()).isUsableInCurrentContext(nsDescriptor)) {
        elementDescriptor = nsDescriptor.getElementDescriptor(myTag);
      }
    }
    if (elementDescriptor == null) {
      return XmlUtil.findXmlDescriptorByType(myTag);
    }

    return elementDescriptor;
  }
protected @Nullable XmlElementDescriptor computeElementDescriptor()