Generate bridges for FAKE_OVERRIDE properties

The same way it's done for function, just call generateBridges for accessors

 #KT-9442 Fixed
This commit is contained in:
Denis Zharkov
2015-10-06 11:23:12 +03:00
parent c21d827326
commit 252c82abe3
4 changed files with 46 additions and 3 deletions
@@ -68,10 +68,22 @@ public abstract class ClassBodyCodegen extends MemberCodegen<JetClassOrObject> {
if (!DescriptorUtils.isInterface(descriptor)) {
for (DeclarationDescriptor memberDescriptor : descriptor.getDefaultType().getMemberScope().getAllDescriptors()) {
if (memberDescriptor instanceof FunctionDescriptor) {
FunctionDescriptor member = (FunctionDescriptor) memberDescriptor;
if (memberDescriptor instanceof CallableMemberDescriptor) {
CallableMemberDescriptor member = (CallableMemberDescriptor) memberDescriptor;
if (!member.getKind().isReal() && BridgesPackage.findTraitImplementation(member) == null) {
functionCodegen.generateBridges(member);
if (member instanceof FunctionDescriptor) {
functionCodegen.generateBridges((FunctionDescriptor) member);
}
else if (member instanceof PropertyDescriptor) {
PropertyGetterDescriptor getter = ((PropertyDescriptor) member).getGetter();
if (getter != null) {
functionCodegen.generateBridges(getter);
}
PropertySetterDescriptor setter = ((PropertyDescriptor) member).getSetter();
if (setter != null) {
functionCodegen.generateBridges(setter);
}
}
}
}
}
@@ -0,0 +1,19 @@
open class A<T> {
var size: T = 56 as T
}
interface C {
var size: Int
}
class B : C, A<Int>()
fun box(): String {
val b = B()
if (b.size != 56) return "fail 1: ${b.size}"
b.size = 55
if (b.size != 55) return "fail 2: ${b.size}"
return "OK"
}
@@ -508,6 +508,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
doTest(fileName);
}
@TestMetadata("genericProperty.kt")
public void testGenericProperty() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/genericProperty.kt");
doTest(fileName);
}
@TestMetadata("kt1939.kt")
public void testKt1939() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/kt1939.kt");
@@ -131,6 +131,12 @@ public class BridgeTestGenerated extends AbstractBridgeTest {
doTest(fileName);
}
@TestMetadata("genericProperty.kt")
public void testGenericProperty() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/genericProperty.kt");
doTest(fileName);
}
@TestMetadata("kt1939.kt")
public void testKt1939() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/kt1939.kt");