在注释处理器上编译时检查 class 层次结构

Check class hierarchy at compile on an annotation processor

我正在编写注释处理器以在编译时执行以下检查:

到目前为止,我已经确定了所有名为 apply 的注释方法,并提取了它们作为参数的 class 的名称。所以我只剩下:

 Element method  // this is the Element that represents the `apply` method
 TypeMirror mirror //method's TypeMirror
 String paramClass // the parameter's class Name.

问题是:我如何(如果有的话)摆脱这些参数的 class 层次结构表示,以便我可以检查它实现 E。 无法使用 ClassLoader.loadClass,因为 class 尚不存在,但我只需要 class 层次结构。

碰巧有一个使用javax.lang.model.util.Types.isSubtype()方法的简单方法:

 TypeMirror parameterTypes = mirror.getParameterTypes();
 TypeMirror typeOfE = processingEnv.getElementUtils().getTypeElement(E.class.getName()).asType();
 boolean isSubTypeOfE = processingEnv.getTypeUtils().isSubtype(parameterType, eventType)

这样我就可以检查 mirror 表示的方法的参数 class 是否是所需类型 E

的子类型