From 829b2822c6d3470b060ddc9ad2a26795f9d9088a Mon Sep 17 00:00:00 2001 From: Georgy Bronnikov Date: Mon, 13 Dec 2021 18:50:20 +0300 Subject: [PATCH] Fir2Ir: adjust FirBasedSignatureComposer for constructors Consatructor's name in the signature should be '', not the name of the constructed class. --- .../fir/backend/jvm/FirJvmMangleComputer.kt | 4 ++-- .../signaturer/FirBasedSignatureComposer.kt | 2 +- .../kotlin/fir/signaturer/FirManglerUtil.kt | 18 ++++++++++++++++++ 3 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirManglerUtil.kt 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 d24bfd6d60e..de1f97678a9 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 @@ -17,13 +17,13 @@ import org.jetbrains.kotlin.fir.resolve.fullyExpandedType import org.jetbrains.kotlin.fir.resolve.providers.firProvider import org.jetbrains.kotlin.fir.resolve.providers.symbolProvider import org.jetbrains.kotlin.fir.resolve.toSymbol +import org.jetbrains.kotlin.fir.signaturer.irName import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.visitors.FirVisitor -import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import org.jetbrains.kotlin.utils.addToStdlib.ifNotEmpty @@ -127,7 +127,7 @@ open class FirJvmMangleComputer( return } - val name = (this as? FirSimpleFunction)?.name ?: SpecialNames.ANONYMOUS + val name = this.irName builder.append(name.asString()) platformSpecificSuffix()?.let { 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 a2f1acc79a0..6972152b3e7 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 @@ -93,7 +93,7 @@ class FirBasedSignatureComposer(private val mangler: FirMangler) : Fir2IrSignatu val classId = containingClassId ?: declaration.containingClass()?.classId val packageName = classId?.packageFqName ?: declaration.symbol.callableId.packageName - val callableName = declaration.symbol.callableId.callableName + val callableName = declaration.irName IdSignature.CommonSignature( packageName.asString(), diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirManglerUtil.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirManglerUtil.kt new file mode 100644 index 00000000000..ecc17741c5b --- /dev/null +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirManglerUtil.kt @@ -0,0 +1,18 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir.signaturer + +import org.jetbrains.kotlin.fir.declarations.* +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.name.SpecialNames + +val FirCallableDeclaration.irName: Name + get() = when (this) { + is FirConstructor -> SpecialNames.INIT + is FirSimpleFunction -> this.name + is FirVariable -> this.name + else -> SpecialNames.ANONYMOUS + }