From 7bc705da95829aafecfb00dd178c9cd4869f13f7 Mon Sep 17 00:00:00 2001 From: Cedric Beust Date: Sat, 14 Nov 2015 05:14:29 -0800 Subject: [PATCH] =?UTF-8?q?Generate=20the=20file.=E2=80=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../beust/apt/processor/MainProcessor.java | 52 +++++++++++++++++-- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/processor/src/main/java/com/beust/apt/processor/MainProcessor.java b/processor/src/main/java/com/beust/apt/processor/MainProcessor.java index 5abaccb..5704cc4 100644 --- a/processor/src/main/java/com/beust/apt/processor/MainProcessor.java +++ b/processor/src/main/java/com/beust/apt/processor/MainProcessor.java @@ -1,26 +1,70 @@ package com.beust.apt.processor; -import javax.annotation.processing.AbstractProcessor; -import javax.annotation.processing.RoundEnvironment; +import javax.annotation.processing.*; 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.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.Set; public class MainProcessor extends AbstractProcessor { + private Types typeUtils; + private Elements elementUtils; + private Filer filer; + private Messager messager; + public 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 public boolean process(Set 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; } public Set getSupportedAnnotationTypes() { Set result = new HashSet<>(); - result.add("Version"); + result.add(Version.class.getCanonicalName()); return result; }