【发布时间】:2021-05-08 11:43:34
【问题描述】:
我有一个基本的注释处理器
@SupportedAnnotationTypes("example.Annotation")
public class Processor extends AbstractProcessor {
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for (TypeElement annotation : annotations) {
Set<? extends Element> elementsAnnotatedWith = roundEnv.getElementsAnnotatedWith(annotation);
for (Element element : elementsAnnotatedWith) {
TypeElement typeElement = (TypeElement) element;
// Here, typeElement.getQualifiedName() is accessible, but not the code nor file path.
}
}
return false;
}
}
这个注解只能用在类上。我知道目标类未编译,因此无法进行反射访问,但我想将类代码作为 String 以我自己的方式解析,而不是使用此 API。
有可能吗?我知道我可以获得限定名称,但在哪里查找文件?
【问题讨论】:
-
真的需要完整的源码,还是反射信息(方法签名、字段声明、继承...)就够了?
-
@Tigger 我已经有很多基于解析类代码的代码,所以我想重用它。但似乎没有办法,所以我不得不使用这个 API (
processingEnv.getElementUtils()) 重写我的代码。 -
其实我还需要其他方法。用于将方法从注释类复制到生成的类...
-
因为它发生在编译之前,你需要的所有源文件都必须在文件系统的某个地方,对吧?如果是这样,我敢打赌你可以使用一些环境变量。你如何编译/构建你的库(maven、gradle、...)?
-
我使用 Gradle,但这不会让注释处理器只对我有用吗?
标签: java annotations annotation-processing