From 1ac3355a4180500dae3410369ca6f970928ff2e2 Mon Sep 17 00:00:00 2001 From: Sergej Jaskiewicz Date: Thu, 15 Jun 2023 20:29:31 +0200 Subject: [PATCH] [FIR] Don't mangle FirFields as properties The correct way to mangle a field is to just use its name. This is a step towards fixing KT-57754. It will be fixed in the next commit. --- .../fir/backend/jvm/FirJvmMangleComputer.kt | 19 +++---------------- .../kotlin/fir/backend/FirMangleComputer.kt | 4 ++-- .../ir/descriptors/IrBasedDescriptors.kt | 15 ++++++++++++++- 3 files changed, 19 insertions(+), 19 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 3d55181398d..2b48fc64d13 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 @@ -7,12 +7,10 @@ package org.jetbrains.kotlin.fir.backend.jvm import org.jetbrains.kotlin.backend.common.serialization.mangle.MangleMode import org.jetbrains.kotlin.fir.backend.FirMangleComputer -import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.java.declarations.FirJavaField -import org.jetbrains.kotlin.fir.originalForSubstitutionOverride +import org.jetbrains.kotlin.fir.declarations.FirDeclaration +import org.jetbrains.kotlin.fir.declarations.FirFunction +import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction import org.jetbrains.kotlin.fir.resolve.providers.firProvider -import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag -import org.jetbrains.kotlin.fir.types.coneType /** * JVM backend-specific mangle computer that generates a mangled name for a Kotlin declaration represented by [FirDeclaration]. @@ -21,7 +19,6 @@ class FirJvmMangleComputer( builder: StringBuilder, mode: MangleMode, ) : FirMangleComputer(builder, mode) { - override val visitor: Visitor = JvmVisitor() override fun FirFunction.platformSpecificSuffix(): String? = if (this is FirSimpleFunction && name.asString() == "main") @@ -32,14 +29,4 @@ class FirJvmMangleComputer( override fun copy(newMode: MangleMode): FirJvmMangleComputer = FirJvmMangleComputer(builder, newMode) - - private inner class JvmVisitor : Visitor() { - override fun visitField(field: FirField) { - if (field is FirJavaField || field.origin == FirDeclarationOrigin.ImportedFromObjectOrStatic) { - field.mangleSimpleDeclaration(field.name.asString()) - } else { - visitVariable(field) - } - } - } } diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMangleComputer.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMangleComputer.kt index 643cc6000bf..0d4db91d14b 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMangleComputer.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMangleComputer.kt @@ -42,7 +42,7 @@ open class FirMangleComputer( /*FunctionDeclaration=*/FirFunction, /*Session=*/FirSession, >(builder, mode) { - protected open val visitor = Visitor() + private val visitor = Visitor() override fun copy(newMode: MangleMode): FirMangleComputer = FirMangleComputer(builder, newMode) @@ -242,7 +242,7 @@ open class FirMangleComputer( } override fun visitField(field: FirField) { - visitVariable(field) + field.mangleSimpleDeclaration(field.name.asString()) } override fun visitEnumEntry(enumEntry: FirEnumEntry) { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBasedDescriptors.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBasedDescriptors.kt index a650c533500..6adc86f9dca 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBasedDescriptors.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBasedDescriptors.kt @@ -1126,7 +1126,20 @@ open class IrBasedFieldDescriptor(owner: IrField) : PropertyDescriptor, IrBasedD override fun getUserData(key: CallableDescriptor.UserDataKey?): V? = null } -fun IrField.toIrBasedDescriptor() = IrBasedFieldDescriptor(this) +class IrBasedDelegateFieldDescriptor(owner: IrField) : IrBasedFieldDescriptor(owner), IrImplementingDelegateDescriptor { + + override val correspondingSuperType: KotlinType + get() = TODO("not implemented") + + override val isDelegated: Boolean + get() = true +} + +fun IrField.toIrBasedDescriptor() = if (origin == IrDeclarationOrigin.DELEGATE) { + IrBasedDelegateFieldDescriptor(this) +} else { + IrBasedFieldDescriptor(this) +} class IrBasedErrorDescriptor(owner: IrErrorDeclaration) : IrBasedDeclarationDescriptor(owner) { override fun getName(): Name = error("IrBasedErrorDescriptor.getName: Should not be reached")