[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:
Ivan Kylchik
2023-11-13 15:05:50 +01:00
committed by Space Team
parent 57d912a5d4
commit e7a3cd638e
@@ -106,9 +106,11 @@ internal class ReflectiveAccessLowering(
if (callee.isAccessible(withSuper = superQualifier != null)) {
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)
} else if (expression.origin?.isAssignmentOperator() == true) {
} else if (isAccessToProperty && expression.origin?.isAssignmentOperator() == true) {
generateReflectiveAccessForSetter(expression)
} else if (expression.dispatchReceiver == null && expression.extensionReceiver == null) {
generateReflectiveStaticCall(expression)
@@ -325,7 +327,7 @@ internal class ReflectiveAccessLowering(
arguments.addAll(call.getValueArguments())
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(),
parameterTypes,
call.dispatchReceiver,