[FIR] Save declarations in metadata in source order

^KT-54792 Fixed
^KT-54801
^KT-54800
This commit is contained in:
Dmitriy Novozhilov
2023-04-13 15:11:56 +03:00
committed by Space Team
parent b359a5538c
commit af60681705
128 changed files with 833 additions and 256 deletions
@@ -0,0 +1,49 @@
// TARGET_BACKEND: JVM_IR
// WITH_STDLIB
// WITH_REFLECT
// FILE: B.java
public class B {
public final int c = 1;
public void bb() {}
public final int b = 2;
public final int a = 10;
public void aa() {}
}
// FILE: main.kt
import kotlin.reflect.KClass
import kotlin.reflect.KFunction
import kotlin.reflect.KProperty
class A {
val c = 1
fun bb() {}
val b = 2
val a = 10
fun aa() {}
}
fun listMembers(kClass: KClass<*>): String {
return kClass.members.joinToString(" | ") { member ->
val prefix = when (member) {
is KFunction -> "fun"
is KProperty -> "val"
else -> "wtf"
}
"$prefix ${member.name}"
}
}
fun box(): String {
val aMembers = listMembers(A::class)
// After migration of reflection to K2 the order will be following:
// "val c | val b | val a | fun bb | fun aa | fun equals | fun hashCode | fun toString"
if (aMembers != "val a | val b | val c | fun aa | fun bb | fun equals | fun hashCode | fun toString") return "Fail A: $aMembers"
// Looks like property order is different on different JDK, so it's pointless to test it
// val bMembers = listMembers(B::class)
// if (bMembers != "fun aa | fun bb | val c | val b | val a | fun equals | fun hashCode | fun toString") return "Fail B: $bMembers"
return "OK"
}