Java to Kotlin conversion: keep constructor access modifier

This commit is contained in:
Valentin Kipyatkov
2014-06-02 22:54:47 +04:00
parent ffa3ff3bbd
commit ebcb04b73b
15 changed files with 75 additions and 25 deletions
+1 -1
View File
@@ -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<Modifier>(),
classBodyElements.add(PrimaryConstructor(this, MemberComments.Empty, setOf(),
ParameterList(parameters),
Block(createInitStatementsFromFields(finalOrWithEmptyInitializerFields))))
}
+2 -4
View File
@@ -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
@@ -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()
}
+10 -13
View File
@@ -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() +
"}"
}
}
@@ -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");
@@ -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");
@@ -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 __
}
}
}
@@ -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);
}
}
@@ -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 __
}
}
}
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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)
@@ -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)
@@ -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)
@@ -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
@@ -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