From 5c6f40b34ad72bfb82a56383ca1e2933307fe8eb Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 8 Jun 2020 14:17:14 +0300 Subject: [PATCH] IR metadata source: extract & use declaration name --- .../kotlin/fir/backend/FirMetadataSource.kt | 11 +++++++++++ .../jvm/lower/FunctionReferenceLowering.kt | 2 +- .../kotlin/ir/declarations/MetadataSource.kt | 19 +++++++++++++++---- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMetadataSource.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMetadataSource.kt index 6f119d5b374..3cf1b46ff33 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMetadataSource.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/FirMetadataSource.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.ir.declarations.MetadataSource +import org.jetbrains.kotlin.name.Name interface FirMetadataSource : MetadataSource { @@ -23,6 +24,9 @@ interface FirMetadataSource : MetadataSource { ) : FirMetadataSource { override val session: FirSession get() = klass.session + + override val name: Name? + get() = (klass as? FirRegularClass)?.name } class Function( @@ -30,6 +34,13 @@ interface FirMetadataSource : MetadataSource { ) : FirMetadataSource { override val session: FirSession get() = function.session + + override val name: Name? + get() = when (function) { + is FirSimpleFunction -> function.name + is FirConstructor -> Name.special("") + else -> null + } } class Property( diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionReferenceLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionReferenceLowering.kt index 7f08b6d8162..b9083f748ff 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionReferenceLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionReferenceLowering.kt @@ -469,7 +469,7 @@ internal class FunctionReferenceLowering(private val context: JvmBackendContext) } private val IrFunction.originalName: Name - get() = (metadata as? MetadataSource.Function)?.descriptor?.name ?: name + get() = metadata?.name ?: name private fun JvmIrBuilder.generateSignature(target: IrFunctionSymbol): IrExpression = irCall(backendContext.ir.symbols.signatureStringIntrinsic).apply { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/MetadataSource.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/MetadataSource.kt index 42f340b90b8..ddb277d438d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/MetadataSource.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/MetadataSource.kt @@ -9,13 +9,24 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor +import org.jetbrains.kotlin.name.Name interface MetadataSource { - open class Class(val descriptor: ClassDescriptor) : MetadataSource + val name: Name? - open class File(val descriptors: List) : MetadataSource + abstract class DescriptorBased internal constructor(val descriptor: D) : MetadataSource { + override val name: Name + get() = descriptor.name + } - open class Function(val descriptor: FunctionDescriptor) : MetadataSource + open class Class(descriptor: ClassDescriptor) : DescriptorBased(descriptor) - open class Property(val descriptor: PropertyDescriptor) : MetadataSource + open class File(val descriptors: List) : MetadataSource { + override val name: Name? + get() = null + } + + open class Function(descriptor: FunctionDescriptor) : DescriptorBased(descriptor) + + open class Property(descriptor: PropertyDescriptor) : DescriptorBased(descriptor) }