Deserializers use storage manager
This commit is contained in:
committed by
Alexander Udalov
parent
48435531ea
commit
d8e2034c71
+6
-4
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.descriptors.serialization;
|
package org.jetbrains.jet.descriptors.serialization;
|
||||||
|
|
||||||
|
import com.intellij.util.Function;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.descriptors.serialization.descriptors.AnnotationDeserializer;
|
import org.jetbrains.jet.descriptors.serialization.descriptors.AnnotationDeserializer;
|
||||||
@@ -23,11 +24,12 @@ import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedClass
|
|||||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||||
import org.jetbrains.jet.lang.resolve.lazy.storage.MemoizedFunctionToNullable;
|
import org.jetbrains.jet.lang.resolve.lazy.storage.MemoizedFunctionToNullable;
|
||||||
import org.jetbrains.jet.lang.resolve.lazy.storage.MemoizedFunctionToNullableImpl;
|
|
||||||
import org.jetbrains.jet.lang.resolve.lazy.storage.StorageManager;
|
import org.jetbrains.jet.lang.resolve.lazy.storage.StorageManager;
|
||||||
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 static org.jetbrains.jet.lang.resolve.lazy.storage.StorageManager.ReferenceKind.STRONG;
|
||||||
|
|
||||||
public abstract class AbstractClassResolver implements ClassResolver {
|
public abstract class AbstractClassResolver implements ClassResolver {
|
||||||
|
|
||||||
private final NestedClassResolver nestedClassResolver;
|
private final NestedClassResolver nestedClassResolver;
|
||||||
@@ -51,9 +53,9 @@ public abstract class AbstractClassResolver implements ClassResolver {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
this.findClass = new MemoizedFunctionToNullableImpl<ClassId, ClassDescriptor>() {
|
this.findClass = storageManager.createMemoizedFunctionWithNullableValues(new Function<ClassId, ClassDescriptor>() {
|
||||||
@Override
|
@Override
|
||||||
protected ClassDescriptor doCompute(ClassId classId) {
|
public ClassDescriptor fun(ClassId classId) {
|
||||||
ClassData classData = getClassData(classId);
|
ClassData classData = getClassData(classId);
|
||||||
if (classData == null) {
|
if (classData == null) {
|
||||||
return null;
|
return null;
|
||||||
@@ -73,7 +75,7 @@ public abstract class AbstractClassResolver implements ClassResolver {
|
|||||||
classDescriptorCreated(classDescriptor);
|
classDescriptorCreated(classDescriptor);
|
||||||
return classDescriptor;
|
return classDescriptor;
|
||||||
}
|
}
|
||||||
};
|
}, STRONG);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|||||||
+15
-10
@@ -22,42 +22,44 @@ import org.jetbrains.jet.descriptors.serialization.descriptors.AnnotationDeseria
|
|||||||
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedClassDescriptor;
|
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedClassDescriptor;
|
||||||
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedTypeParameterDescriptor;
|
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedTypeParameterDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
import org.jetbrains.jet.lang.descriptors.Modality;
|
|
||||||
import org.jetbrains.jet.lang.descriptors.Visibility;
|
|
||||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.impl.*;
|
import org.jetbrains.jet.lang.descriptors.impl.*;
|
||||||
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
|
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.lazy.storage.LockBasedStorageManager;
|
|
||||||
import org.jetbrains.jet.lang.resolve.lazy.storage.StorageManager;
|
import org.jetbrains.jet.lang.resolve.lazy.storage.StorageManager;
|
||||||
import org.jetbrains.jet.lang.types.Variance;
|
import org.jetbrains.jet.lang.types.Variance;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import static org.jetbrains.jet.descriptors.serialization.ProtoBuf.*;
|
import static org.jetbrains.jet.descriptors.serialization.ProtoBuf.Callable;
|
||||||
|
import static org.jetbrains.jet.descriptors.serialization.ProtoBuf.TypeParameter;
|
||||||
import static org.jetbrains.jet.descriptors.serialization.TypeDeserializer.TypeParameterResolver.NONE;
|
import static org.jetbrains.jet.descriptors.serialization.TypeDeserializer.TypeParameterResolver.NONE;
|
||||||
|
|
||||||
public class DescriptorDeserializer {
|
public class DescriptorDeserializer {
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static DescriptorDeserializer create(
|
public static DescriptorDeserializer create(
|
||||||
|
@NotNull StorageManager storageManager,
|
||||||
@NotNull DeclarationDescriptor containingDeclaration,
|
@NotNull DeclarationDescriptor containingDeclaration,
|
||||||
@NotNull NameResolver nameResolver,
|
@NotNull NameResolver nameResolver,
|
||||||
@NotNull ClassResolver classResolver,
|
@NotNull ClassResolver classResolver,
|
||||||
@NotNull AnnotationDeserializer annotationDeserializer
|
@NotNull AnnotationDeserializer annotationDeserializer
|
||||||
) {
|
) {
|
||||||
return new DescriptorDeserializer(
|
return new DescriptorDeserializer(storageManager,
|
||||||
new TypeDeserializer(null, nameResolver, classResolver, "Deserializer for " + containingDeclaration, NONE),
|
new TypeDeserializer(storageManager, null, nameResolver, classResolver, "Deserializer for " + containingDeclaration, NONE),
|
||||||
containingDeclaration, nameResolver, annotationDeserializer);
|
containingDeclaration, nameResolver, annotationDeserializer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static DescriptorDeserializer create(
|
public static DescriptorDeserializer create(
|
||||||
|
@NotNull StorageManager storageManager,
|
||||||
@NotNull TypeDeserializer typeDeserializer,
|
@NotNull TypeDeserializer typeDeserializer,
|
||||||
@NotNull DeclarationDescriptor containingDeclaration,
|
@NotNull DeclarationDescriptor containingDeclaration,
|
||||||
@NotNull NameResolver nameResolver,
|
@NotNull NameResolver nameResolver,
|
||||||
@NotNull AnnotationDeserializer annotationDeserializer
|
@NotNull AnnotationDeserializer annotationDeserializer
|
||||||
) {
|
) {
|
||||||
return new DescriptorDeserializer(typeDeserializer, containingDeclaration, nameResolver, annotationDeserializer);
|
return new DescriptorDeserializer(storageManager, typeDeserializer, containingDeclaration, nameResolver, annotationDeserializer);
|
||||||
}
|
}
|
||||||
|
|
||||||
private final DeclarationDescriptor containingDeclaration;
|
private final DeclarationDescriptor containingDeclaration;
|
||||||
@@ -65,14 +67,16 @@ public class DescriptorDeserializer {
|
|||||||
private final TypeDeserializer typeDeserializer;
|
private final TypeDeserializer typeDeserializer;
|
||||||
private final AnnotationDeserializer annotationDeserializer;
|
private final AnnotationDeserializer annotationDeserializer;
|
||||||
|
|
||||||
private final StorageManager storageManager = new LockBasedStorageManager();
|
private final StorageManager storageManager;
|
||||||
|
|
||||||
private DescriptorDeserializer(
|
private DescriptorDeserializer(
|
||||||
|
@NotNull StorageManager storageManager,
|
||||||
@NotNull TypeDeserializer typeDeserializer,
|
@NotNull TypeDeserializer typeDeserializer,
|
||||||
@NotNull DeclarationDescriptor containingDeclaration,
|
@NotNull DeclarationDescriptor containingDeclaration,
|
||||||
@NotNull NameResolver nameResolver,
|
@NotNull NameResolver nameResolver,
|
||||||
@NotNull AnnotationDeserializer annotationDeserializer
|
@NotNull AnnotationDeserializer annotationDeserializer
|
||||||
) {
|
) {
|
||||||
|
this.storageManager = storageManager;
|
||||||
this.typeDeserializer = typeDeserializer;
|
this.typeDeserializer = typeDeserializer;
|
||||||
this.containingDeclaration = containingDeclaration;
|
this.containingDeclaration = containingDeclaration;
|
||||||
this.nameResolver = nameResolver;
|
this.nameResolver = nameResolver;
|
||||||
@@ -96,6 +100,7 @@ public class DescriptorDeserializer {
|
|||||||
@NotNull final List<TypeParameterDescriptor> typeParameters
|
@NotNull final List<TypeParameterDescriptor> typeParameters
|
||||||
) {
|
) {
|
||||||
TypeDeserializer childTypeDeserializer = new TypeDeserializer(
|
TypeDeserializer childTypeDeserializer = new TypeDeserializer(
|
||||||
|
storageManager,
|
||||||
typeDeserializer, "Child deserializer for " + descriptor,
|
typeDeserializer, "Child deserializer for " + descriptor,
|
||||||
new TypeDeserializer.TypeParameterResolver() {
|
new TypeDeserializer.TypeParameterResolver() {
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -106,7 +111,7 @@ public class DescriptorDeserializer {
|
|||||||
return descriptors;
|
return descriptors;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return create(childTypeDeserializer, descriptor, nameResolver, annotationDeserializer);
|
return create(storageManager, childTypeDeserializer, descriptor, nameResolver, annotationDeserializer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
|||||||
+9
-4
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.descriptors.serialization;
|
package org.jetbrains.jet.descriptors.serialization;
|
||||||
|
|
||||||
|
import com.intellij.util.Function;
|
||||||
import gnu.trove.TIntObjectHashMap;
|
import gnu.trove.TIntObjectHashMap;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
@@ -33,6 +34,8 @@ import java.util.ArrayList;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.jetbrains.jet.lang.resolve.lazy.storage.StorageManager.ReferenceKind.STRONG;
|
||||||
|
|
||||||
public class TypeDeserializer {
|
public class TypeDeserializer {
|
||||||
|
|
||||||
public interface TypeParameterResolver {
|
public interface TypeParameterResolver {
|
||||||
@@ -60,14 +63,16 @@ public class TypeDeserializer {
|
|||||||
private final String debugName;
|
private final String debugName;
|
||||||
|
|
||||||
public TypeDeserializer(
|
public TypeDeserializer(
|
||||||
|
@NotNull StorageManager storageManager,
|
||||||
@NotNull TypeDeserializer parent,
|
@NotNull TypeDeserializer parent,
|
||||||
@NotNull String debugName,
|
@NotNull String debugName,
|
||||||
@NotNull TypeParameterResolver typeParameterResolver
|
@NotNull TypeParameterResolver typeParameterResolver
|
||||||
) {
|
) {
|
||||||
this(parent, parent.nameResolver, parent.classResolver, debugName, typeParameterResolver);
|
this(storageManager, parent, parent.nameResolver, parent.classResolver, debugName, typeParameterResolver);
|
||||||
}
|
}
|
||||||
|
|
||||||
public TypeDeserializer(
|
public TypeDeserializer(
|
||||||
|
@NotNull StorageManager storageManager,
|
||||||
@Nullable TypeDeserializer parent,
|
@Nullable TypeDeserializer parent,
|
||||||
@NotNull NameResolver nameResolver,
|
@NotNull NameResolver nameResolver,
|
||||||
@NotNull ClassResolver classResolver,
|
@NotNull ClassResolver classResolver,
|
||||||
@@ -83,12 +88,12 @@ public class TypeDeserializer {
|
|||||||
typeParameterDescriptors.put(typeParameterDescriptor.getProtoId(), typeParameterDescriptor);
|
typeParameterDescriptors.put(typeParameterDescriptor.getProtoId(), typeParameterDescriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.classDescriptors = new MemoizedFunctionToNullableImpl<Integer, ClassDescriptor>() {
|
this.classDescriptors = storageManager.createMemoizedFunctionWithNullableValues(new Function<Integer, ClassDescriptor>() {
|
||||||
@Override
|
@Override
|
||||||
protected ClassDescriptor doCompute(@NotNull Integer fqNameIndex) {
|
public ClassDescriptor fun(Integer fqNameIndex) {
|
||||||
return computeClassDescriptor(fqNameIndex);
|
return computeClassDescriptor(fqNameIndex);
|
||||||
}
|
}
|
||||||
};
|
}, STRONG);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
|||||||
+3
-2
@@ -81,9 +81,10 @@ public class DeserializedClassDescriptor extends ClassDescriptorBase implements
|
|||||||
this.classProto = classProto;
|
this.classProto = classProto;
|
||||||
this.name = nameResolver.getName(classProto.getName());
|
this.name = nameResolver.getName(classProto.getName());
|
||||||
|
|
||||||
TypeDeserializer notNullTypeDeserializer = new TypeDeserializer(outerTypeDeserializer, nameResolver, classResolver,
|
TypeDeserializer notNullTypeDeserializer = new TypeDeserializer(storageManager, outerTypeDeserializer, nameResolver, classResolver,
|
||||||
"Deserializer for class " + name, NONE);
|
"Deserializer for class " + name, NONE);
|
||||||
DescriptorDeserializer outerDeserializer = DescriptorDeserializer.create(notNullTypeDeserializer, this, nameResolver, annotationResolver);
|
DescriptorDeserializer outerDeserializer = DescriptorDeserializer.create(storageManager, notNullTypeDeserializer,
|
||||||
|
this, nameResolver, annotationResolver);
|
||||||
List<TypeParameterDescriptor> typeParameters = new ArrayList<TypeParameterDescriptor>(classProto.getTypeParametersCount());
|
List<TypeParameterDescriptor> typeParameters = new ArrayList<TypeParameterDescriptor>(classProto.getTypeParametersCount());
|
||||||
this.deserializer = outerDeserializer.createChildDeserializer(this, classProto.getTypeParametersList(), typeParameters);
|
this.deserializer = outerDeserializer.createChildDeserializer(this, classProto.getTypeParametersList(), typeParameters);
|
||||||
this.typeDeserializer = deserializer.getTypeDeserializer();
|
this.typeDeserializer = deserializer.getTypeDeserializer();
|
||||||
|
|||||||
+1
-1
@@ -96,7 +96,7 @@ class BuiltinsNamespaceDescriptorImpl extends AbstractNamespaceDescriptorImpl {
|
|||||||
members = new DeserializedPackageMemberScope(
|
members = new DeserializedPackageMemberScope(
|
||||||
storageManager,
|
storageManager,
|
||||||
this,
|
this,
|
||||||
DescriptorDeserializer.create(this, nameResolver, classResolver, AnnotationDeserializer.UNSUPPORTED),
|
DescriptorDeserializer.create(storageManager, this, nameResolver, classResolver, AnnotationDeserializer.UNSUPPORTED),
|
||||||
loadCallables(), classResolver
|
loadCallables(), classResolver
|
||||||
) {
|
) {
|
||||||
private final NotNullLazyValue<Collection<Name>> classNames = new NotNullLazyValueImpl<Collection<Name>>() {
|
private final NotNullLazyValue<Collection<Name>> classNames = new NotNullLazyValueImpl<Collection<Name>>() {
|
||||||
|
|||||||
+2
-1
@@ -224,7 +224,8 @@ public abstract class AbstractDescriptorSerializationTest extends KotlinTestWith
|
|||||||
}
|
}
|
||||||
|
|
||||||
DescriptorDeserializer deserializer =
|
DescriptorDeserializer deserializer =
|
||||||
DescriptorDeserializer.create(namespace, new NameResolver(simpleNames, qualifiedNames), classResolver, UNSUPPORTED);
|
DescriptorDeserializer.create(new LockBasedStorageManager(), namespace, new NameResolver(simpleNames, qualifiedNames),
|
||||||
|
classResolver, UNSUPPORTED);
|
||||||
for (ProtoBuf.Callable proto : callableProtos) {
|
for (ProtoBuf.Callable proto : callableProtos) {
|
||||||
CallableMemberDescriptor descriptor = deserializer.loadCallable(proto);
|
CallableMemberDescriptor descriptor = deserializer.loadCallable(proto);
|
||||||
if (descriptor instanceof FunctionDescriptor) {
|
if (descriptor instanceof FunctionDescriptor) {
|
||||||
|
|||||||
+1
-1
@@ -198,7 +198,7 @@ public class BuiltinsDeserializationTest extends KotlinTestWithEnvironment {
|
|||||||
) {
|
) {
|
||||||
DescriptorDeserializer descriptorDeserializer;
|
DescriptorDeserializer descriptorDeserializer;
|
||||||
descriptorDeserializer =
|
descriptorDeserializer =
|
||||||
DescriptorDeserializer.create(actualNamespace, nameResolver, classResolver, AnnotationDeserializer.UNSUPPORTED);
|
DescriptorDeserializer.create(new LockBasedStorageManager(), actualNamespace, nameResolver, classResolver, AnnotationDeserializer.UNSUPPORTED);
|
||||||
for (ProtoBuf.Callable callableProto : callableProtos) {
|
for (ProtoBuf.Callable callableProto : callableProtos) {
|
||||||
CallableMemberDescriptor callableMemberDescriptor = descriptorDeserializer.loadCallable(callableProto);
|
CallableMemberDescriptor callableMemberDescriptor = descriptorDeserializer.loadCallable(callableProto);
|
||||||
if (callableMemberDescriptor instanceof PropertyDescriptor) {
|
if (callableMemberDescriptor instanceof PropertyDescriptor) {
|
||||||
|
|||||||
Reference in New Issue
Block a user