in tapestry/src/main/java/com/intellij/tapestry/core/model/presentation/PresentationLibraryElement.java [235:304]
public List<TemplateElement> getEmbeddedComponents() {
final List<TemplateElement> embeddedComponentsTemplate = new ArrayList<>();
final List<TemplateElement> embeddedComponents = new ArrayList<>();
for (IJavaField field : _class.getFields(true).values()) {
if (field.isValid() &&
field.getAnnotations().containsKey(TapestryConstants.COMPONENT_ANNOTATION) &&
field.getType() instanceof IJavaClassType) {
IJavaAnnotation annotation = field.getAnnotations().get(TapestryConstants.COMPONENT_ANNOTATION);
final TapestryComponent component;
if (annotation.getParameters().containsKey("type")) {
component = _project.findComponent(annotation.getParameters().get("type")[0]);
}
else {
component = _project.findComponent((IJavaClassType)field.getType());
}
embeddedComponents.add(new TemplateElement(new InjectedElement(field, component), "class"));
}
}
final List<TemplateElement> embeddedComponentsClass = new ArrayList<>(embeddedComponents);
for (int i = 0; i < getTemplate().length; i++) {
getTemplate()[i].accept(new CoreXmlRecursiveElementVisitor() {
@Override
public void visitTag(XmlTag tag) {
if (!ComponentUtils._isComponentTag(tag)) return;
boolean hasAttributeType = false;
InjectedElement injectedElement = null;
TapestryComponent component = null;
for (XmlAttribute attribute : tag.getAttributes()) {
if (attribute.getLocalName().equals("type") && TapestryXmlExtension.isTapestryTemplateNamespace(attribute.getNamespace())) {
String value = attribute.getValue();
if (value != null) {
component = _project.findComponent(value);
injectedElement = new InjectedElement(tag, component);
hasAttributeType = true;
}
}
}
if (!hasAttributeType) {
component = _project.findComponent(tag.getLocalName());
injectedElement = new InjectedElement(tag, component);
}
if (embeddedComponents.isEmpty() || component == null) return;
for (TemplateElement element : embeddedComponents) {
final String injectedElementId = injectedElement.getElementId();
if (injectedElementId == null) continue;
final String elementId = element.getElement().getElementId();
final PresentationLibraryElement libraryElement = element.getElement().getElement();
if (libraryElement != null &&
elementId != null &&
elementId.equalsIgnoreCase(injectedElementId) &&
libraryElement.getName().equalsIgnoreCase(injectedElement.getTag().getLocalName()) &&
injectedElement.getParameters().size() != 1) {
if (!embeddedComponentsClass.isEmpty()) embeddedComponentsClass.remove(element);
}
}
}
});
}
embeddedComponentsClass.addAll(embeddedComponentsTemplate);
return embeddedComponentsClass;
}