Java to Kotlin conversion: artificial constructors (when no primary detected) use var/val parameters

This commit is contained in:
Valentin Kipyatkov
2014-06-02 23:19:57 +04:00
parent 1be836a956
commit 66a83a4322
9 changed files with 17 additions and 102 deletions
+9 -12
View File
@@ -159,10 +159,16 @@ 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, setOf(Modifier.PRIVATE),
val parameters = finalOrWithEmptyInitializerFields.map { field ->
val varValModifier = if (field.modifiers.contains(Modifier.FINAL)) Parameter.VarValModifier.Val else Parameter.VarValModifier.Var
Parameter(field.identifier, field.`type`, varValModifier, field.modifiers.filter { ACCESS_MODIFIERS.contains(it) })
}
classBodyElements.add(PrimaryConstructor(this,
MemberComments.Empty,
setOf(Modifier.PRIVATE),
ParameterList(parameters),
Block(createInitStatementsFromFields(finalOrWithEmptyInitializerFields))))
Block.Empty))
classBodyElements.removeAll(finalOrWithEmptyInitializerFields)
}
val baseClassParams: List<Expression> = run {
@@ -459,15 +465,6 @@ public class Converter(val project: Project, val settings: ConverterSettings) {
return expression
}
private fun createInitStatementsFromFields(fields: List<Field>): List<Statement> {
val result = ArrayList<Statement>()
for (field in fields) {
val kotlinIdentifier = field.identifier.toKotlin()
result.add(DummyStringExpression(kotlinIdentifier + " = " + "_" + kotlinIdentifier))
}
return result
}
private fun createPrimaryConstructorInvocation(s: String, fields: List<Field>, initializers: Map<String, String>): String {
return s + "(" + fields.map { initializers[it.identifier.toKotlin()] }.makeString(", ") + ")"
}
@@ -1,17 +1,10 @@
public class Identifier<T> private(_myName: T, _myHasDollar: Boolean) {
private val myName: T
private var myHasDollar: Boolean = false
public class Identifier<T> private(private val myName: T, private var myHasDollar: Boolean) {
private var myNullable: Boolean = true
public fun getName(): T {
return myName
}
{
myName = _myName
myHasDollar = _myHasDollar
}
class object {
public fun <T> init(name: T): Identifier<T> {
@@ -1,17 +1,10 @@
public open class Identifier<T> private(_myName: T?, _myHasDollar: Boolean) {
private val myName: T?
private var myHasDollar: Boolean = false
public open class Identifier<T> private(private val myName: T?, private var myHasDollar: Boolean) {
private var myNullable: Boolean = true
public open fun getName(): T? {
return myName
}
{
myName = _myName
myHasDollar = _myHasDollar
}
class object {
public open fun <T> init(name: T?): Identifier<T> {
@@ -1,17 +1,10 @@
public class Identifier private(_myName: String, _myHasDollar: Boolean) {
private val myName: String
private var myHasDollar: Boolean = false
public class Identifier private(private val myName: String, private var myHasDollar: Boolean) {
private var myNullable: Boolean = true
public fun getName(): String {
return myName
}
{
myName = _myName
myHasDollar = _myHasDollar
}
class object {
public fun init(name: String): Identifier {
@@ -1,17 +1,10 @@
public open class Identifier private(_myName: String?, _myHasDollar: Boolean) {
private val myName: String?
private var myHasDollar: Boolean = false
public open class Identifier private(private val myName: String?, private var myHasDollar: Boolean) {
private var myNullable: Boolean = true
public open fun getName(): String? {
return myName
}
{
myName = _myName
myHasDollar = _myHasDollar
}
class object {
public open fun init(name: String?): Identifier {
@@ -1,24 +1,4 @@
public class Test private(_myName: String, _a: Boolean, _b: Double, _c: Float, _d: Long, _e: Int, _f: Short, _g: Char) {
private val myName: String
private var a: Boolean = false
private var b: Double = 0.toDouble()
private var c: Float = 0.toFloat()
private var d: Long = 0
private var e: Int = 0
private var f: Short = 0
private var g: Char = ' '
{
myName = _myName
a = _a
b = _b
c = _c
d = _d
e = _e
f = _f
g = _g
}
public class Test private(private val myName: String, private var a: Boolean, private var b: Double, private var c: Float, private var d: Long, private var e: Int, private var f: Short, private var g: Char) {
class object {
public fun init(): Test {
@@ -1,24 +1,4 @@
public open class Test private(_myName: String?, _a: Boolean, _b: Double, _c: Float, _d: Long, _e: Int, _f: Short, _g: Char) {
private val myName: String?
private var a: Boolean = false
private var b: Double = 0.toDouble()
private var c: Float = 0.toFloat()
private var d: Long = 0
private var e: Int = 0
private var f: Short = 0
private var g: Char = ' '
{
myName = _myName
a = _a
b = _b
c = _c
d = _d
e = _e
f = _f
g = _g
}
public open class Test private(private val myName: String?, private var a: Boolean, private var b: Double, private var c: Float, private var d: Long, private var e: Int, private var f: Short, private var g: Char) {
class object {
public open fun init(): Test {
+1 -8
View File
@@ -1,17 +1,10 @@
public class Identifier<T> private(_myName: T, _myHasDollar: Boolean) {
private val myName: T
private var myHasDollar: Boolean = false
public class Identifier<T> private(private val myName: T, private var myHasDollar: Boolean) {
private var myNullable: Boolean = true
public fun getName(): T {
return myName
}
{
myName = _myName
myHasDollar = _myHasDollar
}
class object {
public fun <T> init(name: T): Identifier<T> {
+1 -8
View File
@@ -1,17 +1,10 @@
public open class Identifier<T> private(_myName: T?, _myHasDollar: Boolean) {
private val myName: T?
private var myHasDollar: Boolean = false
public open class Identifier<T> private(private val myName: T?, private var myHasDollar: Boolean) {
private var myNullable: Boolean = true
public open fun getName(): T? {
return myName
}
{
myName = _myName
myHasDollar = _myHasDollar
}
class object {
public open fun <T> init(name: T?): Identifier<T> {