Migrated to Printer
This commit is contained in:
@@ -26,9 +26,7 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
import org.jetbrains.jet.utils.Printer;
|
import org.jetbrains.jet.utils.Printer;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.PrintStream;
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@@ -36,8 +34,6 @@ import static org.jetbrains.jet.di.InjectorGeneratorUtil.var;
|
|||||||
|
|
||||||
public class DependencyInjectorGenerator {
|
public class DependencyInjectorGenerator {
|
||||||
|
|
||||||
public static final String INDENT_STEP = " ";
|
|
||||||
|
|
||||||
private final Set<Field> fields = Sets.newLinkedHashSet();
|
private final Set<Field> fields = Sets.newLinkedHashSet();
|
||||||
private final Set<Parameter> parameters = Sets.newLinkedHashSet();
|
private final Set<Parameter> parameters = Sets.newLinkedHashSet();
|
||||||
private final Set<Field> backsParameter = Sets.newHashSet();
|
private final Set<Field> backsParameter = Sets.newHashSet();
|
||||||
@@ -72,57 +68,51 @@ public class DependencyInjectorGenerator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
FileOutputStream fileOutputStream = new FileOutputStream(tmpfile);
|
StringBuilder out = new StringBuilder();
|
||||||
System.out.println("File opened: " + tmpfile.getAbsolutePath());
|
Printer p = new Printer(out);
|
||||||
|
fields.addAll(dependencies.satisfyDependencies());
|
||||||
|
|
||||||
|
String copyright = "injector-generator/copyright.txt";
|
||||||
|
p.println(FileUtil.loadFile(new File(copyright)));
|
||||||
|
|
||||||
PrintStream out = new PrintStream(fileOutputStream);
|
p.println("package " + injectorPackageName + ";");
|
||||||
try {
|
p.println();
|
||||||
fields.addAll(dependencies.satisfyDependencies());
|
|
||||||
|
|
||||||
String copyright = "injector-generator/copyright.txt";
|
generateImports(p, injectorPackageName);
|
||||||
out.println(FileUtil.loadFile(new File(copyright)));
|
p.println();
|
||||||
|
|
||||||
out.println("package " + injectorPackageName + ";");
|
p.println("/* This file is generated by " + generatorClass.getName() + ". DO NOT EDIT! */");
|
||||||
out.println();
|
p.print("public class " + injectorClassName);
|
||||||
|
generateImplementsList(p);
|
||||||
generateImports(out, injectorPackageName);
|
p.println(" {");
|
||||||
out.println();
|
p.pushIndent();
|
||||||
|
p.println();
|
||||||
out.println("/* This file is generated by " + generatorClass.getName() + ". DO NOT EDIT! */");
|
generateFields(p);
|
||||||
out.print("public class " + injectorClassName);
|
p.println();
|
||||||
generateImplementsList(out);
|
generateConstructor(injectorClassName, p);
|
||||||
out.println(" {");
|
p.println();
|
||||||
out.println();
|
generateDestroy(injectorClassName, p);
|
||||||
generateFields(out);
|
p.println();
|
||||||
out.println();
|
generateGetters(p);
|
||||||
generateConstructor(injectorClassName, out);
|
if (!factoryMethods.isEmpty()) {
|
||||||
out.println();
|
p.println();
|
||||||
generateDestroy(injectorClassName, out);
|
generateFactoryMethods(p);
|
||||||
out.println();
|
|
||||||
generateGetters(out);
|
|
||||||
if (!factoryMethods.isEmpty()) {
|
|
||||||
out.println();
|
|
||||||
generateFactoryMethods(out);
|
|
||||||
}
|
|
||||||
out.println("}"); // class
|
|
||||||
|
|
||||||
fileOutputStream.close();
|
|
||||||
|
|
||||||
if (useTmpfile) {
|
|
||||||
if (!tmpfile.renameTo(file)) {
|
|
||||||
throw new RuntimeException("failed to rename " + tmpfile + " to " + file);
|
|
||||||
}
|
|
||||||
System.out.println("Renamed " + tmpfile + " to " + file);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
finally {
|
p.popIndent();
|
||||||
fileOutputStream.close();
|
p.println("}"); // class
|
||||||
System.out.println("File closed");
|
|
||||||
|
FileUtil.writeToFile(tmpfile, out.toString());
|
||||||
|
System.out.println("File written: " + tmpfile.getAbsolutePath());
|
||||||
|
if (useTmpfile) {
|
||||||
|
if (!tmpfile.renameTo(file)) {
|
||||||
|
throw new RuntimeException("failed to rename " + tmpfile + " to " + file);
|
||||||
|
}
|
||||||
|
System.out.println("Renamed " + tmpfile + " to " + file);
|
||||||
}
|
}
|
||||||
|
System.out.println();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generateImplementsList(PrintStream out) {
|
private void generateImplementsList(Printer out) {
|
||||||
if (!implementsList.isEmpty()) {
|
if (!implementsList.isEmpty()) {
|
||||||
out.print(" implements ");
|
out.print(" implements ");
|
||||||
for (Iterator<Class<?>> iterator = implementsList.iterator(); iterator.hasNext(); ) {
|
for (Iterator<Class<?>> iterator = implementsList.iterator(); iterator.hasNext(); ) {
|
||||||
@@ -234,7 +224,7 @@ public class DependencyInjectorGenerator {
|
|||||||
factoryMethods.add(new FactoryMethod("create" + type(returnType), returnType, parameters));
|
factoryMethods.add(new FactoryMethod("create" + type(returnType), returnType, parameters));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generateImports(PrintStream out, String injectorPackageName) {
|
private void generateImports(Printer out, String injectorPackageName) {
|
||||||
for (Class<?> importedClass : importManager.getImportedClasses()) {
|
for (Class<?> importedClass : importManager.getImportedClasses()) {
|
||||||
if (importedClass.isPrimitive()) continue;
|
if (importedClass.isPrimitive()) continue;
|
||||||
String importedPackageName = importedClass.getPackage().getName();
|
String importedPackageName = importedClass.getPackage().getName();
|
||||||
@@ -246,17 +236,14 @@ public class DependencyInjectorGenerator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generateFields(PrintStream out) {
|
private void generateFields(Printer out) {
|
||||||
for (Field field : fields) {
|
for (Field field : fields) {
|
||||||
String _final = backsParameter.contains(field) ? "final " : "";
|
String _final = backsParameter.contains(field) ? "final " : "";
|
||||||
out.println(" private " + _final + type(InjectorGeneratorUtil.getEffectiveFieldType(field)) + " " + field.getName() + ";");
|
out.println("private " + _final + type(InjectorGeneratorUtil.getEffectiveFieldType(field)) + " " + field.getName() + ";");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generateConstructor(String injectorClassName, PrintStream out) {
|
private void generateConstructor(String injectorClassName, Printer p) {
|
||||||
Printer p = new Printer(out);
|
|
||||||
p.pushIndent();
|
|
||||||
|
|
||||||
// Constructor parameters
|
// Constructor parameters
|
||||||
if (parameters.isEmpty()) {
|
if (parameters.isEmpty()) {
|
||||||
p.println("public ", injectorClassName, "() {");
|
p.println("public ", injectorClassName, "() {");
|
||||||
@@ -288,43 +275,47 @@ public class DependencyInjectorGenerator {
|
|||||||
p.println("}");
|
p.println("}");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generateDestroy(@NotNull String injectorClassName, @NotNull PrintStream out) {
|
private void generateDestroy(@NotNull String injectorClassName, @NotNull Printer out) {
|
||||||
out.println(" @PreDestroy");
|
out.println("@PreDestroy");
|
||||||
out.println(" public void destroy() {");
|
out.println("public void destroy() {");
|
||||||
|
out.pushIndent();
|
||||||
for (Field field : fields) {
|
for (Field field : fields) {
|
||||||
// TODO: type of field may be different from type of object
|
// TODO: type of field may be different from type of object
|
||||||
List<Method> preDestroyMethods = InjectorGeneratorUtil
|
List<Method> preDestroyMethods = InjectorGeneratorUtil
|
||||||
.getPreDestroyMethods(InjectorGeneratorUtil.getEffectiveFieldType(field).getClazz());
|
.getPreDestroyMethods(InjectorGeneratorUtil.getEffectiveFieldType(field).getClazz());
|
||||||
for (Method preDestroy : preDestroyMethods) {
|
for (Method preDestroy : preDestroyMethods) {
|
||||||
out.println(" " + field.getName() + "." + preDestroy.getName() + "();");
|
out.println(field.getName() + "." + preDestroy.getName() + "();");
|
||||||
}
|
}
|
||||||
if (preDestroyMethods.size() > 0) {
|
if (preDestroyMethods.size() > 0) {
|
||||||
out.println();
|
out.println();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
out.println(" }");
|
out.popIndent();
|
||||||
|
out.println("}");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generateGetters(PrintStream out) {
|
private void generateGetters(Printer out) {
|
||||||
String indent0 = " ";
|
|
||||||
String indent1 = indent0 + INDENT_STEP;
|
|
||||||
for (Field field : fields) {
|
for (Field field : fields) {
|
||||||
if (!field.isPublic()) continue;
|
if (!field.isPublic()) continue;
|
||||||
String visibility = field.isPublic() ? "public" : "private";
|
String visibility = field.isPublic() ? "public" : "private";
|
||||||
out.println(indent0 + visibility + " " + type(field.getType()) + " " + field.getGetterName() + "() {");
|
out.println(visibility + " " + type(field.getType()) + " " + field.getGetterName() + "() {");
|
||||||
|
out.pushIndent();
|
||||||
|
|
||||||
out.println(indent1 + "return this." + field.getName() + ";");
|
out.println("return this." + field.getName() + ";");
|
||||||
out.println(indent0 + "}");
|
|
||||||
|
out.popIndent();
|
||||||
|
out.println("}");
|
||||||
out.println();
|
out.println();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generateFactoryMethods(PrintStream out) {
|
private void generateFactoryMethods(Printer p) {
|
||||||
Printer p = new Printer(out);
|
|
||||||
p.pushIndent();
|
p.pushIndent();
|
||||||
for (FactoryMethod method : factoryMethods) {
|
for (FactoryMethod method : factoryMethods) {
|
||||||
generateFactoryMethod(p, method);
|
generateFactoryMethod(p, method);
|
||||||
}
|
}
|
||||||
|
p.popIndent();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generateFactoryMethod(Printer p, FactoryMethod method) {
|
private void generateFactoryMethod(Printer p, FactoryMethod method) {
|
||||||
|
|||||||
Reference in New Issue
Block a user