Fix NoSuchMethodError on private components of data classes
A follow-up to https://github.com/JetBrains/kotlin/commit/d5681540ec47ee5c9a548ba56df8b4e20097549d
This commit is contained in:
@@ -833,9 +833,9 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
Type componentType = signature.getReturnType();
|
Type componentType = signature.getReturnType();
|
||||||
InstructionAdapter iv = new InstructionAdapter(mv);
|
InstructionAdapter iv = new InstructionAdapter(mv);
|
||||||
if (!componentType.equals(Type.VOID_TYPE)) {
|
if (!componentType.equals(Type.VOID_TYPE)) {
|
||||||
iv.load(0, classAsmType);
|
PropertyDescriptor property =
|
||||||
String desc = "()" + componentType.getDescriptor();
|
bindingContext.get(BindingContext.PRIMARY_CONSTRUCTOR_PARAMETER, descriptorToDeclaration(parameter));
|
||||||
iv.invokevirtual(classAsmType.getInternalName(), PropertyCodegen.getterName(parameter.getName()), desc, false);
|
genPropertyOnStack(iv, context, property, 0);
|
||||||
}
|
}
|
||||||
iv.areturn(componentType);
|
iv.areturn(componentType);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
data class D(private val x: Long, private val y: Char)
|
data class D(private val x: Long, private val y: Char) {
|
||||||
|
fun foo() = "${component1()}${component2()}"
|
||||||
|
}
|
||||||
|
|
||||||
fun box(): String {
|
fun box(): String {
|
||||||
val d1 = D(42L, 'a')
|
val d1 = D(42L, 'a')
|
||||||
@@ -6,5 +8,6 @@ fun box(): String {
|
|||||||
if (d1 != d2) return "Fail equals"
|
if (d1 != d2) return "Fail equals"
|
||||||
if (d1.hashCode() != d2.hashCode()) return "Fail hashCode"
|
if (d1.hashCode() != d2.hashCode()) return "Fail hashCode"
|
||||||
if (d1.toString() != d2.toString()) return "Fail toString"
|
if (d1.toString() != d2.toString()) return "Fail toString"
|
||||||
|
if (d1.foo() != d2.foo()) return "Fail foo"
|
||||||
return "OK"
|
return "OK"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user