From 994e6fe009d6f0df33a9c8a70f94305f81bd49d3 Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Fri, 20 Apr 2012 21:33:17 +0400 Subject: [PATCH] di: store everything in fields needed to implement @PreDestroy --- .../jet/di/InjectorForJetTypeMapper.java | 15 ++++- .../jet/di/InjectorForJvmCodegen.java | 15 ++++- .../di/InjectorForJavaSemanticServices.java | 17 ++++-- .../di/InjectorForTopDownAnalyzerForJvm.java | 60 +++++++++++++------ .../jetbrains/jet/di/InjectorForMacros.java | 18 ++++-- .../di/InjectorForTopDownAnalyzerBasic.java | 45 ++++++++++---- .../jetbrains/jet/di/InjectorForTests.java | 9 ++- .../jet/di/DependencyInjectorGenerator.java | 12 ++-- .../di/InjectorForTopDownAnalyzerForJs.java | 45 ++++++++++---- 9 files changed, 167 insertions(+), 69 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/jet/di/InjectorForJetTypeMapper.java b/compiler/backend/src/org/jetbrains/jet/di/InjectorForJetTypeMapper.java index 30a4db600be..91b6fb30cd6 100644 --- a/compiler/backend/src/org/jetbrains/jet/di/InjectorForJetTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/jet/di/InjectorForJetTypeMapper.java @@ -34,17 +34,26 @@ import org.jetbrains.annotations.NotNull; /* This file is generated by org.jetbrains.jet.di.AllInjectorsGenerator. DO NOT EDIT! */ public class InjectorForJetTypeMapper { + private final JetStandardLibrary jetStandardLibrary; + private final BindingContext bindingContext; + private final List listOfJetFile; private JetTypeMapper jetTypeMapper; + private CompilerSpecialMode compilerSpecialMode; + private ClassBuilderMode classBuilderMode; + private ClosureAnnotator closureAnnotator; public InjectorForJetTypeMapper( @NotNull JetStandardLibrary jetStandardLibrary, @NotNull BindingContext bindingContext, @NotNull List listOfJetFile ) { + this.jetStandardLibrary = jetStandardLibrary; + this.bindingContext = bindingContext; + this.listOfJetFile = listOfJetFile; this.jetTypeMapper = new JetTypeMapper(); - CompilerSpecialMode compilerSpecialMode = CompilerSpecialMode.REGULAR; - ClassBuilderMode classBuilderMode = ClassBuilderMode.FULL; - ClosureAnnotator closureAnnotator = new ClosureAnnotator(); + this.compilerSpecialMode = CompilerSpecialMode.REGULAR; + this.classBuilderMode = ClassBuilderMode.FULL; + this.closureAnnotator = new ClosureAnnotator(); this.jetTypeMapper.setBindingContext(bindingContext); this.jetTypeMapper.setClassBuilderMode(classBuilderMode); diff --git a/compiler/backend/src/org/jetbrains/jet/di/InjectorForJvmCodegen.java b/compiler/backend/src/org/jetbrains/jet/di/InjectorForJvmCodegen.java index e54bef57e52..66f37743666 100644 --- a/compiler/backend/src/org/jetbrains/jet/di/InjectorForJvmCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/di/InjectorForJvmCodegen.java @@ -45,10 +45,17 @@ import org.jetbrains.annotations.NotNull; public class InjectorForJvmCodegen { private final JetStandardLibrary jetStandardLibrary; + private final BindingContext bindingContext; + private final List listOfJetFile; + private final Project project; + private final CompilerSpecialMode compilerSpecialMode; + private final ClassBuilderMode classBuilderMode; private final GenerationState generationState; + private final ClassBuilderFactory classBuilderFactory; private JetTypeMapper jetTypeMapper; private IntrinsicMethods intrinsics; private ClassFileFactory classFileFactory; + private ClosureAnnotator closureAnnotator; public InjectorForJvmCodegen( @NotNull JetStandardLibrary jetStandardLibrary, @@ -61,11 +68,17 @@ public class InjectorForJvmCodegen { @NotNull ClassBuilderFactory classBuilderFactory ) { this.jetStandardLibrary = jetStandardLibrary; + this.bindingContext = bindingContext; + this.listOfJetFile = listOfJetFile; + this.project = project; + this.compilerSpecialMode = compilerSpecialMode; + this.classBuilderMode = classBuilderMode; this.generationState = generationState; + this.classBuilderFactory = classBuilderFactory; this.jetTypeMapper = new JetTypeMapper(); this.intrinsics = new IntrinsicMethods(); this.classFileFactory = new ClassFileFactory(); - ClosureAnnotator closureAnnotator = new ClosureAnnotator(); + this.closureAnnotator = new ClosureAnnotator(); this.jetTypeMapper.setBindingContext(bindingContext); this.jetTypeMapper.setClassBuilderMode(classBuilderMode); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaSemanticServices.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaSemanticServices.java index 7ff65b75d00..75416a327df 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaSemanticServices.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForJavaSemanticServices.java @@ -38,8 +38,14 @@ public class InjectorForJavaSemanticServices { private JavaSemanticServices javaSemanticServices; private JavaDescriptorResolver javaDescriptorResolver; private BindingTrace bindingTrace; + private JavaBridgeConfiguration javaBridgeConfiguration; private PsiClassFinderForJvm psiClassFinderForJvm; + private ModuleDescriptor moduleDescriptor; + private final CompilerDependencies compilerDependencies; + private CompilerSpecialMode compilerSpecialMode; private final Project project; + private JavaTypeTransformer javaTypeTransformer; + private NamespaceFactoryImpl namespaceFactoryImpl; public InjectorForJavaSemanticServices( @NotNull CompilerDependencies compilerDependencies, @@ -48,13 +54,14 @@ public class InjectorForJavaSemanticServices { this.javaSemanticServices = new JavaSemanticServices(); this.javaDescriptorResolver = new JavaDescriptorResolver(); this.bindingTrace = new org.jetbrains.jet.lang.resolve.BindingTraceContext(); - JavaBridgeConfiguration javaBridgeConfiguration = new JavaBridgeConfiguration(); + this.javaBridgeConfiguration = new JavaBridgeConfiguration(); this.psiClassFinderForJvm = new PsiClassFinderForJvm(); - ModuleDescriptor moduleDescriptor = new org.jetbrains.jet.lang.descriptors.ModuleDescriptor(""); - CompilerSpecialMode compilerSpecialMode = compilerDependencies.getCompilerSpecialMode(); + this.moduleDescriptor = new org.jetbrains.jet.lang.descriptors.ModuleDescriptor(""); + this.compilerDependencies = compilerDependencies; + this.compilerSpecialMode = compilerDependencies.getCompilerSpecialMode(); this.project = project; - JavaTypeTransformer javaTypeTransformer = new JavaTypeTransformer(); - NamespaceFactoryImpl namespaceFactoryImpl = new NamespaceFactoryImpl(); + this.javaTypeTransformer = new JavaTypeTransformer(); + this.namespaceFactoryImpl = new NamespaceFactoryImpl(); this.javaSemanticServices.setDescriptorResolver(javaDescriptorResolver); this.javaSemanticServices.setPsiClassFinder(psiClassFinderForJvm); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java index f90be7eefc1..905f3536f98 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJvm.java @@ -68,7 +68,28 @@ public class InjectorForTopDownAnalyzerForJvm { private final Project project; private final TopDownAnalysisParameters topDownAnalysisParameters; private final ObservableBindingTrace observableBindingTrace; + private final ModuleDescriptor moduleDescriptor; + private final JetControlFlowDataTraceFactory jetControlFlowDataTraceFactory; + private final CompilerDependencies compilerDependencies; + private CompilerSpecialMode compilerSpecialMode; private JavaBridgeConfiguration javaBridgeConfiguration; + private PsiClassFinderForJvm psiClassFinderForJvm; + private DeclarationResolver declarationResolver; + private AnnotationResolver annotationResolver; + private CallResolver callResolver; + private ExpressionTypingServices expressionTypingServices; + private TypeResolver typeResolver; + private QualifiedExpressionResolver qualifiedExpressionResolver; + private OverloadingConflictResolver overloadingConflictResolver; + private ImportsResolver importsResolver; + private DelegationResolver delegationResolver; + private NamespaceFactoryImpl namespaceFactoryImpl; + private OverloadResolver overloadResolver; + private OverrideResolver overrideResolver; + private TypeHierarchyResolver typeHierarchyResolver; + private JavaSemanticServices javaSemanticServices; + private JavaDescriptorResolver javaDescriptorResolver; + private JavaTypeTransformer javaTypeTransformer; public InjectorForTopDownAnalyzerForJvm( @NotNull Project project, @@ -87,25 +108,28 @@ public class InjectorForTopDownAnalyzerForJvm { this.project = project; this.topDownAnalysisParameters = topDownAnalysisParameters; this.observableBindingTrace = observableBindingTrace; - CompilerSpecialMode compilerSpecialMode = compilerDependencies.getCompilerSpecialMode(); + this.moduleDescriptor = moduleDescriptor; + this.jetControlFlowDataTraceFactory = jetControlFlowDataTraceFactory; + this.compilerDependencies = compilerDependencies; + this.compilerSpecialMode = compilerDependencies.getCompilerSpecialMode(); this.javaBridgeConfiguration = new JavaBridgeConfiguration(); - PsiClassFinderForJvm psiClassFinderForJvm = new PsiClassFinderForJvm(); - DeclarationResolver declarationResolver = new DeclarationResolver(); - AnnotationResolver annotationResolver = new AnnotationResolver(); - CallResolver callResolver = new CallResolver(); - ExpressionTypingServices expressionTypingServices = new ExpressionTypingServices(); - TypeResolver typeResolver = new TypeResolver(); - QualifiedExpressionResolver qualifiedExpressionResolver = new QualifiedExpressionResolver(); - OverloadingConflictResolver overloadingConflictResolver = new OverloadingConflictResolver(); - ImportsResolver importsResolver = new ImportsResolver(); - DelegationResolver delegationResolver = new DelegationResolver(); - NamespaceFactoryImpl namespaceFactoryImpl = new NamespaceFactoryImpl(); - OverloadResolver overloadResolver = new OverloadResolver(); - OverrideResolver overrideResolver = new OverrideResolver(); - TypeHierarchyResolver typeHierarchyResolver = new TypeHierarchyResolver(); - JavaSemanticServices javaSemanticServices = new JavaSemanticServices(); - JavaDescriptorResolver javaDescriptorResolver = new JavaDescriptorResolver(); - JavaTypeTransformer javaTypeTransformer = new JavaTypeTransformer(); + this.psiClassFinderForJvm = new PsiClassFinderForJvm(); + this.declarationResolver = new DeclarationResolver(); + this.annotationResolver = new AnnotationResolver(); + this.callResolver = new CallResolver(); + this.expressionTypingServices = new ExpressionTypingServices(); + this.typeResolver = new TypeResolver(); + this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); + this.overloadingConflictResolver = new OverloadingConflictResolver(); + this.importsResolver = new ImportsResolver(); + this.delegationResolver = new DelegationResolver(); + this.namespaceFactoryImpl = new NamespaceFactoryImpl(); + this.overloadResolver = new OverloadResolver(); + this.overrideResolver = new OverrideResolver(); + this.typeHierarchyResolver = new TypeHierarchyResolver(); + this.javaSemanticServices = new JavaSemanticServices(); + this.javaDescriptorResolver = new JavaDescriptorResolver(); + this.javaTypeTransformer = new JavaTypeTransformer(); this.topDownAnalyzer.setBodyResolver(bodyResolver); this.topDownAnalyzer.setContext(topDownAnalysisContext); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java index ca570d75b93..2b9af7f3106 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForMacros.java @@ -33,18 +33,24 @@ public class InjectorForMacros { private ExpressionTypingServices expressionTypingServices; private final Project project; + private CallResolver callResolver; + private DescriptorResolver descriptorResolver; + private AnnotationResolver annotationResolver; + private TypeResolver typeResolver; + private QualifiedExpressionResolver qualifiedExpressionResolver; + private OverloadingConflictResolver overloadingConflictResolver; public InjectorForMacros( @NotNull Project project ) { this.expressionTypingServices = new ExpressionTypingServices(); this.project = project; - CallResolver callResolver = new CallResolver(); - DescriptorResolver descriptorResolver = new DescriptorResolver(); - AnnotationResolver annotationResolver = new AnnotationResolver(); - TypeResolver typeResolver = new TypeResolver(); - QualifiedExpressionResolver qualifiedExpressionResolver = new QualifiedExpressionResolver(); - OverloadingConflictResolver overloadingConflictResolver = new OverloadingConflictResolver(); + this.callResolver = new CallResolver(); + this.descriptorResolver = new DescriptorResolver(); + this.annotationResolver = new AnnotationResolver(); + this.typeResolver = new TypeResolver(); + this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); + this.overloadingConflictResolver = new OverloadingConflictResolver(); this.expressionTypingServices.setCallResolver(callResolver); this.expressionTypingServices.setDescriptorResolver(descriptorResolver); diff --git a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java index 7c8405cfa5a..68ebbd9692b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java +++ b/compiler/frontend/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerBasic.java @@ -62,6 +62,22 @@ public class InjectorForTopDownAnalyzerBasic { private final Project project; private final TopDownAnalysisParameters topDownAnalysisParameters; private final ObservableBindingTrace observableBindingTrace; + private final ModuleDescriptor moduleDescriptor; + private final JetControlFlowDataTraceFactory jetControlFlowDataTraceFactory; + private final ModuleConfiguration moduleConfiguration; + private DeclarationResolver declarationResolver; + private AnnotationResolver annotationResolver; + private CallResolver callResolver; + private ExpressionTypingServices expressionTypingServices; + private TypeResolver typeResolver; + private QualifiedExpressionResolver qualifiedExpressionResolver; + private OverloadingConflictResolver overloadingConflictResolver; + private ImportsResolver importsResolver; + private DelegationResolver delegationResolver; + private NamespaceFactoryImpl namespaceFactoryImpl; + private OverloadResolver overloadResolver; + private OverrideResolver overrideResolver; + private TypeHierarchyResolver typeHierarchyResolver; public InjectorForTopDownAnalyzerBasic( @NotNull Project project, @@ -80,19 +96,22 @@ public class InjectorForTopDownAnalyzerBasic { this.project = project; this.topDownAnalysisParameters = topDownAnalysisParameters; this.observableBindingTrace = observableBindingTrace; - DeclarationResolver declarationResolver = new DeclarationResolver(); - AnnotationResolver annotationResolver = new AnnotationResolver(); - CallResolver callResolver = new CallResolver(); - ExpressionTypingServices expressionTypingServices = new ExpressionTypingServices(); - TypeResolver typeResolver = new TypeResolver(); - QualifiedExpressionResolver qualifiedExpressionResolver = new QualifiedExpressionResolver(); - OverloadingConflictResolver overloadingConflictResolver = new OverloadingConflictResolver(); - ImportsResolver importsResolver = new ImportsResolver(); - DelegationResolver delegationResolver = new DelegationResolver(); - NamespaceFactoryImpl namespaceFactoryImpl = new NamespaceFactoryImpl(); - OverloadResolver overloadResolver = new OverloadResolver(); - OverrideResolver overrideResolver = new OverrideResolver(); - TypeHierarchyResolver typeHierarchyResolver = new TypeHierarchyResolver(); + this.moduleDescriptor = moduleDescriptor; + this.jetControlFlowDataTraceFactory = jetControlFlowDataTraceFactory; + this.moduleConfiguration = moduleConfiguration; + this.declarationResolver = new DeclarationResolver(); + this.annotationResolver = new AnnotationResolver(); + this.callResolver = new CallResolver(); + this.expressionTypingServices = new ExpressionTypingServices(); + this.typeResolver = new TypeResolver(); + this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); + this.overloadingConflictResolver = new OverloadingConflictResolver(); + this.importsResolver = new ImportsResolver(); + this.delegationResolver = new DelegationResolver(); + this.namespaceFactoryImpl = new NamespaceFactoryImpl(); + this.overloadResolver = new OverloadResolver(); + this.overrideResolver = new OverrideResolver(); + this.typeHierarchyResolver = new TypeHierarchyResolver(); this.topDownAnalyzer.setBodyResolver(bodyResolver); this.topDownAnalyzer.setContext(topDownAnalysisContext); diff --git a/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java b/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java index 82aa49eedde..a8286a6658f 100644 --- a/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java +++ b/compiler/tests/org/jetbrains/jet/di/InjectorForTests.java @@ -38,6 +38,9 @@ public class InjectorForTests { private CallResolver callResolver; private JetStandardLibrary jetStandardLibrary; private final Project project; + private AnnotationResolver annotationResolver; + private QualifiedExpressionResolver qualifiedExpressionResolver; + private OverloadingConflictResolver overloadingConflictResolver; public InjectorForTests( @NotNull Project project @@ -48,9 +51,9 @@ public class InjectorForTests { this.callResolver = new CallResolver(); this.jetStandardLibrary = JetStandardLibrary.getInstance(); this.project = project; - AnnotationResolver annotationResolver = new AnnotationResolver(); - QualifiedExpressionResolver qualifiedExpressionResolver = new QualifiedExpressionResolver(); - OverloadingConflictResolver overloadingConflictResolver = new OverloadingConflictResolver(); + this.annotationResolver = new AnnotationResolver(); + this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); + this.overloadingConflictResolver = new OverloadingConflictResolver(); this.descriptorResolver.setAnnotationResolver(annotationResolver); this.descriptorResolver.setExpressionTypingServices(expressionTypingServices); diff --git a/injector-generator/src/org/jetbrains/jet/di/DependencyInjectorGenerator.java b/injector-generator/src/org/jetbrains/jet/di/DependencyInjectorGenerator.java index ddf120ff89c..f5c8412a1fa 100644 --- a/injector-generator/src/org/jetbrains/jet/di/DependencyInjectorGenerator.java +++ b/injector-generator/src/org/jetbrains/jet/di/DependencyInjectorGenerator.java @@ -233,10 +233,8 @@ public class DependencyInjectorGenerator { private void generateFields(PrintStream out) { for (Field field : fields) { - if (lazy || field.isPublic()) { - String _final = backsParameter.contains(field) ? "final " : ""; - out.println(" private " + _final + field.getType().getSimpleName() + " " + field.getName() + ";"); - } + String _final = backsParameter.contains(field) ? "final " : ""; + out.println(" private " + _final + field.getType().getSimpleName() + " " + field.getName() + ";"); } } @@ -272,10 +270,10 @@ public class DependencyInjectorGenerator { else { // Initialize fields for (Field field : fields) { - if (!backsParameter.contains(field) || field.isPublic()) { - String prefix = field.isPublic() ? "this." : field.getTypeName() + " "; + //if (!backsParameter.contains(field) || field.isPublic()) { + String prefix = "this."; out.println(indent + prefix + field.getName() + " = " + field.getInitialization() + ";"); - } + //} } out.println(); diff --git a/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java b/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java index 329d2c0b624..6fc0c64c61c 100644 --- a/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java +++ b/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java @@ -62,6 +62,22 @@ public class InjectorForTopDownAnalyzerForJs { private final Project project; private final TopDownAnalysisParameters topDownAnalysisParameters; private final ObservableBindingTrace observableBindingTrace; + private final ModuleDescriptor moduleDescriptor; + private final JetControlFlowDataTraceFactory jetControlFlowDataTraceFactory; + private final ModuleConfiguration moduleConfiguration; + private DeclarationResolver declarationResolver; + private AnnotationResolver annotationResolver; + private CallResolver callResolver; + private ExpressionTypingServices expressionTypingServices; + private TypeResolver typeResolver; + private QualifiedExpressionResolver qualifiedExpressionResolver; + private OverloadingConflictResolver overloadingConflictResolver; + private ImportsResolver importsResolver; + private DelegationResolver delegationResolver; + private NamespaceFactoryImpl namespaceFactoryImpl; + private OverloadResolver overloadResolver; + private OverrideResolver overrideResolver; + private TypeHierarchyResolver typeHierarchyResolver; public InjectorForTopDownAnalyzerForJs( @NotNull Project project, @@ -80,19 +96,22 @@ public class InjectorForTopDownAnalyzerForJs { this.project = project; this.topDownAnalysisParameters = topDownAnalysisParameters; this.observableBindingTrace = observableBindingTrace; - DeclarationResolver declarationResolver = new DeclarationResolver(); - AnnotationResolver annotationResolver = new AnnotationResolver(); - CallResolver callResolver = new CallResolver(); - ExpressionTypingServices expressionTypingServices = new ExpressionTypingServices(); - TypeResolver typeResolver = new TypeResolver(); - QualifiedExpressionResolver qualifiedExpressionResolver = new QualifiedExpressionResolver(); - OverloadingConflictResolver overloadingConflictResolver = new OverloadingConflictResolver(); - ImportsResolver importsResolver = new ImportsResolver(); - DelegationResolver delegationResolver = new DelegationResolver(); - NamespaceFactoryImpl namespaceFactoryImpl = new NamespaceFactoryImpl(); - OverloadResolver overloadResolver = new OverloadResolver(); - OverrideResolver overrideResolver = new OverrideResolver(); - TypeHierarchyResolver typeHierarchyResolver = new TypeHierarchyResolver(); + this.moduleDescriptor = moduleDescriptor; + this.jetControlFlowDataTraceFactory = jetControlFlowDataTraceFactory; + this.moduleConfiguration = moduleConfiguration; + this.declarationResolver = new DeclarationResolver(); + this.annotationResolver = new AnnotationResolver(); + this.callResolver = new CallResolver(); + this.expressionTypingServices = new ExpressionTypingServices(); + this.typeResolver = new TypeResolver(); + this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); + this.overloadingConflictResolver = new OverloadingConflictResolver(); + this.importsResolver = new ImportsResolver(); + this.delegationResolver = new DelegationResolver(); + this.namespaceFactoryImpl = new NamespaceFactoryImpl(); + this.overloadResolver = new OverloadResolver(); + this.overrideResolver = new OverrideResolver(); + this.typeHierarchyResolver = new TypeHierarchyResolver(); this.topDownAnalyzer.setBodyResolver(bodyResolver); this.topDownAnalyzer.setContext(topDownAnalysisContext);