From 4b34648327fb3aef07f6fb7732055de556705760 Mon Sep 17 00:00:00 2001 From: Georgy Bronnikov Date: Sun, 26 Dec 2021 16:03:35 +0300 Subject: [PATCH] Fir2Ir: repair computation of IR signatures --- .../kotlin/fir/backend/jvm/FirJvmMangleComputer.kt | 11 +++++++++-- .../fir/signaturer/FirBasedSignatureComposer.kt | 2 +- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmMangleComputer.kt b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmMangleComputer.kt index 17f01ae4819..505eb1b89ba 100644 --- a/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmMangleComputer.kt +++ b/compiler/fir/fir2ir/jvm-backend/src/org/jetbrains/kotlin/fir/backend/jvm/FirJvmMangleComputer.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.backend.common.serialization.mangle.collectForMangle import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticPropertyAccessor import org.jetbrains.kotlin.fir.declarations.utils.isExpect import org.jetbrains.kotlin.fir.declarations.utils.isStatic import org.jetbrains.kotlin.fir.resolve.fullyExpandedType @@ -157,7 +158,8 @@ open class FirJvmMangleComputer( mangleType(builder, it.typeRef.coneType) } - receiverTypeRef?.let { + val receiverType = receiverTypeRef ?: (this as? FirPropertyAccessor)?.propertySymbol?.fir?.receiverTypeRef + receiverType?.let { builder.appendSignature(MangleConstant.EXTENSION_RECEIVER_PREFIX) mangleType(builder, it.coneType) } @@ -323,7 +325,12 @@ open class FirJvmMangleComputer( constructor.mangleFunction(isCtor = true, isStatic = false, constructor) override fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor, data: Boolean) { - propertyAccessor.mangleFunction(isCtor = false, propertyAccessor.isStatic, propertyAccessor.propertySymbol!!.fir) + if (propertyAccessor is FirSyntheticPropertyAccessor) { + // No need to distinguish between the accessor and its delegate. + visitSimpleFunction(propertyAccessor.delegate, data) + } else { + propertyAccessor.mangleFunction(isCtor = false, propertyAccessor.isStatic, propertyAccessor.propertySymbol!!.fir) + } } override fun computeMangle(declaration: FirDeclaration): String { diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirBasedSignatureComposer.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirBasedSignatureComposer.kt index fc7b8cd2b47..4ca0d045d74 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirBasedSignatureComposer.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirBasedSignatureComposer.kt @@ -158,7 +158,7 @@ class FirBasedSignatureComposer(override val mangler: FirMangler) : Fir2IrSignat } private fun isTopLevelPrivate(declaration: FirDeclaration, containingClass: ConeClassLikeLookupTag?): Boolean = - containingClass == null && declaration is FirMemberDeclaration && declaration.visibility == Visibilities.Private + containingClass == null && declaration is FirCallableDeclaration && declaration.visibility == Visibilities.Private private fun FirProperty.getterOrDefault() = getter ?: FirDefaultPropertyGetter(