From 646df8d40a79faab061b72712b89d3a01fad2f96 Mon Sep 17 00:00:00 2001 From: Roman Artemev Date: Wed, 30 Oct 2019 14:08:49 +0300 Subject: [PATCH] [IR BE] Get rid of descriptor usage in KCallable name property lowering --- .../lower/KCallableNamePropertyLowering.kt | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/KCallableNamePropertyLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/KCallableNamePropertyLowering.kt index 4b0f78ca9ca..22a301fbd66 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/KCallableNamePropertyLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/KCallableNamePropertyLowering.kt @@ -23,14 +23,14 @@ import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrProperty import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction -import org.jetbrains.kotlin.ir.expressions.IrCall -import org.jetbrains.kotlin.ir.expressions.IrCallableReference -import org.jetbrains.kotlin.ir.expressions.IrExpression +import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.IrCompositeImpl import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl import org.jetbrains.kotlin.ir.util.isSubclassOf +import org.jetbrains.kotlin.ir.util.render import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid +import org.jetbrains.kotlin.name.Name val kCallableNamePropertyPhase = makeIrFilePhase( ::KCallableNamePropertyLowering, @@ -46,6 +46,15 @@ private class KCallableNamePropertyLowering(val context: BackendContext) : FileL private class KCallableNamePropertyTransformer(val lower: KCallableNamePropertyLowering) : IrElementTransformerVoid() { + private fun nameForCallableMember(reference: IrCallableReference): Name { + return when (reference) { + is IrFunctionReference -> reference.symbol.owner.name + is IrPropertyReference -> reference.symbol.owner.name + is IrLocalDelegatedPropertyReference -> reference.symbol.owner.name + else -> error("Unexpected callable reference type ${reference.render()}") + } + } + override fun visitCall(expression: IrCall): IrExpression { val callableReference = expression.dispatchReceiver as? IrCallableReference ?: return expression @@ -76,7 +85,7 @@ private class KCallableNamePropertyTransformer(val lower: KCallableNamePropertyL expression.startOffset, expression.endOffset, lower.context.irBuiltIns.stringType, - callableReference.symbol.descriptor.name.asString() + nameForCallableMember(callableReference).asString() ) ) }