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)
|
KlibMetadataProtoBuf.Header.parseFrom(libraryMetadata, KlibMetadataSerializerProtocol.extensionRegistry)
|
||||||
|
|
||||||
interface PackageAccessHandler {
|
interface PackageAccessHandler {
|
||||||
fun loadModuleHeader(
|
fun loadModuleHeader(library: KotlinLibrary): KlibMetadataProtoBuf.Header
|
||||||
library: KotlinLibrary
|
= parseModuleHeader(library.moduleHeaderData)
|
||||||
): KlibMetadataProtoBuf.Header = parseModuleHeader(library.moduleHeaderData)
|
|
||||||
|
|
||||||
fun loadPackageFragment(
|
fun loadPackageFragment(
|
||||||
library: KotlinLibrary,
|
library: KotlinLibrary,
|
||||||
packageFqName: String,
|
packageFqName: String,
|
||||||
partName: String
|
partName: String
|
||||||
): ProtoBuf.PackageFragment = parsePackageFragment(library.packageMetadata(packageFqName, partName))
|
): ProtoBuf.PackageFragment = parsePackageFragment(library.packageMetadata(packageFqName, partName))
|
||||||
|
|
||||||
|
fun markNeededForLink(library: KotlinLibrary, fqName: String) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
object SimplePackageAccessHandler : PackageAccessHandler
|
object SimplePackageAccessHandler : PackageAccessHandler
|
||||||
|
|||||||
+5
-3
@@ -40,16 +40,18 @@ class KlibMetadataPackageFragment(
|
|||||||
(packageAccessHandler ?: SimplePackageAccessHandler).loadPackageFragment(library, fqName.asString(), partName)
|
(packageAccessHandler ?: SimplePackageAccessHandler).loadPackageFragment(library, fqName.asString(), partName)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Do we really need both 'protoForNames' and 'proto' today?
|
|
||||||
val proto: ProtoBuf.PackageFragment
|
val proto: ProtoBuf.PackageFragment
|
||||||
get() = protoForNames
|
get() {
|
||||||
|
packageAccessHandler?.markNeededForLink(library, fqName.asString())
|
||||||
|
return protoForNames
|
||||||
|
}
|
||||||
|
|
||||||
private val nameResolver by lazy {
|
private val nameResolver by lazy {
|
||||||
NameResolverImpl(protoForNames.strings, protoForNames.qualifiedNames)
|
NameResolverImpl(protoForNames.strings, protoForNames.qualifiedNames)
|
||||||
}
|
}
|
||||||
|
|
||||||
override val classDataFinder by lazy {
|
override val classDataFinder by lazy {
|
||||||
KlibMetadataClassDataFinder(proto, nameResolver)
|
KlibMetadataClassDataFinder(protoForNames, nameResolver)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val _memberScope by lazy {
|
private val _memberScope by lazy {
|
||||||
|
|||||||
+4
-6
@@ -22,16 +22,14 @@ class KotlinResolvedLibraryImpl(override val library: KotlinLibrary): KotlinReso
|
|||||||
override val isDefault: Boolean
|
override val isDefault: Boolean
|
||||||
get() = library.isDefault
|
get() = library.isDefault
|
||||||
|
|
||||||
override fun loadPackageFragment(
|
override fun markNeededForLink(
|
||||||
library: KotlinLibrary,
|
library: KotlinLibrary,
|
||||||
packageFqName: String,
|
fqName: String
|
||||||
partName: String
|
) {
|
||||||
): ProtoBuf.PackageFragment {
|
|
||||||
if (!isNeededForLink // fast path
|
if (!isNeededForLink // fast path
|
||||||
&& !_emptyPackages.contains(packageFqName)) {
|
&& !_emptyPackages.contains(fqName)) {
|
||||||
isNeededForLink = true
|
isNeededForLink = true
|
||||||
}
|
}
|
||||||
return parsePackageFragment(library.packageMetadata(packageFqName, partName))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun toString() = "library=$library, dependsOn=${_resolvedDependencies.joinToString { it.library.toString() }}"
|
override fun toString() = "library=$library, dependsOn=${_resolvedDependencies.joinToString { it.library.toString() }}"
|
||||||
|
|||||||
Reference in New Issue
Block a user