[JVM_IR] Don't generate reflective access to getter/setter without property
This is the case when we have Java class in hierarchy. In this case, we want to generate reflective access to the original Java method. #KT-63642 Fixed
This commit is contained in:
+5
-3
@@ -106,9 +106,11 @@ internal class ReflectiveAccessLowering(
|
|||||||
if (callee.isAccessible(withSuper = superQualifier != null)) {
|
if (callee.isAccessible(withSuper = superQualifier != null)) {
|
||||||
return expression
|
return expression
|
||||||
}
|
}
|
||||||
return if (expression.origin == IrStatementOrigin.GET_PROPERTY) {
|
|
||||||
|
val isAccessToProperty = expression.symbol.owner.correspondingPropertySymbol != null
|
||||||
|
return if (isAccessToProperty && expression.origin == IrStatementOrigin.GET_PROPERTY) {
|
||||||
generateReflectiveAccessForGetter(expression)
|
generateReflectiveAccessForGetter(expression)
|
||||||
} else if (expression.origin?.isAssignmentOperator() == true) {
|
} else if (isAccessToProperty && expression.origin?.isAssignmentOperator() == true) {
|
||||||
generateReflectiveAccessForSetter(expression)
|
generateReflectiveAccessForSetter(expression)
|
||||||
} else if (expression.dispatchReceiver == null && expression.extensionReceiver == null) {
|
} else if (expression.dispatchReceiver == null && expression.extensionReceiver == null) {
|
||||||
generateReflectiveStaticCall(expression)
|
generateReflectiveStaticCall(expression)
|
||||||
@@ -325,7 +327,7 @@ internal class ReflectiveAccessLowering(
|
|||||||
arguments.addAll(call.getValueArguments())
|
arguments.addAll(call.getValueArguments())
|
||||||
|
|
||||||
return generateReflectiveMethodInvocation(
|
return generateReflectiveMethodInvocation(
|
||||||
call.superQualifierSymbol?.defaultType ?: call.dispatchReceiver?.type ?: call.symbol.owner.parentAsClass.defaultType,
|
call.superQualifierSymbol?.defaultType ?: call.symbol.owner.resolveFakeOverrideOrFail().parentAsClass.defaultType,
|
||||||
call.symbol.owner.name.asString(),
|
call.symbol.owner.name.asString(),
|
||||||
parameterTypes,
|
parameterTypes,
|
||||||
call.dispatchReceiver,
|
call.dispatchReceiver,
|
||||||
|
|||||||
Reference in New Issue
Block a user