Components across the project use StorageManager

This commit is contained in:
Andrey Breslav
2014-01-24 20:21:26 +04:00
parent d7e256e992
commit 6a29c38e5b
25 changed files with 140 additions and 68 deletions
@@ -43,7 +43,6 @@ import org.jetbrains.jet.codegen.KotlinCodegenFacade;
import org.jetbrains.jet.codegen.state.GenerationState; import org.jetbrains.jet.codegen.state.GenerationState;
import org.jetbrains.jet.config.CompilerConfiguration; import org.jetbrains.jet.config.CompilerConfiguration;
import org.jetbrains.jet.di.InjectorForTopDownAnalyzerForJvm; import org.jetbrains.jet.di.InjectorForTopDownAnalyzerForJvm;
import org.jetbrains.jet.lang.descriptors.DependencyKind;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl; import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
import org.jetbrains.jet.lang.descriptors.ScriptDescriptor; import org.jetbrains.jet.lang.descriptors.ScriptDescriptor;
import org.jetbrains.jet.lang.descriptors.impl.PackageLikeBuilderDummy; import org.jetbrains.jet.lang.descriptors.impl.PackageLikeBuilderDummy;
@@ -60,6 +59,7 @@ import org.jetbrains.jet.lang.resolve.scopes.WritableScopeImpl;
import org.jetbrains.jet.lang.types.lang.InlineUtil; import org.jetbrains.jet.lang.types.lang.InlineUtil;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.plugin.JetLanguage; import org.jetbrains.jet.plugin.JetLanguage;
import org.jetbrains.jet.storage.LockBasedStorageManager;
import org.jetbrains.jet.utils.ExceptionUtils; import org.jetbrains.jet.utils.ExceptionUtils;
import java.io.File; import java.io.File;
@@ -102,6 +102,7 @@ public class ReplInterpreter {
trace = new BindingTraceContext(); trace = new BindingTraceContext();
module = AnalyzerFacadeForJVM.createJavaModule("<repl>"); module = AnalyzerFacadeForJVM.createJavaModule("<repl>");
TopDownAnalysisParameters topDownAnalysisParameters = new TopDownAnalysisParameters( TopDownAnalysisParameters topDownAnalysisParameters = new TopDownAnalysisParameters(
new LockBasedStorageManager(),
Predicates.<PsiFile>alwaysTrue(), Predicates.<PsiFile>alwaysTrue(),
false, false,
true, true,
@@ -22,7 +22,7 @@ import org.jetbrains.jet.lang.resolve.BodyResolver;
import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer; import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer;
import org.jetbrains.jet.lang.resolve.DeclarationsChecker; import org.jetbrains.jet.lang.resolve.DeclarationsChecker;
import org.jetbrains.jet.lang.resolve.DescriptorResolver; import org.jetbrains.jet.lang.resolve.DescriptorResolver;
import org.jetbrains.jet.storage.LockBasedStorageManager; import org.jetbrains.jet.storage.StorageManager;
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters; import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
@@ -82,7 +82,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
private final ControlFlowAnalyzer controlFlowAnalyzer; private final ControlFlowAnalyzer controlFlowAnalyzer;
private final DeclarationsChecker declarationsChecker; private final DeclarationsChecker declarationsChecker;
private final DescriptorResolver descriptorResolver; private final DescriptorResolver descriptorResolver;
private final LockBasedStorageManager storageManager; private final StorageManager storageManager;
private final CallResolverExtensionProvider callResolverExtensionProvider; private final CallResolverExtensionProvider callResolverExtensionProvider;
private final Project project; private final Project project;
private final TopDownAnalysisParameters topDownAnalysisParameters; private final TopDownAnalysisParameters topDownAnalysisParameters;
@@ -143,7 +143,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
this.controlFlowAnalyzer = new ControlFlowAnalyzer(); this.controlFlowAnalyzer = new ControlFlowAnalyzer();
this.declarationsChecker = new DeclarationsChecker(); this.declarationsChecker = new DeclarationsChecker();
this.descriptorResolver = new DescriptorResolver(); this.descriptorResolver = new DescriptorResolver();
this.storageManager = new LockBasedStorageManager(); this.storageManager = topDownAnalysisParameters.getStorageManager();
this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.callResolverExtensionProvider = new CallResolverExtensionProvider();
this.project = project; this.project = project;
this.topDownAnalysisParameters = topDownAnalysisParameters; this.topDownAnalysisParameters = topDownAnalysisParameters;
@@ -164,7 +164,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
this.annotationResolver = new AnnotationResolver(); this.annotationResolver = new AnnotationResolver();
this.callResolver = new CallResolver(); this.callResolver = new CallResolver();
this.argumentTypeResolver = new ArgumentTypeResolver(); this.argumentTypeResolver = new ArgumentTypeResolver();
this.expressionTypingServices = new ExpressionTypingServices(); this.expressionTypingServices = new ExpressionTypingServices(storageManager, javaToKotlinClassMap);
this.callExpressionResolver = new CallExpressionResolver(); this.callExpressionResolver = new CallExpressionResolver();
this.typeResolver = new TypeResolver(); this.typeResolver = new TypeResolver();
this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
@@ -225,6 +225,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
this.descriptorResolver.setAnnotationResolver(annotationResolver); this.descriptorResolver.setAnnotationResolver(annotationResolver);
this.descriptorResolver.setDelegatedPropertyResolver(delegatedPropertyResolver); this.descriptorResolver.setDelegatedPropertyResolver(delegatedPropertyResolver);
this.descriptorResolver.setExpressionTypingServices(expressionTypingServices); this.descriptorResolver.setExpressionTypingServices(expressionTypingServices);
this.descriptorResolver.setStorageManager(storageManager);
this.descriptorResolver.setTypeResolver(typeResolver); this.descriptorResolver.setTypeResolver(typeResolver);
this.javaDescriptorResolver.setClassResolver(javaClassResolver); this.javaDescriptorResolver.setClassResolver(javaClassResolver);
@@ -283,7 +284,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
expressionTypingServices.setCallResolver(callResolver); expressionTypingServices.setCallResolver(callResolver);
expressionTypingServices.setDescriptorResolver(descriptorResolver); expressionTypingServices.setDescriptorResolver(descriptorResolver);
expressionTypingServices.setExtensionProvider(callResolverExtensionProvider); expressionTypingServices.setExtensionProvider(callResolverExtensionProvider);
expressionTypingServices.setPlatformToKotlinClassMap(javaToKotlinClassMap);
expressionTypingServices.setProject(project); expressionTypingServices.setProject(project);
expressionTypingServices.setTypeResolver(typeResolver); expressionTypingServices.setTypeResolver(typeResolver);
@@ -40,6 +40,7 @@ import org.jetbrains.jet.storage.LockBasedLazyResolveStorageManager;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.storage.LockBasedStorageManager;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
@@ -200,7 +201,7 @@ public enum AnalyzerFacadeForJVM implements AnalyzerFacade {
ModuleDescriptorImpl module ModuleDescriptorImpl module
) { ) {
TopDownAnalysisParameters topDownAnalysisParameters = new TopDownAnalysisParameters( TopDownAnalysisParameters topDownAnalysisParameters = new TopDownAnalysisParameters(
filesToAnalyzeCompletely, false, false, scriptParameters); new LockBasedStorageManager(), filesToAnalyzeCompletely, false, false, scriptParameters);
InjectorForTopDownAnalyzerForJvm injector = new InjectorForTopDownAnalyzerForJvm(project, topDownAnalysisParameters, trace, module); InjectorForTopDownAnalyzerForJvm injector = new InjectorForTopDownAnalyzerForJvm(project, topDownAnalysisParameters, trace, module);
try { try {
@@ -38,7 +38,7 @@ public class AnalyzerFacadeForEverything {
@NotNull ModuleDescriptor module) { @NotNull ModuleDescriptor module) {
TopDownAnalysisParameters topDownAnalysisParameters = new TopDownAnalysisParameters( TopDownAnalysisParameters topDownAnalysisParameters = new TopDownAnalysisParameters(
filesToAnalyzeCompletely, false, false, scriptParameters); bodiesResolveContext.getStorageManager(), filesToAnalyzeCompletely, false, false, scriptParameters);
bodiesResolveContext.setTopDownAnalysisParameters(topDownAnalysisParameters); bodiesResolveContext.setTopDownAnalysisParameters(topDownAnalysisParameters);
@@ -20,6 +20,7 @@ import org.jetbrains.jet.lang.resolve.BodyResolver;
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap; import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.lang.resolve.FunctionAnalyzerExtension; import org.jetbrains.jet.lang.resolve.FunctionAnalyzerExtension;
import org.jetbrains.jet.storage.StorageManager;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters; import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.BindingTrace;
@@ -49,6 +50,7 @@ public class InjectorForBodyResolve {
private final CallResolverExtensionProvider callResolverExtensionProvider; private final CallResolverExtensionProvider callResolverExtensionProvider;
private final PlatformToKotlinClassMap platformToKotlinClassMap; private final PlatformToKotlinClassMap platformToKotlinClassMap;
private final FunctionAnalyzerExtension functionAnalyzerExtension; private final FunctionAnalyzerExtension functionAnalyzerExtension;
private final StorageManager storageManager;
private final Project project; private final Project project;
private final TopDownAnalysisParameters topDownAnalysisParameters; private final TopDownAnalysisParameters topDownAnalysisParameters;
private final BindingTrace bindingTrace; private final BindingTrace bindingTrace;
@@ -80,6 +82,7 @@ public class InjectorForBodyResolve {
this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.callResolverExtensionProvider = new CallResolverExtensionProvider();
this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap(); this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap();
this.functionAnalyzerExtension = new FunctionAnalyzerExtension(); this.functionAnalyzerExtension = new FunctionAnalyzerExtension();
this.storageManager = topDownAnalysisParameters.getStorageManager();
this.project = project; this.project = project;
this.topDownAnalysisParameters = topDownAnalysisParameters; this.topDownAnalysisParameters = topDownAnalysisParameters;
this.bindingTrace = bindingTrace; this.bindingTrace = bindingTrace;
@@ -88,7 +91,7 @@ public class InjectorForBodyResolve {
this.annotationResolver = new AnnotationResolver(); this.annotationResolver = new AnnotationResolver();
this.callResolver = new CallResolver(); this.callResolver = new CallResolver();
this.argumentTypeResolver = new ArgumentTypeResolver(); this.argumentTypeResolver = new ArgumentTypeResolver();
this.expressionTypingServices = new ExpressionTypingServices(); this.expressionTypingServices = new ExpressionTypingServices(storageManager, platformToKotlinClassMap);
this.callExpressionResolver = new CallExpressionResolver(); this.callExpressionResolver = new CallExpressionResolver();
this.descriptorResolver = new DescriptorResolver(); this.descriptorResolver = new DescriptorResolver();
this.delegatedPropertyResolver = new DelegatedPropertyResolver(); this.delegatedPropertyResolver = new DelegatedPropertyResolver();
@@ -130,7 +133,6 @@ public class InjectorForBodyResolve {
expressionTypingServices.setCallResolver(callResolver); expressionTypingServices.setCallResolver(callResolver);
expressionTypingServices.setDescriptorResolver(descriptorResolver); expressionTypingServices.setDescriptorResolver(descriptorResolver);
expressionTypingServices.setExtensionProvider(callResolverExtensionProvider); expressionTypingServices.setExtensionProvider(callResolverExtensionProvider);
expressionTypingServices.setPlatformToKotlinClassMap(platformToKotlinClassMap);
expressionTypingServices.setProject(project); expressionTypingServices.setProject(project);
expressionTypingServices.setTypeResolver(typeResolver); expressionTypingServices.setTypeResolver(typeResolver);
@@ -139,6 +141,7 @@ public class InjectorForBodyResolve {
descriptorResolver.setAnnotationResolver(annotationResolver); descriptorResolver.setAnnotationResolver(annotationResolver);
descriptorResolver.setDelegatedPropertyResolver(delegatedPropertyResolver); descriptorResolver.setDelegatedPropertyResolver(delegatedPropertyResolver);
descriptorResolver.setExpressionTypingServices(expressionTypingServices); descriptorResolver.setExpressionTypingServices(expressionTypingServices);
descriptorResolver.setStorageManager(storageManager);
descriptorResolver.setTypeResolver(typeResolver); descriptorResolver.setTypeResolver(typeResolver);
delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices); delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices);
@@ -28,6 +28,7 @@ import org.jetbrains.jet.lang.resolve.QualifiedExpressionResolver;
import org.jetbrains.jet.lang.psi.JetImportsFactory; import org.jetbrains.jet.lang.psi.JetImportsFactory;
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap; import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.storage.StorageManager;
import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver; import org.jetbrains.jet.lang.resolve.DelegatedPropertyResolver;
import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver; import org.jetbrains.jet.lang.resolve.calls.CallExpressionResolver;
import org.jetbrains.jet.lang.resolve.calls.CallResolver; import org.jetbrains.jet.lang.resolve.calls.CallResolver;
@@ -51,6 +52,7 @@ public class InjectorForLazyResolve {
private final JetImportsFactory jetImportsFactory; private final JetImportsFactory jetImportsFactory;
private final CallResolverExtensionProvider callResolverExtensionProvider; private final CallResolverExtensionProvider callResolverExtensionProvider;
private final PlatformToKotlinClassMap platformToKotlinClassMap; private final PlatformToKotlinClassMap platformToKotlinClassMap;
private final StorageManager storageManager;
private final DelegatedPropertyResolver delegatedPropertyResolver; private final DelegatedPropertyResolver delegatedPropertyResolver;
private final CallExpressionResolver callExpressionResolver; private final CallExpressionResolver callExpressionResolver;
private final CallResolver callResolver; private final CallResolver callResolver;
@@ -66,14 +68,15 @@ public class InjectorForLazyResolve {
this.resolveSession = resolveSession; this.resolveSession = resolveSession;
this.moduleDescriptor = moduleDescriptor; this.moduleDescriptor = moduleDescriptor;
this.descriptorResolver = new DescriptorResolver(); this.descriptorResolver = new DescriptorResolver();
this.expressionTypingServices = new ExpressionTypingServices(); this.storageManager = resolveSession.getStorageManager();
this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap();
this.expressionTypingServices = new ExpressionTypingServices(storageManager, platformToKotlinClassMap);
this.typeResolver = new TypeResolver(); this.typeResolver = new TypeResolver();
this.scopeProvider = new ScopeProvider(resolveSession); this.scopeProvider = new ScopeProvider(resolveSession);
this.annotationResolver = new AnnotationResolver(); this.annotationResolver = new AnnotationResolver();
this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
this.jetImportsFactory = new JetImportsFactory(); this.jetImportsFactory = new JetImportsFactory();
this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.callResolverExtensionProvider = new CallResolverExtensionProvider();
this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap();
this.delegatedPropertyResolver = new DelegatedPropertyResolver(); this.delegatedPropertyResolver = new DelegatedPropertyResolver();
this.callExpressionResolver = new CallExpressionResolver(); this.callExpressionResolver = new CallExpressionResolver();
this.callResolver = new CallResolver(); this.callResolver = new CallResolver();
@@ -83,6 +86,7 @@ public class InjectorForLazyResolve {
this.descriptorResolver.setAnnotationResolver(annotationResolver); this.descriptorResolver.setAnnotationResolver(annotationResolver);
this.descriptorResolver.setDelegatedPropertyResolver(delegatedPropertyResolver); this.descriptorResolver.setDelegatedPropertyResolver(delegatedPropertyResolver);
this.descriptorResolver.setExpressionTypingServices(expressionTypingServices); this.descriptorResolver.setExpressionTypingServices(expressionTypingServices);
this.descriptorResolver.setStorageManager(storageManager);
this.descriptorResolver.setTypeResolver(typeResolver); this.descriptorResolver.setTypeResolver(typeResolver);
this.expressionTypingServices.setAnnotationResolver(annotationResolver); this.expressionTypingServices.setAnnotationResolver(annotationResolver);
@@ -90,7 +94,6 @@ public class InjectorForLazyResolve {
this.expressionTypingServices.setCallResolver(callResolver); this.expressionTypingServices.setCallResolver(callResolver);
this.expressionTypingServices.setDescriptorResolver(descriptorResolver); this.expressionTypingServices.setDescriptorResolver(descriptorResolver);
this.expressionTypingServices.setExtensionProvider(callResolverExtensionProvider); this.expressionTypingServices.setExtensionProvider(callResolverExtensionProvider);
this.expressionTypingServices.setPlatformToKotlinClassMap(platformToKotlinClassMap);
this.expressionTypingServices.setProject(project); this.expressionTypingServices.setProject(project);
this.expressionTypingServices.setTypeResolver(typeResolver); this.expressionTypingServices.setTypeResolver(typeResolver);
@@ -18,6 +18,7 @@ package org.jetbrains.jet.di;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
import org.jetbrains.jet.storage.LockBasedStorageManager;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap; import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
@@ -38,6 +39,7 @@ public class InjectorForMacros {
private final ExpressionTypingServices expressionTypingServices; private final ExpressionTypingServices expressionTypingServices;
private final CallResolverExtensionProvider callResolverExtensionProvider; private final CallResolverExtensionProvider callResolverExtensionProvider;
private final LockBasedStorageManager lockBasedStorageManager;
private final PlatformToKotlinClassMap platformToKotlinClassMap; private final PlatformToKotlinClassMap platformToKotlinClassMap;
private final Project project; private final Project project;
private final ModuleDescriptor moduleDescriptor; private final ModuleDescriptor moduleDescriptor;
@@ -55,9 +57,10 @@ public class InjectorForMacros {
@NotNull Project project, @NotNull Project project,
@NotNull ModuleDescriptor moduleDescriptor @NotNull ModuleDescriptor moduleDescriptor
) { ) {
this.expressionTypingServices = new ExpressionTypingServices(); this.lockBasedStorageManager = new LockBasedStorageManager();
this.callResolverExtensionProvider = new CallResolverExtensionProvider();
this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap(); this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap();
this.expressionTypingServices = new ExpressionTypingServices(lockBasedStorageManager, platformToKotlinClassMap);
this.callResolverExtensionProvider = new CallResolverExtensionProvider();
this.project = project; this.project = project;
this.moduleDescriptor = moduleDescriptor; this.moduleDescriptor = moduleDescriptor;
this.annotationResolver = new AnnotationResolver(); this.annotationResolver = new AnnotationResolver();
@@ -75,7 +78,6 @@ public class InjectorForMacros {
this.expressionTypingServices.setCallResolver(callResolver); this.expressionTypingServices.setCallResolver(callResolver);
this.expressionTypingServices.setDescriptorResolver(descriptorResolver); this.expressionTypingServices.setDescriptorResolver(descriptorResolver);
this.expressionTypingServices.setExtensionProvider(callResolverExtensionProvider); this.expressionTypingServices.setExtensionProvider(callResolverExtensionProvider);
this.expressionTypingServices.setPlatformToKotlinClassMap(platformToKotlinClassMap);
this.expressionTypingServices.setProject(project); this.expressionTypingServices.setProject(project);
this.expressionTypingServices.setTypeResolver(typeResolver); this.expressionTypingServices.setTypeResolver(typeResolver);
@@ -101,6 +103,7 @@ public class InjectorForMacros {
descriptorResolver.setAnnotationResolver(annotationResolver); descriptorResolver.setAnnotationResolver(annotationResolver);
descriptorResolver.setDelegatedPropertyResolver(delegatedPropertyResolver); descriptorResolver.setDelegatedPropertyResolver(delegatedPropertyResolver);
descriptorResolver.setExpressionTypingServices(expressionTypingServices); descriptorResolver.setExpressionTypingServices(expressionTypingServices);
descriptorResolver.setStorageManager(lockBasedStorageManager);
descriptorResolver.setTypeResolver(typeResolver); descriptorResolver.setTypeResolver(typeResolver);
delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices); delegatedPropertyResolver.setExpressionTypingServices(expressionTypingServices);
@@ -22,7 +22,7 @@ import org.jetbrains.jet.lang.resolve.BodyResolver;
import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer; import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer;
import org.jetbrains.jet.lang.resolve.DeclarationsChecker; import org.jetbrains.jet.lang.resolve.DeclarationsChecker;
import org.jetbrains.jet.lang.resolve.DescriptorResolver; import org.jetbrains.jet.lang.resolve.DescriptorResolver;
import org.jetbrains.jet.storage.LockBasedStorageManager; import org.jetbrains.jet.storage.StorageManager;
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters; import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
@@ -61,7 +61,7 @@ public class InjectorForTopDownAnalyzerBasic {
private final ControlFlowAnalyzer controlFlowAnalyzer; private final ControlFlowAnalyzer controlFlowAnalyzer;
private final DeclarationsChecker declarationsChecker; private final DeclarationsChecker declarationsChecker;
private final DescriptorResolver descriptorResolver; private final DescriptorResolver descriptorResolver;
private final LockBasedStorageManager storageManager; private final StorageManager storageManager;
private final CallResolverExtensionProvider callResolverExtensionProvider; private final CallResolverExtensionProvider callResolverExtensionProvider;
private final Project project; private final Project project;
private final TopDownAnalysisParameters topDownAnalysisParameters; private final TopDownAnalysisParameters topDownAnalysisParameters;
@@ -102,7 +102,7 @@ public class InjectorForTopDownAnalyzerBasic {
this.controlFlowAnalyzer = new ControlFlowAnalyzer(); this.controlFlowAnalyzer = new ControlFlowAnalyzer();
this.declarationsChecker = new DeclarationsChecker(); this.declarationsChecker = new DeclarationsChecker();
this.descriptorResolver = new DescriptorResolver(); this.descriptorResolver = new DescriptorResolver();
this.storageManager = new LockBasedStorageManager(); this.storageManager = topDownAnalysisParameters.getStorageManager();
this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.callResolverExtensionProvider = new CallResolverExtensionProvider();
this.project = project; this.project = project;
this.topDownAnalysisParameters = topDownAnalysisParameters; this.topDownAnalysisParameters = topDownAnalysisParameters;
@@ -115,7 +115,7 @@ public class InjectorForTopDownAnalyzerBasic {
this.annotationResolver = new AnnotationResolver(); this.annotationResolver = new AnnotationResolver();
this.callResolver = new CallResolver(); this.callResolver = new CallResolver();
this.argumentTypeResolver = new ArgumentTypeResolver(); this.argumentTypeResolver = new ArgumentTypeResolver();
this.expressionTypingServices = new ExpressionTypingServices(); this.expressionTypingServices = new ExpressionTypingServices(storageManager, platformToKotlinClassMap);
this.callExpressionResolver = new CallExpressionResolver(); this.callExpressionResolver = new CallExpressionResolver();
this.typeResolver = new TypeResolver(); this.typeResolver = new TypeResolver();
this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
@@ -163,6 +163,7 @@ public class InjectorForTopDownAnalyzerBasic {
this.descriptorResolver.setAnnotationResolver(annotationResolver); this.descriptorResolver.setAnnotationResolver(annotationResolver);
this.descriptorResolver.setDelegatedPropertyResolver(delegatedPropertyResolver); this.descriptorResolver.setDelegatedPropertyResolver(delegatedPropertyResolver);
this.descriptorResolver.setExpressionTypingServices(expressionTypingServices); this.descriptorResolver.setExpressionTypingServices(expressionTypingServices);
this.descriptorResolver.setStorageManager(storageManager);
this.descriptorResolver.setTypeResolver(typeResolver); this.descriptorResolver.setTypeResolver(typeResolver);
declarationResolver.setAnnotationResolver(annotationResolver); declarationResolver.setAnnotationResolver(annotationResolver);
@@ -188,7 +189,6 @@ public class InjectorForTopDownAnalyzerBasic {
expressionTypingServices.setCallResolver(callResolver); expressionTypingServices.setCallResolver(callResolver);
expressionTypingServices.setDescriptorResolver(descriptorResolver); expressionTypingServices.setDescriptorResolver(descriptorResolver);
expressionTypingServices.setExtensionProvider(callResolverExtensionProvider); expressionTypingServices.setExtensionProvider(callResolverExtensionProvider);
expressionTypingServices.setPlatformToKotlinClassMap(platformToKotlinClassMap);
expressionTypingServices.setProject(project); expressionTypingServices.setProject(project);
expressionTypingServices.setTypeResolver(typeResolver); expressionTypingServices.setTypeResolver(typeResolver);
@@ -27,11 +27,13 @@ import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo; import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope; import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
import org.jetbrains.jet.storage.StorageManager;
import java.util.Collection; import java.util.Collection;
import java.util.Map; import java.util.Map;
public interface BodiesResolveContext { public interface BodiesResolveContext {
StorageManager getStorageManager();
Collection<JetFile> getFiles(); Collection<JetFile> getFiles();
Map<JetClassOrObject, MutableClassDescriptor> getClasses(); Map<JetClassOrObject, MutableClassDescriptor> getClasses();
Map<JetProperty, PropertyDescriptor> getProperties(); Map<JetProperty, PropertyDescriptor> getProperties();
@@ -28,6 +28,7 @@ import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo; import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope; import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
import org.jetbrains.jet.storage.StorageManager;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
@@ -62,6 +63,11 @@ public class CachedBodiesResolveContext implements BodiesResolveContext {
topDownAnalysisParameters = context.getTopDownAnalysisParameters(); topDownAnalysisParameters = context.getTopDownAnalysisParameters();
} }
@Override
public StorageManager getStorageManager() {
return topDownAnalysisParameters.getStorageManager();
}
@Override @Override
public Collection<JetFile> getFiles() { public Collection<JetFile> getFiles() {
return files; return files;
@@ -30,6 +30,7 @@ import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo; import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo;
import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope; import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
import org.jetbrains.jet.storage.StorageManager;
import javax.inject.Inject; import javax.inject.Inject;
import java.io.PrintStream; import java.io.PrintStream;
@@ -118,6 +119,11 @@ public class TopDownAnalysisContext implements BodiesResolveContext {
return packageFragments; return packageFragments;
} }
@Override
public StorageManager getStorageManager() {
return topDownAnalysisParameters.getStorageManager();
}
@Override @Override
public Collection<JetFile> getFiles() { public Collection<JetFile> getFiles() {
return packageFragments.keySet(); return packageFragments.keySet();
@@ -19,6 +19,7 @@ package org.jetbrains.jet.lang.resolve;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.storage.StorageManager;
import java.util.List; import java.util.List;
@@ -26,6 +27,8 @@ import java.util.List;
* Various junk that cannot be placed into context (yet). * Various junk that cannot be placed into context (yet).
*/ */
public class TopDownAnalysisParameters { public class TopDownAnalysisParameters {
@NotNull
private final StorageManager storageManager;
@NotNull @NotNull
private final Predicate<PsiFile> analyzeCompletely; private final Predicate<PsiFile> analyzeCompletely;
private final boolean analyzingBootstrapLibrary; private final boolean analyzingBootstrapLibrary;
@@ -34,16 +37,24 @@ public class TopDownAnalysisParameters {
private final List<AnalyzerScriptParameter> scriptParameters; private final List<AnalyzerScriptParameter> scriptParameters;
public TopDownAnalysisParameters( public TopDownAnalysisParameters(
@NotNull StorageManager storageManager,
@NotNull Predicate<PsiFile> analyzeCompletely, @NotNull Predicate<PsiFile> analyzeCompletely,
boolean analyzingBootstrapLibrary, boolean analyzingBootstrapLibrary,
boolean declaredLocally, boolean declaredLocally,
@NotNull List<AnalyzerScriptParameter> scriptParameters) { @NotNull List<AnalyzerScriptParameter> scriptParameters
) {
this.storageManager = storageManager;
this.analyzeCompletely = analyzeCompletely; this.analyzeCompletely = analyzeCompletely;
this.analyzingBootstrapLibrary = analyzingBootstrapLibrary; this.analyzingBootstrapLibrary = analyzingBootstrapLibrary;
this.declaredLocally = declaredLocally; this.declaredLocally = declaredLocally;
this.scriptParameters = scriptParameters; this.scriptParameters = scriptParameters;
} }
@NotNull
public StorageManager getStorageManager() {
return storageManager;
}
@NotNull @NotNull
public Predicate<PsiFile> getAnalyzeCompletely() { public Predicate<PsiFile> getAnalyzeCompletely() {
return analyzeCompletely; return analyzeCompletely;
@@ -34,6 +34,7 @@ import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.WritableScope; import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingContext; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingContext;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.storage.StorageManager;
import javax.inject.Inject; import javax.inject.Inject;
import java.util.Collection; import java.util.Collection;
@@ -158,6 +159,7 @@ public class TopDownAnalyzer {
} }
public static void processClassOrObject( public static void processClassOrObject(
@NotNull StorageManager storageManager,
@Nullable final WritableScope scope, @Nullable final WritableScope scope,
@NotNull ExpressionTypingContext context, @NotNull ExpressionTypingContext context,
@NotNull final DeclarationDescriptor containingDeclaration, @NotNull final DeclarationDescriptor containingDeclaration,
@@ -168,7 +170,7 @@ public class TopDownAnalyzer {
PlatformToKotlinClassMap.EMPTY); PlatformToKotlinClassMap.EMPTY);
TopDownAnalysisParameters topDownAnalysisParameters = TopDownAnalysisParameters topDownAnalysisParameters =
new TopDownAnalysisParameters(Predicates.equalTo(object.getContainingFile()), new TopDownAnalysisParameters(storageManager, Predicates.equalTo(object.getContainingFile()),
false, true, Collections.<AnalyzerScriptParameter>emptyList()); false, true, Collections.<AnalyzerScriptParameter>emptyList());
InjectorForTopDownAnalyzerBasic injector = new InjectorForTopDownAnalyzerBasic( InjectorForTopDownAnalyzerBasic injector = new InjectorForTopDownAnalyzerBasic(
@@ -90,7 +90,8 @@ public class ClosureExpressionsTypingVisitor extends ExpressionTypingVisitor {
}; };
ObservableBindingTrace traceAdapter = new ObservableBindingTrace(temporaryTrace); ObservableBindingTrace traceAdapter = new ObservableBindingTrace(temporaryTrace);
traceAdapter.addHandler(CLASS, handler); traceAdapter.addHandler(CLASS, handler);
TopDownAnalyzer.processClassOrObject(null, // don't need to add classifier of object literal to any scope TopDownAnalyzer.processClassOrObject(storageManager,
null, // don't need to add classifier of object literal to any scope
context.replaceBindingTrace(traceAdapter).replaceContextDependency(INDEPENDENT), context.replaceBindingTrace(traceAdapter).replaceContextDependency(INDEPENDENT),
context.scope.getContainingDeclaration(), context.scope.getContainingDeclaration(),
expression.getObjectDeclaration()); expression.getObjectDeclaration());
@@ -137,12 +137,6 @@ public class ExpressionTypingServices {
this.annotationResolver = annotationResolver; this.annotationResolver = annotationResolver;
} }
@Inject
public void setPlatformToKotlinClassMap(@NotNull PlatformToKotlinClassMap platformToKotlinClassMap) {
this.platformToKotlinClassMap = platformToKotlinClassMap;
this.expressionTypingFacade = ExpressionTypingVisitorDispatcher.create(storageManager, platformToKotlinClassMap);
}
@NotNull @NotNull
public PlatformToKotlinClassMap getPlatformToKotlinClassMap() { public PlatformToKotlinClassMap getPlatformToKotlinClassMap() {
return platformToKotlinClassMap; return platformToKotlinClassMap;
@@ -153,9 +147,13 @@ public class ExpressionTypingServices {
this.extensionProvider = extensionProvider; this.extensionProvider = extensionProvider;
} }
@Inject public ExpressionTypingServices(
public void setStorageManager(@NotNull StorageManager storageManager) { @NotNull StorageManager storageManager,
@NotNull PlatformToKotlinClassMap platformToKotlinClassMap
) {
this.storageManager = storageManager; this.storageManager = storageManager;
this.platformToKotlinClassMap = platformToKotlinClassMap;
this.expressionTypingFacade = ExpressionTypingVisitorDispatcher.create(storageManager, platformToKotlinClassMap);
} }
@NotNull @NotNull
@@ -48,6 +48,7 @@ public class ExpressionTypingVisitorDispatcher extends JetVisitor<JetTypeInfo, E
return new ExpressionTypingVisitorDispatcher(storageManager, platformToKotlinClassMap, writableScope); return new ExpressionTypingVisitorDispatcher(storageManager, platformToKotlinClassMap, writableScope);
} }
private final StorageManager storageManager;
private final BasicExpressionTypingVisitor basic; private final BasicExpressionTypingVisitor basic;
private final ExpressionTypingVisitorForStatements statements; private final ExpressionTypingVisitorForStatements statements;
private final ClosureExpressionsTypingVisitor closures; private final ClosureExpressionsTypingVisitor closures;
@@ -55,14 +56,15 @@ public class ExpressionTypingVisitorDispatcher extends JetVisitor<JetTypeInfo, E
private final PatternMatchingTypingVisitor patterns = new PatternMatchingTypingVisitor(this); private final PatternMatchingTypingVisitor patterns = new PatternMatchingTypingVisitor(this);
private ExpressionTypingVisitorDispatcher(StorageManager storageManager, PlatformToKotlinClassMap platformToKotlinClassMap, WritableScope writableScope) { private ExpressionTypingVisitorDispatcher(StorageManager storageManager, PlatformToKotlinClassMap platformToKotlinClassMap, WritableScope writableScope) {
this.storageManager = storageManager;
this.basic = new BasicExpressionTypingVisitor(this, platformToKotlinClassMap); this.basic = new BasicExpressionTypingVisitor(this, platformToKotlinClassMap);
if (writableScope != null) { if (writableScope != null) {
this.statements = new ExpressionTypingVisitorForStatements(this, writableScope, basic, controlStructures, patterns); this.statements = new ExpressionTypingVisitorForStatements(storageManager, this, writableScope, basic, controlStructures, patterns);
} }
else { else {
this.statements = null; this.statements = null;
} }
closures = new ClosureExpressionsTypingVisitor(this, storageManager); this.closures = new ClosureExpressionsTypingVisitor(this, storageManager);
} }
@NotNull @NotNull
@@ -98,7 +100,9 @@ public class ExpressionTypingVisitorDispatcher extends JetVisitor<JetTypeInfo, E
} }
private ExpressionTypingVisitorForStatements createStatementVisitor(ExpressionTypingContext context) { private ExpressionTypingVisitorForStatements createStatementVisitor(ExpressionTypingContext context) {
return new ExpressionTypingVisitorForStatements(this, ExpressionTypingUtils.newWritableScopeImpl(context, "statement scope"), basic, controlStructures, patterns); return new ExpressionTypingVisitorForStatements(storageManager, this,
ExpressionTypingUtils.newWritableScopeImpl(context, "statement scope"),
basic, controlStructures, patterns);
} }
@Override @Override
@@ -39,6 +39,7 @@ import org.jetbrains.jet.lang.types.JetTypeInfo;
import org.jetbrains.jet.lang.types.TypeUtils; import org.jetbrains.jet.lang.types.TypeUtils;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.lexer.JetTokens; import org.jetbrains.jet.lexer.JetTokens;
import org.jetbrains.jet.storage.StorageManager;
import java.util.Collection; import java.util.Collection;
@@ -51,18 +52,21 @@ import static org.jetbrains.jet.lang.types.TypeUtils.noExpectedType;
@SuppressWarnings("SuspiciousMethodCalls") @SuppressWarnings("SuspiciousMethodCalls")
public class ExpressionTypingVisitorForStatements extends ExpressionTypingVisitor { public class ExpressionTypingVisitorForStatements extends ExpressionTypingVisitor {
private final StorageManager storageManager;
private final WritableScope scope; private final WritableScope scope;
private final BasicExpressionTypingVisitor basic; private final BasicExpressionTypingVisitor basic;
private final ControlStructureTypingVisitor controlStructures; private final ControlStructureTypingVisitor controlStructures;
private final PatternMatchingTypingVisitor patterns; private final PatternMatchingTypingVisitor patterns;
public ExpressionTypingVisitorForStatements( public ExpressionTypingVisitorForStatements(
@NotNull StorageManager storageManager,
@NotNull ExpressionTypingInternals facade, @NotNull ExpressionTypingInternals facade,
@NotNull WritableScope scope, @NotNull WritableScope scope,
BasicExpressionTypingVisitor basic, BasicExpressionTypingVisitor basic,
@NotNull ControlStructureTypingVisitor controlStructures, @NotNull ControlStructureTypingVisitor controlStructures,
@NotNull PatternMatchingTypingVisitor patterns) { @NotNull PatternMatchingTypingVisitor patterns) {
super(facade); super(facade);
this.storageManager = storageManager;
this.scope = scope; this.scope = scope;
this.basic = basic; this.basic = basic;
this.controlStructures = controlStructures; this.controlStructures = controlStructures;
@@ -86,6 +90,7 @@ public class ExpressionTypingVisitorForStatements extends ExpressionTypingVisito
@Override @Override
public JetTypeInfo visitObjectDeclaration(@NotNull JetObjectDeclaration declaration, ExpressionTypingContext context) { public JetTypeInfo visitObjectDeclaration(@NotNull JetObjectDeclaration declaration, ExpressionTypingContext context) {
TopDownAnalyzer.processClassOrObject( TopDownAnalyzer.processClassOrObject(
storageManager,
scope, context.replaceScope(scope).replaceContextDependency(INDEPENDENT), scope.getContainingDeclaration(), declaration); scope, context.replaceScope(scope).replaceContextDependency(INDEPENDENT), scope.getContainingDeclaration(), declaration);
return DataFlowUtils.checkStatementType(declaration, context, context.dataFlowInfo); return DataFlowUtils.checkStatementType(declaration, context, context.dataFlowInfo);
} }
@@ -180,6 +185,7 @@ public class ExpressionTypingVisitorForStatements extends ExpressionTypingVisito
@Override @Override
public JetTypeInfo visitClass(@NotNull JetClass klass, ExpressionTypingContext context) { public JetTypeInfo visitClass(@NotNull JetClass klass, ExpressionTypingContext context) {
TopDownAnalyzer.processClassOrObject( TopDownAnalyzer.processClassOrObject(
storageManager,
scope, context.replaceScope(scope).replaceContextDependency(INDEPENDENT), scope.getContainingDeclaration(), klass); scope, context.replaceScope(scope).replaceContextDependency(INDEPENDENT), scope.getContainingDeclaration(), klass);
return DataFlowUtils.checkStatementType(klass, context, context.dataFlowInfo); return DataFlowUtils.checkStatementType(klass, context, context.dataFlowInfo);
} }
@@ -21,6 +21,7 @@ import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
import org.jetbrains.jet.lang.resolve.TypeResolver; import org.jetbrains.jet.lang.resolve.TypeResolver;
import org.jetbrains.jet.lang.resolve.calls.CallResolver; import org.jetbrains.jet.lang.resolve.calls.CallResolver;
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
import org.jetbrains.jet.storage.LockBasedStorageManager;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap; import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
@@ -42,6 +43,7 @@ public class InjectorForTests {
private final TypeResolver typeResolver; private final TypeResolver typeResolver;
private final CallResolver callResolver; private final CallResolver callResolver;
private final CallResolverExtensionProvider callResolverExtensionProvider; private final CallResolverExtensionProvider callResolverExtensionProvider;
private final LockBasedStorageManager lockBasedStorageManager;
private final KotlinBuiltIns kotlinBuiltIns; private final KotlinBuiltIns kotlinBuiltIns;
private final PlatformToKotlinClassMap platformToKotlinClassMap; private final PlatformToKotlinClassMap platformToKotlinClassMap;
private final Project project; private final Project project;
@@ -58,12 +60,13 @@ public class InjectorForTests {
@NotNull ModuleDescriptor moduleDescriptor @NotNull ModuleDescriptor moduleDescriptor
) { ) {
this.descriptorResolver = new DescriptorResolver(); this.descriptorResolver = new DescriptorResolver();
this.expressionTypingServices = new ExpressionTypingServices(); this.lockBasedStorageManager = new LockBasedStorageManager();
this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap();
this.expressionTypingServices = new ExpressionTypingServices(lockBasedStorageManager, platformToKotlinClassMap);
this.typeResolver = new TypeResolver(); this.typeResolver = new TypeResolver();
this.callResolver = new CallResolver(); this.callResolver = new CallResolver();
this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.callResolverExtensionProvider = new CallResolverExtensionProvider();
this.kotlinBuiltIns = KotlinBuiltIns.getInstance(); this.kotlinBuiltIns = KotlinBuiltIns.getInstance();
this.platformToKotlinClassMap = moduleDescriptor.getPlatformToKotlinClassMap();
this.project = project; this.project = project;
this.moduleDescriptor = moduleDescriptor; this.moduleDescriptor = moduleDescriptor;
this.annotationResolver = new AnnotationResolver(); this.annotationResolver = new AnnotationResolver();
@@ -76,6 +79,7 @@ public class InjectorForTests {
this.descriptorResolver.setAnnotationResolver(annotationResolver); this.descriptorResolver.setAnnotationResolver(annotationResolver);
this.descriptorResolver.setDelegatedPropertyResolver(delegatedPropertyResolver); this.descriptorResolver.setDelegatedPropertyResolver(delegatedPropertyResolver);
this.descriptorResolver.setExpressionTypingServices(expressionTypingServices); this.descriptorResolver.setExpressionTypingServices(expressionTypingServices);
this.descriptorResolver.setStorageManager(lockBasedStorageManager);
this.descriptorResolver.setTypeResolver(typeResolver); this.descriptorResolver.setTypeResolver(typeResolver);
this.expressionTypingServices.setAnnotationResolver(annotationResolver); this.expressionTypingServices.setAnnotationResolver(annotationResolver);
@@ -83,7 +87,6 @@ public class InjectorForTests {
this.expressionTypingServices.setCallResolver(callResolver); this.expressionTypingServices.setCallResolver(callResolver);
this.expressionTypingServices.setDescriptorResolver(descriptorResolver); this.expressionTypingServices.setDescriptorResolver(descriptorResolver);
this.expressionTypingServices.setExtensionProvider(callResolverExtensionProvider); this.expressionTypingServices.setExtensionProvider(callResolverExtensionProvider);
this.expressionTypingServices.setPlatformToKotlinClassMap(platformToKotlinClassMap);
this.expressionTypingServices.setProject(project); this.expressionTypingServices.setProject(project);
this.expressionTypingServices.setTypeResolver(typeResolver); this.expressionTypingServices.setTypeResolver(typeResolver);
@@ -35,6 +35,7 @@ import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedClass
import org.jetbrains.jet.di.InjectorForTopDownAnalyzerForJvm; import org.jetbrains.jet.di.InjectorForTopDownAnalyzerForJvm;
import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.resolve.*; import org.jetbrains.jet.lang.resolve.*;
import org.jetbrains.jet.storage.LockBasedStorageManager;
import org.jetbrains.jet.test.TestCaseWithTmpdir; import org.jetbrains.jet.test.TestCaseWithTmpdir;
import org.jetbrains.jet.test.util.RecursiveDescriptorComparator; import org.jetbrains.jet.test.util.RecursiveDescriptorComparator;
import org.junit.Assert; import org.junit.Assert;
@@ -141,7 +142,7 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir {
InjectorForTopDownAnalyzerForJvm injectorForAnalyzer = new InjectorForTopDownAnalyzerForJvm( InjectorForTopDownAnalyzerForJvm injectorForAnalyzer = new InjectorForTopDownAnalyzerForJvm(
environment.getProject(), environment.getProject(),
new TopDownAnalysisParameters( new TopDownAnalysisParameters(
Predicates.<PsiFile>alwaysFalse(), false, false, Collections.<AnalyzerScriptParameter>emptyList()), new LockBasedStorageManager(), Predicates.<PsiFile>alwaysFalse(), false, false, Collections.<AnalyzerScriptParameter>emptyList()),
trace, trace,
module); module);
@@ -40,6 +40,7 @@ import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM; import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.name.SpecialNames; import org.jetbrains.jet.lang.resolve.name.SpecialNames;
import org.jetbrains.jet.storage.LockBasedStorageManager;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@@ -53,7 +54,7 @@ public class LazyResolveTestUtil {
JetTestUtils.newTrace(environment); JetTestUtils.newTrace(environment);
TopDownAnalysisParameters params = new TopDownAnalysisParameters( TopDownAnalysisParameters params = new TopDownAnalysisParameters(
Predicates.<PsiFile>alwaysTrue(), false, false, Collections.<AnalyzerScriptParameter>emptyList()); new LockBasedStorageManager(), Predicates.<PsiFile>alwaysTrue(), false, false, Collections.<AnalyzerScriptParameter>emptyList());
CliLightClassGenerationSupport support = CliLightClassGenerationSupport.getInstanceForCli(environment.getProject()); CliLightClassGenerationSupport support = CliLightClassGenerationSupport.getInstanceForCli(environment.getProject());
BindingTrace sharedTrace = support.getTrace(); BindingTrace sharedTrace = support.getTrace();
ModuleDescriptorImpl sharedModule = support.getModule(); ModuleDescriptorImpl sharedModule = support.getModule();
@@ -26,7 +26,6 @@ import org.jetbrains.jet.codegen.state.JetTypeMapper;
import org.jetbrains.jet.di.DependencyInjectorGenerator; import org.jetbrains.jet.di.DependencyInjectorGenerator;
import org.jetbrains.jet.di.GivenExpression; import org.jetbrains.jet.di.GivenExpression;
import org.jetbrains.jet.di.InjectorForTopDownAnalyzer; import org.jetbrains.jet.di.InjectorForTopDownAnalyzer;
import org.jetbrains.jet.di.InstantiateType;
import org.jetbrains.jet.lang.PlatformToKotlinClassMap; import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl; import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
@@ -98,6 +97,7 @@ public class GenerateInjectors {
generator.addPublicField(JetImportsFactory.class); generator.addPublicField(JetImportsFactory.class);
generator.addField(CallResolverExtensionProvider.class); generator.addField(CallResolverExtensionProvider.class);
generator.addField(false, PlatformToKotlinClassMap.class, null, new GivenExpression("moduleDescriptor.getPlatformToKotlinClassMap()")); generator.addField(false, PlatformToKotlinClassMap.class, null, new GivenExpression("moduleDescriptor.getPlatformToKotlinClassMap()"));
generator.addField(false, StorageManager.class, null, new GivenExpression("resolveSession.getStorageManager()"));
generator.configure("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForLazyResolve", GenerateInjectors.class); generator.configure("compiler/frontend/src", "org.jetbrains.jet.di", "InjectorForLazyResolve", GenerateInjectors.class);
return generator; return generator;
} }
@@ -179,7 +179,7 @@ public class GenerateInjectors {
generator.addPublicField(ControlFlowAnalyzer.class); generator.addPublicField(ControlFlowAnalyzer.class);
generator.addPublicField(DeclarationsChecker.class); generator.addPublicField(DeclarationsChecker.class);
generator.addPublicField(DescriptorResolver.class); generator.addPublicField(DescriptorResolver.class);
generator.addField(false, StorageManager.class, null, new InstantiateType(LockBasedStorageManager.class)); generator.addField(false, StorageManager.class, null, new GivenExpression("topDownAnalysisParameters.getStorageManager()"));
generator.addField(CallResolverExtensionProvider.class); generator.addField(CallResolverExtensionProvider.class);
// Parameters // Parameters
@@ -196,6 +196,7 @@ public class GenerateInjectors {
// Fields // Fields
generator.addPublicField(ExpressionTypingServices.class); generator.addPublicField(ExpressionTypingServices.class);
generator.addField(CallResolverExtensionProvider.class); generator.addField(CallResolverExtensionProvider.class);
generator.addField(LockBasedStorageManager.class);
generator.addField(false, PlatformToKotlinClassMap.class, null, new GivenExpression("moduleDescriptor.getPlatformToKotlinClassMap()")); generator.addField(false, PlatformToKotlinClassMap.class, null, new GivenExpression("moduleDescriptor.getPlatformToKotlinClassMap()"));
// Parameters // Parameters
@@ -215,6 +216,7 @@ public class GenerateInjectors {
generator.addPublicField(TypeResolver.class); generator.addPublicField(TypeResolver.class);
generator.addPublicField(CallResolver.class); generator.addPublicField(CallResolver.class);
generator.addField(CallResolverExtensionProvider.class); generator.addField(CallResolverExtensionProvider.class);
generator.addField(LockBasedStorageManager.class);
generator.addField(true, KotlinBuiltIns.class, null, new GivenExpression("KotlinBuiltIns.getInstance()")); generator.addField(true, KotlinBuiltIns.class, null, new GivenExpression("KotlinBuiltIns.getInstance()"));
generator.addField(false, PlatformToKotlinClassMap.class, null, new GivenExpression("moduleDescriptor.getPlatformToKotlinClassMap()")); generator.addField(false, PlatformToKotlinClassMap.class, null, new GivenExpression("moduleDescriptor.getPlatformToKotlinClassMap()"));
@@ -256,6 +258,7 @@ public class GenerateInjectors {
generator.addField(CallResolverExtensionProvider.class); generator.addField(CallResolverExtensionProvider.class);
generator.addField(false, PlatformToKotlinClassMap.class, null, new GivenExpression("moduleDescriptor.getPlatformToKotlinClassMap()")); generator.addField(false, PlatformToKotlinClassMap.class, null, new GivenExpression("moduleDescriptor.getPlatformToKotlinClassMap()"));
generator.addField(FunctionAnalyzerExtension.class); generator.addField(FunctionAnalyzerExtension.class);
generator.addField(false, StorageManager.class, null, new GivenExpression("topDownAnalysisParameters.getStorageManager()"));
// Parameters // Parameters
generator.addPublicParameter(Project.class); generator.addPublicParameter(Project.class);
@@ -43,14 +43,13 @@ import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
import org.jetbrains.jet.lang.types.TypeConstructor; import org.jetbrains.jet.lang.types.TypeConstructor;
import org.jetbrains.jet.storage.LazyResolveStorageManager; import org.jetbrains.jet.storage.LazyResolveStorageManager;
import org.jetbrains.jet.storage.MemoizedFunctionToNotNull; import org.jetbrains.jet.storage.MemoizedFunctionToNotNull;
import org.jetbrains.jet.storage.StorageManager;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.Map; import java.util.Map;
public class ResolveElementCache { public class ResolveElementCache {
private static final BodyResolveContextForLazy EMPTY_CONTEXT = new BodyResolveContextForLazy(Functions.<JetScope>constant(null));
private final CachedValue<MemoizedFunctionToNotNull<JetElement, BindingContext>> additionalResolveCache; private final CachedValue<MemoizedFunctionToNotNull<JetElement, BindingContext>> additionalResolveCache;
private final ResolveSession resolveSession; private final ResolveSession resolveSession;
@@ -225,12 +224,13 @@ public class ResolveElementCache {
} }
private static void delegationSpecifierAdditionalResolve( private static void delegationSpecifierAdditionalResolve(
KotlinCodeAnalyzer analyzer, ResolveSession resolveSession,
JetDelegationSpecifierList specifier, BindingTrace trace, JetFile file) { JetDelegationSpecifierList specifier, BindingTrace trace, JetFile file) {
BodyResolver bodyResolver = createBodyResolverWithEmptyContext(trace, file, analyzer.getModuleDescriptor()); BodyResolver bodyResolver = createBodyResolverWithEmptyContext(resolveSession.getStorageManager(),
trace, file, resolveSession.getModuleDescriptor());
JetClassOrObject classOrObject = (JetClassOrObject) specifier.getParent(); JetClassOrObject classOrObject = (JetClassOrObject) specifier.getParent();
LazyClassDescriptor descriptor = (LazyClassDescriptor) analyzer.resolveToDescriptor(classOrObject); LazyClassDescriptor descriptor = (LazyClassDescriptor) resolveSession.resolveToDescriptor(classOrObject);
// Activate resolving of supertypes // Activate resolving of supertypes
descriptor.getTypeConstructor().getSupertypes(); descriptor.getTypeConstructor().getSupertypes();
@@ -245,13 +245,16 @@ public class ResolveElementCache {
final JetScope propertyResolutionScope = resolveSession.getInjector().getScopeProvider().getResolutionScopeForDeclaration( final JetScope propertyResolutionScope = resolveSession.getInjector().getScopeProvider().getResolutionScopeForDeclaration(
jetProperty); jetProperty);
BodyResolveContextForLazy bodyResolveContext = new BodyResolveContextForLazy(new Function<JetDeclaration, JetScope>() { BodyResolveContextForLazy bodyResolveContext = new BodyResolveContextForLazy(
@Override resolveSession.getStorageManager(),
public JetScope apply(JetDeclaration declaration) { new Function<JetDeclaration, JetScope>() {
assert declaration.getParent() == jetProperty : "Must be called only for property accessors, but called for " + declaration; @Override
return propertyResolutionScope; public JetScope apply(JetDeclaration declaration) {
} assert declaration.getParent() == jetProperty : "Must be called only for property accessors, but called for " +
}); declaration;
return propertyResolutionScope;
}
});
BodyResolver bodyResolver = createBodyResolver(trace, file, bodyResolveContext, resolveSession.getModuleDescriptor()); BodyResolver bodyResolver = createBodyResolver(trace, file, bodyResolveContext, resolveSession.getModuleDescriptor());
PropertyDescriptor descriptor = (PropertyDescriptor) resolveSession.resolveToDescriptor(jetProperty); PropertyDescriptor descriptor = (PropertyDescriptor) resolveSession.resolveToDescriptor(jetProperty);
@@ -274,7 +277,8 @@ public class ResolveElementCache {
BindingTrace trace, BindingTrace trace,
JetFile file JetFile file
) { ) {
BodyResolver bodyResolver = createBodyResolverWithEmptyContext(trace, file, resolveSession.getModuleDescriptor()); BodyResolver bodyResolver = createBodyResolverWithEmptyContext(resolveSession.getStorageManager(),
trace, file, resolveSession.getModuleDescriptor());
JetScope scope = resolveSession.getInjector().getScopeProvider().getResolutionScopeForDeclaration(namedFunction); JetScope scope = resolveSession.getInjector().getScopeProvider().getResolutionScopeForDeclaration(namedFunction);
FunctionDescriptor functionDescriptor = (FunctionDescriptor) resolveSession.resolveToDescriptor(namedFunction); FunctionDescriptor functionDescriptor = (FunctionDescriptor) resolveSession.resolveToDescriptor(namedFunction);
bodyResolver.resolveFunctionBody(trace, namedFunction, functionDescriptor, scope); bodyResolver.resolveFunctionBody(trace, namedFunction, functionDescriptor, scope);
@@ -286,7 +290,8 @@ public class ResolveElementCache {
BindingTrace trace, BindingTrace trace,
JetFile file JetFile file
) { ) {
BodyResolver bodyResolver = createBodyResolverWithEmptyContext(trace, file, resolveSession.getModuleDescriptor()); BodyResolver bodyResolver = createBodyResolverWithEmptyContext(resolveSession.getStorageManager(),
trace, file, resolveSession.getModuleDescriptor());
JetScope scope = resolveSession.getInjector().getScopeProvider().getResolutionScopeForDeclaration(klass); JetScope scope = resolveSession.getInjector().getScopeProvider().getResolutionScopeForDeclaration(klass);
ClassDescriptor classDescriptor = (ClassDescriptor) resolveSession.resolveToDescriptor(klass); ClassDescriptor classDescriptor = (ClassDescriptor) resolveSession.resolveToDescriptor(klass);
@@ -297,14 +302,15 @@ public class ResolveElementCache {
} }
private static boolean initializerAdditionalResolve( private static boolean initializerAdditionalResolve(
KotlinCodeAnalyzer analyzer, ResolveSession resolveSession,
JetClassInitializer classInitializer, JetClassInitializer classInitializer,
BindingTrace trace, BindingTrace trace,
JetFile file JetFile file
) { ) {
BodyResolver bodyResolver = createBodyResolverWithEmptyContext(trace, file, analyzer.getModuleDescriptor()); BodyResolver bodyResolver = createBodyResolverWithEmptyContext(resolveSession.getStorageManager(),
trace, file, resolveSession.getModuleDescriptor());
JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(classInitializer, JetClassOrObject.class); JetClassOrObject classOrObject = PsiTreeUtil.getParentOfType(classInitializer, JetClassOrObject.class);
LazyClassDescriptor classOrObjectDescriptor = (LazyClassDescriptor) analyzer.resolveToDescriptor(classOrObject); LazyClassDescriptor classOrObjectDescriptor = (LazyClassDescriptor) resolveSession.resolveToDescriptor(classOrObject);
bodyResolver.resolveAnonymousInitializers(classOrObject, classOrObjectDescriptor.getUnsubstitutedPrimaryConstructor(), bodyResolver.resolveAnonymousInitializers(classOrObject, classOrObjectDescriptor.getUnsubstitutedPrimaryConstructor(),
classOrObjectDescriptor.getScopeForPropertyInitializerResolution()); classOrObjectDescriptor.getScopeForPropertyInitializerResolution());
@@ -314,17 +320,19 @@ public class ResolveElementCache {
private static BodyResolver createBodyResolver(BindingTrace trace, JetFile file, BodyResolveContextForLazy bodyResolveContext, private static BodyResolver createBodyResolver(BindingTrace trace, JetFile file, BodyResolveContextForLazy bodyResolveContext,
ModuleDescriptor module) { ModuleDescriptor module) {
TopDownAnalysisParameters parameters = new TopDownAnalysisParameters( TopDownAnalysisParameters parameters = new TopDownAnalysisParameters(
bodyResolveContext.getStorageManager(),
Predicates.<PsiFile>alwaysTrue(), false, true, Collections.<AnalyzerScriptParameter>emptyList()); Predicates.<PsiFile>alwaysTrue(), false, true, Collections.<AnalyzerScriptParameter>emptyList());
InjectorForBodyResolve bodyResolve = new InjectorForBodyResolve(file.getProject(), parameters, trace, bodyResolveContext, module); InjectorForBodyResolve bodyResolve = new InjectorForBodyResolve(file.getProject(), parameters, trace, bodyResolveContext, module);
return bodyResolve.getBodyResolver(); return bodyResolve.getBodyResolver();
} }
private static BodyResolver createBodyResolverWithEmptyContext( private static BodyResolver createBodyResolverWithEmptyContext(
StorageManager storageManager,
BindingTrace trace, BindingTrace trace,
JetFile file, JetFile file,
ModuleDescriptor module ModuleDescriptor module
) { ) {
return createBodyResolver(trace, file, EMPTY_CONTEXT, module); return createBodyResolver(trace, file, new BodyResolveContextForLazy(storageManager, Functions.<JetScope>constant(null)), module);
} }
private static JetScope getExpressionResolutionScope(@NotNull ResolveSession resolveSession, @NotNull JetExpression expression) { private static JetScope getExpressionResolutionScope(@NotNull ResolveSession resolveSession, @NotNull JetExpression expression) {
@@ -413,12 +421,19 @@ public class ResolveElementCache {
private static class BodyResolveContextForLazy implements BodiesResolveContext { private static class BodyResolveContextForLazy implements BodiesResolveContext {
private final StorageManager storageManager;
private final Function<? super JetDeclaration, JetScope> declaringScopes; private final Function<? super JetDeclaration, JetScope> declaringScopes;
private BodyResolveContextForLazy(@NotNull Function<? super JetDeclaration, JetScope> declaringScopes) { private BodyResolveContextForLazy(StorageManager storageManager, @NotNull Function<? super JetDeclaration, JetScope> declaringScopes) {
this.storageManager = storageManager;
this.declaringScopes = declaringScopes; this.declaringScopes = declaringScopes;
} }
@Override
public StorageManager getStorageManager() {
return storageManager;
}
@Override @Override
public Collection<JetFile> getFiles() { public Collection<JetFile> getFiles() {
return Collections.emptySet(); return Collections.emptySet();
@@ -44,6 +44,7 @@ import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.renderer.DescriptorRenderer; import org.jetbrains.jet.renderer.DescriptorRenderer;
import org.jetbrains.jet.storage.LockBasedStorageManager;
import org.jetbrains.jet.utils.ExceptionUtils; import org.jetbrains.jet.utils.ExceptionUtils;
import java.io.File; import java.io.File;
@@ -84,6 +85,7 @@ public class BuiltInsReferenceResolver extends AbstractProjectComponent {
@Override @Override
public void run() { public void run() {
TopDownAnalysisParameters topDownAnalysisParameters = new TopDownAnalysisParameters( TopDownAnalysisParameters topDownAnalysisParameters = new TopDownAnalysisParameters(
new LockBasedStorageManager(),
Predicates.<PsiFile>alwaysFalse(), true, false, Collections.<AnalyzerScriptParameter>emptyList()); Predicates.<PsiFile>alwaysFalse(), true, false, Collections.<AnalyzerScriptParameter>emptyList());
ModuleDescriptorImpl module = new ModuleDescriptorImpl( ModuleDescriptorImpl module = new ModuleDescriptorImpl(
Name.special("<fake_module>"), Collections.<ImportPath>emptyList(), PlatformToKotlinClassMap.EMPTY); Name.special("<fake_module>"), Collections.<ImportPath>emptyList(), PlatformToKotlinClassMap.EMPTY);
@@ -22,7 +22,7 @@ import org.jetbrains.jet.lang.resolve.BodyResolver;
import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer; import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer;
import org.jetbrains.jet.lang.resolve.DeclarationsChecker; import org.jetbrains.jet.lang.resolve.DeclarationsChecker;
import org.jetbrains.jet.lang.resolve.DescriptorResolver; import org.jetbrains.jet.lang.resolve.DescriptorResolver;
import org.jetbrains.jet.storage.LockBasedStorageManager; import org.jetbrains.jet.storage.StorageManager;
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider; import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters; import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
@@ -61,7 +61,7 @@ public class InjectorForTopDownAnalyzerForJs {
private final ControlFlowAnalyzer controlFlowAnalyzer; private final ControlFlowAnalyzer controlFlowAnalyzer;
private final DeclarationsChecker declarationsChecker; private final DeclarationsChecker declarationsChecker;
private final DescriptorResolver descriptorResolver; private final DescriptorResolver descriptorResolver;
private final LockBasedStorageManager storageManager; private final StorageManager storageManager;
private final CallResolverExtensionProvider callResolverExtensionProvider; private final CallResolverExtensionProvider callResolverExtensionProvider;
private final Project project; private final Project project;
private final TopDownAnalysisParameters topDownAnalysisParameters; private final TopDownAnalysisParameters topDownAnalysisParameters;
@@ -101,7 +101,7 @@ public class InjectorForTopDownAnalyzerForJs {
this.controlFlowAnalyzer = new ControlFlowAnalyzer(); this.controlFlowAnalyzer = new ControlFlowAnalyzer();
this.declarationsChecker = new DeclarationsChecker(); this.declarationsChecker = new DeclarationsChecker();
this.descriptorResolver = new DescriptorResolver(); this.descriptorResolver = new DescriptorResolver();
this.storageManager = new LockBasedStorageManager(); this.storageManager = topDownAnalysisParameters.getStorageManager();
this.callResolverExtensionProvider = new CallResolverExtensionProvider(); this.callResolverExtensionProvider = new CallResolverExtensionProvider();
this.project = project; this.project = project;
this.topDownAnalysisParameters = topDownAnalysisParameters; this.topDownAnalysisParameters = topDownAnalysisParameters;
@@ -114,7 +114,7 @@ public class InjectorForTopDownAnalyzerForJs {
this.annotationResolver = new AnnotationResolver(); this.annotationResolver = new AnnotationResolver();
this.callResolver = new CallResolver(); this.callResolver = new CallResolver();
this.argumentTypeResolver = new ArgumentTypeResolver(); this.argumentTypeResolver = new ArgumentTypeResolver();
this.expressionTypingServices = new ExpressionTypingServices(); this.expressionTypingServices = new ExpressionTypingServices(storageManager, platformToKotlinClassMap);
this.callExpressionResolver = new CallExpressionResolver(); this.callExpressionResolver = new CallExpressionResolver();
this.typeResolver = new TypeResolver(); this.typeResolver = new TypeResolver();
this.qualifiedExpressionResolver = new QualifiedExpressionResolver(); this.qualifiedExpressionResolver = new QualifiedExpressionResolver();
@@ -162,6 +162,7 @@ public class InjectorForTopDownAnalyzerForJs {
this.descriptorResolver.setAnnotationResolver(annotationResolver); this.descriptorResolver.setAnnotationResolver(annotationResolver);
this.descriptorResolver.setDelegatedPropertyResolver(delegatedPropertyResolver); this.descriptorResolver.setDelegatedPropertyResolver(delegatedPropertyResolver);
this.descriptorResolver.setExpressionTypingServices(expressionTypingServices); this.descriptorResolver.setExpressionTypingServices(expressionTypingServices);
this.descriptorResolver.setStorageManager(storageManager);
this.descriptorResolver.setTypeResolver(typeResolver); this.descriptorResolver.setTypeResolver(typeResolver);
declarationResolver.setAnnotationResolver(annotationResolver); declarationResolver.setAnnotationResolver(annotationResolver);
@@ -187,7 +188,6 @@ public class InjectorForTopDownAnalyzerForJs {
expressionTypingServices.setCallResolver(callResolver); expressionTypingServices.setCallResolver(callResolver);
expressionTypingServices.setDescriptorResolver(descriptorResolver); expressionTypingServices.setDescriptorResolver(descriptorResolver);
expressionTypingServices.setExtensionProvider(callResolverExtensionProvider); expressionTypingServices.setExtensionProvider(callResolverExtensionProvider);
expressionTypingServices.setPlatformToKotlinClassMap(platformToKotlinClassMap);
expressionTypingServices.setProject(project); expressionTypingServices.setProject(project);
expressionTypingServices.setTypeResolver(typeResolver); expressionTypingServices.setTypeResolver(typeResolver);
@@ -34,10 +34,10 @@ import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.*; import org.jetbrains.jet.lang.resolve.*;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSession; import org.jetbrains.jet.lang.resolve.lazy.ResolveSession;
import org.jetbrains.jet.lang.resolve.lazy.declarations.FileBasedDeclarationProviderFactory; import org.jetbrains.jet.lang.resolve.lazy.declarations.FileBasedDeclarationProviderFactory;
import org.jetbrains.jet.storage.LockBasedLazyResolveStorageManager;
import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
import org.jetbrains.jet.storage.LockBasedLazyResolveStorageManager;
import org.jetbrains.jet.storage.LockBasedStorageManager; import org.jetbrains.jet.storage.LockBasedStorageManager;
import org.jetbrains.k2js.config.Config; import org.jetbrains.k2js.config.Config;
@@ -91,7 +91,7 @@ public final class AnalyzerFacadeForJS {
Predicate<PsiFile> completely = Predicates.and(notLibFiles(config.getLibFiles()), filesToAnalyzeCompletely); Predicate<PsiFile> completely = Predicates.and(notLibFiles(config.getLibFiles()), filesToAnalyzeCompletely);
TopDownAnalysisParameters topDownAnalysisParameters = new TopDownAnalysisParameters( TopDownAnalysisParameters topDownAnalysisParameters = new TopDownAnalysisParameters(
completely, false, false, Collections.<AnalyzerScriptParameter>emptyList()); new LockBasedStorageManager(), completely, false, false, Collections.<AnalyzerScriptParameter>emptyList());
ModuleDescriptor libraryModule = config.getLibraryModule(); ModuleDescriptor libraryModule = config.getLibraryModule();
if (libraryModule != null) { if (libraryModule != null) {