Generate Injectors: add ability to specify that a field is a context

Context field's properties can injected into other components
Use it in GenerateInjectors.kt
This commit is contained in:
Pavel V. Talanov
2014-02-14 14:57:59 +04:00
parent 6c77ea91c5
commit f8a8bbe9b0
12 changed files with 135 additions and 92 deletions
@@ -19,6 +19,7 @@ package org.jetbrains.jet.di;
import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.context.GlobalContextImpl;
import org.jetbrains.jet.storage.LockBasedStorageManager;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.java.JavaClassFinderImpl;
@@ -27,7 +28,6 @@ import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedJavaResolverCache;
import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedErrorReporter;
import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedMethodSignatureChecker;
import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedExternalAnnotationResolver;
import org.jetbrains.jet.storage.StorageManager;
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder;
import org.jetbrains.jet.lang.resolve.java.lazy.LazyJavaPackageFragmentProvider;
import org.jetbrains.jet.lang.resolve.java.lazy.GlobalJavaResolverContext;
@@ -43,6 +43,7 @@ public class InjectorForJavaDescriptorResolver {
private final Project project;
private final BindingTrace bindingTrace;
private final GlobalContextImpl globalContext;
private final LockBasedStorageManager lockBasedStorageManager;
private final ModuleDescriptorImpl module;
private final JavaDescriptorResolver javaDescriptorResolver;
private final JavaClassFinderImpl javaClassFinder;
@@ -51,7 +52,6 @@ public class InjectorForJavaDescriptorResolver {
private final TraceBasedErrorReporter traceBasedErrorReporter;
private final PsiBasedMethodSignatureChecker psiBasedMethodSignatureChecker;
private final PsiBasedExternalAnnotationResolver psiBasedExternalAnnotationResolver;
private final StorageManager storageManager;
private final VirtualFileFinder virtualFileFinder;
private final LazyJavaPackageFragmentProvider lazyJavaPackageFragmentProvider;
private final GlobalJavaResolverContext globalJavaResolverContext;
@@ -65,8 +65,8 @@ public class InjectorForJavaDescriptorResolver {
this.project = project;
this.bindingTrace = bindingTrace;
this.globalContext = org.jetbrains.jet.context.ContextPackage.GlobalContext();
this.lockBasedStorageManager = globalContext.getStorageManager();
this.module = org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM.createJavaModule("<fake-jdr-module>");
this.storageManager = globalContext.getStorageManager();
this.javaClassFinder = new JavaClassFinderImpl();
this.virtualFileFinder = org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder.SERVICE.getInstance(project);
this.deserializedDescriptorResolver = new DeserializedDescriptorResolver();
@@ -75,10 +75,10 @@ public class InjectorForJavaDescriptorResolver {
this.traceBasedErrorReporter = new TraceBasedErrorReporter();
this.psiBasedMethodSignatureChecker = new PsiBasedMethodSignatureChecker();
this.traceBasedJavaResolverCache = new TraceBasedJavaResolverCache();
this.globalJavaResolverContext = new GlobalJavaResolverContext(storageManager, getJavaClassFinder(), virtualFileFinder, deserializedDescriptorResolver, psiBasedExternalAnnotationResolver, traceBasedExternalSignatureResolver, traceBasedErrorReporter, psiBasedMethodSignatureChecker, traceBasedJavaResolverCache);
this.globalJavaResolverContext = new GlobalJavaResolverContext(lockBasedStorageManager, getJavaClassFinder(), virtualFileFinder, deserializedDescriptorResolver, psiBasedExternalAnnotationResolver, traceBasedExternalSignatureResolver, traceBasedErrorReporter, psiBasedMethodSignatureChecker, traceBasedJavaResolverCache);
this.lazyJavaPackageFragmentProvider = new LazyJavaPackageFragmentProvider(globalJavaResolverContext, getModule());
this.javaDescriptorResolver = new JavaDescriptorResolver(lazyJavaPackageFragmentProvider, getModule());
this.annotationDescriptorDeserializer = new AnnotationDescriptorDeserializer(storageManager);
this.annotationDescriptorDeserializer = new AnnotationDescriptorDeserializer(lockBasedStorageManager);
this.javaClassFinder.setProject(project);
@@ -96,7 +96,7 @@ public class InjectorForJavaDescriptorResolver {
deserializedDescriptorResolver.setErrorReporter(traceBasedErrorReporter);
deserializedDescriptorResolver.setJavaDescriptorResolver(javaDescriptorResolver);
deserializedDescriptorResolver.setJavaPackageFragmentProvider(lazyJavaPackageFragmentProvider);
deserializedDescriptorResolver.setStorageManager(storageManager);
deserializedDescriptorResolver.setStorageManager(lockBasedStorageManager);
annotationDescriptorDeserializer.setErrorReporter(traceBasedErrorReporter);
annotationDescriptorDeserializer.setJavaDescriptorResolver(javaDescriptorResolver);
@@ -18,11 +18,11 @@ package org.jetbrains.jet.di;
import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
import org.jetbrains.jet.storage.StorageManager;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.resolve.TopDownAnalyzer;
import org.jetbrains.jet.lang.resolve.TopDownAnalysisContext;
import org.jetbrains.jet.storage.StorageManager;
import org.jetbrains.jet.lang.resolve.MutablePackageFragmentProvider;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
import org.jetbrains.jet.lang.resolve.java.mapping.JavaToKotlinClassMap;
@@ -69,11 +69,11 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
private final Project project;
private final TopDownAnalysisParameters topDownAnalysisParameters;
private final StorageManager storageManager;
private final BindingTrace bindingTrace;
private final ModuleDescriptorImpl moduleDescriptor;
private final TopDownAnalyzer topDownAnalyzer;
private final TopDownAnalysisContext topDownAnalysisContext;
private final StorageManager storageManager;
private final MutablePackageFragmentProvider mutablePackageFragmentProvider;
private final JavaDescriptorResolver javaDescriptorResolver;
private final JavaToKotlinClassMap javaToKotlinClassMap;
@@ -120,11 +120,11 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
) {
this.project = project;
this.topDownAnalysisParameters = topDownAnalysisParameters;
this.storageManager = topDownAnalysisParameters.getStorageManager();
this.bindingTrace = bindingTrace;
this.moduleDescriptor = moduleDescriptor;
this.topDownAnalyzer = new TopDownAnalyzer();
this.topDownAnalysisContext = new TopDownAnalysisContext();
this.storageManager = topDownAnalysisParameters.getStorageManager();
this.mutablePackageFragmentProvider = new MutablePackageFragmentProvider(getModuleDescriptor());
this.javaClassFinder = new JavaClassFinderImpl();
this.virtualFileFinder = org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder.SERVICE.getInstance(project);
@@ -18,12 +18,12 @@ package org.jetbrains.jet.di;
import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
import org.jetbrains.jet.storage.StorageManager;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.BodiesResolveContext;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.resolve.BodyResolver;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.storage.StorageManager;
import org.jetbrains.jet.lang.resolve.BodyResolver;
import org.jetbrains.jet.lang.resolve.AnnotationResolver;
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
import org.jetbrains.jet.lang.resolve.calls.ArgumentTypeResolver;
@@ -49,12 +49,12 @@ public class InjectorForBodyResolve {
private final Project project;
private final TopDownAnalysisParameters topDownAnalysisParameters;
private final StorageManager storageManager;
private final BindingTrace bindingTrace;
private final BodiesResolveContext bodiesResolveContext;
private final ModuleDescriptor moduleDescriptor;
private final BodyResolver bodyResolver;
private final PlatformToKotlinClassMap platformToKotlinClassMap;
private final StorageManager storageManager;
private final BodyResolver bodyResolver;
private final AnnotationResolver annotationResolver;
private final CallResolver callResolver;
private final ArgumentTypeResolver argumentTypeResolver;
@@ -81,12 +81,12 @@ public class InjectorForBodyResolve {
) {
this.project = project;
this.topDownAnalysisParameters = topDownAnalysisParameters;
this.storageManager = topDownAnalysisParameters.getStorageManager();
this.bindingTrace = bindingTrace;
this.bodiesResolveContext = bodiesResolveContext;
this.moduleDescriptor = moduleDescriptor;
this.bodyResolver = new BodyResolver();
this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap();
this.storageManager = topDownAnalysisParameters.getStorageManager();
this.bodyResolver = new BodyResolver();
this.annotationResolver = new AnnotationResolver();
this.callResolver = new CallResolver();
this.argumentTypeResolver = new ArgumentTypeResolver();
@@ -18,12 +18,12 @@ package org.jetbrains.jet.di;
import com.intellij.openapi.project.Project;
import org.jetbrains.jet.context.GlobalContextImpl;
import org.jetbrains.jet.storage.LockBasedStorageManager;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.lang.resolve.lazy.declarations.DeclarationProviderFactory;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.storage.StorageManager;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.lang.resolve.AnnotationResolver;
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
import org.jetbrains.jet.lang.resolve.calls.ArgumentTypeResolver;
@@ -46,12 +46,12 @@ public class InjectorForLazyResolve {
private final Project project;
private final GlobalContextImpl globalContext;
private final LockBasedStorageManager lockBasedStorageManager;
private final ModuleDescriptorImpl moduleDescriptor;
private final PlatformToKotlinClassMap platformToKotlinClassMap;
private final DeclarationProviderFactory declarationProviderFactory;
private final BindingTrace bindingTrace;
private final ResolveSession resolveSession;
private final StorageManager storageManager;
private final PlatformToKotlinClassMap platformToKotlinClassMap;
private final AnnotationResolver annotationResolver;
private final CallResolver callResolver;
private final ArgumentTypeResolver argumentTypeResolver;
@@ -75,12 +75,12 @@ public class InjectorForLazyResolve {
) {
this.project = project;
this.globalContext = globalContext;
this.lockBasedStorageManager = globalContext.getStorageManager();
this.moduleDescriptor = moduleDescriptor;
this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap();
this.declarationProviderFactory = declarationProviderFactory;
this.bindingTrace = bindingTrace;
this.resolveSession = new ResolveSession(project, globalContext, moduleDescriptor, declarationProviderFactory, bindingTrace);
this.storageManager = resolveSession.getStorageManager();
this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap();
this.annotationResolver = new AnnotationResolver();
this.callResolver = new CallResolver();
this.argumentTypeResolver = new ArgumentTypeResolver();
@@ -126,7 +126,7 @@ public class InjectorForLazyResolve {
descriptorResolver.setAnnotationResolver(annotationResolver);
descriptorResolver.setDelegatedPropertyResolver(delegatedPropertyResolver);
descriptorResolver.setExpressionTypingServices(expressionTypingServices);
descriptorResolver.setStorageManager(storageManager);
descriptorResolver.setStorageManager(lockBasedStorageManager);
descriptorResolver.setTypeResolver(typeResolver);
delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices);
@@ -18,8 +18,8 @@ package org.jetbrains.jet.di;
import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
import org.jetbrains.jet.context.GlobalContext;
import org.jetbrains.jet.storage.StorageManager;
import org.jetbrains.jet.lang.resolve.AnnotationResolver;
@@ -41,8 +41,8 @@ public class InjectorForMacros {
private final Project project;
private final ModuleDescriptor moduleDescriptor;
private final ExpressionTypingServices expressionTypingServices;
private final PlatformToKotlinClassMap platformToKotlinClassMap;
private final ExpressionTypingServices expressionTypingServices;
private final GlobalContext globalContext;
private final StorageManager storageManager;
private final AnnotationResolver annotationResolver;
@@ -62,8 +62,8 @@ public class InjectorForMacros {
) {
this.project = project;
this.moduleDescriptor = moduleDescriptor;
this.globalContext = org.jetbrains.jet.context.ContextPackage.GlobalContext();
this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap();
this.globalContext = org.jetbrains.jet.context.ContextPackage.GlobalContext();
this.expressionTypingServices = new ExpressionTypingServices(globalContext, platformToKotlinClassMap);
this.storageManager = globalContext.getStorageManager();
this.annotationResolver = new AnnotationResolver();
@@ -18,11 +18,11 @@ package org.jetbrains.jet.di;
import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
import org.jetbrains.jet.storage.StorageManager;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.resolve.TopDownAnalyzer;
import org.jetbrains.jet.lang.resolve.TopDownAnalysisContext;
import org.jetbrains.jet.storage.StorageManager;
import org.jetbrains.jet.lang.resolve.MutablePackageFragmentProvider;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolverDummyImpl;
@@ -58,11 +58,11 @@ public class InjectorForTopDownAnalyzerBasic {
private final Project project;
private final TopDownAnalysisParameters topDownAnalysisParameters;
private final StorageManager storageManager;
private final BindingTrace bindingTrace;
private final ModuleDescriptorImpl moduleDescriptor;
private final TopDownAnalyzer topDownAnalyzer;
private final TopDownAnalysisContext topDownAnalysisContext;
private final StorageManager storageManager;
private final MutablePackageFragmentProvider mutablePackageFragmentProvider;
private final PlatformToKotlinClassMap platformToKotlinClassMap;
private final DependencyClassByQualifiedNameResolverDummyImpl dependencyClassByQualifiedNameResolverDummy;
@@ -99,11 +99,11 @@ public class InjectorForTopDownAnalyzerBasic {
) {
this.project = project;
this.topDownAnalysisParameters = topDownAnalysisParameters;
this.storageManager = topDownAnalysisParameters.getStorageManager();
this.bindingTrace = bindingTrace;
this.moduleDescriptor = moduleDescriptor;
this.topDownAnalyzer = new TopDownAnalyzer();
this.topDownAnalysisContext = new TopDownAnalysisContext();
this.storageManager = topDownAnalysisParameters.getStorageManager();
this.mutablePackageFragmentProvider = new MutablePackageFragmentProvider(getModuleDescriptor());
this.platformToKotlinClassMap = platformToKotlinClassMap;
this.dependencyClassByQualifiedNameResolverDummy = new DependencyClassByQualifiedNameResolverDummyImpl();
@@ -18,12 +18,12 @@ package org.jetbrains.jet.di;
import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
import org.jetbrains.jet.lang.resolve.TypeResolver;
import org.jetbrains.jet.storage.StorageManager;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.context.GlobalContext;
import org.jetbrains.jet.storage.StorageManager;
import org.jetbrains.jet.lang.resolve.AnnotationResolver;
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
import org.jetbrains.jet.lang.resolve.calls.ArgumentTypeResolver;
@@ -41,12 +41,12 @@ public class InjectorForTests {
private final Project project;
private final ModuleDescriptor moduleDescriptor;
private final PlatformToKotlinClassMap platformToKotlinClassMap;
private final DescriptorResolver descriptorResolver;
private final ExpressionTypingServices expressionTypingServices;
private final TypeResolver typeResolver;
private final StorageManager storageManager;
private final PlatformToKotlinClassMap platformToKotlinClassMap;
private final GlobalContext globalContext;
private final StorageManager storageManager;
private final AnnotationResolver annotationResolver;
private final CallResolver callResolver;
private final ArgumentTypeResolver argumentTypeResolver;
@@ -62,9 +62,9 @@ public class InjectorForTests {
) {
this.project = project;
this.moduleDescriptor = moduleDescriptor;
this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap();
this.descriptorResolver = new DescriptorResolver();
this.globalContext = org.jetbrains.jet.context.ContextPackage.GlobalContext();
this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap();
this.expressionTypingServices = new ExpressionTypingServices(globalContext, platformToKotlinClassMap);
this.typeResolver = new TypeResolver();
this.storageManager = globalContext.getStorageManager();