Fix translation of copy() fun in data class
Fix translation of copy() function in data class which has secondary constructor in JS BE. See KT-16717.
This commit is contained in:
committed by
Alexey Andreev
parent
b46205f60b
commit
466540399c
@@ -0,0 +1,9 @@
|
|||||||
|
data class A(val o: String, val k: String) {
|
||||||
|
constructor() : this("O", "k")
|
||||||
|
}
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
val a = A().copy(k = "K")
|
||||||
|
return a.o + a.k
|
||||||
|
}
|
||||||
|
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
@kotlin.Metadata
|
||||||
|
public final class A {
|
||||||
|
private final @org.jetbrains.annotations.NotNull field k: java.lang.String
|
||||||
|
private final @org.jetbrains.annotations.NotNull field o: java.lang.String
|
||||||
|
public method <init>(): void
|
||||||
|
public method <init>(@org.jetbrains.annotations.NotNull p0: java.lang.String, @org.jetbrains.annotations.NotNull p1: java.lang.String): void
|
||||||
|
public final @org.jetbrains.annotations.NotNull method component1(): java.lang.String
|
||||||
|
public final @org.jetbrains.annotations.NotNull method component2(): java.lang.String
|
||||||
|
public synthetic static method copy$default(p0: A, p1: java.lang.String, p2: java.lang.String, p3: int, p4: java.lang.Object): A
|
||||||
|
public final @org.jetbrains.annotations.NotNull method copy(@org.jetbrains.annotations.NotNull p0: java.lang.String, @org.jetbrains.annotations.NotNull p1: java.lang.String): A
|
||||||
|
public method equals(p0: java.lang.Object): boolean
|
||||||
|
public final @org.jetbrains.annotations.NotNull method getK(): java.lang.String
|
||||||
|
public final @org.jetbrains.annotations.NotNull method getO(): java.lang.String
|
||||||
|
public method hashCode(): int
|
||||||
|
public method toString(): java.lang.String
|
||||||
|
}
|
||||||
|
|
||||||
|
@kotlin.Metadata
|
||||||
|
public final class WithSecondaryConstructorKt {
|
||||||
|
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
|
||||||
|
}
|
||||||
+6
@@ -5787,6 +5787,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/dataClasses/copy/withGenericParameter.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/dataClasses/copy/withGenericParameter.kt");
|
||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("withSecondaryConstructor.kt")
|
||||||
|
public void testWithSecondaryConstructor() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/dataClasses/copy/withSecondaryConstructor.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/codegen/box/dataClasses/equals")
|
@TestMetadata("compiler/testData/codegen/box/dataClasses/equals")
|
||||||
|
|||||||
@@ -5787,6 +5787,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/dataClasses/copy/withGenericParameter.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/dataClasses/copy/withGenericParameter.kt");
|
||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("withSecondaryConstructor.kt")
|
||||||
|
public void testWithSecondaryConstructor() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/dataClasses/copy/withSecondaryConstructor.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/codegen/box/dataClasses/equals")
|
@TestMetadata("compiler/testData/codegen/box/dataClasses/equals")
|
||||||
|
|||||||
@@ -6520,6 +6520,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/dataClasses/copy/withGenericParameter.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/dataClasses/copy/withGenericParameter.kt");
|
||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("withSecondaryConstructor.kt")
|
||||||
|
public void testWithSecondaryConstructor() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/dataClasses/copy/withSecondaryConstructor.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/codegen/box/dataClasses/equals")
|
@TestMetadata("compiler/testData/codegen/box/dataClasses/equals")
|
||||||
|
|||||||
+2
-1
@@ -91,7 +91,8 @@ class JsDataClassGenerator extends DataClassMethodGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ClassDescriptor classDescriptor = (ClassDescriptor) function.getContainingDeclaration();
|
ClassDescriptor classDescriptor = (ClassDescriptor) function.getContainingDeclaration();
|
||||||
ClassConstructorDescriptor constructor = classDescriptor.getConstructors().iterator().next();
|
ClassConstructorDescriptor constructor = classDescriptor.getUnsubstitutedPrimaryConstructor();
|
||||||
|
assert constructor != null : "Data class should have primary constructor: " + classDescriptor;
|
||||||
|
|
||||||
JsExpression constructorRef = context.getInnerReference(constructor);
|
JsExpression constructorRef = context.getInnerReference(constructor);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user