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();
|
||||
InstructionAdapter iv = new InstructionAdapter(mv);
|
||||
if (!componentType.equals(Type.VOID_TYPE)) {
|
||||
iv.load(0, classAsmType);
|
||||
String desc = "()" + componentType.getDescriptor();
|
||||
iv.invokevirtual(classAsmType.getInternalName(), PropertyCodegen.getterName(parameter.getName()), desc, false);
|
||||
PropertyDescriptor property =
|
||||
bindingContext.get(BindingContext.PRIMARY_CONSTRUCTOR_PARAMETER, descriptorToDeclaration(parameter));
|
||||
genPropertyOnStack(iv, context, property, 0);
|
||||
}
|
||||
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 {
|
||||
val d1 = D(42L, 'a')
|
||||
@@ -6,5 +8,6 @@ fun box(): String {
|
||||
if (d1 != d2) return "Fail equals"
|
||||
if (d1.hashCode() != d2.hashCode()) return "Fail hashCode"
|
||||
if (d1.toString() != d2.toString()) return "Fail toString"
|
||||
if (d1.foo() != d2.foo()) return "Fail foo"
|
||||
return "OK"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user