Using common storage manager for all lazy services
This commit is contained in:
+6
-1
@@ -18,6 +18,7 @@ package org.jetbrains.jet.di;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||
import org.jetbrains.jet.storage.LockBasedStorageManager;
|
||||
import org.jetbrains.jet.lang.resolve.java.JavaClassFinderImpl;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedExternalSignatureResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedJavaResolverCache;
|
||||
@@ -49,6 +50,7 @@ public class InjectorForJavaDescriptorResolver {
|
||||
|
||||
private final Project project;
|
||||
private final BindingTrace bindingTrace;
|
||||
private final LockBasedStorageManager storageManager;
|
||||
private final JavaClassFinderImpl javaClassFinder;
|
||||
private final TraceBasedExternalSignatureResolver traceBasedExternalSignatureResolver;
|
||||
private final TraceBasedJavaResolverCache traceBasedJavaResolverCache;
|
||||
@@ -79,6 +81,7 @@ public class InjectorForJavaDescriptorResolver {
|
||||
) {
|
||||
this.project = project;
|
||||
this.bindingTrace = bindingTrace;
|
||||
this.storageManager = new LockBasedStorageManager();
|
||||
this.javaClassFinder = new JavaClassFinderImpl();
|
||||
this.traceBasedExternalSignatureResolver = new TraceBasedExternalSignatureResolver();
|
||||
this.traceBasedJavaResolverCache = new TraceBasedJavaResolverCache();
|
||||
@@ -93,7 +96,7 @@ public class InjectorForJavaDescriptorResolver {
|
||||
this.javaAnnotationArgumentResolver = new JavaAnnotationArgumentResolver();
|
||||
this.javaClassResolver = new JavaClassResolver();
|
||||
this.deserializedDescriptorResolver = new DeserializedDescriptorResolver();
|
||||
this.annotationDescriptorDeserializer = new AnnotationDescriptorDeserializer();
|
||||
this.annotationDescriptorDeserializer = new AnnotationDescriptorDeserializer(storageManager);
|
||||
this.javaFunctionResolver = new JavaFunctionResolver();
|
||||
this.javaTypeParameterResolver = new JavaTypeParameterResolver();
|
||||
this.javaTypeTransformer = new JavaTypeTransformer();
|
||||
@@ -126,6 +129,7 @@ public class InjectorForJavaDescriptorResolver {
|
||||
this.javaDescriptorResolver.setModule(module);
|
||||
this.javaDescriptorResolver.setPackageFragmentProvider(javaPackageFragmentProvider);
|
||||
this.javaDescriptorResolver.setSignatureChecker(psiBasedMethodSignatureChecker);
|
||||
this.javaDescriptorResolver.setStorageManager(storageManager);
|
||||
|
||||
javaPackageFragmentProvider.setCache(traceBasedJavaResolverCache);
|
||||
javaPackageFragmentProvider.setDeserializedDescriptorResolver(deserializedDescriptorResolver);
|
||||
@@ -158,6 +162,7 @@ public class InjectorForJavaDescriptorResolver {
|
||||
deserializedDescriptorResolver.setErrorReporter(traceBasedErrorReporter);
|
||||
deserializedDescriptorResolver.setJavaDescriptorResolver(javaDescriptorResolver);
|
||||
deserializedDescriptorResolver.setJavaPackageFragmentProvider(javaPackageFragmentProvider);
|
||||
deserializedDescriptorResolver.setStorageManager(storageManager);
|
||||
|
||||
annotationDescriptorDeserializer.setErrorReporter(traceBasedErrorReporter);
|
||||
annotationDescriptorDeserializer.setJavaDescriptorResolver(javaDescriptorResolver);
|
||||
|
||||
+6
-1
@@ -22,6 +22,7 @@ import org.jetbrains.jet.lang.resolve.BodyResolver;
|
||||
import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer;
|
||||
import org.jetbrains.jet.lang.resolve.DeclarationsChecker;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
|
||||
import org.jetbrains.jet.storage.LockBasedStorageManager;
|
||||
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
|
||||
@@ -81,6 +82,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
||||
private final ControlFlowAnalyzer controlFlowAnalyzer;
|
||||
private final DeclarationsChecker declarationsChecker;
|
||||
private final DescriptorResolver descriptorResolver;
|
||||
private final LockBasedStorageManager storageManager;
|
||||
private final CallResolverExtensionProvider callResolverExtensionProvider;
|
||||
private final Project project;
|
||||
private final TopDownAnalysisParameters topDownAnalysisParameters;
|
||||
@@ -141,6 +143,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
||||
this.controlFlowAnalyzer = new ControlFlowAnalyzer();
|
||||
this.declarationsChecker = new DeclarationsChecker();
|
||||
this.descriptorResolver = new DescriptorResolver();
|
||||
this.storageManager = new LockBasedStorageManager();
|
||||
this.callResolverExtensionProvider = new CallResolverExtensionProvider();
|
||||
this.project = project;
|
||||
this.topDownAnalysisParameters = topDownAnalysisParameters;
|
||||
@@ -180,7 +183,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
||||
this.javaAnnotationArgumentResolver = new JavaAnnotationArgumentResolver();
|
||||
this.javaTypeTransformer = new JavaTypeTransformer();
|
||||
this.deserializedDescriptorResolver = new DeserializedDescriptorResolver();
|
||||
this.annotationDescriptorDeserializer = new AnnotationDescriptorDeserializer();
|
||||
this.annotationDescriptorDeserializer = new AnnotationDescriptorDeserializer(storageManager);
|
||||
this.javaFunctionResolver = new JavaFunctionResolver();
|
||||
this.javaTypeParameterResolver = new JavaTypeParameterResolver();
|
||||
this.javaValueParameterResolver = new JavaValueParameterResolver();
|
||||
@@ -235,6 +238,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
||||
this.javaDescriptorResolver.setModule(moduleDescriptor);
|
||||
this.javaDescriptorResolver.setPackageFragmentProvider(javaPackageFragmentProvider);
|
||||
this.javaDescriptorResolver.setSignatureChecker(psiBasedMethodSignatureChecker);
|
||||
this.javaDescriptorResolver.setStorageManager(storageManager);
|
||||
|
||||
javaClassFinder.setProject(project);
|
||||
|
||||
@@ -352,6 +356,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
||||
deserializedDescriptorResolver.setErrorReporter(traceBasedErrorReporter);
|
||||
deserializedDescriptorResolver.setJavaDescriptorResolver(javaDescriptorResolver);
|
||||
deserializedDescriptorResolver.setJavaPackageFragmentProvider(javaPackageFragmentProvider);
|
||||
deserializedDescriptorResolver.setStorageManager(storageManager);
|
||||
|
||||
annotationDescriptorDeserializer.setErrorReporter(traceBasedErrorReporter);
|
||||
annotationDescriptorDeserializer.setJavaDescriptorResolver(javaDescriptorResolver);
|
||||
|
||||
@@ -22,6 +22,7 @@ import org.jetbrains.jet.lang.resolve.BodyResolver;
|
||||
import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer;
|
||||
import org.jetbrains.jet.lang.resolve.DeclarationsChecker;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
|
||||
import org.jetbrains.jet.storage.LockBasedStorageManager;
|
||||
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
|
||||
@@ -60,6 +61,7 @@ public class InjectorForTopDownAnalyzerBasic {
|
||||
private final ControlFlowAnalyzer controlFlowAnalyzer;
|
||||
private final DeclarationsChecker declarationsChecker;
|
||||
private final DescriptorResolver descriptorResolver;
|
||||
private final LockBasedStorageManager storageManager;
|
||||
private final CallResolverExtensionProvider callResolverExtensionProvider;
|
||||
private final Project project;
|
||||
private final TopDownAnalysisParameters topDownAnalysisParameters;
|
||||
@@ -100,6 +102,7 @@ public class InjectorForTopDownAnalyzerBasic {
|
||||
this.controlFlowAnalyzer = new ControlFlowAnalyzer();
|
||||
this.declarationsChecker = new DeclarationsChecker();
|
||||
this.descriptorResolver = new DescriptorResolver();
|
||||
this.storageManager = new LockBasedStorageManager();
|
||||
this.callResolverExtensionProvider = new CallResolverExtensionProvider();
|
||||
this.project = project;
|
||||
this.topDownAnalysisParameters = topDownAnalysisParameters;
|
||||
|
||||
+7
-3
@@ -31,7 +31,7 @@ import org.jetbrains.jet.lang.resolve.kotlin.KotlinClassFinder;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolver;
|
||||
import org.jetbrains.jet.storage.LockBasedStorageManager;
|
||||
import org.jetbrains.jet.storage.StorageManager;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
@@ -46,8 +46,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
||||
|
||||
public static final Name JAVA_ROOT = Name.special("<java_root>");
|
||||
|
||||
private final LockBasedStorageManager storageManager = new LockBasedStorageManager();
|
||||
|
||||
private StorageManager storageManager;
|
||||
private JavaClassResolver classResolver;
|
||||
private JavaPackageFragmentProvider packageFragmentProvider;
|
||||
private JavaClassFinder javaClassFinder;
|
||||
@@ -61,6 +60,11 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
|
||||
private KotlinClassFinder kotlinClassFinder;
|
||||
private ModuleDescriptor module;
|
||||
|
||||
@Inject
|
||||
public void setStorageManager(StorageManager storageManager) {
|
||||
this.storageManager = storageManager;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setClassResolver(JavaClassResolver classResolver) {
|
||||
this.classResolver = classResolver;
|
||||
|
||||
+22
-19
@@ -34,12 +34,15 @@ import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames;
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmClassName;
|
||||
import org.jetbrains.jet.lang.resolve.java.PackageClassUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.*;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.DescriptorResolverUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.ErrorReporter;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationArgumentResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.types.ErrorUtils;
|
||||
import org.jetbrains.jet.storage.LockBasedStorageManager;
|
||||
import org.jetbrains.jet.storage.MemoizedFunctionToNotNull;
|
||||
import org.jetbrains.jet.storage.StorageManager;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.io.IOException;
|
||||
@@ -56,25 +59,25 @@ public class AnnotationDescriptorDeserializer implements AnnotationDeserializer
|
||||
private KotlinClassFinder kotlinClassFinder;
|
||||
private ErrorReporter errorReporter;
|
||||
|
||||
// TODO: a single instance of StorageManager for all computations in resolve-java
|
||||
private final LockBasedStorageManager storageManager = new LockBasedStorageManager();
|
||||
private final MemoizedFunctionToNotNull<KotlinJvmBinaryClass, Map<MemberSignature, List<AnnotationDescriptor>>> memberAnnotations;
|
||||
|
||||
private final MemoizedFunctionToNotNull<KotlinJvmBinaryClass, Map<MemberSignature, List<AnnotationDescriptor>>> memberAnnotations =
|
||||
storageManager.createMemoizedFunction(
|
||||
new Function1<KotlinJvmBinaryClass, Map<MemberSignature, List<AnnotationDescriptor>>>() {
|
||||
@NotNull
|
||||
@Override
|
||||
public Map<MemberSignature, List<AnnotationDescriptor>> invoke(@NotNull KotlinJvmBinaryClass kotlinClass) {
|
||||
try {
|
||||
return loadMemberAnnotationsFromClass(kotlinClass);
|
||||
}
|
||||
catch (IOException e) {
|
||||
errorReporter.reportAnnotationLoadingError(
|
||||
"Error loading member annotations from Kotlin class: " + kotlinClass, e);
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
public AnnotationDescriptorDeserializer(@NotNull StorageManager storageManager) {
|
||||
this.memberAnnotations = storageManager.createMemoizedFunction(
|
||||
new Function1<KotlinJvmBinaryClass, Map<MemberSignature, List<AnnotationDescriptor>>>() {
|
||||
@NotNull
|
||||
@Override
|
||||
public Map<MemberSignature, List<AnnotationDescriptor>> invoke(@NotNull KotlinJvmBinaryClass kotlinClass) {
|
||||
try {
|
||||
return loadMemberAnnotationsFromClass(kotlinClass);
|
||||
}
|
||||
});
|
||||
catch (IOException e) {
|
||||
errorReporter.reportAnnotationLoadingError(
|
||||
"Error loading member annotations from Kotlin class: " + kotlinClass, e);
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setJavaDescriptorResolver(JavaDescriptorResolver javaDescriptorResolver) {
|
||||
|
||||
+7
-2
@@ -33,7 +33,7 @@ import org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||
import org.jetbrains.jet.storage.LockBasedStorageManager;
|
||||
import org.jetbrains.jet.storage.StorageManager;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.Collection;
|
||||
@@ -46,7 +46,7 @@ import static org.jetbrains.jet.lang.resolve.kotlin.header.KotlinClassHeader.Kin
|
||||
public final class DeserializedDescriptorResolver {
|
||||
private AnnotationDescriptorDeserializer annotationDeserializer;
|
||||
|
||||
private final LockBasedStorageManager storageManager = new LockBasedStorageManager();
|
||||
private StorageManager storageManager;
|
||||
|
||||
private JavaPackageFragmentProvider javaPackageFragmentProvider;
|
||||
|
||||
@@ -89,6 +89,11 @@ public final class DeserializedDescriptorResolver {
|
||||
this.errorReporter = errorReporter;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setStorageManager(StorageManager storageManager) {
|
||||
this.storageManager = storageManager;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public ClassDescriptor resolveClass(@NotNull KotlinJvmBinaryClass kotlinClass) {
|
||||
String[] data = readData(kotlinClass, CLASS);
|
||||
|
||||
@@ -26,6 +26,7 @@ import org.jetbrains.jet.codegen.state.JetTypeMapper;
|
||||
import org.jetbrains.jet.di.DependencyInjectorGenerator;
|
||||
import org.jetbrains.jet.di.GivenExpression;
|
||||
import org.jetbrains.jet.di.InjectorForTopDownAnalyzer;
|
||||
import org.jetbrains.jet.di.InstantiateType;
|
||||
import org.jetbrains.jet.lang.PlatformToKotlinClassMap;
|
||||
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
|
||||
@@ -43,6 +44,8 @@ import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider;
|
||||
import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolverDummyImpl;
|
||||
import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
|
||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||
import org.jetbrains.jet.storage.LockBasedStorageManager;
|
||||
import org.jetbrains.jet.storage.StorageManager;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
@@ -149,6 +152,7 @@ public class GenerateInjectors {
|
||||
generator.addParameter(BindingTrace.class);
|
||||
|
||||
// Fields
|
||||
generator.addField(false, StorageManager.class, null, new InstantiateType(LockBasedStorageManager.class));
|
||||
generator.addPublicField(JavaClassFinderImpl.class);
|
||||
generator.addField(TraceBasedExternalSignatureResolver.class);
|
||||
generator.addField(TraceBasedJavaResolverCache.class);
|
||||
@@ -175,6 +179,7 @@ public class GenerateInjectors {
|
||||
generator.addPublicField(ControlFlowAnalyzer.class);
|
||||
generator.addPublicField(DeclarationsChecker.class);
|
||||
generator.addPublicField(DescriptorResolver.class);
|
||||
generator.addField(false, StorageManager.class, null, new InstantiateType(LockBasedStorageManager.class));
|
||||
generator.addField(CallResolverExtensionProvider.class);
|
||||
|
||||
// Parameters
|
||||
|
||||
@@ -22,6 +22,7 @@ import org.jetbrains.jet.lang.resolve.BodyResolver;
|
||||
import org.jetbrains.jet.lang.resolve.ControlFlowAnalyzer;
|
||||
import org.jetbrains.jet.lang.resolve.DeclarationsChecker;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
|
||||
import org.jetbrains.jet.storage.LockBasedStorageManager;
|
||||
import org.jetbrains.jet.lang.resolve.calls.CallResolverExtensionProvider;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters;
|
||||
@@ -60,6 +61,7 @@ public class InjectorForTopDownAnalyzerForJs {
|
||||
private final ControlFlowAnalyzer controlFlowAnalyzer;
|
||||
private final DeclarationsChecker declarationsChecker;
|
||||
private final DescriptorResolver descriptorResolver;
|
||||
private final LockBasedStorageManager storageManager;
|
||||
private final CallResolverExtensionProvider callResolverExtensionProvider;
|
||||
private final Project project;
|
||||
private final TopDownAnalysisParameters topDownAnalysisParameters;
|
||||
@@ -99,6 +101,7 @@ public class InjectorForTopDownAnalyzerForJs {
|
||||
this.controlFlowAnalyzer = new ControlFlowAnalyzer();
|
||||
this.declarationsChecker = new DeclarationsChecker();
|
||||
this.descriptorResolver = new DescriptorResolver();
|
||||
this.storageManager = new LockBasedStorageManager();
|
||||
this.callResolverExtensionProvider = new CallResolverExtensionProvider();
|
||||
this.project = project;
|
||||
this.topDownAnalysisParameters = topDownAnalysisParameters;
|
||||
|
||||
Reference in New Issue
Block a user