@Nullable static XmlNSDescriptor getNsDescriptor(XmlElement element) { final XmlElement parentThatProvidesMetaData = PsiTreeUtil .getParentOfType(CompletionUtilCoreImpl.getOriginalElement(element), XmlDocument.class, XmlMarkupDecl.class); if (parentThatProvidesMetaData instanceof XmlDocument) { final XmlDocument document = (XmlDocument)parentThatProvidesMetaData; XmlNSDescriptor rootTagNSDescriptor = document.getRootTagNSDescriptor(); if (rootTagNSDescriptor == null) rootTagNSDescriptor = (XmlNSDescriptor)document.getMetaData(); return rootTagNSDescriptor; } else if (parentThatProvidesMetaData instanceof XmlMarkupDecl) { final XmlMarkupDecl markupDecl = (XmlMarkupDecl)parentThatProvidesMetaData; final PsiMetaData psiMetaData = markupDecl.getMetaData(); if (psiMetaData instanceof XmlNSDescriptor) { return (XmlNSDescriptor)psiMetaData; } } return null; }
@Nullable static XmlNSDescriptor getNsDescriptor(XmlElement element) { final XmlElement parentThatProvidesMetaData = PsiTreeUtil.getParentOfType(CompletionUtilCoreImpl.getOriginalElement(element), XmlDocument.class, XmlMarkupDecl.class); if(parentThatProvidesMetaData instanceof XmlDocument) { final XmlDocument document = (XmlDocument) parentThatProvidesMetaData; XmlNSDescriptor rootTagNSDescriptor = document.getRootTagNSDescriptor(); if(rootTagNSDescriptor == null) { rootTagNSDescriptor = (XmlNSDescriptor) document.getMetaData(); } return rootTagNSDescriptor; } else if(parentThatProvidesMetaData instanceof XmlMarkupDecl) { final XmlMarkupDecl markupDecl = (XmlMarkupDecl) parentThatProvidesMetaData; final PsiMetaData psiMetaData = markupDecl.getMetaData(); if(psiMetaData instanceof XmlNSDescriptor) { return (XmlNSDescriptor) psiMetaData; } } return null; }
@NotNull public Collection<StructureViewTreeElement> getChildrenBase() { final XmlDocument document = getElement().getDocument(); List<XmlTag> rootTags = new ArrayList<XmlTag>(); if (document != null) { for (PsiElement element : document.getChildren()) if (element instanceof XmlTag) rootTags.add((XmlTag)element); } Collection<StructureViewTreeElement> structureViewTreeElements = AbstractXmlTagTreeElement.getStructureViewTreeElements(rootTags.toArray(new XmlTag[rootTags.size()])); Collection<StructureViewTreeElement> dtdStructureViewTreeElements = null; final XmlProlog prolog = document != null ? document.getProlog():null; if (prolog != null) { final XmlDoctype doctype = prolog.getDoctype(); if (doctype != null) { final XmlMarkupDecl xmlMarkupDecl = doctype.getMarkupDecl(); if (xmlMarkupDecl != null) { dtdStructureViewTreeElements = DtdFileTreeElement.collectElements(xmlMarkupDecl); } } } if (dtdStructureViewTreeElements != null) { final ArrayList<StructureViewTreeElement> result = new ArrayList<StructureViewTreeElement>( dtdStructureViewTreeElements.size() + structureViewTreeElements.size() ); result.addAll(dtdStructureViewTreeElements); result.addAll(structureViewTreeElements); structureViewTreeElements = result; } return structureViewTreeElements; }
@Override public void contributeMetaData(final MetaDataRegistrar registrar) { { registrar.registerMetaData(new AndFilter(new NamespaceFilter(XmlUtil.SCHEMA_URIS), new ClassFilter(XmlDocument.class)), SchemaNSDescriptor.class); registrar.registerMetaData(new AndFilter(XmlTagFilter.INSTANCE, new NamespaceFilter(XmlUtil.SCHEMA_URIS), new XmlTextFilter("schema")), SchemaNSDescriptor.class); } { registrar.registerMetaData(new OrFilter(new AndFilter(new ContentFilter(new OrFilter(new ClassFilter(XmlElementDecl.class), new ClassFilter(XmlEntityDecl.class), new ClassFilter (XmlConditionalSection.class), new ClassFilter(XmlEntityRef.class))), new ClassFilter(XmlDocument.class)), new ClassFilter(XmlMarkupDecl.class)), XmlNSDescriptorImpl.class); } { registrar.registerMetaData(new AndFilter(XmlTagFilter.INSTANCE, new NamespaceFilter(XmlUtil.SCHEMA_URIS), new XmlTextFilter("element")), XmlElementDescriptorImpl.class); } { registrar.registerMetaData(new AndFilter(XmlTagFilter.INSTANCE, new NamespaceFilter(XmlUtil.SCHEMA_URIS), new XmlTextFilter("attribute")), XmlAttributeDescriptorImpl.class); } { registrar.registerMetaData(new ClassFilter(XmlElementDecl.class), com.intellij.xml.impl.dtd.XmlElementDescriptorImpl.class); } { registrar.registerMetaData(new ClassFilter(XmlAttributeDecl.class), com.intellij.xml.impl.dtd.XmlAttributeDescriptorImpl.class); } { registrar.registerMetaData(new AndFilter(new ClassFilter(XmlDocument.class), new TargetNamespaceFilter(XmlUtil.XHTML_URI), new NamespaceFilter(XmlUtil.SCHEMA_URIS)), RelaxedHtmlFromSchemaNSDescriptor.class); } { registrar.registerMetaData(new AndFilter(XmlTagFilter.INSTANCE, new NamespaceFilter(XmlUtil.SCHEMA_URIS), new XmlTextFilter("complexType", "simpleType", "group", "attributeGroup")), NamedObjectDescriptor.class); } }