diff --git a/src/main/java/com/inteligr8/activiti/doclet/ActivitiDocFilter.java b/src/main/java/com/inteligr8/activiti/doclet/ActivitiDocFilter.java index 3d35afc..310096e 100644 --- a/src/main/java/com/inteligr8/activiti/doclet/ActivitiDocFilter.java +++ b/src/main/java/com/inteligr8/activiti/doclet/ActivitiDocFilter.java @@ -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 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(); } }