diff --git a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibMetadataDeserializationUtils.kt b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibMetadataDeserializationUtils.kt index 1c5ca751ac6..de8db928a07 100644 --- a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibMetadataDeserializationUtils.kt +++ b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibMetadataDeserializationUtils.kt @@ -15,15 +15,16 @@ fun parseModuleHeader(libraryMetadata: ByteArray): KlibMetadataProtoBuf.Header = KlibMetadataProtoBuf.Header.parseFrom(libraryMetadata, KlibMetadataSerializerProtocol.extensionRegistry) interface PackageAccessHandler { - fun loadModuleHeader( - library: KotlinLibrary - ): KlibMetadataProtoBuf.Header = parseModuleHeader(library.moduleHeaderData) + fun loadModuleHeader(library: KotlinLibrary): KlibMetadataProtoBuf.Header + = parseModuleHeader(library.moduleHeaderData) fun loadPackageFragment( library: KotlinLibrary, packageFqName: String, partName: String ): ProtoBuf.PackageFragment = parsePackageFragment(library.packageMetadata(packageFqName, partName)) + + fun markNeededForLink(library: KotlinLibrary, fqName: String) {} } object SimplePackageAccessHandler : PackageAccessHandler diff --git a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibMetadataPackageFragment.kt b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibMetadataPackageFragment.kt index b608ac382c5..1d5e3ed7e3f 100644 --- a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibMetadataPackageFragment.kt +++ b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/KlibMetadataPackageFragment.kt @@ -40,16 +40,18 @@ class KlibMetadataPackageFragment( (packageAccessHandler ?: SimplePackageAccessHandler).loadPackageFragment(library, fqName.asString(), partName) } - // TODO: Do we really need both 'protoForNames' and 'proto' today? val proto: ProtoBuf.PackageFragment - get() = protoForNames + get() { + packageAccessHandler?.markNeededForLink(library, fqName.asString()) + return protoForNames + } private val nameResolver by lazy { NameResolverImpl(protoForNames.strings, protoForNames.qualifiedNames) } override val classDataFinder by lazy { - KlibMetadataClassDataFinder(proto, nameResolver) + KlibMetadataClassDataFinder(protoForNames, nameResolver) } private val _memberScope by lazy { diff --git a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/resolver/impl/KotlinResolvedLibraryImpl.kt b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/resolver/impl/KotlinResolvedLibraryImpl.kt index 0e9c7a2d534..eb584bc304a 100644 --- a/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/resolver/impl/KotlinResolvedLibraryImpl.kt +++ b/compiler/util-klib-metadata/src/org/jetbrains/kotlin/library/metadata/resolver/impl/KotlinResolvedLibraryImpl.kt @@ -22,16 +22,14 @@ class KotlinResolvedLibraryImpl(override val library: KotlinLibrary): KotlinReso override val isDefault: Boolean get() = library.isDefault - override fun loadPackageFragment( + override fun markNeededForLink( library: KotlinLibrary, - packageFqName: String, - partName: String - ): ProtoBuf.PackageFragment { + fqName: String + ) { if (!isNeededForLink // fast path - && !_emptyPackages.contains(packageFqName)) { + && !_emptyPackages.contains(fqName)) { isNeededForLink = true } - return parsePackageFragment(library.packageMetadata(packageFqName, partName)) } override fun toString() = "library=$library, dependsOn=${_resolvedDependencies.joinToString { it.library.toString() }}"