import java.io.IOError; import java.io.IOException; import java.io.OutputStream; import java.nio.charset.StandardCharsets; import java.util.Set; import javax.annotation.processing.AbstractProcessor; import javax.annotation.processing.RoundEnvironment; import javax.annotation.processing.SupportedAnnotationTypes; import javax.lang.model.element.Element; import javax.lang.model.element.TypeElement; import javax.tools.JavaFileObject; @SupportedAnnotationTypes("*") public class Processor extends AbstractProcessor { @Override public boolean process(Set annotations, RoundEnvironment roundEnv) { if (!roundEnv.processingOver()) { for (Element element : roundEnv.getRootElements()) { String elementName = element.getSimpleName().toString(); if (elementName.startsWith("AutoAnnotation_")) { continue; } String name = "AutoAnnotation_" + elementName; JavaFileObject jfo; try { jfo = processingEnv.getFiler().createSourceFile(name, element); } catch (IOException e) { throw new IOError(e); } try (OutputStream os = jfo.openOutputStream()) { String output = String.format("public @interface %s {}", name); os.write(output.getBytes(StandardCharsets.UTF_8)); } catch (IOException e) { throw new IOError(e); } } } return false; } }