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:
@@ -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"
|
||||
}
|
||||
+6
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user