diff --git a/j2k/src/org/jetbrains/jet/j2k/Converter.kt b/j2k/src/org/jetbrains/jet/j2k/Converter.kt index a6c2039c72f..cec526e2acf 100644 --- a/j2k/src/org/jetbrains/jet/j2k/Converter.kt +++ b/j2k/src/org/jetbrains/jet/j2k/Converter.kt @@ -160,7 +160,7 @@ public class Converter(val project: Project, val settings: ConverterSettings) { //TODO: comments? val parameters = finalOrWithEmptyInitializerFields.map { Parameter(Identifier("_" + it.identifier.name), it.`type`, Parameter.VarValModifier.None, listOf()) } - classBodyElements.add(PrimaryConstructor(this, MemberComments.Empty, Collections.emptySet(), + classBodyElements.add(PrimaryConstructor(this, MemberComments.Empty, setOf(), ParameterList(parameters), Block(createInitStatementsFromFields(finalOrWithEmptyInitializerFields)))) } diff --git a/j2k/src/org/jetbrains/jet/j2k/ast/Class.kt b/j2k/src/org/jetbrains/jet/j2k/ast/Class.kt index 18ac2388535..9e7c1c97c23 100644 --- a/j2k/src/org/jetbrains/jet/j2k/ast/Class.kt +++ b/j2k/src/org/jetbrains/jet/j2k/ast/Class.kt @@ -47,10 +47,8 @@ open class Class( protected val classMembers: ClassMembers = ClassMembers.fromBodyElements(bodyElements) - protected open fun primaryConstructorSignatureToKotlin(): String { - val constructor = classMembers.primaryConstructor - return if (constructor != null) constructor.signatureToKotlin() else "()" - } + protected open fun primaryConstructorSignatureToKotlin(): String + = classMembers.primaryConstructor?.signatureToKotlin() ?: "()" protected fun primaryConstructorBodyToKotlin(): String { val constructor = classMembers.primaryConstructor diff --git a/j2k/src/org/jetbrains/jet/j2k/ast/Constructors.kt b/j2k/src/org/jetbrains/jet/j2k/ast/Constructors.kt index 7fc1a020c54..61cddf5d166 100644 --- a/j2k/src/org/jetbrains/jet/j2k/ast/Constructors.kt +++ b/j2k/src/org/jetbrains/jet/j2k/ast/Constructors.kt @@ -35,7 +35,11 @@ class PrimaryConstructor(converter: Converter, block: Block) : Constructor(converter, comments, modifiers, parameterList, block) { - public fun signatureToKotlin(): String = "(" + parameterList.toKotlin() + ")" + public fun signatureToKotlin(): String { + val accessModifier = modifiers.accessModifier() + val modifiersString = if (accessModifier != null && accessModifier != Modifier.PUBLIC) " " + accessModifier.toKotlin() else "" + return modifiersString + "(" + parameterList.toKotlin() + ")" + } public fun bodyToKotlin(): String = block!!.toKotlin() } diff --git a/j2k/src/org/jetbrains/jet/j2k/ast/Enum.kt b/j2k/src/org/jetbrains/jet/j2k/ast/Enum.kt index 1bf2124c4b0..9519b1b9a20 100644 --- a/j2k/src/org/jetbrains/jet/j2k/ast/Enum.kt +++ b/j2k/src/org/jetbrains/jet/j2k/ast/Enum.kt @@ -31,23 +31,20 @@ class Enum( ) : Class(converter, name, comments, modifiers, typeParameterList, extendsTypes, baseClassParams, implementsTypes, bodyElements) { - override fun primaryConstructorSignatureToKotlin(): String { - val s: String = super.primaryConstructorSignatureToKotlin() - return if (s.equals("()")) "" else s - } + override fun primaryConstructorSignatureToKotlin(): String + = classMembers.primaryConstructor?.signatureToKotlin() ?: "" override fun isDefinitelyFinal() = true override fun toKotlin(): String { - val primaryConstructorBody = primaryConstructorBodyToKotlin() ?: "" return modifiersToKotlin() + - "enum class " + name.toKotlin() + - primaryConstructorSignatureToKotlin() + - typeParameterList.toKotlin() + - implementTypesToKotlin() + - " {" + - classMembers.allMembers.toKotlin() + - ( if (primaryConstructorBody.isEmpty()) "" else primaryConstructorBody) + - "}" + "enum class " + name.toKotlin() + + primaryConstructorSignatureToKotlin() + + typeParameterList.toKotlin() + + implementTypesToKotlin() + + " {" + + classMembers.allMembers.toKotlin() + + primaryConstructorBodyToKotlin() + + "}" } } \ No newline at end of file diff --git a/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterBasicTestGenerated.java b/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterBasicTestGenerated.java index 64506cd871d..e2cc39f78f7 100644 --- a/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterBasicTestGenerated.java +++ b/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterBasicTestGenerated.java @@ -765,6 +765,11 @@ public class JavaToKotlinConverterBasicTestGenerated extends AbstractJavaToKotli doTest("j2k/tests/testData/ast/constructors/identifier.java"); } + @TestMetadata("privateConstructors.java") + public void testPrivateConstructors() throws Exception { + doTest("j2k/tests/testData/ast/constructors/privateConstructors.java"); + } + @TestMetadata("withManyDefaultParams.java") public void testWithManyDefaultParams() throws Exception { doTest("j2k/tests/testData/ast/constructors/withManyDefaultParams.java"); diff --git a/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterPluginTestGenerated.java b/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterPluginTestGenerated.java index 566cedfc361..79f7fcbdcf4 100644 --- a/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterPluginTestGenerated.java +++ b/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterPluginTestGenerated.java @@ -765,6 +765,11 @@ public class JavaToKotlinConverterPluginTestGenerated extends AbstractJavaToKotl doTest("j2k/tests/testData/ast/constructors/identifier.java"); } + @TestMetadata("privateConstructors.java") + public void testPrivateConstructors() throws Exception { + doTest("j2k/tests/testData/ast/constructors/privateConstructors.java"); + } + @TestMetadata("withManyDefaultParams.java") public void testWithManyDefaultParams() throws Exception { doTest("j2k/tests/testData/ast/constructors/withManyDefaultParams.java"); diff --git a/j2k/tests/testData/ast/constructors/privateConstructors.ide.kt b/j2k/tests/testData/ast/constructors/privateConstructors.ide.kt new file mode 100644 index 00000000000..884b005389f --- /dev/null +++ b/j2k/tests/testData/ast/constructors/privateConstructors.ide.kt @@ -0,0 +1,14 @@ +class C private(arg1: Int, arg2: Int, arg3: Int) { + class object { + + private fun init(arg1: Int, arg2: Int): C { + val __ = C(arg1, arg2, 0) + return __ + } + + public fun init(arg1: Int): C { + val __ = C(arg1, 0, 0) + return __ + } + } +} \ No newline at end of file diff --git a/j2k/tests/testData/ast/constructors/privateConstructors.java b/j2k/tests/testData/ast/constructors/privateConstructors.java new file mode 100644 index 00000000000..55cd4fca926 --- /dev/null +++ b/j2k/tests/testData/ast/constructors/privateConstructors.java @@ -0,0 +1,13 @@ +//file +class C { + private C(int arg1, int arg2, int arg3) { + } + + private C(int arg1, int arg2) { + this(arg1, arg2, 0); + } + + public C(int arg1) { + this(arg1, 0, 0); + } +} diff --git a/j2k/tests/testData/ast/constructors/privateConstructors.kt b/j2k/tests/testData/ast/constructors/privateConstructors.kt new file mode 100644 index 00000000000..8ec02d2adb9 --- /dev/null +++ b/j2k/tests/testData/ast/constructors/privateConstructors.kt @@ -0,0 +1,14 @@ +open class C private(arg1: Int, arg2: Int, arg3: Int) { + class object { + + private fun init(arg1: Int, arg2: Int): C { + val __ = C(arg1, arg2, 0) + return __ + } + + public open fun init(arg1: Int): C { + val __ = C(arg1, 0, 0) + return __ + } + } +} \ No newline at end of file diff --git a/j2k/tests/testData/ast/enum/colorEnum.ide.kt b/j2k/tests/testData/ast/enum/colorEnum.ide.kt index 4195c79f8e9..a96ba5955a8 100644 --- a/j2k/tests/testData/ast/enum/colorEnum.ide.kt +++ b/j2k/tests/testData/ast/enum/colorEnum.ide.kt @@ -1,6 +1,6 @@ package demo -enum class MyEnum(private val color: Int) { +enum class MyEnum private(private val color: Int) { RED : MyEnum(10) BLUE : MyEnum(20) diff --git a/j2k/tests/testData/ast/enum/colorEnum.kt b/j2k/tests/testData/ast/enum/colorEnum.kt index 4195c79f8e9..a96ba5955a8 100644 --- a/j2k/tests/testData/ast/enum/colorEnum.kt +++ b/j2k/tests/testData/ast/enum/colorEnum.kt @@ -1,6 +1,6 @@ package demo -enum class MyEnum(private val color: Int) { +enum class MyEnum private(private val color: Int) { RED : MyEnum(10) BLUE : MyEnum(20) diff --git a/j2k/tests/testData/ast/enum/fieldsWithPrimaryPrivateConstructor.ide.kt b/j2k/tests/testData/ast/enum/fieldsWithPrimaryPrivateConstructor.ide.kt index e49992d812f..53ff728122c 100644 --- a/j2k/tests/testData/ast/enum/fieldsWithPrimaryPrivateConstructor.ide.kt +++ b/j2k/tests/testData/ast/enum/fieldsWithPrimaryPrivateConstructor.ide.kt @@ -1,4 +1,4 @@ -enum class Color(private var code: Int) { +enum class Color private(private var code: Int) { WHITE : Color(21) BLACK : Color(22) RED : Color(23) diff --git a/j2k/tests/testData/ast/enum/fieldsWithPrimaryPrivateConstructor.kt b/j2k/tests/testData/ast/enum/fieldsWithPrimaryPrivateConstructor.kt index e49992d812f..53ff728122c 100644 --- a/j2k/tests/testData/ast/enum/fieldsWithPrimaryPrivateConstructor.kt +++ b/j2k/tests/testData/ast/enum/fieldsWithPrimaryPrivateConstructor.kt @@ -1,4 +1,4 @@ -enum class Color(private var code: Int) { +enum class Color private(private var code: Int) { WHITE : Color(21) BLACK : Color(22) RED : Color(23) diff --git a/j2k/tests/testData/ast/enum/primaryPrivateConstructor.ide.kt b/j2k/tests/testData/ast/enum/primaryPrivateConstructor.ide.kt index 6fe0bbffb12..583a45b4a47 100644 --- a/j2k/tests/testData/ast/enum/primaryPrivateConstructor.ide.kt +++ b/j2k/tests/testData/ast/enum/primaryPrivateConstructor.ide.kt @@ -1,6 +1,6 @@ package demo -enum class Color(private var code: Int) { +enum class Color private(private var code: Int) { public fun getCode(): Int { return code diff --git a/j2k/tests/testData/ast/enum/primaryPrivateConstructor.kt b/j2k/tests/testData/ast/enum/primaryPrivateConstructor.kt index 6fe0bbffb12..583a45b4a47 100644 --- a/j2k/tests/testData/ast/enum/primaryPrivateConstructor.kt +++ b/j2k/tests/testData/ast/enum/primaryPrivateConstructor.kt @@ -1,6 +1,6 @@ package demo -enum class Color(private var code: Int) { +enum class Color private(private var code: Int) { public fun getCode(): Int { return code