Java to Kotlin converter: minor code refining

This commit is contained in:
Valentin Kipyatkov
2014-06-10 18:08:40 +04:00
parent f2ace97c6c
commit a07dae9734
4 changed files with 26 additions and 49 deletions
@@ -16,14 +16,9 @@
package org.jetbrains.jet.j2k.ast
open class ArrayWithoutInitializationExpression(val `type`: Type, val expressions: List<Expression>) : Expression() {
override fun toKotlin(): String {
if (`type` is ArrayType) {
return constructInnerType(`type`, expressions)
}
return getConstructorName(`type`, expressions.size() != 0)
}
open class ArrayWithoutInitializationExpression(val `type`: ArrayType, val expressions: List<Expression>) : Expression() {
override fun toKotlin(): String
= constructInnerType(`type`, expressions)
private fun constructInnerType(hostType: ArrayType, expressions: List<Expression>): String {
if (expressions.size() == 1) {
@@ -38,30 +33,21 @@ open class ArrayWithoutInitializationExpression(val `type`: Type, val expression
return getConstructorName(hostType, expressions.size() != 0)
}
class object {
private open fun oneDim(`type`: Type, size: Expression): String {
return oneDim(`type`, size, "")
}
private fun oneDim(`type`: ArrayType, size: Expression, init: String = ""): String {
return getConstructorName(`type`, !init.isEmpty()) + "(" + size.toKotlin() + init.withPrefix(", ") + ")"
}
private open fun oneDim(`type`: Type, size: Expression, init: String): String {
return getConstructorName(`type`, !init.isEmpty()) + "(" + size.toKotlin() + init.withPrefix(", ") + ")"
}
private open fun getConstructorName(`type`: Type, hasInit: Boolean): String {
return if (`type` is ArrayType)
when (`type`.elementType) {
is PrimitiveType ->
`type`.toNotNullType().toKotlin()
is ArrayType ->
if (hasInit)
`type`.toNotNullType().toKotlin()
else
"arrayOfNulls<" + `type`.elementType.toKotlin() + ">"
else ->
"arrayOfNulls<" + `type`.elementType.toKotlin() + ">"
}
else
private fun getConstructorName(`type`: ArrayType, hasInit: Boolean): String {
return when (`type`.elementType) {
is PrimitiveType ->
`type`.toNotNullType().toKotlin()
is ArrayType ->
if (hasInit)
`type`.toNotNullType().toKotlin()
else
"arrayOfNulls<" + `type`.elementType.toKotlin() + ">"
else ->
"arrayOfNulls<" + `type`.elementType.toKotlin() + ">"
}
}
}
@@ -16,7 +16,6 @@
package org.jetbrains.jet.j2k.ast
open class DummyStringExpression(val string: String) : Expression() {
class DummyStringExpression(val string: String) : Expression() {
override fun toKotlin(): String = string
}
+4 -4
View File
@@ -75,13 +75,13 @@ trait Type : Element {
override fun toString(): String = toKotlin()
}
class ClassType(val `type`: Identifier, val parameters: List<Element>, nullability: Nullability, settings: ConverterSettings)
class ClassType(val `type`: Identifier, val typeArgs: List<Element>, nullability: Nullability, settings: ConverterSettings)
: MayBeNullableType(nullability, settings) {
override fun toKotlin(): String {
// TODO change to map() when KT-2051 is fixed
val parametersToKotlin = ArrayList<String>()
for (param in parameters) {
for (param in typeArgs) {
parametersToKotlin.add(param.toKotlin())
}
var params: String = if (parametersToKotlin.size() == 0)
@@ -92,8 +92,8 @@ class ClassType(val `type`: Identifier, val parameters: List<Element>, nullabili
}
override fun toNotNullType(): Type = ClassType(`type`, parameters, Nullability.NotNull, settings)
override fun toNullableType(): Type = ClassType(`type`, parameters, Nullability.Nullable, settings)
override fun toNotNullType(): Type = ClassType(`type`, typeArgs, Nullability.NotNull, settings)
override fun toNullableType(): Type = ClassType(`type`, typeArgs, Nullability.Nullable, settings)
}
class ArrayType(val elementType: Type, nullability: Nullability, settings: ConverterSettings)
@@ -231,10 +231,12 @@ class ExpressionVisitor(private val converter: Converter,
override fun visitNewExpression(expression: PsiNewExpression) {
if (expression.getArrayInitializer() != null) {
result = createNewEmptyArray(expression)
result = converter.convertExpression(expression.getArrayInitializer())
}
else if (expression.getArrayDimensions().size > 0) {
result = createNewEmptyArrayWithoutInitialization(expression)
else if (expression.getArrayDimensions().size > 0 && expression.getType() is PsiArrayType) {
result = ArrayWithoutInitializationExpression(
typeConverter.convertType(expression.getType(), Nullability.NotNull) as ArrayType,
converter.convertExpressions(expression.getArrayDimensions()))
}
else {
result = createNewClassExpression(expression)
@@ -262,16 +264,6 @@ class ExpressionVisitor(private val converter: Converter,
if (anonymousClass != null) converter.convertAnonymousClass(anonymousClass) else null)
}
private fun createNewEmptyArrayWithoutInitialization(expression: PsiNewExpression): Expression {
return ArrayWithoutInitializationExpression(
typeConverter.convertType(expression.getType(), Nullability.NotNull),
converter.convertExpressions(expression.getArrayDimensions()))
}
private fun createNewEmptyArray(expression: PsiNewExpression): Expression {
return converter.convertExpression(expression.getArrayInitializer())
}
override fun visitParenthesizedExpression(expression: PsiParenthesizedExpression) {
result = ParenthesizedExpression(converter.convertExpression(expression.getExpression()))
}