使用TypeVisitor访问java注解处理器中encapsulatedElement的返回值接口?

问题描述 投票:0回答:1

我目前正在构建一个注释处理器,我想过滤所有返回实现某个接口的记录的方法。

在 IntelliJ 调试窗口中,我可以看到 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,但我没有用我的Google fu找到任何示例。

有人知道怎么做吗?

java annotation-processing
1个回答
0
投票

我不太清楚你在问什么 - 表达式窗口中的 groovy(?) 代码似乎会过滤方法并返回其方法类型镜像(即

javax.lang.model.type.ExecutableType
的列表)。

如果是这样,您可以在每个实例上调用

ExecutableType.getReturnType()
,然后验证返回的类型是否为
DeclaredType
(而不是基元、数组、类型变量等)。
DeclaredType
也不提供直接访问其实现的接口的权限,但这可能仅在您需要传递给接口的通用参数时才重要。如果没有,您可以调用
DeclaredType.asElement()
来获取
TypeElement
(现在是一个元素而不是镜子),然后调用
TypeElement.getInterfaces()
来获取直接实现的接口 - 请注意,您需要访问超类和任何其他接口递归地获取传递实现的接口。

© www.soinside.com 2019 - 2024. All rights reserved.