in src/main/java/org/apache/struts/annotations/taglib/apt/TagAnnotationProcessor.java [168:186]
private void processHierarchy(Tag tag) {
TypeElement type = processingEnv.getElementUtils().getTypeElement(tag.getDeclaredType());
List<String> skipAttributes = tag.getSkipAttributes();
while (type != null && !(type instanceof NoType) && getAnnotation(type, TAG_SKIP_HIERARCHY) == null) {
Tag parentTag = tags.get(type.getQualifiedName().toString());
// copy parent annotations to this tag
if (parentTag != null) {
for (TagAttribute attribute : parentTag.getAttributes()) {
if (!skipAttributes.contains(attribute.getName())) {
tag.addTagAttribute(attribute);
}
}
} else {
// Maybe the parent class is already compiled
addTagAttributesFromParent(tag, type);
}
type = (TypeElement) processingEnv.getTypeUtils().asElement(type.getSuperclass());
}
}