diff --git a/j2k/src/org/jetbrains/jet/j2k/ConverterSettings.kt b/j2k/src/org/jetbrains/jet/j2k/ConverterSettings.kt index 0b54d5e48f3..7fb5dbfeae2 100644 --- a/j2k/src/org/jetbrains/jet/j2k/ConverterSettings.kt +++ b/j2k/src/org/jetbrains/jet/j2k/ConverterSettings.kt @@ -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 diff --git a/j2k/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.kt b/j2k/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.kt index 677bef64fc4..6f5d0bab88c 100644 --- a/j2k/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.kt +++ b/j2k/src/org/jetbrains/jet/j2k/visitors/ElementVisitor.kt @@ -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) { diff --git a/j2k/tests/test/org/jetbrains/jet/j2k/test/AbstractJavaToKotlinConverterTest.kt b/j2k/tests/test/org/jetbrains/jet/j2k/test/AbstractJavaToKotlinConverterTest.kt index a5517f649db..e058e725af3 100644 --- a/j2k/tests/test/org/jetbrains/jet/j2k/test/AbstractJavaToKotlinConverterTest.kt +++ b/j2k/tests/test/org/jetbrains/jet/j2k/test/AbstractJavaToKotlinConverterTest.kt @@ -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) diff --git a/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterTestGenerated.java b/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterTestGenerated.java index 03a81a6b95e..0cd3fe05716 100644 --- a/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterTestGenerated.java +++ b/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterTestGenerated.java @@ -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"); diff --git a/j2k/tests/testData/ast/assignmentExpression/nullability-settings.kt b/j2k/tests/testData/ast/assignmentExpression/nullability-settings.kt index cf6a283fc4e..3aaa5d2de5f 100644 --- a/j2k/tests/testData/ast/assignmentExpression/nullability-settings.kt +++ b/j2k/tests/testData/ast/assignmentExpression/nullability-settings.kt @@ -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() } } \ No newline at end of file diff --git a/j2k/tests/testData/ast/assignmentExpression/nullability.kt b/j2k/tests/testData/ast/assignmentExpression/nullability.kt index d67044c5044..d6a50591ecf 100644 --- a/j2k/tests/testData/ast/assignmentExpression/nullability.kt +++ b/j2k/tests/testData/ast/assignmentExpression/nullability.kt @@ -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() } } \ No newline at end of file diff --git a/j2k/tests/testData/ast/boxedType/Boxing.kt b/j2k/tests/testData/ast/boxedType/Boxing.kt index 8e6d73114ac..ac902b76658 100644 --- a/j2k/tests/testData/ast/boxedType/Boxing.kt +++ b/j2k/tests/testData/ast/boxedType/Boxing.kt @@ -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!! diff --git a/j2k/tests/testData/ast/doWhileStatement/whileWithBlock.kt b/j2k/tests/testData/ast/doWhileStatement/whileWithBlock.kt index 2730c62c402..be40f3cd0d3 100644 --- a/j2k/tests/testData/ast/doWhileStatement/whileWithBlock.kt +++ b/j2k/tests/testData/ast/doWhileStatement/whileWithBlock.kt @@ -1,4 +1,4 @@ do { - val i = 1 + var i = 1 i = i + 1 } while (a > b) \ No newline at end of file diff --git a/j2k/tests/testData/ast/for/forWithBlock.kt b/j2k/tests/testData/ast/for/forWithBlock.kt index 584bc4c0864..ee19f621697 100644 --- a/j2k/tests/testData/ast/for/forWithBlock.kt +++ b/j2k/tests/testData/ast/for/forWithBlock.kt @@ -1,5 +1,5 @@ run { - val i = 0 + var i = 0 while (i < 10) { System.out.println(i) System.out.println(j) diff --git a/j2k/tests/testData/ast/for/forWithBlockAndDoubleUpdate.kt b/j2k/tests/testData/ast/for/forWithBlockAndDoubleUpdate.kt index 88022ed0bb3..661e69a8d90 100644 --- a/j2k/tests/testData/ast/for/forWithBlockAndDoubleUpdate.kt +++ b/j2k/tests/testData/ast/for/forWithBlockAndDoubleUpdate.kt @@ -1,8 +1,8 @@ run { - val i = 0 + var i = 0 while (i < 0) { run { - val i = 1 + var i = 1 i++ } j++ diff --git a/j2k/tests/testData/ast/for/forWithEmptyBlock.kt b/j2k/tests/testData/ast/for/forWithEmptyBlock.kt index c321897d011..f114f788c27 100644 --- a/j2k/tests/testData/ast/for/forWithEmptyBlock.kt +++ b/j2k/tests/testData/ast/for/forWithEmptyBlock.kt @@ -1,5 +1,5 @@ run { - val i = 0 + var i = 0 while (i < 0) { j++ i++ diff --git a/j2k/tests/testData/ast/for/forWithReturn.kt b/j2k/tests/testData/ast/for/forWithReturn.kt index b618d0f6647..b1625400382 100644 --- a/j2k/tests/testData/ast/for/forWithReturn.kt +++ b/j2k/tests/testData/ast/for/forWithReturn.kt @@ -1,5 +1,5 @@ run { - val i = 0 + var i = 0 while (i < 0) { return i j++ diff --git a/j2k/tests/testData/ast/foreachStatement/enhancedForWithBlock.kt b/j2k/tests/testData/ast/foreachStatement/enhancedForWithBlock.kt index aad8f1fe027..3d7510bac00 100644 --- a/j2k/tests/testData/ast/foreachStatement/enhancedForWithBlock.kt +++ b/j2k/tests/testData/ast/foreachStatement/enhancedForWithBlock.kt @@ -1,4 +1,4 @@ for (n in list) { - val i = 1 + var i = 1 i++ } \ No newline at end of file diff --git a/j2k/tests/testData/ast/issues/kt-828.kt b/j2k/tests/testData/ast/issues/kt-828.kt index ec7b2a557e4..03c91effa20 100644 --- a/j2k/tests/testData/ast/issues/kt-828.kt +++ b/j2k/tests/testData/ast/issues/kt-828.kt @@ -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 diff --git a/j2k/tests/testData/ast/labelStatement/complicatedExampleFromJavaTutorial.kt b/j2k/tests/testData/ast/labelStatement/complicatedExampleFromJavaTutorial.kt index 2c063babc68..b20710df8d6 100644 --- a/j2k/tests/testData/ast/labelStatement/complicatedExampleFromJavaTutorial.kt +++ b/j2k/tests/testData/ast/labelStatement/complicatedExampleFromJavaTutorial.kt @@ -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 diff --git a/j2k/tests/testData/ast/literalExpression/dollarInsideString.kt b/j2k/tests/testData/ast/literalExpression/dollarInsideString.kt index 1b684315c88..7a3fb485356 100644 --- a/j2k/tests/testData/ast/literalExpression/dollarInsideString.kt +++ b/j2k/tests/testData/ast/literalExpression/dollarInsideString.kt @@ -2,7 +2,7 @@ package demo class Test() { fun test() { - val name = "$$$$" + var name = "$$$$" name = name.replaceAll("\\$[0-9]+", "\\$") val c = '$' diff --git a/j2k/tests/testData/ast/localVariable/autoBangBang.kt b/j2k/tests/testData/ast/localVariable/autoBangBang.kt index fd168ba8d8f..0a68789db6f 100644 --- a/j2k/tests/testData/ast/localVariable/autoBangBang.kt +++ b/j2k/tests/testData/ast/localVariable/autoBangBang.kt @@ -1,4 +1,4 @@ fun foo(i: Int) { - val i1 = i!! + var i1 = i!! i1++ } \ No newline at end of file diff --git a/j2k/tests/testData/ast/localVariable/conversion.kt b/j2k/tests/testData/ast/localVariable/conversion.kt index f72d20e309d..c40e99deb33 100644 --- a/j2k/tests/testData/ast/localVariable/conversion.kt +++ b/j2k/tests/testData/ast/localVariable/conversion.kt @@ -1,4 +1,4 @@ fun foo(b: Byte) { - val i = b.toInt() + var i = b.toInt() if (p) i = 10 } \ No newline at end of file diff --git a/j2k/tests/testData/ast/localVariable/literalConversion.kt b/j2k/tests/testData/ast/localVariable/literalConversion.kt index e99c21fc9d4..e7a2ba90a3f 100644 --- a/j2k/tests/testData/ast/localVariable/literalConversion.kt +++ b/j2k/tests/testData/ast/localVariable/literalConversion.kt @@ -1,4 +1,4 @@ fun foo() { - val i: Long = 1 + var i: Long = 1 if (p) i = 10 } \ No newline at end of file diff --git a/j2k/tests/testData/ast/localVariable/unboxing.kt b/j2k/tests/testData/ast/localVariable/unboxing.kt index 6916bdb6417..8cf5718da49 100644 --- a/j2k/tests/testData/ast/localVariable/unboxing.kt +++ b/j2k/tests/testData/ast/localVariable/unboxing.kt @@ -1,4 +1,4 @@ fun foo() { - val i: Int? = 1 + var i: Int? = 1 if (p) i = null } \ No newline at end of file diff --git a/j2k/tests/testData/ast/localVariable/varTypeDoNotMatch.kt b/j2k/tests/testData/ast/localVariable/varTypeDoNotMatch.kt index c5183f88987..498ad219164 100644 --- a/j2k/tests/testData/ast/localVariable/varTypeDoNotMatch.kt +++ b/j2k/tests/testData/ast/localVariable/varTypeDoNotMatch.kt @@ -1,4 +1,4 @@ fun foo() { - val o: Any? = "" + var o: Any? = "" if (p) o = null } \ No newline at end of file diff --git a/j2k/tests/testData/ast/nullability/MethodResultComparedWithNull4.kt b/j2k/tests/testData/ast/nullability/MethodResultComparedWithNull4.kt index 7de4a8a0f0b..eccd925c677 100644 --- a/j2k/tests/testData/ast/nullability/MethodResultComparedWithNull4.kt +++ b/j2k/tests/testData/ast/nullability/MethodResultComparedWithNull4.kt @@ -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) diff --git a/j2k/tests/testData/ast/nullability/VariableAssignedWithNull.kt b/j2k/tests/testData/ast/nullability/VariableAssignedWithNull.kt index 6aa4ea2f25e..71c11a12390 100644 --- a/j2k/tests/testData/ast/nullability/VariableAssignedWithNull.kt +++ b/j2k/tests/testData/ast/nullability/VariableAssignedWithNull.kt @@ -1,6 +1,6 @@ // !specifyLocalVariableTypeByDefault: true fun foo(b: Boolean) { - val s: String? = "abc" + var s: String? = "abc" if (b) { s = null } diff --git a/j2k/tests/testData/ast/nullability/VariableInitializedWithNull.kt b/j2k/tests/testData/ast/nullability/VariableInitializedWithNull.kt index 3cf757e8d10..1c9b83d495b 100644 --- a/j2k/tests/testData/ast/nullability/VariableInitializedWithNull.kt +++ b/j2k/tests/testData/ast/nullability/VariableInitializedWithNull.kt @@ -1,6 +1,6 @@ // !specifyLocalVariableTypeByDefault: true fun foo(b: Boolean) { - val s: String? = null + var s: String? = null if (b) { s = "abc" } diff --git a/j2k/tests/testData/ast/settings/forceLocalVariableImmutability.java b/j2k/tests/testData/ast/settings/forceLocalVariableImmutability.java deleted file mode 100644 index 988ffb7d29f..00000000000 --- a/j2k/tests/testData/ast/settings/forceLocalVariableImmutability.java +++ /dev/null @@ -1,8 +0,0 @@ -//method -// !forceLocalVariableImmutability: false -public void foo() { - int i = 1; - i++; - String s = ""; - s += "a"; -} \ No newline at end of file diff --git a/j2k/tests/testData/ast/settings/forceLocalVariableImmutability.kt b/j2k/tests/testData/ast/settings/forceLocalVariableImmutability.kt deleted file mode 100644 index f7940a4b691..00000000000 --- a/j2k/tests/testData/ast/settings/forceLocalVariableImmutability.kt +++ /dev/null @@ -1,7 +0,0 @@ -// !forceLocalVariableImmutability: false -public fun foo() { - var i = 1 - i++ - var s = "" - s += "a" -} \ No newline at end of file diff --git a/j2k/tests/testData/ast/switch/comlicatedFallDown.kt b/j2k/tests/testData/ast/switch/comlicatedFallDown.kt index 4e8de7e649d..ec12eb47a04 100644 --- a/j2k/tests/testData/ast/switch/comlicatedFallDown.kt +++ b/j2k/tests/testData/ast/switch/comlicatedFallDown.kt @@ -7,7 +7,7 @@ public class SwitchDemo() { } public fun test(i: Int) { - val monthString = "" + var monthString = "" when (i) { 1 -> { print(1) diff --git a/j2k/tests/testData/ast/switch/nondefault.kt b/j2k/tests/testData/ast/switch/nondefault.kt index 2b6b3e9d185..07fafe47ae4 100644 --- a/j2k/tests/testData/ast/switch/nondefault.kt +++ b/j2k/tests/testData/ast/switch/nondefault.kt @@ -3,7 +3,7 @@ public class NonDefault() { public fun main(args: Array) { val value = 3 - val valueString = "" + var valueString = "" when (value) { 1 -> { valueString = "ONE" diff --git a/j2k/tests/testData/ast/whileStatement/whileWithBlock.kt b/j2k/tests/testData/ast/whileStatement/whileWithBlock.kt index 01995926e71..0c60cdd2577 100644 --- a/j2k/tests/testData/ast/whileStatement/whileWithBlock.kt +++ b/j2k/tests/testData/ast/whileStatement/whileWithBlock.kt @@ -1,4 +1,4 @@ while (a > b) { - val i = 1 + var i = 1 i = i + 1 } \ No newline at end of file