Search in sources :

Example 1 with RngDefine

use of org.intellij.plugins.relaxNG.xml.dom.RngDefine in project intellij-community by JetBrains.

the class ApplicationLoader method registerMetaData.

private static void registerMetaData() {
    final MetaDataRegistrar registrar = MetaDataRegistrar.getInstance();
    registrar.registerMetaData(new AndFilter(new NamespaceFilter(RNG_NAMESPACE), new ClassFilter(XmlDocument.class)), RngNsDescriptor.class);
    registrar.registerMetaData(new ClassFilter(RncDocument.class), RngNsDescriptor.class);
    registrar.registerMetaData(new ElementFilter() {

        @Override
        public boolean isAcceptable(Object element, PsiElement context) {
            if (element instanceof XmlTag) {
                final XmlTag tag = (XmlTag) element;
                final DomElement domElement = DomManager.getDomManager(tag.getProject()).getDomElement(tag);
                return domElement instanceof RngDefine;
            }
            return false;
        }

        @Override
        public boolean isClassAcceptable(Class hintClass) {
            return XmlTag.class.isAssignableFrom(hintClass);
        }
    }, RngDefineMetaData.class);
}
Also used : AndFilter(com.intellij.psi.filters.AndFilter) RngDefine(org.intellij.plugins.relaxNG.xml.dom.RngDefine) DomElement(com.intellij.util.xml.DomElement) NamespaceFilter(com.intellij.psi.filters.position.NamespaceFilter) MetaDataRegistrar(com.intellij.psi.meta.MetaDataRegistrar) ClassFilter(com.intellij.psi.filters.ClassFilter) ElementFilter(com.intellij.psi.filters.ElementFilter) PsiElement(com.intellij.psi.PsiElement) RncDocument(org.intellij.plugins.relaxNG.compact.psi.impl.RncDocument) XmlTag(com.intellij.psi.xml.XmlTag)

Example 2 with RngDefine

use of org.intellij.plugins.relaxNG.xml.dom.RngDefine in project intellij-community by JetBrains.

the class RngReferenceConverter method createReferences.

@Override
@NotNull
public PsiReference[] createReferences(GenericDomValue genericDomValue, PsiElement element, ConvertContext context) {
    final GenericAttributeValue<String> e = (GenericAttributeValue<String>) genericDomValue;
    if (genericDomValue.getParent() instanceof RngDefine) {
        final XmlAttributeValue value = e.getXmlAttributeValue();
        if (value == null) {
            return PsiReference.EMPTY_ARRAY;
        }
        return new PsiReference[] { new PsiReferenceBase<XmlAttributeValue>(value, true) {

            @Override
            public PsiElement resolve() {
                //                  }
                return myElement.getParent().getParent();
            }

            @Override
            @NotNull
            public Object[] getVariants() {
                final RngInclude include = e.getParentOfType(RngInclude.class, true);
                final RngGrammar scope = e.getParentOfType(RngGrammar.class, true);
                if (scope != null && include != null && DomUtil.isAncestor(scope, include, true)) {
                    final XmlFile file = include.getIncludedFile().getValue();
                    if (file != null) {
                        final DomFileElement<DomElement> fileElement = scope.getManager().getFileElement(file, DomElement.class);
                        if (fileElement == null) {
                            return EMPTY_ARRAY;
                        }
                        final Ref<Object[]> ref = new Ref<>(ArrayUtil.EMPTY_STRING_ARRAY);
                        fileElement.acceptChildren(new RngDomVisitor() {

                            @Override
                            public void visit(RngGrammar grammar) {
                                final Map<String, Set<Define>> map = DefinitionResolver.getAllVariants(grammar);
                                if (map != null) {
                                    ref.set(map.keySet().toArray());
                                }
                            }
                        });
                        return ref.get();
                    }
                }
                // TODO: look for unresolved refs;
                return ArrayUtil.EMPTY_STRING_ARRAY;
            }
        } };
    }
    return new PsiReference[] { new DefinitionReference(e) };
}
Also used : XmlFile(com.intellij.psi.xml.XmlFile) PsiReference(com.intellij.psi.PsiReference) XmlAttributeValue(com.intellij.psi.xml.XmlAttributeValue) RngGrammar(org.intellij.plugins.relaxNG.xml.dom.RngGrammar) RngDefine(org.intellij.plugins.relaxNG.xml.dom.RngDefine) Ref(com.intellij.openapi.util.Ref) RngDefine(org.intellij.plugins.relaxNG.xml.dom.RngDefine) Define(org.intellij.plugins.relaxNG.model.Define) RngInclude(org.intellij.plugins.relaxNG.xml.dom.RngInclude) PsiReferenceBase(com.intellij.psi.PsiReferenceBase) RngDomVisitor(org.intellij.plugins.relaxNG.xml.dom.RngDomVisitor) Map(java.util.Map) NotNull(org.jetbrains.annotations.NotNull)

Aggregations

RngDefine (org.intellij.plugins.relaxNG.xml.dom.RngDefine)2 Ref (com.intellij.openapi.util.Ref)1 PsiElement (com.intellij.psi.PsiElement)1 PsiReference (com.intellij.psi.PsiReference)1 PsiReferenceBase (com.intellij.psi.PsiReferenceBase)1 AndFilter (com.intellij.psi.filters.AndFilter)1 ClassFilter (com.intellij.psi.filters.ClassFilter)1 ElementFilter (com.intellij.psi.filters.ElementFilter)1 NamespaceFilter (com.intellij.psi.filters.position.NamespaceFilter)1 MetaDataRegistrar (com.intellij.psi.meta.MetaDataRegistrar)1 XmlAttributeValue (com.intellij.psi.xml.XmlAttributeValue)1 XmlFile (com.intellij.psi.xml.XmlFile)1 XmlTag (com.intellij.psi.xml.XmlTag)1 DomElement (com.intellij.util.xml.DomElement)1 Map (java.util.Map)1 RncDocument (org.intellij.plugins.relaxNG.compact.psi.impl.RncDocument)1 Define (org.intellij.plugins.relaxNG.model.Define)1 RngDomVisitor (org.intellij.plugins.relaxNG.xml.dom.RngDomVisitor)1 RngGrammar (org.intellij.plugins.relaxNG.xml.dom.RngGrammar)1 RngInclude (org.intellij.plugins.relaxNG.xml.dom.RngInclude)1