Search in sources :

Example 1 with DefinesXml

use of com.intellij.util.xml.DefinesXml in project intellij-community by JetBrains.

the class DomDescriptorProvider method getDescriptor.

@Override
@Nullable
public XmlElementDescriptor getDescriptor(final XmlTag tag) {
    Project project = tag.getProject();
    if (project.isDefault())
        return null;
    final DomInvocationHandler<?, ?> handler = DomManagerImpl.getDomManager(project).getDomHandler(tag);
    if (handler != null) {
        final DefinesXml definesXml = handler.getAnnotation(DefinesXml.class);
        if (definesXml != null) {
            return new DomElementXmlDescriptor(handler);
        }
        final PsiElement parent = tag.getParent();
        if (parent instanceof XmlTag) {
            final XmlElementDescriptor descriptor = ((XmlTag) parent).getDescriptor();
            if (descriptor instanceof DomElementXmlDescriptor) {
                return descriptor.getElementDescriptor(tag, (XmlTag) parent);
            }
        }
    }
    return null;
}
Also used : Project(com.intellij.openapi.project.Project) DomElementXmlDescriptor(com.intellij.xml.impl.dom.DomElementXmlDescriptor) XmlElementDescriptor(com.intellij.xml.XmlElementDescriptor) DefinesXml(com.intellij.util.xml.DefinesXml) PsiElement(com.intellij.psi.PsiElement) XmlTag(com.intellij.psi.xml.XmlTag) Nullable(org.jetbrains.annotations.Nullable)

Example 2 with DefinesXml

use of com.intellij.util.xml.DefinesXml in project android by JetBrains.

the class AndroidDomElementDescriptorProvider method getDescriptor.

@Nullable
private static XmlElementDescriptor getDescriptor(DomElement domElement, XmlTag tag, @Nullable String baseClassName) {
    AndroidFacet facet = AndroidFacet.getInstance(domElement);
    if (facet == null)
        return null;
    final String name = domElement.getXmlTag().getName();
    final PsiClass aClass = baseClassName != null ? LayoutViewClassUtils.findClassByTagName(facet, name, baseClassName) : null;
    final Icon icon = getIconForTag(name, domElement);
    final DefinesXml definesXml = domElement.getAnnotation(DefinesXml.class);
    if (definesXml != null) {
        return new AndroidXmlTagDescriptor(aClass, new DomElementXmlDescriptor(domElement), baseClassName, icon);
    }
    final PsiElement parent = tag.getParent();
    if (parent instanceof XmlTag) {
        final XmlElementDescriptor parentDescriptor = ((XmlTag) parent).getDescriptor();
        if (parentDescriptor != null && parentDescriptor instanceof AndroidXmlTagDescriptor) {
            XmlElementDescriptor domDescriptor = parentDescriptor.getElementDescriptor(tag, (XmlTag) parent);
            if (domDescriptor != null) {
                return new AndroidXmlTagDescriptor(aClass, domDescriptor, baseClassName, icon);
            }
        }
    }
    return null;
}
Also used : DomElementXmlDescriptor(com.intellij.xml.impl.dom.DomElementXmlDescriptor) PsiClass(com.intellij.psi.PsiClass) XmlElementDescriptor(com.intellij.xml.XmlElementDescriptor) AndroidFacet(org.jetbrains.android.facet.AndroidFacet) DefinesXml(com.intellij.util.xml.DefinesXml) PsiElement(com.intellij.psi.PsiElement) XmlTag(com.intellij.psi.xml.XmlTag) Nullable(org.jetbrains.annotations.Nullable)

Aggregations

PsiElement (com.intellij.psi.PsiElement)2 XmlTag (com.intellij.psi.xml.XmlTag)2 DefinesXml (com.intellij.util.xml.DefinesXml)2 XmlElementDescriptor (com.intellij.xml.XmlElementDescriptor)2 DomElementXmlDescriptor (com.intellij.xml.impl.dom.DomElementXmlDescriptor)2 Nullable (org.jetbrains.annotations.Nullable)2 Project (com.intellij.openapi.project.Project)1 PsiClass (com.intellij.psi.PsiClass)1 AndroidFacet (org.jetbrains.android.facet.AndroidFacet)1