JVM_IR: use non-nullable types as SAM super types
The wrappers for conversions to nullable and non-nullable SAM types are the same, so differentiating those has no effect other than class name collisions.
This commit is contained in:
Generated
+5
@@ -25741,6 +25741,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
||||
runTest("compiler/testData/codegen/box/sam/kt24825.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("nonInlinedSamWrapper.kt")
|
||||
public void testNonInlinedSamWrapper() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/sam/nonInlinedSamWrapper.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("nullableSam.kt")
|
||||
public void testNullableSam() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/sam/nullableSam.kt");
|
||||
|
||||
+2
-2
@@ -104,8 +104,8 @@ abstract class SingleAbstractMethodLowering(val context: CommonBackendContext) :
|
||||
|
||||
val inInlineFunctionScope = allScopes.any { scope -> (scope.irElement as? IrFunction)?.isInline ?: false }
|
||||
val cache = if (inInlineFunctionScope) inlineCachedImplementations else cachedImplementations
|
||||
val implementation = cache.getOrPut(superType) {
|
||||
createObjectProxy(superType, inInlineFunctionScope, expression)
|
||||
val implementation = cache.getOrPut(erasedSuperType) {
|
||||
createObjectProxy(erasedSuperType, inInlineFunctionScope, expression)
|
||||
}
|
||||
|
||||
return if (superType.isNullable() && invokable.type.isNullable()) {
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
// IGNORE_BACKEND_FIR: JVM_IR
|
||||
// TARGET_BACKEND: JVM
|
||||
// WITH_RUNTIME
|
||||
// FILE: Test.java
|
||||
|
||||
public class Test {
|
||||
public static void run(Runnable r) {
|
||||
r.run();
|
||||
}
|
||||
}
|
||||
|
||||
// FILE: test.kt
|
||||
|
||||
fun runFunction1(x: () -> Unit) = Runnable(x).run()
|
||||
fun runFunction2(x: () -> Unit) = Test.run(x)
|
||||
|
||||
fun box(): String {
|
||||
var result = ""
|
||||
runFunction1 { result += "O" }
|
||||
runFunction2 { result += "K" }
|
||||
return result
|
||||
}
|
||||
+5
@@ -27302,6 +27302,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
||||
runTest("compiler/testData/codegen/box/sam/kt24825.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("nonInlinedSamWrapper.kt")
|
||||
public void testNonInlinedSamWrapper() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/sam/nonInlinedSamWrapper.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("nullableSam.kt")
|
||||
public void testNullableSam() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/sam/nullableSam.kt");
|
||||
|
||||
+5
@@ -26119,6 +26119,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
||||
runTest("compiler/testData/codegen/box/sam/kt24825.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("nonInlinedSamWrapper.kt")
|
||||
public void testNonInlinedSamWrapper() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/sam/nonInlinedSamWrapper.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("nullableSam.kt")
|
||||
public void testNullableSam() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/sam/nullableSam.kt");
|
||||
|
||||
+5
@@ -25741,6 +25741,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
||||
runTest("compiler/testData/codegen/box/sam/kt24825.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("nonInlinedSamWrapper.kt")
|
||||
public void testNonInlinedSamWrapper() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/sam/nonInlinedSamWrapper.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("nullableSam.kt")
|
||||
public void testNullableSam() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/sam/nullableSam.kt");
|
||||
|
||||
Reference in New Issue
Block a user