Avoid retaining protobuf package within DeserializedPackageFragmentImpl

It's only used for DeserializedPackageMemberScope that's being created
during initialization

At the same time, protobuf objects may be not very light-weight
(see 2e933a165a)

 #KT-24513 Fixed
This commit is contained in:
Denis Zharkov
2018-05-30 14:03:08 +03:00
parent 0a3e8fbe66
commit 01a2330a70
2 changed files with 7 additions and 4 deletions
@@ -30,16 +30,20 @@ abstract class DeserializedPackageFragmentImpl(
fqName: FqName,
storageManager: StorageManager,
module: ModuleDescriptor,
protected val proto: ProtoBuf.PackageFragment,
proto: ProtoBuf.PackageFragment,
private val containerSource: DeserializedContainerSource?
) : DeserializedPackageFragment(fqName, storageManager, module) {
protected val nameResolver = NameResolverImpl(proto.strings, proto.qualifiedNames)
override val classDataFinder = ProtoBasedClassDataFinder(proto, nameResolver) { containerSource ?: SourceElement.NO_SOURCE }
// Temporary storage: until `initialize` is called
private var _proto: ProtoBuf.PackageFragment? = proto
private lateinit var _memberScope: MemberScope
override fun initialize(components: DeserializationComponents) {
val proto = _proto ?: error("Repeated call to DeserializedPackageFragmentImpl::initialize")
_proto = null
_memberScope = DeserializedPackageMemberScope(
this, proto.`package`, nameResolver, containerSource, components,
classNames = {