Add BinaryVersion to DeserializationContext
This will be useful to implement version-dependent deserialization, which is needed for gradual fixes of issues in metadata #KT-25120 In Progress
This commit is contained in:
+2
@@ -135,6 +135,8 @@ open class CompilerCallbackServicesFacadeServer(
|
||||
|
||||
override fun incrementalDataProvider_getHeaderMetadata(): ByteArray = incrementalDataProvider!!.headerMetadata
|
||||
|
||||
override fun incrementalDataProvider_getMetadataVersion(): IntArray = incrementalDataProvider!!.metadataVersion
|
||||
|
||||
override fun incrementalDataProvider_getCompiledPackageParts() =
|
||||
incrementalDataProvider!!.compiledPackageParts.entries.map {
|
||||
CompiledPackagePart(it.key.path, it.value.metadata, it.value.binaryAst)
|
||||
|
||||
+3
@@ -119,6 +119,9 @@ interface CompilerCallbackServicesFacade : Remote {
|
||||
|
||||
@Throws(RemoteException::class)
|
||||
fun incrementalDataProvider_getCompiledPackageParts(): Collection<CompiledPackagePart>
|
||||
|
||||
@Throws(RemoteException::class)
|
||||
fun incrementalDataProvider_getMetadataVersion(): IntArray
|
||||
}
|
||||
|
||||
class CompiledPackagePart(
|
||||
|
||||
@@ -27,4 +27,9 @@ class RemoteIncrementalDataProvider(val facade: CompilerCallbackServicesFacade,
|
||||
}
|
||||
result
|
||||
}
|
||||
|
||||
override val metadataVersion: IntArray
|
||||
get() = rpcProfiler.withMeasure(this) {
|
||||
facade.incrementalDataProvider_getMetadataVersion()
|
||||
}
|
||||
}
|
||||
|
||||
+8
-3
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.load.kotlin.JvmPackagePartSource
|
||||
import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder
|
||||
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils
|
||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
|
||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmMetadataVersion
|
||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil
|
||||
import org.jetbrains.kotlin.modules.TargetId
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
@@ -88,12 +89,16 @@ class IncrementalPackageFragmentProvider(
|
||||
val jvmBinaryClass =
|
||||
kotlinClassFinder.findKotlinClass(ClassId.topLevel(partName.fqNameForTopLevelClassMaybeWithDollars))
|
||||
|
||||
val metadataVersion =
|
||||
jvmBinaryClass?.classHeader?.metadataVersion
|
||||
?: JvmMetadataVersion.INSTANCE
|
||||
|
||||
DeserializedPackageMemberScope(
|
||||
this, packageProto, nameResolver,
|
||||
JvmPackagePartSource(
|
||||
this, packageProto, nameResolver, metadataVersion,
|
||||
JvmPackagePartSource(
|
||||
partName, facadeName, packageProto, nameResolver, knownJvmBinaryClass = jvmBinaryClass
|
||||
),
|
||||
deserializationComponents, classNames = { emptyList() }
|
||||
deserializationComponents, classNames = { emptyList() }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+5
-4
@@ -38,6 +38,7 @@ import org.jetbrains.kotlin.storage.LockBasedStorageManager
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import org.jetbrains.kotlin.test.TestCaseWithTmpdir
|
||||
import org.jetbrains.kotlin.test.util.RecursiveDescriptorComparator
|
||||
import org.jetbrains.kotlin.utils.JsMetadataVersion
|
||||
import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils
|
||||
import org.jetbrains.kotlin.utils.sure
|
||||
import java.io.File
|
||||
@@ -92,12 +93,12 @@ class KotlinJavascriptSerializerTest : TestCaseWithTmpdir() {
|
||||
|
||||
private fun deserialize(metaFile: File): ModuleDescriptorImpl {
|
||||
val module = KotlinTestUtils.createEmptyModule("<${KotlinTestUtils.TEST_MODULE_NAME}>", JsPlatform.builtIns)
|
||||
val metadata = KotlinJavascriptMetadataUtils.loadMetadata(metaFile)
|
||||
assert(metadata.size == 1)
|
||||
val metadata = KotlinJavascriptMetadataUtils.loadMetadata(metaFile).single()
|
||||
|
||||
val (header, packageFragmentProtos) = readModuleAsProto(metadata.single().body)
|
||||
val (header, packageFragmentProtos) = readModuleAsProto(metadata.body, metadata.version)
|
||||
val provider = createKotlinJavascriptPackageFragmentProvider(
|
||||
LockBasedStorageManager(), module, header, packageFragmentProtos, DeserializationConfiguration.Default, LookupTracker.DO_NOTHING
|
||||
LockBasedStorageManager(), module, header, packageFragmentProtos, metadata.version,
|
||||
DeserializationConfiguration.Default, LookupTracker.DO_NOTHING
|
||||
).sure { "No package fragment provider was created" }
|
||||
|
||||
module.initialize(provider)
|
||||
|
||||
Reference in New Issue
Block a user