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() override fun getMemberScope(): JetScope = memberScope()
private inner class IncrementalPackageScope(val packageData: PackageData) : DeserializedPackageMemberScope( private inner class IncrementalPackageScope(val packageData: PackageData) : DeserializedPackageMemberScope(
this@IncrementalPackageFragment, this@IncrementalPackageFragment, packageData.getPackageProto(), packageData.getNameResolver(), deserializationComponents,
packageData.getPackageProto(),
deserializationComponents.createContext(this@IncrementalPackageFragment, packageData.getNameResolver()),
{ listOf() } { listOf() }
) { ) {
override fun filteredMemberProtos(allMemberProtos: Collection<ProtoBuf.Callable>): Collection<ProtoBuf.Callable> { 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.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.descriptors.serialization.JavaProtoBufUtil; 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.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.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor; import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor;
import org.jetbrains.jet.lang.resolve.java.resolver.ErrorReporter; import org.jetbrains.jet.lang.resolve.java.resolver.ErrorReporter;
@@ -65,14 +66,16 @@ public final class DeserializedDescriptorResolver {
String[] data = readData(kotlinClass, PACKAGE_FACADE); String[] data = readData(kotlinClass, PACKAGE_FACADE);
if (data != null) { if (data != null) {
//all classes are included in java scope //all classes are included in java scope
return DescriptorsPackage.DeserializedPackageMemberScope( PackageData packageData = JavaProtoBufUtil.readPackageDataFrom(data);
descriptor, JavaProtoBufUtil.readPackageDataFrom(data), components, return new DeserializedPackageMemberScope(
descriptor, packageData.getPackageProto(), packageData.getNameResolver(), components,
new Function0<Collection<Name>>() { new Function0<Collection<Name>>() {
@Override @Override
public Collection<Name> invoke() { public Collection<Name> invoke() {
return Collections.emptyList(); return Collections.emptyList();
} }
}); }
);
} }
return null; return null;
} }
@@ -45,10 +45,11 @@ class BuiltinsPackageFragment(storageManager: StorageManager, module: ModuleDesc
DeserializedPackageMemberScope( DeserializedPackageMemberScope(
this, this,
loadPackage(), loadPackage(),
nameResolver,
DeserializationComponents( DeserializationComponents(
storageManager, module, BuiltInsClassDataFinder(), AnnotationLoader.UNSUPPORTED, // TODO: support annotations storageManager, module, BuiltInsClassDataFinder(), AnnotationLoader.UNSUPPORTED, // TODO: support annotations
ConstantLoader.UNSUPPORTED, provider, FlexibleTypeCapabilitiesDeserializer.ThrowException ConstantLoader.UNSUPPORTED, provider, FlexibleTypeCapabilitiesDeserializer.ThrowException
).createContext(this, nameResolver), ),
{ readClassNames() } { readClassNames() }
) )
@@ -16,9 +16,8 @@
package org.jetbrains.jet.descriptors.serialization.descriptors 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.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.DeclarationDescriptor
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor
import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor 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.lang.resolve.name.Name
import org.jetbrains.jet.utils.addIfNotNull import org.jetbrains.jet.utils.addIfNotNull
import org.jetbrains.jet.lang.resolve.scopes.DescriptorKindFilter import org.jetbrains.jet.lang.resolve.scopes.DescriptorKindFilter
import org.jetbrains.jet.descriptors.serialization.NameResolver
public fun DeserializedPackageMemberScope(
packageDescriptor: PackageFragmentDescriptor,
packageData: PackageData,
components: DeserializationComponents,
classNames: () -> Collection<Name>
): DeserializedPackageMemberScope = DeserializedPackageMemberScope(
packageDescriptor,
packageData.getPackageProto(),
components.createContext(packageDescriptor, packageData.getNameResolver()),
classNames
)
public open class DeserializedPackageMemberScope( public open class DeserializedPackageMemberScope(
packageDescriptor: PackageFragmentDescriptor, packageDescriptor: PackageFragmentDescriptor,
proto: ProtoBuf.Package, proto: ProtoBuf.Package,
outerContext: DeserializationContext, nameResolver: NameResolver,
components: DeserializationComponents,
classNames: () -> Collection<Name> classNames: () -> Collection<Name>
) : DeserializedMemberScope(outerContext.childContext(packageDescriptor, listOf()), proto.getMemberList()) { ) : DeserializedMemberScope(components.createContext(packageDescriptor, nameResolver), proto.getMemberList()) {
private val packageFqName = packageDescriptor.fqName private val packageFqName = packageDescriptor.fqName
private val classNames = context.components.storageManager.createLazyValue(classNames) 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()}") LOG.error("Could not read annotation data for $packageFqName from ${binaryClassForPackageClass?.getClassId()}")
return Collections.emptyList() return Collections.emptyList()
} }
val packageData = JavaProtoBufUtil.readPackageDataFrom(annotationData)
val membersScope = DeserializedPackageMemberScope( val membersScope = DeserializedPackageMemberScope(
createDummyPackageFragment(packageFqName), createDummyPackageFragment(packageFqName),
JavaProtoBufUtil.readPackageDataFrom(annotationData), packageData.getPackageProto(),
packageData.getNameResolver(),
deserializationComponents deserializationComponents
) { listOf() } ) { listOf() }
return membersScope.getDescriptors() return membersScope.getDescriptors()