Fixed KT-5204 Converter from java could generate var's for locals when needed

#KT-5204 Fixed
This commit is contained in:
Valentin Kipyatkov
2014-07-10 15:42:24 +04:00
parent acc58173da
commit b983a0eaa0
4 changed files with 36 additions and 1 deletions
@@ -27,6 +27,7 @@ import org.jetbrains.jet.lang.diagnostics.Diagnostic
import org.jetbrains.jet.lang.diagnostics.Errors
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression
import org.jetbrains.jet.lang.psi.JetUnaryExpression
import org.jetbrains.jet.lang.psi.JetProperty
class AfterConversionPass(val project: Project) {
public fun run(kotlinCode: String): String {
@@ -58,13 +59,21 @@ class AfterConversionPass(val project: Project) {
}
private fun fixForProblem(problem: Diagnostic): (() -> Unit)? {
val psiElement = problem.getPsiElement()
return when (problem.getFactory()) {
Errors.UNNECESSARY_NOT_NULL_ASSERTION -> { () ->
val exclExclOp = problem.getPsiElement() as JetSimpleNameExpression
val exclExclOp = psiElement as JetSimpleNameExpression
val exclExclExpr = exclExclOp.getParent() as JetUnaryExpression
exclExclExpr.replace(exclExclExpr.getBaseExpression()!!)
}
Errors.VAL_REASSIGNMENT -> { () ->
val property = (psiElement as? JetSimpleNameExpression)?.getReference()?.resolve() as? JetProperty
if (property != null && !property.isVar()) {
property.getValOrVarNode().getPsi()!!.replace(JetPsiFactory.createVarNode(project).getPsi()!!)
}
}
else -> null
}
}
@@ -2037,6 +2037,11 @@ public class JavaToKotlinConverterTestGenerated extends AbstractJavaToKotlinConv
doTest("j2k/tests/testData/ast/localVariable/varTypeDoNotMatch.java");
}
@TestMetadata("varWithNoInitializer.java")
public void testVarWithNoInitializer() throws Exception {
doTest("j2k/tests/testData/ast/localVariable/varWithNoInitializer.java");
}
}
@TestMetadata("j2k/tests/testData/ast/methodCallExpression")
@@ -0,0 +1,11 @@
//file
class C {
int foo(boolean p) {
int a;
int b;
a = 10;
b = 5;
if (p) a = 5; else b = 10;
return a + b;
}
}
@@ -0,0 +1,10 @@
class C {
fun foo(p: Boolean): Int {
var a: Int
var b: Int
a = 10
b = 5
if (p) a = 5 else b = 10
return a + b
}
}