inherited interface recognition

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

View File

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