From 35d498847ea9821b2c43f344569d6bb057a7a2a4 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 23 Aug 2023 16:37:43 +0200 Subject: [PATCH] JVM IR: reorder some resolveFakeOverride calls --- ...nheritedDefaultMethodsOnClassesLowering.kt | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/InheritedDefaultMethodsOnClassesLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/InheritedDefaultMethodsOnClassesLowering.kt index c04256ad9cc..f482eb18df1 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/InheritedDefaultMethodsOnClassesLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/InheritedDefaultMethodsOnClassesLowering.kt @@ -268,11 +268,10 @@ private class InterfaceObjectCallsLowering(val context: JvmBackendContext) : IrE if (expression.superQualifierSymbol != null && !expression.isSuperToAny()) return val callee = expression.symbol.owner + if (!callee.isMethodOfAny()) return if (!callee.hasInterfaceParent() && expression.dispatchReceiver?.run { type.erasedUpperBound.isJvmInterface } != true) return - val resolved = callee.resolveFakeOverride() - if (resolved?.isMethodOfAny() != true) return - + val resolved = callee.resolveFakeOverride() ?: return expression.symbol = resolved.symbol if (expression.superQualifierSymbol != null) { expression.superQualifierSymbol = context.irBuiltIns.anyClass @@ -293,6 +292,14 @@ internal fun IrSimpleFunction.findInterfaceImplementation(jvmDefaultMode: JvmDef val implementation = resolveFakeOverride(toSkip = ::isDefaultImplsBridge) ?: return null + if (!implementation.hasInterfaceParent() + || DescriptorVisibilities.isPrivate(implementation.visibility) + || implementation.isDefinitelyNotDefaultImplsMethod(jvmDefaultMode, implementation) + || implementation.isMethodOfAny() + ) { + return null + } + // Only generate interface delegation for functions immediately inherited from an interface. // (Otherwise, delegation will be present in the parent class) if (overriddenSymbols.any { @@ -303,14 +310,6 @@ internal fun IrSimpleFunction.findInterfaceImplementation(jvmDefaultMode: JvmDef return null } - if (!implementation.hasInterfaceParent() - || DescriptorVisibilities.isPrivate(implementation.visibility) - || implementation.isDefinitelyNotDefaultImplsMethod(jvmDefaultMode) - || implementation.isMethodOfAny() - ) { - return null - } - return implementation }