List<AbstractIntrospector> () { if (myContexts != null) { return myContexts; } final List<AbstractIntrospector> parents = new ArrayList<>(); final AntDomMacroDef macroDef = myElement.getParentOfType(AntDomMacroDef.class, true); if (macroDef != null) { final AntDomSequentialTask body = macroDef.getMacroBody(); if (body != null) { body.accept(new AntDomRecursiveVisitor() { @Override public void visitAntDomCustomElement(AntDomCustomElement custom) { if (myElement.equals(custom.getDeclaringElement())) { final AntDomElement parent = custom.getParentOfType(AntDomElement.class, true); if (parent != null) { final Class type = parent.getChildDescription().getUserData(ELEMENT_IMPL_CLASS_KEY); if (type != null) { final AntIntrospector antIntrospector = AntIntrospector.getInstance(type); if (antIntrospector != null) { parents.add(new ClassIntrospectorAdapter(antIntrospector)); } } } } } }); } } return myContexts = parents; }