Generating imports after all usages were generated

This commit is contained in:
Andrey Breslav
2013-03-05 20:41:31 +04:00
parent 47d1ea2770
commit deda45135e
@@ -68,17 +68,15 @@ public class DependencyInjectorGenerator {
}
}
StringBuilder out = new StringBuilder();
Printer p = new Printer(out);
fields.addAll(dependencies.satisfyDependencies());
String copyright = "injector-generator/copyright.txt";
p.println(FileUtil.loadFile(new File(copyright)));
p.println("package " + injectorPackageName + ";");
p.println();
StringBuilder preamble = new StringBuilder();
generatePreamble(injectorPackageName, new Printer(preamble));
StringBuilder body = new StringBuilder();
Printer p = new Printer(body);
generateImports(p, injectorPackageName);
p.println();
p.println("/* This file is generated by " + generatorClass.getName() + ". DO NOT EDIT! */");
@@ -94,14 +92,20 @@ public class DependencyInjectorGenerator {
generateDestroy(injectorClassName, p);
p.println();
generateGetters(p);
if (!factoryMethods.isEmpty()) {
p.println();
generateFactoryMethods(p);
}
generateFactoryMethods(p);
p.popIndent();
p.println("}"); // class
FileUtil.writeToFile(tmpfile, out.toString());
importManager.addClass(org.jetbrains.annotations.NotNull.class);
importManager.addClass(javax.annotation.PreDestroy.class);
StringBuilder imports = new StringBuilder();
generateImports(new Printer(imports), injectorPackageName);
StringBuilder text = new StringBuilder(preamble);
text.append(imports);
text.append(body);
FileUtil.writeToFile(tmpfile, text.toString());
System.out.println("File written: " + tmpfile.getAbsolutePath());
if (useTmpfile) {
if (!tmpfile.renameTo(file)) {
@@ -112,6 +116,14 @@ public class DependencyInjectorGenerator {
System.out.println();
}
private void generatePreamble(String injectorPackageName, Printer p) throws IOException {
String copyright = "injector-generator/copyright.txt";
p.println(FileUtil.loadFile(new File(copyright)));
p.println("package " + injectorPackageName + ";");
p.println();
}
private void generateImplementsList(Printer out) {
if (!implementsList.isEmpty()) {
out.print(" implements ");
@@ -311,6 +323,9 @@ public class DependencyInjectorGenerator {
}
private void generateFactoryMethods(Printer p) {
if (factoryMethods.isEmpty()) return;
p.println();
p.pushIndent();
for (FactoryMethod method : factoryMethods) {
generateFactoryMethod(p, method);