A common method extracted

This commit is contained in:
Andrey Breslav
2013-03-06 12:44:54 +04:00
parent 7107288f88
commit 7e5794cc7f
@@ -261,22 +261,8 @@ public class DependencyInjectorGenerator {
p.println("public ", injectorClassName, "() {");
}
else {
p.println("public ", injectorClassName, "(");
p.pushIndent();
for (Iterator<Parameter> iterator = parameters.iterator(); iterator.hasNext(); ) {
Parameter parameter = iterator.next();
p.print(); // indent
if (parameter.isRequired()) {
p.printWithNoIndent("@NotNull ");
}
p.printWithNoIndent(type(parameter.getType()), " ", parameter.getName());
if (iterator.hasNext()) {
p.printlnWithNoIndent(",");
}
}
p.printlnWithNoIndent();
p.popIndent();
p.println(") {");
p.print("public ", injectorClassName);
generateParameterList(p, parameters);
}
p.pushIndent();
@@ -287,6 +273,25 @@ public class DependencyInjectorGenerator {
p.println("}");
}
private void generateParameterList(Printer p, Collection<Parameter> parameters) {
p.printlnWithNoIndent("(");
p.pushIndent();
for (Iterator<Parameter> iterator = parameters.iterator(); iterator.hasNext(); ) {
Parameter parameter = iterator.next();
p.print(); // indent
if (parameter.isRequired()) {
p.printWithNoIndent("@NotNull ");
}
p.printWithNoIndent(type(parameter.getType()), " ", parameter.getName());
if (iterator.hasNext()) {
p.printlnWithNoIndent(",");
}
}
p.printlnWithNoIndent();
p.popIndent();
p.println(") {");
}
private void generateDestroy(@NotNull String injectorClassName, @NotNull Printer out) {
out.println("@PreDestroy");
out.println("public void destroy() {");
@@ -333,7 +338,7 @@ public class DependencyInjectorGenerator {
p.popIndent();
}
private void generateFactoryMethod(Printer p, FactoryMethod method) {
private Collection<Field> computeFieldsForFactoryMethod(FactoryMethod method, Field resultField) {
Dependencies localDependencies = new Dependencies();
Map<Parameter, Field> parameterToField = Maps.newHashMap();
@@ -347,24 +352,20 @@ public class DependencyInjectorGenerator {
localDependencies.addSatisfiedField(storedField);
}
Field resultField = new Field(true, method.getReturnType(), "_result");
localDependencies.addField(resultField);
Collection<Field> fields = Lists.newArrayList(localDependencies.satisfyDependencies());
fields.add(resultField);
return fields;
}
private void generateFactoryMethod(Printer p, FactoryMethod method) {
Field resultField = new Field(true, method.getReturnType(), "_result");
Collection<Field> fields = computeFieldsForFactoryMethod(method, resultField);
p.print("public ", type(method.getReturnType()), " ", method.getName());
generateParameterList(p, method.getParameters());
p.println("public ", type(method.getReturnType()), " ", method.getName(), "(");
p.pushIndent();
for (Iterator<Parameter> iterator = method.getParameters().iterator(); iterator.hasNext(); ) {
Parameter parameter = iterator.next();
p.print(type(parameter.getType()), " ", parameter.getName());
if (iterator.hasNext()) {
p.printlnWithNoIndent(", ");
}
}
p.println();
p.popIndent();
p.println(") {");
p.pushIndent();
InjectionLogicGenerator.generateForLocalVariables(importManager, p, fields);