我创建了一个@EnableEntityProcessing
打算在测试中使用的注释(src/test/java)。我还创建了关联的注释处理器EnableEntityProcessingProcessor
。
这样做的目的EnableEntityProcessingProcessor
是扫描@Entity
在 src/main/java 中找到的 (javax.persistence.Entity) 注释,并根据这些注释生成代码。我希望代码在测试资源下生成,因为它只用于测试。
主要问题是RoundEnvironment
对象指向测试代码,因为支持的注释是@EnableEntityProcessing
(仅在测试中使用)。
public final class MyProcessor extends EnableEntityProcessingProcessor {
private static final Class<EnableEntityProcessing> TEST_ANNOTATION_CLASS =
EnableEntityProcessing.class;
private static final Class<Entity> PROD_ANNOTATION_CLASS = Entity.class;
@Override
public final Set<String> getSupportedAnnotationTypes() {
return ImmutableSet.of(TEST_ANNOTATION_CLASS.getCanonicalName());
}
@Override
public final boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
final Set<? extends Element> elementsAnnotated = roundEnv.getElementsAnnotatedWith(TEST_ANNOTATION_CLASS);
if (!elementsAnnotated.isEmpty()) {
for (Element annotatedElement : roundEnv.getElementsAnnotatedWith(PROD_ANNOTATION_CLASS)){
// code generation based on properties from classes annotated with PROD_ANNOTATION_CLASS
}
}
}
}
从代码示例中,您可以看到我正在扫描带有 注释的元素EnableEntityProcessing
,如果其中一个存在,那么我想查找带有注释的类Entity
。问题是 roundEnv 没有找到它们,因为它链接到测试源。