KT-12707: (JS) proper translation of a constructor in subclass that calls secondary constructor of parent class. Fix #KT-12707
This commit is contained in:
+12
@@ -95,6 +95,18 @@ public class SecondaryConstructorTestGenerated extends AbstractSecondaryConstruc
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("callFromLocalSubClass.kt")
|
||||
public void testCallFromLocalSubClass() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/secondaryConstructors/callFromLocalSubClass.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("callFromSubClass.kt")
|
||||
public void testCallFromSubClass() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/secondaryConstructors/callFromSubClass.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("clashingDefaultConstructors.kt")
|
||||
public void testClashingDefaultConstructors() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/secondaryConstructors/clashingDefaultConstructors.kt");
|
||||
|
||||
+14
-1
@@ -202,7 +202,12 @@ public final class ClassInitializerTranslator extends AbstractTranslator {
|
||||
}
|
||||
}
|
||||
|
||||
addCallToSuperMethod(arguments, initializer);
|
||||
if (superDescriptor.isPrimary()) {
|
||||
addCallToSuperMethod(arguments, initializer);
|
||||
}
|
||||
else {
|
||||
addCallToSuperSecondaryConstructor(arguments, superDescriptor);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -219,6 +224,14 @@ public final class ClassInitializerTranslator extends AbstractTranslator {
|
||||
initFunction.getBody().getStatements().add(call.makeStmt());
|
||||
}
|
||||
|
||||
private void addCallToSuperSecondaryConstructor(@NotNull List<JsExpression> arguments, @NotNull ConstructorDescriptor descriptor) {
|
||||
JsExpression reference = context.getQualifiedReference(descriptor);
|
||||
JsInvocation call = new JsInvocation(reference);
|
||||
call.getArguments().addAll(arguments);
|
||||
call.getArguments().add(JsLiteral.THIS);
|
||||
initFunction.getBody().getStatements().add(call.makeStmt());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private List<JsParameter> translatePrimaryConstructorParameters() {
|
||||
List<KtParameter> parameterList = getPrimaryConstructorParameters(classDeclaration);
|
||||
|
||||
Reference in New Issue
Block a user