Using common storage manager for all lazy services

This commit is contained in:
Andrey Breslav
2014-01-16 21:44:03 +04:00
parent 559f212cfc
commit 1af71c4dbe
8 changed files with 59 additions and 26 deletions
@@ -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;
@@ -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) {
@@ -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);