Stabilized order of methods inherited by delegation.
This commit is contained in:
@@ -23,6 +23,8 @@ import kotlin.platform.platformStatic
|
|||||||
import org.jetbrains.jet.lang.descriptors.CallableDescriptor
|
import org.jetbrains.jet.lang.descriptors.CallableDescriptor
|
||||||
import org.jetbrains.jet.utils.keysToMapExceptNulls
|
import org.jetbrains.jet.utils.keysToMapExceptNulls
|
||||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils
|
import org.jetbrains.jet.lang.resolve.DescriptorUtils
|
||||||
|
import org.jetbrains.jet.lang.resolve.MemberComparator
|
||||||
|
import java.util.Comparator
|
||||||
|
|
||||||
public object CodegenUtilKt {
|
public object CodegenUtilKt {
|
||||||
|
|
||||||
@@ -40,6 +42,8 @@ public object CodegenUtilKt {
|
|||||||
return descriptor.getDefaultType().getMemberScope().getAllDescriptors().stream()
|
return descriptor.getDefaultType().getMemberScope().getAllDescriptors().stream()
|
||||||
.filterIsInstance(javaClass<CallableMemberDescriptor>())
|
.filterIsInstance(javaClass<CallableMemberDescriptor>())
|
||||||
.filter { it.getKind() == CallableMemberDescriptor.Kind.DELEGATION }
|
.filter { it.getKind() == CallableMemberDescriptor.Kind.DELEGATION }
|
||||||
|
.toList()
|
||||||
|
.sortBy(MemberComparator.INSTANCE as Comparator<CallableMemberDescriptor>) // Workaround for KT-6030
|
||||||
.keysToMapExceptNulls {
|
.keysToMapExceptNulls {
|
||||||
delegatingMember ->
|
delegatingMember ->
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,29 @@ import java.util.ArrayList
|
|||||||
import junit.framework.TestCase
|
import junit.framework.TestCase
|
||||||
|
|
||||||
public class MethodOrderTest: CodegenTestCase() {
|
public class MethodOrderTest: CodegenTestCase() {
|
||||||
|
public fun testDelegatedMethod() {
|
||||||
|
doTest(
|
||||||
|
"""
|
||||||
|
trait Trait {
|
||||||
|
fun f0()
|
||||||
|
fun f4()
|
||||||
|
fun f3()
|
||||||
|
fun f2()
|
||||||
|
fun f1()
|
||||||
|
fun f5()
|
||||||
|
}
|
||||||
|
|
||||||
|
val delegate: Trait = throw Error()
|
||||||
|
|
||||||
|
val obj = object : Trait by delegate {
|
||||||
|
override fun f3() { }
|
||||||
|
}
|
||||||
|
""",
|
||||||
|
"\$obj$1",
|
||||||
|
listOf("<clinit>()V", "f3()V", "<init>()V", "f0()V", "f1()V", "f2()V", "f4()V", "f5()V")
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
public fun testLambdaClosureOrdering() {
|
public fun testLambdaClosureOrdering() {
|
||||||
doTest(
|
doTest(
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user