Fixed native PackageAccessTracker

This commit is contained in:
Alexander Gorshenev
2019-10-01 17:27:31 +03:00
committed by alexander-gorshenev
parent df6dcd646f
commit 147681f335
3 changed files with 13 additions and 12 deletions
@@ -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
@@ -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 {
@@ -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() }}"