[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 }
putValueArgument(0, irCall(constructor).apply {
putValueArgument(0, buildReflectedContainerReference(expression))
putValueArgument(1, irString(expression.symbol.descriptor.name.asString()))
putValueArgument(1, irString(expression.referencedName.asString()))
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 getOwner = superClass.functions.single { it.name.asString() == "getOwner" }
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(getSignature) { computeSignatureString(expression) }
}
@@ -392,7 +392,7 @@ internal class PropertyReferenceLowering(val context: JvmBackendContext) : Class
val callee = expression.symbol.owner as IrDeclaration
val owner = buildReflectedContainerReferenceKClass(expression)
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, irInt(FunctionReferenceLowering.getCallableReferenceTopLevelFlag(callee)))
}
@@ -17,8 +17,11 @@
package org.jetbrains.kotlin.ir.expressions
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 {
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.types.IrType
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
class IrFunctionReferenceImpl(
startOffset: Int,
@@ -60,6 +61,9 @@ class IrFunctionReferenceImpl(
origin
)
override val referencedName: Name
get() = symbol.owner.name
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
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.types.IrType
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
class IrLocalDelegatedPropertyReferenceImpl(
startOffset: Int,
@@ -38,6 +39,9 @@ class IrLocalDelegatedPropertyReferenceImpl(
IrNoArgumentsCallableReferenceBase(startOffset, endOffset, type, 0, origin),
IrLocalDelegatedPropertyReference {
override val referencedName: Name
get() = symbol.owner.name
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
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.types.IrType
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.name.Name
class IrPropertyReferenceImpl(
startOffset: Int,
@@ -57,6 +58,9 @@ class IrPropertyReferenceImpl(
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 =
visitor.visitPropertyReference(this, data)
}