From 48435531eac442ca1e683ba5f290e72aa59b5897 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Wed, 19 Jun 2013 15:56:25 +0400 Subject: [PATCH] Deserialized scopes rely on storage manager --- .../DeserializedClassDescriptor.java | 6 +-- .../descriptors/DeserializedMemberScope.java | 40 +++++++++---------- .../DeserializedPackageMemberScope.java | 4 +- .../lang/BuiltinsNamespaceDescriptorImpl.java | 1 + 4 files changed, 27 insertions(+), 24 deletions(-) diff --git a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedClassDescriptor.java b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedClassDescriptor.java index 2fb20b3dc6a..e3bb2d762e7 100644 --- a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedClassDescriptor.java +++ b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedClassDescriptor.java @@ -90,7 +90,7 @@ public class DeserializedClassDescriptor extends ClassDescriptorBase implements this.containingDeclaration = containingDeclaration; this.typeConstructor = new DeserializedClassTypeConstructor(typeParameters); - this.memberScope = new DeserializedClassMemberScope(this); + this.memberScope = new DeserializedClassMemberScope(storageManager, this); this.innerClassesScope = new InnerClassesScopeWrapper(memberScope); this.thisAsReceiverParameter = new LazyClassReceiverParameterDescriptor(); @@ -327,8 +327,8 @@ public class DeserializedClassDescriptor extends ClassDescriptorBase implements private static class DeserializedClassMemberScope extends DeserializedMemberScope { private final DeserializedClassDescriptor classDescriptor; - public DeserializedClassMemberScope(@NotNull DeserializedClassDescriptor classDescriptor) { - super(classDescriptor, classDescriptor.deserializer, classDescriptor.classProto.getMembersList()); + public DeserializedClassMemberScope(@NotNull StorageManager storageManager, @NotNull DeserializedClassDescriptor classDescriptor) { + super(storageManager, classDescriptor, classDescriptor.deserializer, classDescriptor.classProto.getMembersList()); this.classDescriptor = classDescriptor; } diff --git a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedMemberScope.java b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedMemberScope.java index 7651ebd8ad5..2b312aa19a8 100644 --- a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedMemberScope.java +++ b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedMemberScope.java @@ -16,22 +16,23 @@ package org.jetbrains.jet.descriptors.serialization.descriptors; +import com.intellij.openapi.util.Computable; +import com.intellij.util.Function; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.descriptors.serialization.DescriptorDeserializer; import org.jetbrains.jet.descriptors.serialization.Flags; import org.jetbrains.jet.descriptors.serialization.ProtoBuf; import org.jetbrains.jet.lang.descriptors.*; -import org.jetbrains.jet.lang.resolve.lazy.storage.MemoizedFunctionToNotNull; -import org.jetbrains.jet.lang.resolve.lazy.storage.MemoizedFunctionToNotNullImpl; -import org.jetbrains.jet.lang.resolve.lazy.storage.NotNullLazyValue; -import org.jetbrains.jet.lang.resolve.lazy.storage.NotNullLazyValueImpl; +import org.jetbrains.jet.lang.resolve.lazy.storage.*; import org.jetbrains.jet.lang.resolve.name.LabelName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import java.util.*; +import static org.jetbrains.jet.lang.resolve.lazy.storage.StorageManager.ReferenceKind.STRONG; + public abstract class DeserializedMemberScope implements JetScope { private static final Filter FUNCTION = new Filter() { @@ -49,6 +50,8 @@ public abstract class DeserializedMemberScope implements JetScope { private final DeclarationDescriptor containingDeclaration; private final DescriptorDeserializer deserializer; + + // Never modified after creation private final Map> membersProtos; private final MemoizedFunctionToNotNull> functions; @@ -57,6 +60,7 @@ public abstract class DeserializedMemberScope implements JetScope { private final NotNullLazyValue> objectDescriptors; public DeserializedMemberScope( + @NotNull StorageManager storageManager, @NotNull DeclarationDescriptor containingDeclaration, @NotNull DescriptorDeserializer deserializer, @NotNull List membersList @@ -65,34 +69,30 @@ public abstract class DeserializedMemberScope implements JetScope { this.deserializer = deserializer; this.membersProtos = groupByName(membersList); - this.functions = new MemoizedFunctionToNotNullImpl>() { - @NotNull + this.functions = storageManager.createMemoizedFunction(new Function>() { @Override - protected Collection doCompute(Name name) { + public Collection fun(Name name) { return computeFunctions(name); } - }; - this.properties = new MemoizedFunctionToNotNullImpl>() { - @NotNull + }, STRONG); + this.properties = storageManager.createMemoizedFunction(new Function>() { @Override - protected Collection doCompute(Name name) { + public Collection fun(Name name) { return computeProperties(name); } - }; - this.allDescriptors = new NotNullLazyValueImpl>() { - @NotNull + }, STRONG); + this.allDescriptors = storageManager.createLazyValue(new Computable>() { @Override - protected Collection doCompute() { + public Collection compute() { return computeAllDescriptors(); } - }; - this.objectDescriptors = new NotNullLazyValueImpl>() { - @NotNull + }); + this.objectDescriptors = storageManager.createLazyValue(new Computable>() { @Override - protected Collection doCompute() { + public Collection compute() { return computeAllObjectDescriptors(); } - }; + }); } @NotNull diff --git a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedPackageMemberScope.java b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedPackageMemberScope.java index 56694a82e42..f036a0d1cb5 100644 --- a/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedPackageMemberScope.java +++ b/compiler/frontend/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedPackageMemberScope.java @@ -11,6 +11,7 @@ import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.resolve.DescriptorUtils; +import org.jetbrains.jet.lang.resolve.lazy.storage.StorageManager; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.name.Name; @@ -25,12 +26,13 @@ public abstract class DeserializedPackageMemberScope extends DeserializedMemberS private final FqName packageFqName; public DeserializedPackageMemberScope( + @NotNull StorageManager storageManager, @NotNull NamespaceDescriptor packageDescriptor, @NotNull DescriptorDeserializer deserializer, @NotNull List membersList, ClassResolver classResolver ) { - super(packageDescriptor, deserializer, membersList); + super(storageManager, packageDescriptor, deserializer, membersList); this.classResolver = classResolver; this.packageFqName = DescriptorUtils.getFQName(packageDescriptor).toSafe(); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/BuiltinsNamespaceDescriptorImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/BuiltinsNamespaceDescriptorImpl.java index b4779125981..c54d4e60448 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/BuiltinsNamespaceDescriptorImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/lang/BuiltinsNamespaceDescriptorImpl.java @@ -94,6 +94,7 @@ class BuiltinsNamespaceDescriptorImpl extends AbstractNamespaceDescriptorImpl { } }; members = new DeserializedPackageMemberScope( + storageManager, this, DescriptorDeserializer.create(this, nameResolver, classResolver, AnnotationDeserializer.UNSUPPORTED), loadCallables(), classResolver