diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionReferenceLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionReferenceLowering.kt index d501d69381c..6d7c7e36cab 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionReferenceLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/FunctionReferenceLowering.kt @@ -338,7 +338,7 @@ internal class FunctionReferenceLowering(private val context: JvmBackendContext) modality = Modality.FINAL isSuspend = false isInline = false - origin = JvmLoweredDeclarationOrigin.PROXY_FUN_FOR_INDY_SAM_CONVESION + origin = JvmLoweredDeclarationOrigin.PROXY_FUN_FOR_INDY_SAM_CONVERSION }.also { proxyFun -> proxyFun.parent = currentDeclarationParent ?: throw AssertionError("No declaration parent when processing $reference") diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/TypeOperatorLowering.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/TypeOperatorLowering.kt index 2d6a1a67eae..c62de351e97 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/TypeOperatorLowering.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/TypeOperatorLowering.kt @@ -275,7 +275,7 @@ private class TypeOperatorLowering(private val context: JvmBackendContext) : Fil val dynamicCallArguments = ArrayList() val irDynamicCallTarget = context.irFactory.buildFun { - origin = JvmLoweredDeclarationOrigin.INVOVEDYNAMIC_CALL_TARGET + origin = JvmLoweredDeclarationOrigin.INVOKEDYNAMIC_CALL_TARGET name = samMethod.name returnType = erasedSamType }.apply { diff --git a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/indy/LambdaMetafactoryArguments.kt b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/indy/LambdaMetafactoryArguments.kt index 97f8f81a87c..e1f1ff611e5 100644 --- a/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/indy/LambdaMetafactoryArguments.kt +++ b/compiler/ir/backend.jvm/lower/src/org/jetbrains/kotlin/backend/jvm/lower/indy/LambdaMetafactoryArguments.kt @@ -382,7 +382,7 @@ internal class LambdaMetafactoryArgumentsBuilder( private val adaptableFunctionOrigins = setOf( IrDeclarationOrigin.LOCAL_FUNCTION_FOR_LAMBDA, - JvmLoweredDeclarationOrigin.PROXY_FUN_FOR_INDY_SAM_CONVESION + JvmLoweredDeclarationOrigin.PROXY_FUN_FOR_INDY_SAM_CONVERSION ) private fun adaptLambdaSignature( diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLoweredDeclarationOrigin.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLoweredDeclarationOrigin.kt index 86049f6bd9e..be43262e717 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLoweredDeclarationOrigin.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/JvmLoweredDeclarationOrigin.kt @@ -46,7 +46,7 @@ interface JvmLoweredDeclarationOrigin : IrDeclarationOrigin { object COMPANION_PROPERTY_BACKING_FIELD : IrDeclarationOriginImpl("COMPANION_PROPERTY_BACKING_FIELD") object FIELD_FOR_STATIC_CALLABLE_REFERENCE_INSTANCE : IrDeclarationOriginImpl("FIELD_FOR_STATIC_CALLABLE_REFERENCE_INSTANCE") object ABSTRACT_BRIDGE_STUB : IrDeclarationOriginImpl("ABSTRACT_BRIDGE_STUB") - object INVOVEDYNAMIC_CALL_TARGET : IrDeclarationOriginImpl("INVOVEDYNAMIC_CALL_TARGET") + object INVOKEDYNAMIC_CALL_TARGET : IrDeclarationOriginImpl("INVOKEDYNAMIC_CALL_TARGET") object INLINE_LAMBDA : IrDeclarationOriginImpl("INLINE_LAMBDA") - object PROXY_FUN_FOR_INDY_SAM_CONVESION : IrDeclarationOriginImpl("PROXY_FUN_FOR_INDY_SAM_CONVESION") + object PROXY_FUN_FOR_INDY_SAM_CONVERSION : IrDeclarationOriginImpl("PROXY_FUN_FOR_INDY_SAM_CONVERSION", isSynthetic = true) } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/JvmInvokeDynamic.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/JvmInvokeDynamic.kt index bde528bef7d..d8f26a9d3e9 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/JvmInvokeDynamic.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/intrinsics/JvmInvokeDynamic.kt @@ -32,7 +32,7 @@ object JvmInvokeDynamic : IntrinsicMethod() { ?: fail("'dynamicCall' is expected to be a call") val dynamicCallee = dynamicCall.symbol.owner if (dynamicCallee.parent != codegen.context.ir.symbols.kotlinJvmInternalInvokeDynamicPackage || - dynamicCallee.origin != JvmLoweredDeclarationOrigin.INVOVEDYNAMIC_CALL_TARGET + dynamicCallee.origin != JvmLoweredDeclarationOrigin.INVOKEDYNAMIC_CALL_TARGET ) fail("Unexpected dynamicCallee: '${dynamicCallee.render()}'") diff --git a/compiler/testData/codegen/bytecodeListing/sam/indySamConversionViaProxyFun.kt b/compiler/testData/codegen/bytecodeListing/sam/indySamConversionViaProxyFun.kt new file mode 100644 index 00000000000..79993e3bce1 --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/sam/indySamConversionViaProxyFun.kt @@ -0,0 +1,15 @@ +// IGNORE_BACKEND: JVM + +// FILE: indySamConversionViaProxyFun.kt.kt +fun test() { + use(Sam(String?::plus)) + use(Sam(String?::plus)) + use(Sam(String?::plus)) +} + +fun use(s: Sam) {} + +// FILE: Sam.java +public interface Sam { + String get(String x, Object y); +} diff --git a/compiler/testData/codegen/bytecodeListing/sam/indySamConversionViaProxyFun.txt b/compiler/testData/codegen/bytecodeListing/sam/indySamConversionViaProxyFun.txt new file mode 100644 index 00000000000..051a4b9344a --- /dev/null +++ b/compiler/testData/codegen/bytecodeListing/sam/indySamConversionViaProxyFun.txt @@ -0,0 +1,9 @@ +@kotlin.Metadata +public final class IndySamConversionViaProxyFun_ktKt { + // source: 'indySamConversionViaProxyFun.kt.kt' + private synthetic final static method test$plus__proxy(p0: java.lang.String, p1: java.lang.Object): java.lang.String + private synthetic final static method test$plus__proxy-0(p0: java.lang.String, p1: java.lang.Object): java.lang.String + private synthetic final static method test$plus__proxy-1(p0: java.lang.String, p1: java.lang.Object): java.lang.String + public final static method test(): void + public final static method use(@org.jetbrains.annotations.NotNull p0: Sam): void +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BytecodeListingTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BytecodeListingTestGenerated.java index 41c1bae5336..3589c569455 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BytecodeListingTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BytecodeListingTestGenerated.java @@ -2042,6 +2042,12 @@ public class BytecodeListingTestGenerated extends AbstractBytecodeListingTest { runTest("compiler/testData/codegen/bytecodeListing/sam/genericSamInterface.kt"); } + @Test + @TestMetadata("indySamConversionViaProxyFun.kt") + public void testIndySamConversionViaProxyFun() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/sam/indySamConversionViaProxyFun.kt"); + } + @Test @TestMetadata("kt16650.kt") public void testKt16650() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBytecodeListingTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBytecodeListingTestGenerated.java index 319f06f4445..8a3dc7beed7 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBytecodeListingTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBytecodeListingTestGenerated.java @@ -2090,6 +2090,12 @@ public class IrBytecodeListingTestGenerated extends AbstractIrBytecodeListingTes runTest("compiler/testData/codegen/bytecodeListing/sam/genericSamInterface.kt"); } + @Test + @TestMetadata("indySamConversionViaProxyFun.kt") + public void testIndySamConversionViaProxyFun() throws Exception { + runTest("compiler/testData/codegen/bytecodeListing/sam/indySamConversionViaProxyFun.kt"); + } + @Test @TestMetadata("kt16650.kt") public void testKt16650() throws Exception {