From bfb1ef14f54954547f8b7b7a31454c1797f1501c Mon Sep 17 00:00:00 2001 From: Pavel Kirpichenkov Date: Wed, 21 Feb 2024 20:01:36 +0200 Subject: [PATCH] [Stubs] Fix contract deserialization for non-JVM stubs Types serialized via type table weren't deserialized, which led to missing contract information in stubs. KTIJ-28668 --- .../testData/additionalClsStubInfo/Contracts/Contracts.kt | 2 -- .../kotlin/analysis/decompiler/stub/ClsContractBuilder.kt | 8 +++++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/Contracts/Contracts.kt b/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/Contracts/Contracts.kt index 9b5b0b43b35..d3216e07f7b 100644 --- a/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/Contracts/Contracts.kt +++ b/analysis/decompiled/decompiler-to-file-stubs/testData/additionalClsStubInfo/Contracts/Contracts.kt @@ -1,5 +1,3 @@ -/* KTIJ-28668 */ -// KNM_K2_IGNORE // JVM_FILE_NAME: ContractsKt @file:OptIn(ExperimentalContracts::class) diff --git a/analysis/decompiled/decompiler-to-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/ClsContractBuilder.kt b/analysis/decompiled/decompiler-to-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/ClsContractBuilder.kt index f1159d841b7..8d68d5b6117 100644 --- a/analysis/decompiled/decompiler-to-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/ClsContractBuilder.kt +++ b/analysis/decompiled/decompiler-to-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/ClsContractBuilder.kt @@ -16,6 +16,8 @@ import org.jetbrains.kotlin.psi.stubs.impl.* import org.jetbrains.kotlin.psi.stubs.impl.KotlinContractEffectType.Companion.IGNORE_REFERENCE_PARAMETER_NAME import org.jetbrains.kotlin.serialization.deserialization.ProtoBufContractDeserializer import org.jetbrains.kotlin.serialization.deserialization.getClassId +import org.jetbrains.kotlin.metadata.deserialization.type +import org.jetbrains.kotlin.metadata.deserialization.receiverType class ClsContractBuilder(private val c: ClsStubBuilderContext, private val typeStubBuilder: TypeClsStubBuilder) : ProtoBufContractDeserializer() { @@ -26,9 +28,9 @@ class ClsContractBuilder(private val c: ClsStubBuilderContext, private val typeS override fun extractVariable(valueParameterIndex: Int, owner: ProtoBuf.Function): KtValueParameterReference { val type = if (valueParameterIndex < 0) { - owner.receiverType - } else owner.valueParameterList[valueParameterIndex].type - return if (type.hasClassName() && c.nameResolver.getClassId(type.className) == StandardClassIds.Boolean) { + owner.receiverType(c.typeTable) + } else owner.valueParameterList[valueParameterIndex].type(c.typeTable) + return if (type?.hasClassName() == true && c.nameResolver.getClassId(type.className) == StandardClassIds.Boolean) { KtBooleanValueParameterReference(valueParameterIndex, name = IGNORE_REFERENCE_PARAMETER_NAME) } else KtValueParameterReference(valueParameterIndex, name = IGNORE_REFERENCE_PARAMETER_NAME) }