[IR] Extract IrCallableReference.referencedName

This commit is contained in:
Mikhail Glukhikh
2020-05-18 16:12:49 +03:00
parent 79fd24f734
commit 66da676b9e
5 changed files with 19 additions and 4 deletions
@@ -231,7 +231,7 @@ internal class PropertyReferenceLowering(val context: JvmBackendContext) : Class
val constructor = referenceKind.implSymbol.constructors.single { it.owner.valueParameters.size == 3 } val constructor = referenceKind.implSymbol.constructors.single { it.owner.valueParameters.size == 3 }
putValueArgument(0, irCall(constructor).apply { putValueArgument(0, irCall(constructor).apply {
putValueArgument(0, buildReflectedContainerReference(expression)) putValueArgument(0, buildReflectedContainerReference(expression))
putValueArgument(1, irString(expression.symbol.descriptor.name.asString())) putValueArgument(1, irString(expression.referencedName.asString()))
putValueArgument(2, computeSignatureString(expression)) putValueArgument(2, computeSignatureString(expression))
}) })
} }
@@ -285,7 +285,7 @@ internal class PropertyReferenceLowering(val context: JvmBackendContext) : Class
val getName = superClass.functions.single { it.name.asString() == "getName" } val getName = superClass.functions.single { it.name.asString() == "getName" }
val getOwner = superClass.functions.single { it.name.asString() == "getOwner" } val getOwner = superClass.functions.single { it.name.asString() == "getOwner" }
val getSignature = superClass.functions.single { it.name.asString() == "getSignature" } val getSignature = superClass.functions.single { it.name.asString() == "getSignature" }
referenceClass.addOverride(getName) { irString(expression.symbol.descriptor.name.asString()) } referenceClass.addOverride(getName) { irString(expression.referencedName.asString()) }
referenceClass.addOverride(getOwner) { buildReflectedContainerReference(expression) } referenceClass.addOverride(getOwner) { buildReflectedContainerReference(expression) }
referenceClass.addOverride(getSignature) { computeSignatureString(expression) } referenceClass.addOverride(getSignature) { computeSignatureString(expression) }
} }
@@ -392,7 +392,7 @@ internal class PropertyReferenceLowering(val context: JvmBackendContext) : Class
val callee = expression.symbol.owner as IrDeclaration val callee = expression.symbol.owner as IrDeclaration
val owner = buildReflectedContainerReferenceKClass(expression) val owner = buildReflectedContainerReferenceKClass(expression)
putValueArgument(index++, kClassToJavaClass(owner, backendContext)) putValueArgument(index++, kClassToJavaClass(owner, backendContext))
putValueArgument(index++, irString(expression.symbol.descriptor.name.asString())) putValueArgument(index++, irString(expression.referencedName.asString()))
putValueArgument(index++, computeSignatureString(expression)) putValueArgument(index++, computeSignatureString(expression))
putValueArgument(index, irInt(FunctionReferenceLowering.getCallableReferenceTopLevelFlag(callee))) putValueArgument(index, irInt(FunctionReferenceLowering.getCallableReferenceTopLevelFlag(callee)))
} }
@@ -17,8 +17,11 @@
package org.jetbrains.kotlin.ir.expressions package org.jetbrains.kotlin.ir.expressions
import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.symbols.*
import org.jetbrains.kotlin.name.Name
interface IrCallableReference : IrMemberAccessExpression interface IrCallableReference : IrMemberAccessExpression {
val referencedName: Name
}
interface IrFunctionReference : IrCallableReference, IrFunctionAccessExpression { interface IrFunctionReference : IrCallableReference, IrFunctionAccessExpression {
val reflectionTarget: IrFunctionSymbol? val reflectionTarget: IrFunctionSymbol?
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
class IrFunctionReferenceImpl( class IrFunctionReferenceImpl(
startOffset: Int, startOffset: Int,
@@ -60,6 +61,9 @@ class IrFunctionReferenceImpl(
origin origin
) )
override val referencedName: Name
get() = symbol.owner.name
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitFunctionReference(this, data) visitor.visitFunctionReference(this, data)
} }
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
class IrLocalDelegatedPropertyReferenceImpl( class IrLocalDelegatedPropertyReferenceImpl(
startOffset: Int, startOffset: Int,
@@ -38,6 +39,9 @@ class IrLocalDelegatedPropertyReferenceImpl(
IrNoArgumentsCallableReferenceBase(startOffset, endOffset, type, 0, origin), IrNoArgumentsCallableReferenceBase(startOffset, endOffset, type, 0, origin),
IrLocalDelegatedPropertyReference { IrLocalDelegatedPropertyReference {
override val referencedName: Name
get() = symbol.owner.name
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitLocalDelegatedPropertyReference(this, data) visitor.visitLocalDelegatedPropertyReference(this, data)
} }
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrPropertySymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrPropertySymbolImpl
import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
class IrPropertyReferenceImpl( class IrPropertyReferenceImpl(
startOffset: Int, startOffset: Int,
@@ -57,6 +58,9 @@ class IrPropertyReferenceImpl(
typeArgumentsCount, field, getter, setter, origin typeArgumentsCount, field, getter, setter, origin
) )
override val referencedName: Name
get() = symbol.owner.name
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R = override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitPropertyReference(this, data) visitor.visitPropertyReference(this, data)
} }