我創建了旨在用於測試(src/test/java)的註釋@EnableEntityProcessing
。 另外我還創建了關聯的註釋處理器EnableEntityProcessingProcessor
。RoundEnvironment指向測試源時如何掃描主要探測器中的註釋
此EnableEntityProcessingProcessor
的用途是掃描在src/main/java中找到的@Entity
(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沒有找到它們,因爲它鏈接到了測試源。
有誰知道如何解決這個問題?
你能擴展你的問題嗎?也許還有一些代碼,這個'RoundEnvironment'是什麼,它爲什麼指向一個類是測試代碼? – tonakai
我已經添加了一個代碼示例 – Alex
我明白了,以及我認爲,因爲您在主代碼中引用了'@ TestAnnotation',它應該在那裏創建,而不是在測試文件夾中。即使您註釋測試類/方法,或者在您生成的代碼中使用其他註釋,因爲您正在生成它。 – tonakai