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)) {
|
if (!DescriptorUtils.isInterface(descriptor)) {
|
||||||
for (DeclarationDescriptor memberDescriptor : descriptor.getDefaultType().getMemberScope().getAllDescriptors()) {
|
for (DeclarationDescriptor memberDescriptor : descriptor.getDefaultType().getMemberScope().getAllDescriptors()) {
|
||||||
if (memberDescriptor instanceof FunctionDescriptor) {
|
if (memberDescriptor instanceof CallableMemberDescriptor) {
|
||||||
FunctionDescriptor member = (FunctionDescriptor) memberDescriptor;
|
CallableMemberDescriptor member = (CallableMemberDescriptor) memberDescriptor;
|
||||||
if (!member.getKind().isReal() && BridgesPackage.findTraitImplementation(member) == null) {
|
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);
|
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")
|
@TestMetadata("kt1939.kt")
|
||||||
public void testKt1939() throws Exception {
|
public void testKt1939() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/kt1939.kt");
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/kt1939.kt");
|
||||||
|
|||||||
@@ -131,6 +131,12 @@ public class BridgeTestGenerated extends AbstractBridgeTest {
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("kt1939.kt")
|
||||||
public void testKt1939() throws Exception {
|
public void testKt1939() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/kt1939.kt");
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/bridges/kt1939.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user