|
|
|
|
@ -4,6 +4,7 @@ import java.io.IOException; |
|
|
|
|
import java.io.PrintWriter; |
|
|
|
|
import java.io.StringWriter; |
|
|
|
|
import java.util.Arrays; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Set; |
|
|
|
|
|
|
|
|
|
import javax.annotation.processing.AbstractProcessor; |
|
|
|
|
@ -17,7 +18,9 @@ import javax.tools.Diagnostic.Kind; |
|
|
|
|
|
|
|
|
|
import de.kreth.property2java.GeneratorException; |
|
|
|
|
|
|
|
|
|
@SupportedAnnotationTypes({ "de.kreth.property2java.processor.GenerateProperty2Java" }) |
|
|
|
|
@SupportedAnnotationTypes({ "de.kreth.property2java.processor.GenerateProperty2Java", |
|
|
|
|
"de.kreth.property2java.processor.GenerateResourceBundleProperty2Javas", |
|
|
|
|
"de.kreth.property2java.processor.GenerateResourceBundleProperty2Java" }) |
|
|
|
|
@SupportedSourceVersion(SourceVersion.RELEASE_8) |
|
|
|
|
public class Property2JavaGenerator extends AbstractProcessor { |
|
|
|
|
|
|
|
|
|
@ -25,37 +28,63 @@ public class Property2JavaGenerator extends AbstractProcessor { |
|
|
|
|
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { |
|
|
|
|
|
|
|
|
|
if (!roundEnv.processingOver()) { |
|
|
|
|
processingEnv.getMessager().printMessage(Kind.NOTE, |
|
|
|
|
"Processing annotation " + GenerateProperty2Java.class); |
|
|
|
|
|
|
|
|
|
Set<? extends Element> elementsAnnotatedWith = roundEnv |
|
|
|
|
.getElementsAnnotatedWith(GenerateProperty2Java.class); |
|
|
|
|
|
|
|
|
|
processElements(elementsAnnotatedWith); |
|
|
|
|
processGenerateProperty2Java(roundEnv); |
|
|
|
|
processGenerateResourceBundleProperty2Javas(roundEnv); |
|
|
|
|
} else { |
|
|
|
|
processingEnv.getMessager().printMessage(Kind.NOTE, |
|
|
|
|
"finished working on annotation " + GenerateProperty2Java.class); |
|
|
|
|
"finished working on annotation " + annotations); |
|
|
|
|
} |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void processElements(Set<? extends Element> elementsAnnotatedWith) { |
|
|
|
|
private void processGenerateProperty2Java(RoundEnvironment roundEnv) { |
|
|
|
|
processingEnv.getMessager().printMessage(Kind.NOTE, |
|
|
|
|
"Processing annotation " + GenerateProperty2Java.class); |
|
|
|
|
|
|
|
|
|
Set<? extends Element> elementsAnnotatedWith = roundEnv |
|
|
|
|
.getElementsAnnotatedWith(GenerateProperty2Java.class); |
|
|
|
|
|
|
|
|
|
for (Element element : elementsAnnotatedWith) { |
|
|
|
|
String[] resources = element.getAnnotation(GenerateProperty2Java.class).resources(); |
|
|
|
|
processingEnv.getMessager().printMessage(Kind.NOTE, |
|
|
|
|
"Generating Java for " + Arrays.asList(resources)); |
|
|
|
|
try { |
|
|
|
|
ProcessorConfiguration |
|
|
|
|
.builder(processingEnv.getFiler(), element) |
|
|
|
|
.addAll(resources) |
|
|
|
|
.startGeneration(); |
|
|
|
|
} catch (IOException | GeneratorException e) { |
|
|
|
|
StringWriter out = new StringWriter(); |
|
|
|
|
e.printStackTrace(new PrintWriter(out)); |
|
|
|
|
out.flush(); |
|
|
|
|
processingEnv.getMessager().printMessage(Kind.ERROR, "Exception " + e + "\n" + out.toString(), |
|
|
|
|
element); |
|
|
|
|
GenerateProperty2Java generateAnnotation = element.getAnnotation(GenerateProperty2Java.class); |
|
|
|
|
String[] resources = generateAnnotation.resources(); |
|
|
|
|
generateElementProperties(element, Arrays.asList(resources), Format.WithUnaryOperatorParameter); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void processGenerateResourceBundleProperty2Javas(RoundEnvironment roundEnv) { |
|
|
|
|
|
|
|
|
|
processingEnv.getMessager().printMessage(Kind.NOTE, |
|
|
|
|
"Processing annotation " + GenerateResourceBundleProperty2Javas.class); |
|
|
|
|
|
|
|
|
|
Set<? extends Element> elementsAnnotatedWith = roundEnv |
|
|
|
|
.getElementsAnnotatedWith(GenerateResourceBundleProperty2Javas.class); |
|
|
|
|
|
|
|
|
|
for (Element element : elementsAnnotatedWith) { |
|
|
|
|
GenerateResourceBundleProperty2Java[] value = element |
|
|
|
|
.getAnnotation(GenerateResourceBundleProperty2Javas.class).value(); |
|
|
|
|
for (GenerateResourceBundleProperty2Java generateResourceBundleProperty2Java : value) { |
|
|
|
|
List<String> resources = Arrays.asList(generateResourceBundleProperty2Java.resource()); |
|
|
|
|
generateElementProperties(element, resources, generateResourceBundleProperty2Java.format()); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void generateElementProperties(Element element, List<String> resources, Format format) { |
|
|
|
|
processingEnv.getMessager().printMessage(Kind.NOTE, |
|
|
|
|
"Generating Java for " + Arrays.asList(resources)); |
|
|
|
|
try { |
|
|
|
|
ProcessorConfiguration |
|
|
|
|
.builder(processingEnv.getFiler(), element) |
|
|
|
|
.addAll(resources) |
|
|
|
|
.withFormat(format) |
|
|
|
|
.startGeneration(); |
|
|
|
|
} catch (IOException | GeneratorException e) { |
|
|
|
|
StringWriter out = new StringWriter(); |
|
|
|
|
e.printStackTrace(new PrintWriter(out)); |
|
|
|
|
out.flush(); |
|
|
|
|
processingEnv.getMessager().printMessage(Kind.ERROR, "Exception " + e + "\n" + out.toString(), |
|
|
|
|
element); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|