Java to Kotlin converter: fixed a bug with incorrect assignment generation

This commit is contained in:
Valentin Kipyatkov
2014-06-23 14:30:26 +04:00
parent a28e7b0872
commit 0e9edb7487
8 changed files with 23 additions and 6 deletions
@@ -29,7 +29,7 @@ class ArrayAccessExpression(val expression: Expression, val index: Expression, v
class AssignmentExpression(val left: Expression, val right: Expression, val op: String) : Expression() { class AssignmentExpression(val left: Expression, val right: Expression, val op: String) : Expression() {
override fun generateCode(builder: CodeBuilder) { override fun generateCode(builder: CodeBuilder) {
builder.appendOperand(this, left).append(op).appendOperand(this, right) builder.appendOperand(this, left).append(" ").append(op).append(" ").appendOperand(this, right)
} }
} }
+1 -1
View File
@@ -41,7 +41,7 @@ open class Field(
initializerToUse = getDefaultInitializer(this) initializerToUse = getDefaultInitializer(this)
} }
if (!initializerToUse.isEmpty) { if (!initializerToUse.isEmpty) {
builder append "=" append initializerToUse builder append " = " append initializerToUse
} }
} }
} }
@@ -38,9 +38,9 @@ class LocalVariable(
else { else {
val shouldSpecifyType = settings.specifyLocalVariableTypeByDefault val shouldSpecifyType = settings.specifyLocalVariableTypeByDefault
if (shouldSpecifyType) if (shouldSpecifyType)
builder append identifier append ":" append typeCalculator() append "=" append initializer builder append identifier append ":" append typeCalculator() append " = " append initializer
else else
builder append identifier append "=" append initializer builder append identifier append " = " append initializer
} }
} }
} }
@@ -77,7 +77,7 @@ class ExpressionVisitor(private val converter: Converter,
val lhs = converter.convertExpression(expression.getLExpression()) val lhs = converter.convertExpression(expression.getLExpression())
val rhs = converter.convertExpression(expression.getRExpression()!!, expression.getLExpression().getType()) val rhs = converter.convertExpression(expression.getRExpression()!!, expression.getLExpression().getType())
if (!secondOp.isEmpty()) { if (!secondOp.isEmpty()) {
result = AssignmentExpression(lhs, BinaryExpression(lhs, rhs, secondOp), "=") result = AssignmentExpression(lhs, BinaryExpression(lhs, rhs, secondOp), " = ")
} }
else { else {
result = AssignmentExpression(lhs, rhs, expression.getOperationSign().getText()!!) result = AssignmentExpression(lhs, rhs, expression.getOperationSign().getText()!!)
@@ -145,7 +145,7 @@ abstract class AbstractJavaToKotlinConverterTest() : LightIdeaTestCase() {
private fun expressionToKotlin(code: String, settings: ConverterSettings, project: Project): String { private fun expressionToKotlin(code: String, settings: ConverterSettings, project: Project): String {
val result = statementToKotlin("final Object o =" + code + "}", settings, project) val result = statementToKotlin("final Object o =" + code + "}", settings, project)
return result.replaceFirst("val o:Any\\?=", "").replaceFirst("val o:Any=", "").replaceFirst("val o=", "").trim() return result.replaceFirst("val o:Any\\? = ", "").replaceFirst("val o:Any = ", "").replaceFirst("val o = ", "").trim()
} }
override fun getProjectJDK(): Sdk? { override fun getProjectJDK(): Sdk? {
@@ -1682,6 +1682,11 @@ public class JavaToKotlinConverterTestGenerated extends AbstractJavaToKotlinConv
doTest("j2k/tests/testData/ast/issues/qualifyStatic.java"); doTest("j2k/tests/testData/ast/issues/qualifyStatic.java");
} }
@TestMetadata("spaceBeforeAssignment.java")
public void testSpaceBeforeAssignment() throws Exception {
doTest("j2k/tests/testData/ast/issues/spaceBeforeAssignment.java");
}
} }
@TestMetadata("j2k/tests/testData/ast/kotlinApiAccess") @TestMetadata("j2k/tests/testData/ast/kotlinApiAccess")
@@ -0,0 +1,6 @@
//file
import java.util.*
class A {
List<String> list = new ArrayList<String>();
}
@@ -0,0 +1,6 @@
import java.util.*
import kotlin.List
class A() {
var list: List<String> = ArrayList<String>()
}