Fixed native PackageAccessTracker
This commit is contained in:
committed by
alexander-gorshenev
parent
df6dcd646f
commit
147681f335
+4
-3
@@ -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
|
||||
|
||||
+5
-3
@@ -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 {
|
||||
|
||||
+4
-6
@@ -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() }}"
|
||||
|
||||
Reference in New Issue
Block a user