Generate default constructor also for private classes when all parameters have default values

#KT-14408 Fixed
This commit is contained in:
Dmitry Jemerov
2016-11-17 11:06:31 +01:00
parent 248185943c
commit 16a133bf5c
6 changed files with 36 additions and 2 deletions
@@ -244,7 +244,7 @@ class DefaultParameterValueSubstitutor(val state: GenerationState) {
if (CodegenBinding.canHaveOuter(state.bindingContext, classDescriptor)) return false
if (Visibilities.isPrivate(classDescriptor.visibility) || Visibilities.isPrivate(constructorDescriptor.visibility))
if (Visibilities.isPrivate(constructorDescriptor.visibility))
return false
if (constructorDescriptor.valueParameters.isEmpty()) return false
@@ -0,0 +1,10 @@
// IGNORE_BACKEND: JS
// WITH_RUNTIME
private data class C(val status: String = "OK")
fun box(): String {
val c = (C::class.java.getConstructor().newInstance())
return c.status
}
@@ -1,4 +1,4 @@
private class Foo(val a: Int = 1) {}
// CLASS: Foo
// HAS_DEFAULT_CONSTRUCTOR: false
// HAS_DEFAULT_CONSTRUCTOR: true
@@ -8615,6 +8615,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
doTest(fileName);
}
@TestMetadata("privateClass.kt")
public void testPrivateClass() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/jvmOverloads/privateClass.kt");
doTest(fileName);
}
@TestMetadata("secondaryConstructor.kt")
public void testSecondaryConstructor() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/jvmOverloads/secondaryConstructor.kt");
@@ -8615,6 +8615,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
doTest(fileName);
}
@TestMetadata("privateClass.kt")
public void testPrivateClass() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/jvmOverloads/privateClass.kt");
doTest(fileName);
}
@TestMetadata("secondaryConstructor.kt")
public void testSecondaryConstructor() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/jvmOverloads/secondaryConstructor.kt");
@@ -10421,6 +10421,18 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
throw new AssertionError("Looks like this test can be unmuted. Remove IGNORE_BACKEND directive for that.");
}
@TestMetadata("privateClass.kt")
public void testPrivateClass() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/jvmOverloads/privateClass.kt");
try {
doTest(fileName);
}
catch (Throwable ignore) {
return;
}
throw new AssertionError("Looks like this test can be unmuted. Remove IGNORE_BACKEND directive for that.");
}
@TestMetadata("secondaryConstructor.kt")
public void testSecondaryConstructor() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/jvmOverloads/secondaryConstructor.kt");