使用TypeVisitor访问java annotationprocessor中的ExcelsedElement返回值接口?

euoag5mw  于 2023-11-15  发布在  Java
关注(0)|答案(1)|浏览(90)

我目前正在构建一个注解处理器,我想过滤所有返回实现某个接口的记录的方法。
在IntelliJ EJB窗口中,我可以看到restype变量有一个interfaces_field,我可以在其中获取返回值的类类型。


的数据
我想在构建时访问这个值,但是当我像在表达式窗口中一样直接访问restype时,我遇到了这个错误:

e: file:///home/thomas/IdeaProjects/spring-view-component/core/src/main/kotlin/de/tschuehly/spring/viewcomponent/core/processor/ViewComponentProcessor.kt:3:33 
Symbol is declared in module 'jdk.compiler' which does not export package 'com.sun.tools.javac.code'

字符串
下一个问题是我不知道如何访问restype值中的interfaces_field属性。
我认为解决方案将是一个TypeVisitor,但我没有找到任何例子与我的谷歌fu。
有人知道怎么做吗?

yftpprvb

yftpprvb1#

我不太清楚你在问什么-你的groovy(?)代码在表达式窗口中似乎过滤方法并返回它们的方法类型镜像(即javax.lang.model.type.ExecutableType的列表)。
如果是,可以在每个示例上调用ExecutableType.getReturnType(),然后验证返回的类型是否为DeclaredType(而不是原语、数组、类型变量等). DeclaredType也不给予对其实现的接口的直接访问权,但这可能只在您需要传递给接口的泛型参数时才有关系。如果没有,你可以直接调用DeclaredType.asElement()来获取TypeElement(现在是一个元素而不是一个镜像),然后调用TypeElement.getInterfaces()来获取直接实现的接口-注意,你需要递归地访问超类和任何其他接口来获取传递实现的接口。

相关问题