Java to Kotlin converter: declaring locals as var's in most of cases when needed, dropped forceLocalVariableImmutability setting
This commit is contained in:
@@ -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,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,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,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,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)
|
||||
|
||||
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user