The rudimentary support for lazy injection removed
This commit is contained in:
@@ -61,7 +61,7 @@ public class GenerateInjectors {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void generateInjectorForLazyResolve() throws IOException {
|
private static void generateInjectorForLazyResolve() throws IOException {
|
||||||
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
|
DependencyInjectorGenerator generator = new DependencyInjectorGenerator();
|
||||||
generator.addParameter(Project.class);
|
generator.addParameter(Project.class);
|
||||||
generator.addParameter(ResolveSession.class);
|
generator.addParameter(ResolveSession.class);
|
||||||
generator.addParameter(BindingTrace.class);
|
generator.addParameter(BindingTrace.class);
|
||||||
@@ -77,7 +77,7 @@ public class GenerateInjectors {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void generateInjectorForTopDownAnalyzerBasic() throws IOException {
|
private static void generateInjectorForTopDownAnalyzerBasic() throws IOException {
|
||||||
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
|
DependencyInjectorGenerator generator = new DependencyInjectorGenerator();
|
||||||
generateInjectorForTopDownAnalyzerCommon(generator);
|
generateInjectorForTopDownAnalyzerCommon(generator);
|
||||||
generator.addParameter(ModuleConfiguration.class);
|
generator.addParameter(ModuleConfiguration.class);
|
||||||
generator.addField(DependencyClassByQualifiedNameResolverDummyImpl.class);
|
generator.addField(DependencyClassByQualifiedNameResolverDummyImpl.class);
|
||||||
@@ -86,7 +86,7 @@ public class GenerateInjectors {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void generateInjectorForTopDownAnalyzerForJs() throws IOException {
|
private static void generateInjectorForTopDownAnalyzerForJs() throws IOException {
|
||||||
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
|
DependencyInjectorGenerator generator = new DependencyInjectorGenerator();
|
||||||
generateInjectorForTopDownAnalyzerCommon(generator);
|
generateInjectorForTopDownAnalyzerCommon(generator);
|
||||||
generator.addPublicParameter(ModuleConfiguration.class);
|
generator.addPublicParameter(ModuleConfiguration.class);
|
||||||
generator.addField(DependencyClassByQualifiedNameResolverDummyImpl.class);
|
generator.addField(DependencyClassByQualifiedNameResolverDummyImpl.class);
|
||||||
@@ -95,7 +95,7 @@ public class GenerateInjectors {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void generateInjectorForTopDownAnalyzerForJvm() throws IOException {
|
private static void generateInjectorForTopDownAnalyzerForJvm() throws IOException {
|
||||||
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
|
DependencyInjectorGenerator generator = new DependencyInjectorGenerator();
|
||||||
generator.implementInterface(InjectorForTopDownAnalyzer.class);
|
generator.implementInterface(InjectorForTopDownAnalyzer.class);
|
||||||
generateInjectorForTopDownAnalyzerCommon(generator);
|
generateInjectorForTopDownAnalyzerCommon(generator);
|
||||||
generator.addField(true, ModuleConfiguration.class, null, new InstantiateType(JavaBridgeConfiguration.class));
|
generator.addField(true, ModuleConfiguration.class, null, new InstantiateType(JavaBridgeConfiguration.class));
|
||||||
@@ -107,7 +107,7 @@ public class GenerateInjectors {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void generateInjectorForJavaDescriptorResolver() throws IOException {
|
private static void generateInjectorForJavaDescriptorResolver() throws IOException {
|
||||||
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
|
DependencyInjectorGenerator generator = new DependencyInjectorGenerator();
|
||||||
|
|
||||||
// Parameters
|
// Parameters
|
||||||
generator.addPublicParameter(Project.class);
|
generator.addPublicParameter(Project.class);
|
||||||
@@ -141,7 +141,7 @@ public class GenerateInjectors {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void generateMacroInjector() throws IOException {
|
private static void generateMacroInjector() throws IOException {
|
||||||
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
|
DependencyInjectorGenerator generator = new DependencyInjectorGenerator();
|
||||||
|
|
||||||
// Fields
|
// Fields
|
||||||
generator.addPublicField(ExpressionTypingServices.class);
|
generator.addPublicField(ExpressionTypingServices.class);
|
||||||
@@ -154,7 +154,7 @@ public class GenerateInjectors {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void generateTestInjector() throws IOException {
|
private static void generateTestInjector() throws IOException {
|
||||||
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
|
DependencyInjectorGenerator generator = new DependencyInjectorGenerator();
|
||||||
|
|
||||||
// Fields
|
// Fields
|
||||||
generator.addPublicField(DescriptorResolver.class);
|
generator.addPublicField(DescriptorResolver.class);
|
||||||
@@ -171,7 +171,7 @@ public class GenerateInjectors {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void generateInjectorForJavaSemanticServices() throws IOException {
|
private static void generateInjectorForJavaSemanticServices() throws IOException {
|
||||||
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
|
DependencyInjectorGenerator generator = new DependencyInjectorGenerator();
|
||||||
|
|
||||||
// Fields
|
// Fields
|
||||||
generator.addPublicField(JavaSemanticServices.class);
|
generator.addPublicField(JavaSemanticServices.class);
|
||||||
@@ -192,7 +192,7 @@ public class GenerateInjectors {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void generateInjectorForJvmCodegen() throws IOException {
|
private static void generateInjectorForJvmCodegen() throws IOException {
|
||||||
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
|
DependencyInjectorGenerator generator = new DependencyInjectorGenerator();
|
||||||
|
|
||||||
// Parameters
|
// Parameters
|
||||||
generator.addPublicParameter(JetTypeMapper.class);
|
generator.addPublicParameter(JetTypeMapper.class);
|
||||||
@@ -217,7 +217,7 @@ public class GenerateInjectors {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void generateInjectorForBodyResolve() throws IOException {
|
private static void generateInjectorForBodyResolve() throws IOException {
|
||||||
DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false);
|
DependencyInjectorGenerator generator = new DependencyInjectorGenerator();
|
||||||
// Fields
|
// Fields
|
||||||
generator.addPublicField(BodyResolver.class);
|
generator.addPublicField(BodyResolver.class);
|
||||||
|
|
||||||
|
|||||||
@@ -36,9 +36,7 @@ import static org.jetbrains.jet.di.InjectorGeneratorUtil.var;
|
|||||||
public class DependencyInjectorGenerator {
|
public class DependencyInjectorGenerator {
|
||||||
|
|
||||||
public static final String INDENT_STEP = " ";
|
public static final String INDENT_STEP = " ";
|
||||||
private static final String LOCK_NAME = "__lock__";
|
|
||||||
|
|
||||||
private final boolean lazy;
|
|
||||||
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<FactoryMethod> factoryMethods = Sets.newLinkedHashSet();
|
private final Set<FactoryMethod> factoryMethods = Sets.newLinkedHashSet();
|
||||||
@@ -50,8 +48,7 @@ public class DependencyInjectorGenerator {
|
|||||||
private final List<Class<?>> implementsList = Lists.newArrayList();
|
private final List<Class<?>> implementsList = Lists.newArrayList();
|
||||||
private final Collection<Class<?>> imports = Sets.newHashSet();
|
private final Collection<Class<?>> imports = Sets.newHashSet();
|
||||||
|
|
||||||
public DependencyInjectorGenerator(boolean lazy) {
|
public DependencyInjectorGenerator() {
|
||||||
this.lazy = lazy;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generate(String targetSourceRoot, String injectorPackageName, String injectorClassName, Class<?> generatorClass)
|
public void generate(String targetSourceRoot, String injectorPackageName, String injectorClassName, Class<?> generatorClass)
|
||||||
@@ -95,9 +92,6 @@ public class DependencyInjectorGenerator {
|
|||||||
out.print("public class " + injectorClassName);
|
out.print("public class " + injectorClassName);
|
||||||
generateImplementsList(out);
|
generateImplementsList(out);
|
||||||
out.println(" {");
|
out.println(" {");
|
||||||
// Needed for double-checked locking
|
|
||||||
// out.println();
|
|
||||||
// out.println(" private static final Object " + LOCK_NAME + " = new Object();");
|
|
||||||
out.println();
|
out.println();
|
||||||
generateFields(out);
|
generateFields(out);
|
||||||
out.println();
|
out.println();
|
||||||
@@ -110,9 +104,6 @@ public class DependencyInjectorGenerator {
|
|||||||
out.println();
|
out.println();
|
||||||
generateFactoryMethods(out);
|
generateFactoryMethods(out);
|
||||||
}
|
}
|
||||||
// Needed to fix double-checked locking
|
|
||||||
// out.println();
|
|
||||||
// generateMakeFunction(out);
|
|
||||||
out.println("}"); // class
|
out.println("}"); // class
|
||||||
|
|
||||||
fileOutputStream.close();
|
fileOutputStream.close();
|
||||||
@@ -322,15 +313,8 @@ public class DependencyInjectorGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
p.pushIndent();
|
p.pushIndent();
|
||||||
if (lazy) {
|
|
||||||
// Remember parameters
|
InjectionLogicGenerator.FIELDS.generate(p, fields);
|
||||||
for (Parameter parameter : parameters) {
|
|
||||||
p.println("this.", parameter.getField().getName(), " = ", parameter.getName(), ";");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
InjectionLogicGenerator.FIELDS.generate(p, fields);
|
|
||||||
}
|
|
||||||
|
|
||||||
p.popIndent();
|
p.popIndent();
|
||||||
p.println("}");
|
p.println("}");
|
||||||
@@ -356,47 +340,11 @@ public class DependencyInjectorGenerator {
|
|||||||
private void generateGetters(PrintStream out) {
|
private void generateGetters(PrintStream out) {
|
||||||
String indent0 = " ";
|
String indent0 = " ";
|
||||||
String indent1 = indent0 + INDENT_STEP;
|
String indent1 = indent0 + INDENT_STEP;
|
||||||
String indent2 = indent1 + INDENT_STEP;
|
|
||||||
String indent3 = indent2 + INDENT_STEP;
|
|
||||||
String indent4 = indent3 + INDENT_STEP;
|
|
||||||
for (Field field : fields) {
|
for (Field field : fields) {
|
||||||
if (!lazy && !field.isPublic()) continue;
|
if (!field.isPublic()) continue;
|
||||||
String visibility = field.isPublic() ? "public" : "private";
|
String visibility = field.isPublic() ? "public" : "private";
|
||||||
out.println(indent0 + visibility + " " + field.getTypeName() + " " + field.getGetterName() + "() {");
|
out.println(indent0 + visibility + " " + field.getTypeName() + " " + field.getGetterName() + "() {");
|
||||||
|
|
||||||
if (lazy && !backsParameter.contains(field)) {
|
|
||||||
Expression initialization = field.getInitialization();
|
|
||||||
assert initialization instanceof InstantiateType : field;
|
|
||||||
|
|
||||||
// Double-checked locking
|
|
||||||
out.println(indent1 + "if (this." + field.getName() + " == null) {");
|
|
||||||
|
|
||||||
out.println(indent2 + "this." + field.getName() + " = " + initialization + ";");
|
|
||||||
// Invoke setters
|
|
||||||
for (SetterDependency dependency : field.getDependencies()) {
|
|
||||||
out.println(indent2 + "this." + field.getName() + "." + dependency.getSetterName() + "(" + dependency.getDependency().getGetterName() + "());");
|
|
||||||
}
|
|
||||||
|
|
||||||
out.println(indent1 + "}"); // Outer if
|
|
||||||
|
|
||||||
/*
|
|
||||||
// Double-checked locking
|
|
||||||
out.println(indent1 + "if (this." + field.getName() + " == null) {");
|
|
||||||
out.println(indent2 + "synchronized (" + LOCK_NAME + ") {");
|
|
||||||
out.println(indent3 + "if (this." + field.getName() + " == null) {");
|
|
||||||
|
|
||||||
out.println(indent4 + "this." + field.getName() + " = " + initialization + ";");
|
|
||||||
// Invoke setters
|
|
||||||
for (SetterDependency dependency : field.getDependencies()) {
|
|
||||||
out.println(indent4 + "this." + field.getName() + "." + dependency.getSetterName() + "(" + dependency.getDependency().getGetterName() + "());");
|
|
||||||
}
|
|
||||||
|
|
||||||
out.println(indent3 + "}"); // Inner if
|
|
||||||
out.println(indent2 + "}"); // synchronized
|
|
||||||
out.println(indent1 + "}"); // Outer if
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
out.println(indent1 + "return this." + field.getName() + ";");
|
out.println(indent1 + "return this." + field.getName() + ";");
|
||||||
out.println(indent0 + "}");
|
out.println(indent0 + "}");
|
||||||
out.println();
|
out.println();
|
||||||
@@ -456,18 +404,4 @@ public class DependencyInjectorGenerator {
|
|||||||
private String type(DiType type) {
|
private String type(DiType type) {
|
||||||
return type.getSimpleName();
|
return type.getSimpleName();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generateMakeFunction(PrintStream out) {
|
|
||||||
out.println(" private static <T> T make(Class<T> theClass) {");
|
|
||||||
out.println(" try { ");
|
|
||||||
out.println(" return theClass.newInstance(); ");
|
|
||||||
out.println(" } ");
|
|
||||||
out.println(" catch (InstantiationException e) { ");
|
|
||||||
out.println(" throw new IllegalStateException(e); ");
|
|
||||||
out.println(" } ");
|
|
||||||
out.println(" catch (IllegalAccessException e) { ");
|
|
||||||
out.println(" throw new IllegalStateException(e); ");
|
|
||||||
out.println(" } ");
|
|
||||||
out.println(" } ");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user