Java to Kotlin converter: minor code refactoring
This commit is contained in:
@@ -481,7 +481,7 @@ public class Converter(val project: Project, val settings: ConverterSettings, va
|
||||
if (isConversionNeeded(actualType, expectedType) && expression !is LiteralExpression) {
|
||||
val conversion = PRIMITIVE_TYPE_CONVERSIONS[expectedType?.getCanonicalText()]
|
||||
if (conversion != null) {
|
||||
expression = MethodCallExpression.build(expression, conversion)
|
||||
expression = MethodCallExpression.buildNotNull(expression, conversion)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -116,7 +116,7 @@ fun createArrayInitializerExpression(arrayType: ArrayType, initializers: List<Ex
|
||||
else -> null
|
||||
}
|
||||
if (conversionFunction != null) {
|
||||
return MethodCallExpression(QualifiedExpression(initializer, Identifier(conversionFunction)), listOf(), listOf())
|
||||
return MethodCallExpression.buildNotNull(initializer, conversionFunction)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -124,5 +124,5 @@ fun createArrayInitializerExpression(arrayType: ArrayType, initializers: List<Ex
|
||||
return initializer
|
||||
}
|
||||
|
||||
return MethodCallExpression(Identifier(createArrayFunction), initializers.map { explicitConvertIfNeeded(it) }, listOf())
|
||||
return MethodCallExpression.buildNotNull(null, createArrayFunction, initializers.map { explicitConvertIfNeeded(it) })
|
||||
}
|
||||
@@ -21,24 +21,41 @@ import java.util.ArrayList
|
||||
class MethodCallExpression(
|
||||
val methodExpression: Expression,
|
||||
val arguments: List<Expression>,
|
||||
val typeParameters: List<Type>,
|
||||
override val isNullable: Boolean = false
|
||||
val typeArguments: List<Type>,
|
||||
override val isNullable: Boolean
|
||||
) : Expression() {
|
||||
|
||||
override fun toKotlin(): String {
|
||||
return operandToKotlin(methodExpression) +
|
||||
typeParameters.toKotlin(", ", "<", ">") +
|
||||
typeArguments.toKotlin(", ", "<", ">") +
|
||||
"(" +
|
||||
arguments.map { it.toKotlin() }.makeString(", ") +
|
||||
")"
|
||||
}
|
||||
|
||||
class object {
|
||||
public fun build(receiver: Expression, methodName: String, arguments: List<Expression> = ArrayList()): MethodCallExpression {
|
||||
return MethodCallExpression(QualifiedExpression(receiver, Identifier(methodName, false)),
|
||||
public fun buildNotNull(receiver: Expression?,
|
||||
methodName: String,
|
||||
arguments: List<Expression> = listOf(),
|
||||
typeArguments: List<Type> = listOf()): MethodCallExpression
|
||||
= build(receiver, methodName, arguments, typeArguments, false)
|
||||
|
||||
public fun buildNullable(receiver: Expression?,
|
||||
methodName: String,
|
||||
arguments: List<Expression> = listOf(),
|
||||
typeArguments: List<Type> = listOf()): MethodCallExpression
|
||||
= build(receiver, methodName, arguments, typeArguments, true)
|
||||
|
||||
public fun build(receiver: Expression?,
|
||||
methodName: String,
|
||||
arguments: List<Expression>,
|
||||
typeArguments: List<Type>,
|
||||
isNullable: Boolean): MethodCallExpression {
|
||||
val identifier = Identifier(methodName, false)
|
||||
return MethodCallExpression(if (receiver != null) QualifiedExpression(receiver, identifier) else identifier,
|
||||
arguments,
|
||||
listOf(),
|
||||
false)
|
||||
typeArguments,
|
||||
isNullable)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,7 +82,7 @@ class ExpressionVisitor(private val converter: Converter,
|
||||
val lhs = converter.convertExpression(expression.getLOperand(), expression.getType())
|
||||
val rhs = converter.convertExpression(expression.getROperand(), expression.getType())
|
||||
if (expression.getOperationSign().getTokenType() == JavaTokenType.GTGTGT) {
|
||||
result = MethodCallExpression.build(lhs, "ushr", listOf(rhs))
|
||||
result = MethodCallExpression.buildNotNull(lhs, "ushr", listOf(rhs))
|
||||
}
|
||||
else {
|
||||
result = BinaryExpression(lhs, rhs, getOperatorString(expression.getOperationSign().getTokenType()))
|
||||
@@ -91,7 +91,7 @@ class ExpressionVisitor(private val converter: Converter,
|
||||
|
||||
override fun visitClassObjectAccessExpression(expression: PsiClassObjectAccessExpression) {
|
||||
val typeElement = converter.convertTypeElement(expression.getOperand())
|
||||
result = MethodCallExpression(Identifier("javaClass"), listOf(), listOf(typeElement.`type`.toNotNullType()), false)
|
||||
result = MethodCallExpression.buildNotNull(null, "javaClass", listOf(), listOf(typeElement.`type`.toNotNullType()))
|
||||
}
|
||||
|
||||
override fun visitConditionalExpression(expression: PsiConditionalExpression) {
|
||||
@@ -193,16 +193,18 @@ class ExpressionVisitor(private val converter: Converter,
|
||||
if (isTopLevel) {
|
||||
result = if (origin.isExtensionDeclaration()) {
|
||||
val qualifier = converter.convertExpression(arguments.firstOrNull())
|
||||
MethodCallExpression(QualifiedExpression(qualifier, Identifier(origin.getName()!!, false)),
|
||||
convertArguments(expression, isExtension = true),
|
||||
typeArguments,
|
||||
isNullable)
|
||||
MethodCallExpression.build(qualifier,
|
||||
origin.getName()!!,
|
||||
convertArguments(expression, isExtension = true),
|
||||
typeArguments,
|
||||
isNullable)
|
||||
}
|
||||
else {
|
||||
MethodCallExpression(Identifier(origin.getName()!!, false),
|
||||
convertArguments(expression),
|
||||
typeArguments,
|
||||
isNullable)
|
||||
MethodCallExpression.build(null,
|
||||
origin.getName()!!,
|
||||
convertArguments(expression),
|
||||
typeArguments,
|
||||
isNullable)
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -255,7 +257,7 @@ class ExpressionVisitor(private val converter: Converter,
|
||||
val reference = expression.getClassReference()
|
||||
val typeParameters = if (reference != null) typeConverter.convertTypes(reference.getTypeParameters()) else listOf()
|
||||
return QualifiedExpression(Identifier(constructor.getName(), false),
|
||||
MethodCallExpression(Identifier("init"), converter.convertExpressions(arguments), typeParameters, false))
|
||||
MethodCallExpression.buildNotNull(null, "init", converter.convertExpressions(arguments), typeParameters))
|
||||
}
|
||||
|
||||
return NewClassExpression(converter.convertElement(classReference),
|
||||
@@ -277,7 +279,7 @@ class ExpressionVisitor(private val converter: Converter,
|
||||
val operand = converter.convertExpression(expression.getOperand(), expression.getOperand()!!.getType())
|
||||
val token = expression.getOperationTokenType()
|
||||
if (token == JavaTokenType.TILDE) {
|
||||
result = MethodCallExpression.build(operand, "inv", ArrayList())
|
||||
result = MethodCallExpression.buildNotNull(operand, "inv")
|
||||
}
|
||||
else if (token == JavaTokenType.EXCL && operand is BinaryExpression && operand.op == "==") { // happens when equals is converted to ==
|
||||
result = BinaryExpression(operand.left, operand.right, "!=")
|
||||
@@ -366,7 +368,7 @@ class ExpressionVisitor(private val converter: Converter,
|
||||
val typeText = castType.getType().getCanonicalText()
|
||||
val typeConversion = PRIMITIVE_TYPE_CONVERSIONS[typeText]
|
||||
if (operandType is PsiPrimitiveType && typeConversion != null) {
|
||||
result = MethodCallExpression.build(converter.convertExpression(operand), typeConversion)
|
||||
result = MethodCallExpression.buildNotNull(converter.convertExpression(operand), typeConversion)
|
||||
}
|
||||
else {
|
||||
result = TypeCastExpression(typeConverter.convertType(castType.getType()),
|
||||
|
||||
Reference in New Issue
Block a user