JVM: Only produce inline SAM wrappers in public inline scope

This commit is contained in:
Steven Schäfer
2021-01-26 18:20:44 +01:00
committed by Alexander Udalov
parent 50bbf4f269
commit c9b0cc5b32
16 changed files with 204 additions and 11 deletions
@@ -0,0 +1,10 @@
// KOTLIN_CONFIGURATION_FLAGS: SAM_CONVERSIONS=CLASS
// WITH_SIGNATURES
package test
// SAM adapters inside of private inline functions don't need to be public,
// since we do not refer to them from other packages.
fun test() {
val lambda = { }
1.apply { Runnable(lambda) }
}
@@ -0,0 +1,28 @@
@kotlin.Metadata
synthetic final class<null> test/PrivateInlineSamAdapterKt$sam$java_lang_Runnable$0 {
// source: 'privateInlineSamAdapter.kt'
<null> method <init>(p0: kotlin.jvm.functions.Function0): void
public synthetic final <null> method run(): void
enclosing method test/PrivateInlineSamAdapterKt.test()V
private synthetic final field <null> function: kotlin.jvm.functions.Function0
inner (anonymous) class test/PrivateInlineSamAdapterKt$sam$java_lang_Runnable$0
}
@kotlin.Metadata
final class<Lkotlin/jvm/internal/Lambda;Lkotlin/jvm/functions/Function0<Lkotlin/Unit;>;> test/PrivateInlineSamAdapterKt$test$lambda$1 {
// source: 'privateInlineSamAdapter.kt'
static <null> method <clinit>(): void
<null> method <init>(): void
public synthetic bridge <null> method invoke(): java.lang.Object
public final <null> method invoke(): void
enclosing method test/PrivateInlineSamAdapterKt.test()V
public final static field <null> INSTANCE: test.PrivateInlineSamAdapterKt$test$lambda$1
inner (anonymous) class test/PrivateInlineSamAdapterKt$test$lambda$1
}
@kotlin.Metadata
public final class<null> test/PrivateInlineSamAdapterKt {
// source: 'privateInlineSamAdapter.kt'
public final static <null> method test(): void
inner (anonymous) class test/PrivateInlineSamAdapterKt$test$lambda$1
}
@@ -0,0 +1,29 @@
@kotlin.Metadata
synthetic final class<null> test/PrivateInlineSamAdapterKt$sam$java_lang_Runnable$0 {
// source: 'privateInlineSamAdapter.kt'
<null> method <init>(p0: kotlin.jvm.functions.Function0): void
public synthetic final <null> method run(): void
enclosing class test/PrivateInlineSamAdapterKt
private synthetic final field <null> function: kotlin.jvm.functions.Function0
inner (anonymous) class test/PrivateInlineSamAdapterKt$sam$java_lang_Runnable$0
}
@kotlin.Metadata
final class<Lkotlin/jvm/internal/Lambda;Lkotlin/jvm/functions/Function0<Lkotlin/Unit;>;> test/PrivateInlineSamAdapterKt$test$lambda$1 {
// source: 'privateInlineSamAdapter.kt'
static <null> method <clinit>(): void
<null> method <init>(): void
public synthetic bridge <null> method invoke(): java.lang.Object
public final <null> method invoke(): void
enclosing method test/PrivateInlineSamAdapterKt.test()V
public final static field <null> INSTANCE: test.PrivateInlineSamAdapterKt$test$lambda$1
inner (anonymous) class test/PrivateInlineSamAdapterKt$test$lambda$1
}
@kotlin.Metadata
public final class<null> test/PrivateInlineSamAdapterKt {
// source: 'privateInlineSamAdapter.kt'
public final static <null> method test(): void
inner (anonymous) class test/PrivateInlineSamAdapterKt$sam$java_lang_Runnable$0
inner (anonymous) class test/PrivateInlineSamAdapterKt$test$lambda$1
}
@@ -0,0 +1,11 @@
// KOTLIN_CONFIGURATION_FLAGS: SAM_CONVERSIONS=CLASS
// WITH_SIGNATURES
package test
// We used to generate SAM adapters inside of inline lambdas as
// inline SAM wrappers (`...$sam$i$...`). This is unnecessary, unless
// the code is itself contained in an inline function.
fun test() {
val lambda = { }
1.apply { Runnable(lambda) }
}
@@ -0,0 +1,28 @@
@kotlin.Metadata
synthetic final class<null> test/SamAdapterInInlineLambdaKt$sam$java_lang_Runnable$0 {
// source: 'samAdapterInInlineLambda.kt'
<null> method <init>(p0: kotlin.jvm.functions.Function0): void
public synthetic final <null> method run(): void
enclosing method test/SamAdapterInInlineLambdaKt.test()V
private synthetic final field <null> function: kotlin.jvm.functions.Function0
inner (anonymous) class test/SamAdapterInInlineLambdaKt$sam$java_lang_Runnable$0
}
@kotlin.Metadata
final class<Lkotlin/jvm/internal/Lambda;Lkotlin/jvm/functions/Function0<Lkotlin/Unit;>;> test/SamAdapterInInlineLambdaKt$test$lambda$1 {
// source: 'samAdapterInInlineLambda.kt'
static <null> method <clinit>(): void
<null> method <init>(): void
public synthetic bridge <null> method invoke(): java.lang.Object
public final <null> method invoke(): void
enclosing method test/SamAdapterInInlineLambdaKt.test()V
public final static field <null> INSTANCE: test.SamAdapterInInlineLambdaKt$test$lambda$1
inner (anonymous) class test/SamAdapterInInlineLambdaKt$test$lambda$1
}
@kotlin.Metadata
public final class<null> test/SamAdapterInInlineLambdaKt {
// source: 'samAdapterInInlineLambda.kt'
public final static <null> method test(): void
inner (anonymous) class test/SamAdapterInInlineLambdaKt$test$lambda$1
}
@@ -0,0 +1,29 @@
@kotlin.Metadata
synthetic final class<null> test/SamAdapterInInlineLambdaKt$sam$java_lang_Runnable$0 {
// source: 'samAdapterInInlineLambda.kt'
<null> method <init>(p0: kotlin.jvm.functions.Function0): void
public synthetic final <null> method run(): void
enclosing class test/SamAdapterInInlineLambdaKt
private synthetic final field <null> function: kotlin.jvm.functions.Function0
inner (anonymous) class test/SamAdapterInInlineLambdaKt$sam$java_lang_Runnable$0
}
@kotlin.Metadata
final class<Lkotlin/jvm/internal/Lambda;Lkotlin/jvm/functions/Function0<Lkotlin/Unit;>;> test/SamAdapterInInlineLambdaKt$test$lambda$1 {
// source: 'samAdapterInInlineLambda.kt'
static <null> method <clinit>(): void
<null> method <init>(): void
public synthetic bridge <null> method invoke(): java.lang.Object
public final <null> method invoke(): void
enclosing method test/SamAdapterInInlineLambdaKt.test()V
public final static field <null> INSTANCE: test.SamAdapterInInlineLambdaKt$test$lambda$1
inner (anonymous) class test/SamAdapterInInlineLambdaKt$test$lambda$1
}
@kotlin.Metadata
public final class<null> test/SamAdapterInInlineLambdaKt {
// source: 'samAdapterInInlineLambda.kt'
public final static <null> method test(): void
inner (anonymous) class test/SamAdapterInInlineLambdaKt$sam$java_lang_Runnable$0
inner (anonymous) class test/SamAdapterInInlineLambdaKt$test$lambda$1
}