[FIR] Fix naming of local classes when serializing metadata

^KT-63655: Fixed
^KT-63901: Fixed
^KT-63988: Fixed
This commit is contained in:
vladislav.grechko
2024-01-29 18:02:09 +01:00
committed by Space Team
parent 78876b32e9
commit 54858c2118
49 changed files with 327 additions and 182 deletions
@@ -1,9 +0,0 @@
MODULE main
CLASS Outer$foo$Local.class
CLASS METADATA
PROPERTY getObj()LOuter$foo$Local$obj$1;
Property: class.metadata.property.returnType
K1
.Outer$foo$Local$obj$1
K2
.Outer$foo$Local.<no name provided>
@@ -1,5 +1,3 @@
// JVM_ABI_K1_K2_DIFF: KT-63868
fun <R> run(block: () -> R) = block()
inline fun <R> inlineRun(block: () -> R) = block()
@@ -1,9 +0,0 @@
MODULE lib
CLASS A.class
CLASS METADATA
PROPERTY x
Property: class.metadata.property.returnType
K1
.A$x$1
K2
.A.<no name provided>
@@ -1,6 +1,5 @@
// TARGET_BACKEND: JVM
// MODULE: lib
// JVM_ABI_K1_K2_DIFF: KT-63868
// FILE: A.kt
abstract class A {
@@ -1,9 +0,0 @@
MODULE main
CLASS ObjectExtendsInnerOfLocalVarargAndDefaultKt$box$Local.class
CLASS METADATA
PROPERTY getObj()LObjectExtendsInnerOfLocalVarargAndDefaultKt$box$Local$obj$1;
Property: class.metadata.property.returnType
K1
.ObjectExtendsInnerOfLocalVarargAndDefaultKt$box$Local$obj$1
K2
.ObjectExtendsInnerOfLocalVarargAndDefaultKt$box$Local.<no name provided>
@@ -1,4 +1,3 @@
// JVM_ABI_K1_K2_DIFF: KT-63655
fun box(): String {
val capture = "oh"
@@ -1,9 +0,0 @@
MODULE main
CLASS ObjectExtendsInnerOfLocalWithCaptureKt$box$Local.class
CLASS METADATA
PROPERTY getObj()LObjectExtendsInnerOfLocalWithCaptureKt$box$Local$obj$1;
Property: class.metadata.property.returnType
K1
.ObjectExtendsInnerOfLocalWithCaptureKt$box$Local$obj$1
K2
.ObjectExtendsInnerOfLocalWithCaptureKt$box$Local.<no name provided>
@@ -1,4 +1,3 @@
// JVM_ABI_K1_K2_DIFF: KT-63655
fun box(): String {
class Local {
open inner class Inner(val s: String) {
@@ -1,9 +0,0 @@
MODULE main
CLASS A.class
CLASS METADATA
PROPERTY b
Property: class.metadata.property.returnType
K1
.A$b$1
K2
.A.<no name provided>
-1
View File
@@ -1,6 +1,5 @@
// TARGET_BACKEND: JVM
// JVM_TARGET: 1.8
// JVM_ABI_K1_K2_DIFF: KT-63655
// FILE: kt43217.kt
@@ -1,8 +0,0 @@
MODULE main
CLASS A$o$1.class
CLASS METADATA
Property: class.metadata.superTypes
K1
[.A$B]
K2
[.A.B]
@@ -1,5 +1,3 @@
// JVM_ABI_K1_K2_DIFF: KT-63901
class A {
var a: String = "Fail"
@@ -1,9 +0,0 @@
MODULE main
CLASS CompoundAssignmentToPropertyWithQualifierKt$box$c$1.class
CLASS METADATA
PROPERTY getB()LCompoundAssignmentToPropertyWithQualifierKt$box$c$1$b$1;
Property: class.metadata.property.returnType
K1
.CompoundAssignmentToPropertyWithQualifierKt$box$c$1$b$1
K2
.CompoundAssignmentToPropertyWithQualifierKt$box$c$1.<no name provided>
@@ -1,5 +1,3 @@
// JVM_ABI_K1_K2_DIFF: KT-63655
var log = ""
class A(p: String) {
@@ -7,12 +7,6 @@ MODULE main
java/util/ArrayList<kotlin/String> /* = kotlin/collections/ArrayList^<kotlin/String> */
K2
java/util/ArrayList<kotlin/String>
PROPERTY workerThread
Property: class.metadata.property.returnType
K1
.SomeClass$workerThread$1
K2
.SomeClass.<no name provided>
CLASS SomeClass$Inner.class
CLASS METADATA
PROPERTY getCopy()Ljava/util/ArrayList;
+1 -1
View File
@@ -1,5 +1,5 @@
// TARGET_BACKEND: JVM
// JVM_ABI_K1_K2_DIFF: KT-63655, KT-63864
// JVM_ABI_K1_K2_DIFF: KT-63864
public object SomeObject {
private val workerThread = object : Thread() {
override fun run() {
@@ -1,9 +0,0 @@
MODULE main
CLASS ObjectInLocalAnonymousObjectKt$box$foo$1.class
CLASS METADATA
PROPERTY getBar()LObjectInLocalAnonymousObjectKt$box$foo$1$bar$1;
Property: class.metadata.property.returnType
K1
.ObjectInLocalAnonymousObjectKt$box$foo$1$bar$1
K2
.ObjectInLocalAnonymousObjectKt$box$foo$1.<no name provided>
@@ -1,4 +1,3 @@
// JVM_ABI_K1_K2_DIFF: KT-63655
fun box(): String {
var boo = "OK"
var foo = object {
@@ -1,9 +0,0 @@
MODULE main
CLASS C.class
CLASS METADATA
PROPERTY localObject
Property: class.metadata.property.returnType
K1
.C$localObject$1
K2
.C.<no name provided>
@@ -1,4 +1,3 @@
// JVM_ABI_K1_K2_DIFF: KT-63655
class C {
val s = "OK"
@@ -1,9 +0,0 @@
MODULE main
CLASS Outer.class
CLASS METADATA
PROPERTY obj
Property: class.metadata.property.returnType
K1
.Outer$obj$1
K2
.Outer.<no name provided>
@@ -1,5 +1,4 @@
// KT-44054
// JVM_ABI_K1_K2_DIFF: KT-63655
enum class Enum {
Entry1,
Entry2
@@ -1,15 +0,0 @@
MODULE main
CLASS Outer.class
CLASS METADATA
PROPERTY obj1
Property: class.metadata.property.returnType
K1
.Outer$obj1$1
K2
.Outer.<no name provided>
PROPERTY obj2
Property: class.metadata.property.returnType
K1
.Outer$obj2$1
K2
.Outer.<no name provided>
@@ -1,6 +1,4 @@
// KT-44050
// JVM_ABI_K1_K2_DIFF: KT-63655
enum class Enum {
Entry1() {
fun bogus() = 42
@@ -1,9 +0,0 @@
MODULE main
CLASS InvokeKt$box$o$1.class
CLASS METADATA
PROPERTY getP()LInvokeKt$box$o$1$p$1;
Property: class.metadata.property.returnType
K1
.InvokeKt$box$o$1$p$1
K2
.InvokeKt$box$o$1.<no name provided>
@@ -3,7 +3,6 @@
// FULL_JDK
// SKIP_JDK6
// WITH_STDLIB
// JVM_ABI_K1_K2_DIFF: KT-63655
import java.lang.invoke.MethodHandles
import java.lang.invoke.MethodType
+12
View File
@@ -0,0 +1,12 @@
// TARGET_BACKEND: JVM_IR
// WITH_REFLECT
import kotlin.reflect.full.memberProperties
class A {
val prop = object {
val nestedProp = object {}
}
}
fun box() = if (A().prop::class.memberProperties.size == 1) "OK" else "Fail"
@@ -0,0 +1,15 @@
MODULE main
CLASS LocalNestedClassesKt$foo1$X$Y.class
CLASS METADATA
Property: class.metadata.companionObject
K1
null
K2
Z
CLASS LocalNestedClassesKt$foo2$X$Y.class
CLASS METADATA
Property: class.metadata.companionObject
K1
null
K2
Companion
@@ -0,0 +1,144 @@
// TARGET_BACKEND: JVM_IR
// WITH_REFLECT
// JVM_ABI_K1_K2_DIFF: K2 names companion objects in metadata correctly
import kotlin.reflect.KType
import kotlin.reflect.full.memberProperties
val KType.str get() = classifier.toString()
class A {
fun foo(): String {
class Nested {
inner class Inner {
val prop = this
}
}
return Nested().Inner()::class.memberProperties.iterator().next().returnType.str
}
}
fun foo1(): String {
class X {
inner class Y {
companion object Z
val prop = Z
}
}
return X.Y::class.memberProperties.iterator().next().returnType.str
}
fun foo2(): String {
class X {
inner class Y {
companion object
val prop = Companion
}
}
return X.Y::class.memberProperties.iterator().next().returnType.str
}
fun foo3(): String {
class X {
inner class Y {
val prop = object {}
}
}
return X.Y::class.memberProperties.iterator().next().returnType.str
}
fun foo4(): String {
var res = ""
class A {
inner class B {
inner class C {
fun bar() {
class D {
val prop = this
}
res = D::class.memberProperties.iterator().next().returnType.str
}
init {
bar()
}
}
}
}
A().B().C()
return res
}
fun foo5(): String {
var res = ""
object {
fun bar() {
return object {
fun foo() {
class A {
inner class B {
val prop = this
init {
res = prop::class.memberProperties.iterator().next().returnType.str
}
}
}
A().B()
}
}.foo()
}
}.bar()
return res
}
fun foo6(): String {
var res = ""
object {
fun bar() {
class A {
inner class B {
inner class C {
val prop = this
init {
res = prop::class.memberProperties.iterator().next().returnType.str
}
}
}
}
A().B().C()
}
}.bar()
return res
}
fun foo7(): String {
var res = ""
val x = object {
val y = object {
val z = object {
val y = this
init {
res = this::class.memberProperties.iterator().next().returnType.str
}
}
}
}
return res
}
fun box(): String {
if (A().foo() != "class A\$foo\$Nested\$Inner") return "Fail 1"
if (foo1() != "class LocalNestedClassesKt\$foo1\$X\$Y\$Z") return "Fail 2"
if (foo2() != "class LocalNestedClassesKt\$foo2\$X\$Y\$Companion") return "Fail 3"
if (foo3() != "class LocalNestedClassesKt\$foo3\$X\$Y\$prop\$1") return "Fail 4"
if (foo4() != "class LocalNestedClassesKt\$foo4\$A\$B\$C\$bar\$D") return "Fail 5"
if (foo5() != "class LocalNestedClassesKt\$foo5\$1\$bar\$1\$foo\$A\$B") return "Fail 6"
if (foo6() != "class LocalNestedClassesKt\$foo6\$1\$bar\$A\$B\$C") return "Fail 7"
if (foo7() != "class LocalNestedClassesKt\$foo7\$x\$1\$y\$1\$z\$1") return "Fail 8"
return "OK"
}
@@ -1,9 +0,0 @@
MODULE main
CLASS One.class
CLASS METADATA
PROPERTY getA1()[LOne$a1$1;
Property: class.metadata.property.returnType
K1
kotlin/Array<.One$a1$1>
K2
kotlin/Array<.One.<no name provided>>
-1
View File
@@ -2,7 +2,6 @@
// In light analysis mode, anonymous object type is approximated to the supertype, so `fy` is unresolved.
// IGNORE_LIGHT_ANALYSIS
// JVM_ABI_K1_K2_DIFF: KT-63655
private class One {
val a1 = arrayOf(
@@ -1,9 +0,0 @@
MODULE main
CLASS ObjectExtendsLocalInnerKt$box$Local.class
CLASS METADATA
PROPERTY getObj()LObjectExtendsLocalInnerKt$box$Local$obj$1;
Property: class.metadata.property.returnType
K1
.ObjectExtendsLocalInnerKt$box$Local$obj$1
K2
.ObjectExtendsLocalInnerKt$box$Local.<no name provided>
@@ -1,4 +1,3 @@
// JVM_ABI_K1_K2_DIFF: KT-63655
fun box(): String {
val capture = "O"