1
0
Fork 0
mirror of https://github.com/ethauvin/version-processor.git synced 2025-04-24 23:47:11 -07:00

Generate the file.

This commit is contained in:
Cedric Beust 2015-11-14 05:14:29 -08:00
parent 72ed28c902
commit 7bc705da95

View file

@ -1,26 +1,70 @@
package com.beust.apt.processor; package com.beust.apt.processor;
import javax.annotation.processing.AbstractProcessor; import javax.annotation.processing.*;
import javax.annotation.processing.RoundEnvironment;
import javax.lang.model.SourceVersion; import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.PackageElement;
import javax.lang.model.element.TypeElement; import javax.lang.model.element.TypeElement;
import javax.lang.model.util.Elements;
import javax.lang.model.util.Types;
import javax.tools.JavaFileObject;
import java.io.BufferedWriter;
import java.io.IOException;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
public class MainProcessor extends AbstractProcessor { public class MainProcessor extends AbstractProcessor {
private Types typeUtils;
private Elements elementUtils;
private Filer filer;
private Messager messager;
public MainProcessor() { public MainProcessor() {
System.out.println("Instantiating MainProcessor"); System.out.println("Instantiating MainProcessor");
} }
@Override
public synchronized void init(ProcessingEnvironment processingEnv) {
super.init(processingEnv);
typeUtils = processingEnv.getTypeUtils();
elementUtils = processingEnv.getElementUtils();
filer = processingEnv.getFiler();
messager = processingEnv.getMessager();
}
@Override @Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
System.out.println("Processing annotations $annotations"); for (Element annotatedElement : roundEnv.getElementsAnnotatedWith(Version.class)) {
Version version = annotatedElement.getAnnotation(Version.class);
if (annotatedElement.getKind() == ElementKind.CLASS) {
Element enclosing = annotatedElement.getEnclosingElement();
if (enclosing.getKind() == ElementKind.PACKAGE) {
PackageElement packageElement = (PackageElement) enclosing;
String packageName = packageElement.getQualifiedName().toString();
JavaFileObject jfo = null;
try {
System.out.println("version = " + version.value());
jfo = filer.createSourceFile(packageName + ".GeneratedVersion");
BufferedWriter writer = new BufferedWriter(jfo.openWriter());
writer.write("package " + packageName + ";\n\n");
writer.write("public class GeneratedVersion {\n");
writer.write(" public static final String VERSION = \"" + version.value() + "\";\n");
writer.write("}\n");
writer.close();
System.out.println("Generated " + jfo.getName());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
return true; return true;
} }
public Set<String> getSupportedAnnotationTypes() { public Set<String> getSupportedAnnotationTypes() {
Set<String> result = new HashSet<>(); Set<String> result = new HashSet<>();
result.add("Version"); result.add(Version.class.getCanonicalName());
return result; return result;
} }