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(
|
public data class ConverterSettings(
|
||||||
var forceNotNullTypes: Boolean,
|
var forceNotNullTypes: Boolean,
|
||||||
var forceLocalVariableImmutability: Boolean,
|
|
||||||
var specifyLocalVariableTypeByDefault: Boolean,
|
var specifyLocalVariableTypeByDefault: Boolean,
|
||||||
var specifyFieldTypeByDefault: Boolean,
|
var specifyFieldTypeByDefault: Boolean,
|
||||||
var openByDefault: Boolean) {
|
var openByDefault: Boolean) {
|
||||||
@@ -26,7 +25,6 @@ public data class ConverterSettings(
|
|||||||
class object {
|
class object {
|
||||||
public val defaultSettings: ConverterSettings = ConverterSettings(
|
public val defaultSettings: ConverterSettings = ConverterSettings(
|
||||||
forceNotNullTypes = true,
|
forceNotNullTypes = true,
|
||||||
forceLocalVariableImmutability = true,
|
|
||||||
specifyLocalVariableTypeByDefault = false,
|
specifyLocalVariableTypeByDefault = false,
|
||||||
specifyFieldTypeByDefault = false,
|
specifyFieldTypeByDefault = false,
|
||||||
openByDefault = false
|
openByDefault = false
|
||||||
|
|||||||
@@ -27,13 +27,15 @@ class ElementVisitor(private val converter: Converter) : JavaElementVisitor() {
|
|||||||
protected set
|
protected set
|
||||||
|
|
||||||
override fun visitLocalVariable(variable: PsiLocalVariable) {
|
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(),
|
result = LocalVariable(variable.declarationIdentifier(),
|
||||||
converter.convertAnnotations(variable),
|
converter.convertAnnotations(variable),
|
||||||
converter.convertModifiers(variable),
|
converter.convertModifiers(variable),
|
||||||
converter.variableTypeToDeclare(variable, converter.settings.specifyLocalVariableTypeByDefault, isVal),
|
converter.variableTypeToDeclare(variable, converter.settings.specifyLocalVariableTypeByDefault, isVal),
|
||||||
converter.convertExpression(variable.getInitializer(), variable.getType()),
|
converter.convertExpression(variable.getInitializer(), variable.getType()),
|
||||||
converter.settings.forceLocalVariableImmutability || isVal)
|
isVal)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitExpressionList(list: PsiExpressionList) {
|
override fun visitExpressionList(list: PsiExpressionList) {
|
||||||
|
|||||||
@@ -76,7 +76,6 @@ abstract class AbstractJavaToKotlinConverterTest() : LightIdeaTestCase() {
|
|||||||
for ((name, value) in directives) {
|
for ((name, value) in directives) {
|
||||||
when (name) {
|
when (name) {
|
||||||
"forceNotNullTypes" -> settings.forceNotNullTypes = parseBoolean(value)
|
"forceNotNullTypes" -> settings.forceNotNullTypes = parseBoolean(value)
|
||||||
"forceLocalVariableImmutability" -> settings.forceLocalVariableImmutability = parseBoolean(value)
|
|
||||||
"specifyLocalVariableTypeByDefault" -> settings.specifyLocalVariableTypeByDefault = parseBoolean(value)
|
"specifyLocalVariableTypeByDefault" -> settings.specifyLocalVariableTypeByDefault = parseBoolean(value)
|
||||||
"specifyFieldTypeByDefault" -> settings.specifyFieldTypeByDefault = parseBoolean(value)
|
"specifyFieldTypeByDefault" -> settings.specifyFieldTypeByDefault = parseBoolean(value)
|
||||||
"openByDefault" -> settings.openByDefault = 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);
|
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")
|
@TestMetadata("openByDefault.java")
|
||||||
public void testOpenByDefault() throws Exception {
|
public void testOpenByDefault() throws Exception {
|
||||||
doTest("j2k/tests/testData/ast/settings/openByDefault.java");
|
doTest("j2k/tests/testData/ast/settings/openByDefault.java");
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import java.util.BitSet
|
|||||||
class Foo() {
|
class Foo() {
|
||||||
fun foo(o: BitSet?) {
|
fun foo(o: BitSet?) {
|
||||||
val o2: BitSet? = o
|
val o2: BitSet? = o
|
||||||
val foo: Int = 0
|
var foo: Int = 0
|
||||||
foo = o2!!.size()
|
foo = o2!!.size()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3,7 +3,7 @@ import java.util.BitSet
|
|||||||
class Foo() {
|
class Foo() {
|
||||||
fun foo(o: BitSet) {
|
fun foo(o: BitSet) {
|
||||||
val o2 = o
|
val o2 = o
|
||||||
val foo = 0
|
var foo = 0
|
||||||
foo = o2.size()
|
foo = o2.size()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2,10 +2,10 @@ import java.util.ArrayList
|
|||||||
|
|
||||||
class Boxing() {
|
class Boxing() {
|
||||||
fun test() {
|
fun test() {
|
||||||
val i: Int? = 0
|
var i: Int? = 0
|
||||||
val n = 0.0.toFloat()
|
val n = 0.0.toFloat()
|
||||||
i = 1
|
i = 1
|
||||||
val j = i!!
|
var j = i!!
|
||||||
val k = i!! + 2
|
val k = i!! + 2
|
||||||
i = null
|
i = null
|
||||||
j = i!!
|
j = i!!
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
do {
|
do {
|
||||||
val i = 1
|
var i = 1
|
||||||
i = i + 1
|
i = i + 1
|
||||||
} while (a > b)
|
} while (a > b)
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
run {
|
run {
|
||||||
val i = 0
|
var i = 0
|
||||||
while (i < 10) {
|
while (i < 10) {
|
||||||
System.out.println(i)
|
System.out.println(i)
|
||||||
System.out.println(j)
|
System.out.println(j)
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
run {
|
run {
|
||||||
val i = 0
|
var i = 0
|
||||||
while (i < 0) {
|
while (i < 0) {
|
||||||
run {
|
run {
|
||||||
val i = 1
|
var i = 1
|
||||||
i++
|
i++
|
||||||
}
|
}
|
||||||
j++
|
j++
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
run {
|
run {
|
||||||
val i = 0
|
var i = 0
|
||||||
while (i < 0) {
|
while (i < 0) {
|
||||||
j++
|
j++
|
||||||
i++
|
i++
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
run {
|
run {
|
||||||
val i = 0
|
var i = 0
|
||||||
while (i < 0) {
|
while (i < 0) {
|
||||||
return i
|
return i
|
||||||
j++
|
j++
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
for (n in list) {
|
for (n in list) {
|
||||||
val i = 1
|
var i = 1
|
||||||
i++
|
i++
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
class Test() {
|
class Test() {
|
||||||
fun test() {
|
fun test() {
|
||||||
val res = true
|
var res = true
|
||||||
res = res and false
|
res = res and false
|
||||||
res = res or false
|
res = res or false
|
||||||
res = res xor false
|
res = res xor false
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
@test for (i in 0..max) {
|
@test for (i in 0..max) {
|
||||||
val n = substring.length()
|
var n = substring.length()
|
||||||
val j = i
|
var j = i
|
||||||
val k = 0
|
var k = 0
|
||||||
while (n-- != 0) {
|
while (n-- != 0) {
|
||||||
if (searchMe.charAt(j++) != substring.charAt(k++)) {
|
if (searchMe.charAt(j++) != substring.charAt(k++)) {
|
||||||
continue@test
|
continue@test
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package demo
|
|||||||
|
|
||||||
class Test() {
|
class Test() {
|
||||||
fun test() {
|
fun test() {
|
||||||
val name = "$$$$"
|
var name = "$$$$"
|
||||||
name = name.replaceAll("\\$[0-9]+", "\\$")
|
name = name.replaceAll("\\$[0-9]+", "\\$")
|
||||||
|
|
||||||
val c = '$'
|
val c = '$'
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
fun foo(i: Int) {
|
fun foo(i: Int) {
|
||||||
val i1 = i!!
|
var i1 = i!!
|
||||||
i1++
|
i1++
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
fun foo(b: Byte) {
|
fun foo(b: Byte) {
|
||||||
val i = b.toInt()
|
var i = b.toInt()
|
||||||
if (p) i = 10
|
if (p) i = 10
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
fun foo() {
|
fun foo() {
|
||||||
val i: Long = 1
|
var i: Long = 1
|
||||||
if (p) i = 10
|
if (p) i = 10
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
fun foo() {
|
fun foo() {
|
||||||
val i: Int? = 1
|
var i: Int? = 1
|
||||||
if (p) i = null
|
if (p) i = null
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
fun foo() {
|
fun foo() {
|
||||||
val o: Any? = ""
|
var o: Any? = ""
|
||||||
if (p) o = null
|
if (p) o = null
|
||||||
}
|
}
|
||||||
@@ -4,7 +4,7 @@ trait I {
|
|||||||
|
|
||||||
class C() {
|
class C() {
|
||||||
fun foo(i: I, b: Boolean) {
|
fun foo(i: I, b: Boolean) {
|
||||||
val result: String? = i.getString()
|
var result: String? = i.getString()
|
||||||
if (b) result = null
|
if (b) result = null
|
||||||
if (result != null) {
|
if (result != null) {
|
||||||
print(result)
|
print(result)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
// !specifyLocalVariableTypeByDefault: true
|
// !specifyLocalVariableTypeByDefault: true
|
||||||
fun foo(b: Boolean) {
|
fun foo(b: Boolean) {
|
||||||
val s: String? = "abc"
|
var s: String? = "abc"
|
||||||
if (b) {
|
if (b) {
|
||||||
s = null
|
s = null
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
// !specifyLocalVariableTypeByDefault: true
|
// !specifyLocalVariableTypeByDefault: true
|
||||||
fun foo(b: Boolean) {
|
fun foo(b: Boolean) {
|
||||||
val s: String? = null
|
var s: String? = null
|
||||||
if (b) {
|
if (b) {
|
||||||
s = "abc"
|
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) {
|
public fun test(i: Int) {
|
||||||
val monthString = "<empty>"
|
var monthString = "<empty>"
|
||||||
when (i) {
|
when (i) {
|
||||||
1 -> {
|
1 -> {
|
||||||
print(1)
|
print(1)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ public class NonDefault() {
|
|||||||
public fun main(args: Array<String>) {
|
public fun main(args: Array<String>) {
|
||||||
|
|
||||||
val value = 3
|
val value = 3
|
||||||
val valueString = ""
|
var valueString = ""
|
||||||
when (value) {
|
when (value) {
|
||||||
1 -> {
|
1 -> {
|
||||||
valueString = "ONE"
|
valueString = "ONE"
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
while (a > b) {
|
while (a > b) {
|
||||||
val i = 1
|
var i = 1
|
||||||
i = i + 1
|
i = i + 1
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user