Drop secondary DeserializedPackageMemberScope constructor

Create package context only once
This commit is contained in:
Alexander Udalov
2014-11-22 18:39:32 +03:00
parent e1a1c06c3e
commit 5907df92db
5 changed files with 18 additions and 25 deletions
@@ -109,9 +109,7 @@ public class IncrementalPackageFragmentProvider(
override fun getMemberScope(): JetScope = memberScope()
private inner class IncrementalPackageScope(val packageData: PackageData) : DeserializedPackageMemberScope(
this@IncrementalPackageFragment,
packageData.getPackageProto(),
deserializationComponents.createContext(this@IncrementalPackageFragment, packageData.getNameResolver()),
this@IncrementalPackageFragment, packageData.getPackageProto(), packageData.getNameResolver(), deserializationComponents,
{ listOf() }
) {
override fun filteredMemberProtos(allMemberProtos: Collection<ProtoBuf.Callable>): Collection<ProtoBuf.Callable> {
@@ -20,8 +20,9 @@ import kotlin.Function0;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.descriptors.serialization.JavaProtoBufUtil;
import org.jetbrains.jet.descriptors.serialization.PackageData;
import org.jetbrains.jet.descriptors.serialization.context.DeserializationComponents;
import org.jetbrains.jet.descriptors.serialization.descriptors.DescriptorsPackage;
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedPackageMemberScope;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor;
import org.jetbrains.jet.lang.resolve.java.resolver.ErrorReporter;
@@ -65,14 +66,16 @@ public final class DeserializedDescriptorResolver {
String[] data = readData(kotlinClass, PACKAGE_FACADE);
if (data != null) {
//all classes are included in java scope
return DescriptorsPackage.DeserializedPackageMemberScope(
descriptor, JavaProtoBufUtil.readPackageDataFrom(data), components,
PackageData packageData = JavaProtoBufUtil.readPackageDataFrom(data);
return new DeserializedPackageMemberScope(
descriptor, packageData.getPackageProto(), packageData.getNameResolver(), components,
new Function0<Collection<Name>>() {
@Override
public Collection<Name> invoke() {
return Collections.emptyList();
}
});
}
);
}
return null;
}
@@ -45,10 +45,11 @@ class BuiltinsPackageFragment(storageManager: StorageManager, module: ModuleDesc
DeserializedPackageMemberScope(
this,
loadPackage(),
nameResolver,
DeserializationComponents(
storageManager, module, BuiltInsClassDataFinder(), AnnotationLoader.UNSUPPORTED, // TODO: support annotations
ConstantLoader.UNSUPPORTED, provider, FlexibleTypeCapabilitiesDeserializer.ThrowException
).createContext(this, nameResolver),
),
{ readClassNames() }
)
@@ -16,9 +16,8 @@
package org.jetbrains.jet.descriptors.serialization.descriptors
import org.jetbrains.jet.descriptors.serialization.PackageData
import org.jetbrains.jet.descriptors.serialization.ProtoBuf
import org.jetbrains.jet.descriptors.serialization.context.*
import org.jetbrains.jet.descriptors.serialization.context.DeserializationComponents
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor
import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor
@@ -26,25 +25,15 @@ import org.jetbrains.jet.lang.resolve.name.ClassId
import org.jetbrains.jet.lang.resolve.name.Name
import org.jetbrains.jet.utils.addIfNotNull
import org.jetbrains.jet.lang.resolve.scopes.DescriptorKindFilter
public fun DeserializedPackageMemberScope(
packageDescriptor: PackageFragmentDescriptor,
packageData: PackageData,
components: DeserializationComponents,
classNames: () -> Collection<Name>
): DeserializedPackageMemberScope = DeserializedPackageMemberScope(
packageDescriptor,
packageData.getPackageProto(),
components.createContext(packageDescriptor, packageData.getNameResolver()),
classNames
)
import org.jetbrains.jet.descriptors.serialization.NameResolver
public open class DeserializedPackageMemberScope(
packageDescriptor: PackageFragmentDescriptor,
proto: ProtoBuf.Package,
outerContext: DeserializationContext,
nameResolver: NameResolver,
components: DeserializationComponents,
classNames: () -> Collection<Name>
) : DeserializedMemberScope(outerContext.childContext(packageDescriptor, listOf()), proto.getMemberList()) {
) : DeserializedMemberScope(components.createContext(packageDescriptor, nameResolver), proto.getMemberList()) {
private val packageFqName = packageDescriptor.fqName
private val classNames = context.components.storageManager.createLazyValue(classNames)
@@ -63,9 +63,11 @@ public class DeserializerForDecompiler(val packageDirectory: VirtualFile, val di
LOG.error("Could not read annotation data for $packageFqName from ${binaryClassForPackageClass?.getClassId()}")
return Collections.emptyList()
}
val packageData = JavaProtoBufUtil.readPackageDataFrom(annotationData)
val membersScope = DeserializedPackageMemberScope(
createDummyPackageFragment(packageFqName),
JavaProtoBufUtil.readPackageDataFrom(annotationData),
packageData.getPackageProto(),
packageData.getNameResolver(),
deserializationComponents
) { listOf() }
return membersScope.getDescriptors()