@GenerateInterface class A {}
@GenerateInterface class B {
void setA(IA a) {}
}
我的注释处理器应该生成这些接口:
interface IA {}
interface IB {
void setA(IA a);
}
B
使用正确的导入语句编译得很好。IB
但是,错过了参数IA a
。我使用javapoet生成接口。编译方法参数的代码:
method.getParameters().forEach(p -> {
ParameterSpec.Builder parameterBuilder = ParameterSpec.builder(
TypeName.get(p.asType()),
p.getSimpleName().toString(),
p.getModifiers().toArray(new Modifier[p.getModifiers().size()]));
p.getAnnotationMirrors().stream()
.map(AnnotationSpec::get)
.forEach(parameterBuilder::addAnnotation);
methodBuilder.addParameter(parameterBuilder.build());
});
method
是一个ExecutableElement
。p.asType()
仅包含简单的名称IA
。此时,IA
可能尚未生成,因此没有可用的完全限定名称。
目前,我为每个带注释的类一个一个地生成接口。据我了解,我首先需要一个所有带注释的类及其派生接口名称的列表。然后,当我遇到尚未生成类型的参数时,从上面的列表中获取完全限定名称以插入正确的导入语句。
有没有聪明的方法来做到这一点?我至少可以将尚未编译的类型与已编译的类型区分开来吗?
编辑:完整代码