inherited interface recognition

This commit is contained in:
Brian Long 2025-02-10 11:46:19 -05:00
parent 0886a273e4
commit ed4326589b

@ -28,6 +28,8 @@ import javax.lang.model.element.ElementKind;
import javax.lang.model.element.ExecutableElement; import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.Modifier; import javax.lang.model.element.Modifier;
import javax.lang.model.element.TypeElement; import javax.lang.model.element.TypeElement;
import javax.lang.model.type.DeclaredType;
import javax.lang.model.type.TypeKind;
import javax.lang.model.type.TypeMirror; import javax.lang.model.type.TypeMirror;
import org.slf4j.Logger; import org.slf4j.Logger;
@ -102,22 +104,34 @@ class ActivitiDocFilter {
Set<String> taskListenerMethodElements = new HashSet<>(5); Set<String> taskListenerMethodElements = new HashSet<>(5);
// getAllTypeElements() will get inherited interfaces // getAllTypeElements() will get inherited interfaces
for (TypeMirror interfaceType : classElement.getInterfaces()) { TypeElement superclassElement = classElement;
this.logger.trace("Found interface '{}' on bean '{}'", interfaceType, beanId); while (superclassElement != null) {
for (TypeMirror interfaceType : superclassElement.getInterfaces()) {
this.logger.trace("Found interface '{}' on bean '{}'", interfaceType, beanId);
switch (interfaceType.toString()) { switch (interfaceType.toString()) {
case INTERFACE_JAVA_DELEGATE: case INTERFACE_JAVA_DELEGATE:
this.logger.debug("The bean '{}' is a JavaDelegate", beanId); this.logger.debug("The bean '{}' is a JavaDelegate", beanId);
delegateMethodElements.addAll(this.toStrings(this.docenv.getTypeUtils().asElement(interfaceType).getEnclosedElements())); delegateMethodElements.addAll(this.toStrings(this.docenv.getTypeUtils().asElement(interfaceType).getEnclosedElements()));
break; break;
case INTERFACE_EXECUTION_LISTENER: case INTERFACE_EXECUTION_LISTENER:
this.logger.debug("The bean '{}' is a ExecutionListener", beanId); this.logger.debug("The bean '{}' is a ExecutionListener", beanId);
executionListenerMethodElements.addAll(this.toStrings(this.docenv.getTypeUtils().asElement(interfaceType).getEnclosedElements())); executionListenerMethodElements.addAll(this.toStrings(this.docenv.getTypeUtils().asElement(interfaceType).getEnclosedElements()));
break; break;
case INTERFACE_TASK_LISTENER: case INTERFACE_TASK_LISTENER:
this.logger.debug("The bean '{}' is a TaskListener", beanId); this.logger.debug("The bean '{}' is a TaskListener", beanId);
taskListenerMethodElements.addAll(this.toStrings(this.docenv.getTypeUtils().asElement(interfaceType).getEnclosedElements())); taskListenerMethodElements.addAll(this.toStrings(this.docenv.getTypeUtils().asElement(interfaceType).getEnclosedElements()));
break; break;
}
}
TypeMirror superclassMirror = superclassElement.getSuperclass();
if (superclassMirror == null) {
superclassElement = null;
} else if (superclassMirror.getKind() != TypeKind.DECLARED) {
superclassElement = null;
} else {
superclassElement = (TypeElement) ((DeclaredType) superclassMirror).asElement();
} }
} }