我目前正在构建一个注解处理器,我想过滤所有返回实现某个接口的记录的方法。
在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。
有人知道怎么做吗?
1条答案
按热度按时间yftpprvb1#
我不太清楚你在问什么-你的groovy(?)代码在表达式窗口中似乎过滤方法并返回它们的方法类型镜像(即
javax.lang.model.type.ExecutableType
的列表)。如果是,可以在每个示例上调用
ExecutableType.getReturnType()
,然后验证返回的类型是否为DeclaredType
(而不是原语、数组、类型变量等).DeclaredType
也不给予对其实现的接口的直接访问权,但这可能只在您需要传递给接口的泛型参数时才有关系。如果没有,你可以直接调用DeclaredType.asElement()
来获取TypeElement
(现在是一个元素而不是一个镜像),然后调用TypeElement.getInterfaces()
来获取直接实现的接口-注意,你需要递归地访问超类和任何其他接口来获取传递实现的接口。