@SupportedSourceVersion(SourceVersion.RELEASE_7)
public class MyProcessor extends AbstractProcessor {
public static final String SUFFIX = "$$WrmRequestInfo";
@Override
public synchronized void init(ProcessingEnvironment env) {
super.init(env);
}
@Override
public Set<String> getSupportedAnnotationTypes() {
Set<String> types = new LinkedHashSet<String>();
types.add(WRMPOST.class.getCanonicalName());
return types;
}
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment env) {
for (Element e : env.getElementsAnnotatedWith(WRMPOST.class)) {
WRMPOST ca = e.getAnnotation(WRMPOST.class);
String name = e.getSimpleName().toString();
char[] c = name.toCharArray();
c[0] = Character.toUpperCase(c[0]);
name = new String(name);
TypeElement clazz = (TypeElement) e.getEnclosingElement();
try {
JavaFileObject f = processingEnv.getFiler().createSourceFile(clazz.getQualifiedName() + SUFFIX);
processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "Creating " + f.toUri());
Writer w = f.openWriter();
try {
String pack = clazz.getQualifiedName().toString();
PrintWriter pw = new PrintWriter(w);
pw.println("package " + pack.substring(0, pack.lastIndexOf('.')) + ";");
pw.println("\npublic class " + clazz.getSimpleName() + "Autogenerate {");
pw.println("\n public " + ca.className() + " result = \"" + ca.value() + "\";");
pw.println(" public int type = " + ca.type() + ";");
pw.println("\n protected " + clazz.getSimpleName() + "Autogenerate() {}");
pw.println("\n /** Handle something. */");
pw.println(" protected final void handle" + name + "(" + ca.className() + " value" + ") {");
pw.println("\n//" + e);
pw.println("//" + ca);
pw.println("\n System.out.println(value);");
pw.println(" }");
pw.println("}");
pw.flush();
} finally {
w.close();
}
} catch (IOException x) {
processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR,
x.toString());
}
}
return true;
}
@Override
public SourceVersion getSupportedSourceVersion() {
return SourceVersion.latestSupported();
}
}