do not copy overrides for the delegated methods, it causes failure of delegation to traits which extend other traits

This commit is contained in:
Kirill Berezin
2012-08-26 18:39:34 +04:00
committed by Andrey Breslav
parent 1061e1ef69
commit 82a5beddea
3 changed files with 34 additions and 1 deletions
@@ -124,7 +124,7 @@ public class DelegationResolver {
if (memberDescriptor.getModality().isOverridable()) {
Modality modality = DescriptorUtils.convertModality(memberDescriptor.getModality(), true);
CallableMemberDescriptor copy =
memberDescriptor.copy(newOwner, modality, false, CallableMemberDescriptor.Kind.DELEGATION, true);
memberDescriptor.copy(newOwner, modality, false, CallableMemberDescriptor.Kind.DELEGATION, false);
result.add(copy);
}
}
@@ -0,0 +1,28 @@
open trait First {
public open fun foo() : Int
}
open trait Second : First {
public open fun bar() : Int
}
class Impl : Second {
public override fun foo() = 1
public override fun bar() = 2
}
class Test(s : Second) : Second by s {}
fun box() : String {
var t = Test(Impl())
if (t.foo() != 1)
return "Fail #1"
if (t.bar() != 2)
return "Fail #2"
if (t !is First)
return "Fail #3"
if (t !is Second)
return "Fail #4"
return "OK"
}
@@ -73,6 +73,11 @@ public class ClassGenTest extends CodegenTestCase {
blackBoxFile("classes/delegation3.kt");
}
public void testInheritanceAndDelegation4() throws Exception {
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY);
blackBoxFile("classes/delegation4.kt");
}
public void testFunDelegation() throws Exception {
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY);
blackBoxFile("classes/funDelegation.jet");