do not copy overrides for the delegated methods, it causes failure of delegation to traits which extend other traits
This commit is contained in:
committed by
Andrey Breslav
parent
1061e1ef69
commit
82a5beddea
@@ -124,7 +124,7 @@ public class DelegationResolver {
|
|||||||
if (memberDescriptor.getModality().isOverridable()) {
|
if (memberDescriptor.getModality().isOverridable()) {
|
||||||
Modality modality = DescriptorUtils.convertModality(memberDescriptor.getModality(), true);
|
Modality modality = DescriptorUtils.convertModality(memberDescriptor.getModality(), true);
|
||||||
CallableMemberDescriptor copy =
|
CallableMemberDescriptor copy =
|
||||||
memberDescriptor.copy(newOwner, modality, false, CallableMemberDescriptor.Kind.DELEGATION, true);
|
memberDescriptor.copy(newOwner, modality, false, CallableMemberDescriptor.Kind.DELEGATION, false);
|
||||||
result.add(copy);
|
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");
|
blackBoxFile("classes/delegation3.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testInheritanceAndDelegation4() throws Exception {
|
||||||
|
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY);
|
||||||
|
blackBoxFile("classes/delegation4.kt");
|
||||||
|
}
|
||||||
|
|
||||||
public void testFunDelegation() throws Exception {
|
public void testFunDelegation() throws Exception {
|
||||||
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY);
|
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY);
|
||||||
blackBoxFile("classes/funDelegation.jet");
|
blackBoxFile("classes/funDelegation.jet");
|
||||||
|
|||||||
Reference in New Issue
Block a user