All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.intellij.xml.impl.schema.RedefinedElementDescriptor Maven / Gradle / Ivy

package com.intellij.xml.impl.schema;

import com.intellij.psi.xml.XmlElement;
import com.intellij.psi.xml.XmlTag;
import com.intellij.xml.XmlElementDescriptor;

import java.util.Map;

/**
 * @author Dmitry Avdeev
 */
public class RedefinedElementDescriptor extends XmlElementDescriptorImpl {

  private final XmlNSDescriptorImpl myRedefinedNSDescriptor;

  public RedefinedElementDescriptor(XmlElementDescriptorImpl original, XmlNSDescriptorImpl xmlNSDescriptor) {
    super(original.myDescriptorTag);
    myRedefinedNSDescriptor = xmlNSDescriptor;
  }

  @Override
  public TypeDescriptor getType(XmlElement context) {
    TypeDescriptor typeDescriptor = super.getType(context);
    return typeDescriptor instanceof ComplexTypeDescriptor ? new RedefinedTypeDescriptor((ComplexTypeDescriptor)typeDescriptor) : typeDescriptor;
  }

  private class RedefinedTypeDescriptor extends ComplexTypeDescriptor {
    public RedefinedTypeDescriptor(ComplexTypeDescriptor original) {
      super(original.getNsDescriptor(), original.getDeclaration());
    }

    @Override
    protected XmlSchemaTagsProcessor createProcessor(final Map map) {
      return new XmlSchemaTagsProcessor(myDocumentDescriptor) {
        @Override
        protected void tagStarted(XmlTag tag, String tagName, XmlTag context, XmlTag ref) {
          addElementDescriptor(tag, tagName, map);
          if ("extension".equals(tagName)) {
            String base = tag.getAttributeValue("base");
            if (base != null) {
              TypeDescriptor descriptor = myRedefinedNSDescriptor.findTypeDescriptor(base);
              if (descriptor instanceof ComplexTypeDescriptor) {
                XmlElementDescriptor[] elements = ((ComplexTypeDescriptor)descriptor).getElements(null);
                for (XmlElementDescriptor element : elements) {
                  addElementDescriptor(map, element);
                }
              }
            }
          }
        }
      };
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy