JVM IR: fix flags of $default methods in multi-file facades

Do not change origin of multifile class bridges to something else
because, as it turns out, there are numerous origin-specific checks in
the codegen that start to behave differently for multifile bridges.
Instead of the method-targeted origin MULTIFILE_BRIDGE, use new class
origin JVM_MULTIFILE_CLASS to detect whether a declaration is a
multifile bridge.

 #KT-40198 Fixed
 #KT-43145 Fixed
This commit is contained in:
Alexander Udalov
2020-11-04 17:54:11 +01:00
parent d326d6a693
commit 500b1cfbd3
19 changed files with 210 additions and 76 deletions
@@ -0,0 +1,24 @@
// WITH_RUNTIME
// The difference of JVM and JVM_IR in generating privateFunction here is reported at KT-41841.
// FILE: test.kt
@file:JvmMultifileClass
@file:JvmName("A")
private fun private(x: String = "") {}
private inline fun privateInline(x: String, y: Int = 0) {}
internal fun internal(x: String = "") {}
internal inline fun internalInline(x: String, y: Int = 0) {}
@PublishedApi
internal fun published(x: String = "") {}
@PublishedApi
internal fun publishedInline(x: String = "") {}
public fun public(x: String = "") {}
public inline fun publicInline(x: String, y: Int = 0) {}
@@ -0,0 +1,37 @@
@kotlin.Metadata
public final class A {
// source: 'test.kt'
public synthetic static method internal$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
public final static method internal(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
public synthetic static method internalInline$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
public final static method internalInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: int): void
public synthetic static method public$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
public final static method public(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
public synthetic static method publicInline$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
public final static method publicInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: int): void
public synthetic static method published$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
public final static @kotlin.PublishedApi method published(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
public synthetic static method publishedInline$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
public final static @kotlin.PublishedApi method publishedInline(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
}
@kotlin.Metadata
synthetic final class A__TestKt {
// source: 'test.kt'
public synthetic static method internal$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
public final static method internal(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
public synthetic static method internalInline$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
public final static method internalInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: int): void
synthetic static method private$A__TestKt$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
private final static method private$A__TestKt(p0: java.lang.String): void
synthetic static method privateInline$A__TestKt$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
private final static method privateInline$A__TestKt(p0: java.lang.String, p1: int): void
public synthetic static method public$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
public final static method public(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
public synthetic static method publicInline$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
public final static method publicInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: int): void
public synthetic static method published$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
public final static @kotlin.PublishedApi method published(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
public synthetic static method publishedInline$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
public final static @kotlin.PublishedApi method publishedInline(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
}
@@ -0,0 +1,24 @@
// WITH_RUNTIME
// !INHERIT_MULTIFILE_PARTS
// FILE: test.kt
@file:JvmMultifileClass
@file:JvmName("A")
private fun private(x: String = "") {}
private inline fun privateInline(x: String, y: Int = 0) {}
internal fun internal(x: String = "") {}
internal inline fun internalInline(x: String, y: Int = 0) {}
@PublishedApi
internal fun published(x: String = "") {}
@PublishedApi
internal fun publishedInline(x: String = "") {}
public fun public(x: String = "") {}
public inline fun publicInline(x: String, y: Int = 0) {}
@@ -0,0 +1,27 @@
@kotlin.Metadata
public final class A {
// source: 'test.kt'
private method <init>(): void
}
@kotlin.Metadata
class A__TestKt {
// source: 'test.kt'
public method <init>(): void
public synthetic static method internal$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
public final static method internal(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
public synthetic static method internalInline$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
public final static method internalInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: int): void
synthetic static method private$A__TestKt$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
private final static method private$A__TestKt(p0: java.lang.String): void
synthetic static method privateInline$A__TestKt$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
private final static method privateInline$A__TestKt(p0: java.lang.String, p1: int): void
public synthetic static method public$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
public final static method public(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
public synthetic static method publicInline$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
public final static method publicInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: int): void
public synthetic static method published$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
public final static @kotlin.PublishedApi method published(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
public synthetic static method publishedInline$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
public final static @kotlin.PublishedApi method publishedInline(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
}
@@ -0,0 +1,39 @@
@kotlin.Metadata
public final class A {
// source: 'test.kt'
public synthetic static method internal$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
public final static method internal(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
public synthetic static method internalInline$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
public final static method internalInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: int): void
synthetic static method private$A__TestKt$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
synthetic static method privateInline$A__TestKt$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
public synthetic static method public$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
public final static method public(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
public synthetic static method publicInline$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
public final static method publicInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: int): void
public synthetic static method published$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
public final static @kotlin.PublishedApi method published(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
public synthetic static method publishedInline$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
public final static @kotlin.PublishedApi method publishedInline(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
}
@kotlin.Metadata
synthetic final class A__TestKt {
// source: 'test.kt'
public synthetic static method internal$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
public final static method internal(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
public synthetic static method internalInline$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
public final static method internalInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: int): void
synthetic static method private$A__TestKt$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
private final static method private$A__TestKt(p0: java.lang.String): void
synthetic static method privateInline$A__TestKt$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
private final static method privateInline$A__TestKt(p0: java.lang.String, p1: int): void
public synthetic static method public$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
public final static method public(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
public synthetic static method publicInline$default(p0: java.lang.String, p1: int, p2: int, p3: java.lang.Object): void
public final static method publicInline(@org.jetbrains.annotations.NotNull p0: java.lang.String, p1: int): void
public synthetic static method published$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
public final static @kotlin.PublishedApi method published(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
public synthetic static method publishedInline$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
public final static @kotlin.PublishedApi method publishedInline(@org.jetbrains.annotations.NotNull p0: java.lang.String): void
}
@@ -1,7 +0,0 @@
// WITH_RUNTIME
// The remaining difference of JVM and JVM_IR here is reported at KT-41841.
@file:JvmMultifileClass
@file:JvmName("A")
private fun foo(x: String = "") {}
@@ -1,11 +0,0 @@
@kotlin.Metadata
public final class A {
// source: 'privateFunctionInMultifilePart.kt'
}
@kotlin.Metadata
synthetic final class A__PrivateFunctionInMultifilePartKt {
// source: 'privateFunctionInMultifilePart.kt'
synthetic static method foo$A__PrivateFunctionInMultifilePartKt$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
private final static method foo$A__PrivateFunctionInMultifilePartKt(p0: java.lang.String): void
}
@@ -1,12 +0,0 @@
@kotlin.Metadata
public final class A {
// source: 'privateFunctionInMultifilePart.kt'
final static method foo$A__PrivateFunctionInMultifilePartKt$default(@org.jetbrains.annotations.Nullable p0: java.lang.String, p1: int, p2: java.lang.Object): void
}
@kotlin.Metadata
synthetic final class A__PrivateFunctionInMultifilePartKt {
// source: 'privateFunctionInMultifilePart.kt'
synthetic static method foo$A__PrivateFunctionInMultifilePartKt$default(p0: java.lang.String, p1: int, p2: java.lang.Object): void
private final static method foo$A__PrivateFunctionInMultifilePartKt(p0: java.lang.String): void
}