Java to Kotlin converter: declaring locals as var's in most of cases when needed, dropped forceLocalVariableImmutability setting

This commit is contained in:
Valentin Kipyatkov
2014-06-24 20:04:07 +04:00
parent 63ebfe2c03
commit d3b773c0cd
29 changed files with 31 additions and 52 deletions
@@ -18,7 +18,6 @@ package org.jetbrains.jet.j2k
public data class ConverterSettings(
var forceNotNullTypes: Boolean,
var forceLocalVariableImmutability: Boolean,
var specifyLocalVariableTypeByDefault: Boolean,
var specifyFieldTypeByDefault: Boolean,
var openByDefault: Boolean) {
@@ -26,7 +25,6 @@ public data class ConverterSettings(
class object {
public val defaultSettings: ConverterSettings = ConverterSettings(
forceNotNullTypes = true,
forceLocalVariableImmutability = true,
specifyLocalVariableTypeByDefault = false,
specifyFieldTypeByDefault = false,
openByDefault = false
@@ -27,13 +27,15 @@ class ElementVisitor(private val converter: Converter) : JavaElementVisitor() {
protected set
override fun visitLocalVariable(variable: PsiLocalVariable) {
val isVal = variable.hasModifierProperty(PsiModifier.FINAL) || !variable.hasWriteAccesses(variable.getContainingMethod())
val isVal = variable.hasModifierProperty(PsiModifier.FINAL) ||
variable.getInitializer() == null/* we do not know actually and prefer val until we have better analysis*/ ||
!variable.hasWriteAccesses(variable.getContainingMethod())
result = LocalVariable(variable.declarationIdentifier(),
converter.convertAnnotations(variable),
converter.convertModifiers(variable),
converter.variableTypeToDeclare(variable, converter.settings.specifyLocalVariableTypeByDefault, isVal),
converter.convertExpression(variable.getInitializer(), variable.getType()),
converter.settings.forceLocalVariableImmutability || isVal)
isVal)
}
override fun visitExpressionList(list: PsiExpressionList) {
@@ -76,7 +76,6 @@ abstract class AbstractJavaToKotlinConverterTest() : LightIdeaTestCase() {
for ((name, value) in directives) {
when (name) {
"forceNotNullTypes" -> settings.forceNotNullTypes = parseBoolean(value)
"forceLocalVariableImmutability" -> settings.forceLocalVariableImmutability = parseBoolean(value)
"specifyLocalVariableTypeByDefault" -> settings.specifyLocalVariableTypeByDefault = parseBoolean(value)
"specifyFieldTypeByDefault" -> settings.specifyFieldTypeByDefault = parseBoolean(value)
"openByDefault" -> settings.openByDefault = parseBoolean(value)
@@ -2404,11 +2404,6 @@ public class JavaToKotlinConverterTestGenerated extends AbstractJavaToKotlinConv
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("j2k/tests/testData/ast/settings"), Pattern.compile("^(.+)\\.java$"), true);
}
@TestMetadata("forceLocalVariableImmutability.java")
public void testForceLocalVariableImmutability() throws Exception {
doTest("j2k/tests/testData/ast/settings/forceLocalVariableImmutability.java");
}
@TestMetadata("openByDefault.java")
public void testOpenByDefault() throws Exception {
doTest("j2k/tests/testData/ast/settings/openByDefault.java");
@@ -5,7 +5,7 @@ import java.util.BitSet
class Foo() {
fun foo(o: BitSet?) {
val o2: BitSet? = o
val foo: Int = 0
var foo: Int = 0
foo = o2!!.size()
}
}
@@ -3,7 +3,7 @@ import java.util.BitSet
class Foo() {
fun foo(o: BitSet) {
val o2 = o
val foo = 0
var foo = 0
foo = o2.size()
}
}
+2 -2
View File
@@ -2,10 +2,10 @@ import java.util.ArrayList
class Boxing() {
fun test() {
val i: Int? = 0
var i: Int? = 0
val n = 0.0.toFloat()
i = 1
val j = i!!
var j = i!!
val k = i!! + 2
i = null
j = i!!
@@ -1,4 +1,4 @@
do {
val i = 1
var i = 1
i = i + 1
} while (a > b)
+1 -1
View File
@@ -1,5 +1,5 @@
run {
val i = 0
var i = 0
while (i < 10) {
System.out.println(i)
System.out.println(j)
@@ -1,8 +1,8 @@
run {
val i = 0
var i = 0
while (i < 0) {
run {
val i = 1
var i = 1
i++
}
j++
@@ -1,5 +1,5 @@
run {
val i = 0
var i = 0
while (i < 0) {
j++
i++
+1 -1
View File
@@ -1,5 +1,5 @@
run {
val i = 0
var i = 0
while (i < 0) {
return i
j++
@@ -1,4 +1,4 @@
for (n in list) {
val i = 1
var i = 1
i++
}
+1 -1
View File
@@ -1,6 +1,6 @@
class Test() {
fun test() {
val res = true
var res = true
res = res and false
res = res or false
res = res xor false
@@ -1,7 +1,7 @@
@test for (i in 0..max) {
val n = substring.length()
val j = i
val k = 0
var n = substring.length()
var j = i
var k = 0
while (n-- != 0) {
if (searchMe.charAt(j++) != substring.charAt(k++)) {
continue@test
@@ -2,7 +2,7 @@ package demo
class Test() {
fun test() {
val name = "$$$$"
var name = "$$$$"
name = name.replaceAll("\\$[0-9]+", "\\$")
val c = '$'
@@ -1,4 +1,4 @@
fun foo(i: Int) {
val i1 = i!!
var i1 = i!!
i1++
}
@@ -1,4 +1,4 @@
fun foo(b: Byte) {
val i = b.toInt()
var i = b.toInt()
if (p) i = 10
}
@@ -1,4 +1,4 @@
fun foo() {
val i: Long = 1
var i: Long = 1
if (p) i = 10
}
@@ -1,4 +1,4 @@
fun foo() {
val i: Int? = 1
var i: Int? = 1
if (p) i = null
}
@@ -1,4 +1,4 @@
fun foo() {
val o: Any? = ""
var o: Any? = ""
if (p) o = null
}
@@ -4,7 +4,7 @@ trait I {
class C() {
fun foo(i: I, b: Boolean) {
val result: String? = i.getString()
var result: String? = i.getString()
if (b) result = null
if (result != null) {
print(result)
@@ -1,6 +1,6 @@
// !specifyLocalVariableTypeByDefault: true
fun foo(b: Boolean) {
val s: String? = "abc"
var s: String? = "abc"
if (b) {
s = null
}
@@ -1,6 +1,6 @@
// !specifyLocalVariableTypeByDefault: true
fun foo(b: Boolean) {
val s: String? = null
var s: String? = null
if (b) {
s = "abc"
}
@@ -1,8 +0,0 @@
//method
// !forceLocalVariableImmutability: false
public void foo() {
int i = 1;
i++;
String s = "";
s += "a";
}
@@ -1,7 +0,0 @@
// !forceLocalVariableImmutability: false
public fun foo() {
var i = 1
i++
var s = ""
s += "a"
}
@@ -7,7 +7,7 @@ public class SwitchDemo() {
}
public fun test(i: Int) {
val monthString = "<empty>"
var monthString = "<empty>"
when (i) {
1 -> {
print(1)
+1 -1
View File
@@ -3,7 +3,7 @@ public class NonDefault() {
public fun main(args: Array<String>) {
val value = 3
val valueString = ""
var valueString = ""
when (value) {
1 -> {
valueString = "ONE"
@@ -1,4 +1,4 @@
while (a > b) {
val i = 1
var i = 1
i = i + 1
}