diff --git a/kotlin-querybean-generator/src/main/java/io/ebean/querybean/generator/Processor.java b/kotlin-querybean-generator/src/main/java/io/ebean/querybean/generator/Processor.java index cb3eba64d..1fa190687 100644 --- a/kotlin-querybean-generator/src/main/java/io/ebean/querybean/generator/Processor.java +++ b/kotlin-querybean-generator/src/main/java/io/ebean/querybean/generator/Processor.java @@ -6,6 +6,7 @@ import javax.annotation.processing.RoundEnvironment; import javax.lang.model.SourceVersion; import javax.lang.model.element.Element; import javax.lang.model.element.TypeElement; +import java.util.Arrays; import java.util.LinkedHashSet; import java.util.Set; @@ -18,6 +19,7 @@ public class Processor extends AbstractProcessor implements Constants { private static final String KAPT_KOTLIN_GENERATED_OPTION = "kapt.kotlin.generated"; private ProcessingContext processingContext; + private SimpleModuleInfoWriter moduleWriter; public Processor() { } @@ -55,11 +57,11 @@ public class Processor extends AbstractProcessor implements Constants { @Override public boolean process(Set annotations, RoundEnvironment roundEnv) { - processingContext.readModuleInfo(); int count = processEntities(roundEnv); processOthers(roundEnv); final int loaded = processingContext.complete(); + initModuleInfoBean(); if (roundEnv.processingOver()) { writeModuleInfoBean(); } @@ -96,12 +98,27 @@ public class Processor extends AbstractProcessor implements Constants { } } + private void initModuleInfoBean() { + try { + if (moduleWriter == null) { + moduleWriter = new SimpleModuleInfoWriter(processingContext); + } + } catch (Throwable e) { + e.printStackTrace(); + processingContext.logError(null, "Failed to initialise ModuleInfoLoader error:" + e + " stack:" + Arrays.toString(e.getStackTrace())); + } + } + private void writeModuleInfoBean() { try { - SimpleModuleInfoWriter writer = new SimpleModuleInfoWriter(processingContext); - writer.write(); + if (moduleWriter == null) { + processingContext.logError(null, "ModuleInfoLoader was not initialised and not written"); + } else { + moduleWriter.write(); + } } catch (Throwable e) { - processingContext.logError(null, "Failed to write ModuleInfoLoader " + e.getMessage()); + e.printStackTrace(); + processingContext.logError(null, "Failed to write ModuleInfoLoader error:" + e + " stack:" + Arrays.toString(e.getStackTrace())); } } diff --git a/kotlin-querybean-generator/src/main/java/io/ebean/querybean/generator/SimpleModuleInfoWriter.java b/kotlin-querybean-generator/src/main/java/io/ebean/querybean/generator/SimpleModuleInfoWriter.java index a5683165d..b604d3c9d 100644 --- a/kotlin-querybean-generator/src/main/java/io/ebean/querybean/generator/SimpleModuleInfoWriter.java +++ b/kotlin-querybean-generator/src/main/java/io/ebean/querybean/generator/SimpleModuleInfoWriter.java @@ -18,14 +18,16 @@ class SimpleModuleInfoWriter { private final String factoryPackage; private final String factoryShortName; private final String factoryFullName; + private final JavaFileObject javaFileObject; private Append writer; - SimpleModuleInfoWriter(ProcessingContext processingContext) { + SimpleModuleInfoWriter(ProcessingContext processingContext) throws IOException { this.processingContext = processingContext; this.factoryPackage = processingContext.getFactoryPackage(); this.factoryShortName = "_Ebean$ModuleInfo"; this.factoryFullName = factoryPackage + "." + factoryShortName; + this.javaFileObject = processingContext.createWriter(factoryFullName); } void write() throws IOException { @@ -208,7 +210,6 @@ class SimpleModuleInfoWriter { } private Writer createFileWriter() throws IOException { - JavaFileObject jfo = processingContext.createWriter(factoryFullName); - return jfo.openWriter(); + return javaFileObject.openWriter(); } } diff --git a/querybean-generator/src/main/java/io/ebean/querybean/generator/Processor.java b/querybean-generator/src/main/java/io/ebean/querybean/generator/Processor.java index 1421c636f..e7457cd82 100644 --- a/querybean-generator/src/main/java/io/ebean/querybean/generator/Processor.java +++ b/querybean-generator/src/main/java/io/ebean/querybean/generator/Processor.java @@ -16,6 +16,7 @@ import java.util.Set; public class Processor extends AbstractProcessor implements Constants { private ProcessingContext processingContext; + private SimpleModuleInfoWriter moduleWriter; public Processor() { } @@ -48,6 +49,7 @@ public class Processor extends AbstractProcessor implements Constants { int count = processEntities(roundEnv); processOthers(roundEnv); final int loaded = processingContext.complete(); + initModuleInfoBean(); if (roundEnv.processingOver()) { writeModuleInfoBean(); } @@ -84,10 +86,24 @@ public class Processor extends AbstractProcessor implements Constants { } } + private void initModuleInfoBean() { + try { + if (moduleWriter == null) { + moduleWriter = new SimpleModuleInfoWriter(processingContext); + } + } catch (Throwable e) { + e.printStackTrace(); + processingContext.logError(null, "Failed to initialise ModuleInfoLoader error:" + e + " stack:" + Arrays.toString(e.getStackTrace())); + } + } + private void writeModuleInfoBean() { try { - SimpleModuleInfoWriter writer = new SimpleModuleInfoWriter(processingContext); - writer.write(); + if (moduleWriter == null) { + processingContext.logError(null, "ModuleInfoLoader was not initialised and not written"); + } else { + moduleWriter.write(); + } } catch (Throwable e) { e.printStackTrace(); processingContext.logError(null, "Failed to write ModuleInfoLoader error:" + e + " stack:" + Arrays.toString(e.getStackTrace())); diff --git a/querybean-generator/src/main/java/io/ebean/querybean/generator/SimpleModuleInfoWriter.java b/querybean-generator/src/main/java/io/ebean/querybean/generator/SimpleModuleInfoWriter.java index e9f8c30f0..c06e615dc 100644 --- a/querybean-generator/src/main/java/io/ebean/querybean/generator/SimpleModuleInfoWriter.java +++ b/querybean-generator/src/main/java/io/ebean/querybean/generator/SimpleModuleInfoWriter.java @@ -18,14 +18,16 @@ class SimpleModuleInfoWriter { private final String factoryPackage; private final String factoryShortName; private final String factoryFullName; + private final JavaFileObject javaFileObject; private Append writer; - SimpleModuleInfoWriter(ProcessingContext processingContext) { + SimpleModuleInfoWriter(ProcessingContext processingContext) throws IOException { this.processingContext = processingContext; this.factoryPackage = processingContext.getFactoryPackage(); this.factoryShortName = "_Ebean$ModuleInfo"; this.factoryFullName = factoryPackage + "." + factoryShortName; + this.javaFileObject = processingContext.createWriter(factoryFullName); } void write() throws IOException { @@ -208,7 +210,6 @@ class SimpleModuleInfoWriter { } private Writer createFileWriter() throws IOException { - JavaFileObject jfo = processingContext.createWriter(factoryFullName); - return jfo.openWriter(); + return javaFileObject.openWriter(); } }