From 84c7b05781e77a4c0616d2d6d4bc9aad036311dd Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Wed, 15 Oct 2014 16:34:51 +0400 Subject: [PATCH] Stabilized order of methods inherited by delegation. --- .../jet/backend/common/CodegenUtilKt.kt | 4 ++++ .../jetbrains/jet/codegen/MethodOrderTest.kt | 23 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/compiler/backend-common/src/org/jetbrains/jet/backend/common/CodegenUtilKt.kt b/compiler/backend-common/src/org/jetbrains/jet/backend/common/CodegenUtilKt.kt index 326bcc7dfd9..2d36b04c5c8 100644 --- a/compiler/backend-common/src/org/jetbrains/jet/backend/common/CodegenUtilKt.kt +++ b/compiler/backend-common/src/org/jetbrains/jet/backend/common/CodegenUtilKt.kt @@ -23,6 +23,8 @@ import kotlin.platform.platformStatic import org.jetbrains.jet.lang.descriptors.CallableDescriptor import org.jetbrains.jet.utils.keysToMapExceptNulls import org.jetbrains.jet.lang.resolve.DescriptorUtils +import org.jetbrains.jet.lang.resolve.MemberComparator +import java.util.Comparator public object CodegenUtilKt { @@ -40,6 +42,8 @@ public object CodegenUtilKt { return descriptor.getDefaultType().getMemberScope().getAllDescriptors().stream() .filterIsInstance(javaClass()) .filter { it.getKind() == CallableMemberDescriptor.Kind.DELEGATION } + .toList() + .sortBy(MemberComparator.INSTANCE as Comparator) // Workaround for KT-6030 .keysToMapExceptNulls { delegatingMember -> diff --git a/compiler/tests/org/jetbrains/jet/codegen/MethodOrderTest.kt b/compiler/tests/org/jetbrains/jet/codegen/MethodOrderTest.kt index 30a18fef947..7b1c0881035 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/MethodOrderTest.kt +++ b/compiler/tests/org/jetbrains/jet/codegen/MethodOrderTest.kt @@ -25,6 +25,29 @@ import java.util.ArrayList import junit.framework.TestCase 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("()V", "f3()V", "()V", "f0()V", "f1()V", "f2()V", "f4()V", "f5()V") + ) + } + public fun testLambdaClosureOrdering() { doTest( """