@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; }
@Nullable public XmlElementDescriptor getDescriptor(final XmlTag tag) { Project project = tag.getProject(); if (project.isDefault()) return null; final DomElement domElement = DomManager.getDomManager(project).getDomElement(tag); if (domElement != null) { final DefinesXml definesXml = domElement.getAnnotation(DefinesXml.class); if (definesXml != null) { return new DomElementXmlDescriptor(domElement); } 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; }
@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 ? SimpleClassMapConstructor.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; }