Чтобы ответить на вопрос напрямую ... Конечно, вам просто нужно отсканировать ClassGenerator
и создать отсутствующий класс. Вот основной рабочий процессор:
@SupportedAnnotationTypes("ClassGenerator")
@SupportedSourceVersion(SourceVersion.RELEASE_6)
public class BaseClassProcessor extends AbstractProcessor {
private Elements elements;
@Override
public synchronized void init(ProcessingEnvironment processingEnv) {
super.init(processingEnv);
elements = processingEnv.getElementUtils();
}
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for (Element element : roundEnv.getElementsAnnotatedWith(ClassGenerator.class)) {
TypeMirror mirror = ((TypeElement) element).getSuperclass();
PackageElement pacakgeElement = elements.getPackageOf(element);
String packageName = pacakgeElement.getQualifiedName().toString();
String superClassName = ((DeclaredType) mirror).asElement().getSimpleName().toString();
try {
Writer file = processingEnv.getFiler().createSourceFile(packageName + "." + superClassName).openWriter();
file.write(String.format("package %s; public class %s {}", packageName, superClassName));
file.flush();
file.close();
} catch (IOException ex) {
Logger.getLogger(BaseClassProcessor.class.getName()).log(Level.SEVERE, null, ex);
}
}
return true;
}
}
Как для если это скороговорка желательно или лучше, вы должны проанализировать ваши требования и определить, если это удовлетворяет ваши потребности.
Просто любопытно: почему? – Fildor
@Fildor Это сделало бы класс, который я должен построить более элегантно. Мне нужно переопределить материал в сгенерированном классе. Моей альтернативой было бы разделить его: 1 класс, который определяет, что нужно сгенерировать, второй класс, который происходит от этого класса, который имеет все переопределения. – Hounshell
@afzalex Может ли класс, сгенерированный процессором, заменить существующее определение класса? У меня создалось впечатление, что это невозможно. – Hounshell