diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/ConversionsRunner.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/ConversionsRunner.kt index 3e9858406ca..db80b4ca7c3 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/ConversionsRunner.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/ConversionsRunner.kt @@ -84,7 +84,7 @@ object ConversionsRunner { +LiteralConversion() +CollectImportsConversion(context) - +SortClassMembersConversion() + +MoveInitBlocksToTheEndConversion() +AddElementsInfoConversion(context) } diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/SortClassMembersConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/MoveInitBlocksToTheEndConversion.kt similarity index 56% rename from nj2k/src/org/jetbrains/kotlin/nj2k/conversions/SortClassMembersConversion.kt rename to nj2k/src/org/jetbrains/kotlin/nj2k/conversions/MoveInitBlocksToTheEndConversion.kt index 43873b9e21d..809c353fcee 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/SortClassMembersConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/MoveInitBlocksToTheEndConversion.kt @@ -7,12 +7,15 @@ package org.jetbrains.kotlin.nj2k.conversions import org.jetbrains.kotlin.nj2k.tree.* -//TODO temporary -class SortClassMembersConversion : RecursiveApplicableConversionBase() { +class MoveInitBlocksToTheEndConversion : RecursiveApplicableConversionBase() { override fun applyToElement(element: JKTreeElement): JKTreeElement { - if (element !is JKClass) return recurse(element) - element.classBody.declarations = element.declarationList - .sortedByDescending { it is JKVariable } + if (element !is JKClassBody) return recurse(element) + element.declarations = element.declarations.sortedBy { + when (it) { + is JKKtInitDeclaration -> 1 + else -> 0 + } + } return recurse(element) } } \ No newline at end of file diff --git a/nj2k/testData/newJ2k/annotations/jetbrainsNotNull.kt b/nj2k/testData/newJ2k/annotations/jetbrainsNotNull.kt index 57a6607c8f8..978df8ddc4a 100644 --- a/nj2k/testData/newJ2k/annotations/jetbrainsNotNull.kt +++ b/nj2k/testData/newJ2k/annotations/jetbrainsNotNull.kt @@ -4,13 +4,9 @@ package test class Test(str: String) { internal var myStr = "String2" - - init { - myStr = str - } - fun sout(str: String) { // UNNECESSARY_NOT_NULL_ASSERTION heuristic does not work any more, instead we can skip generating !! altogether + println(str) } @@ -25,4 +21,8 @@ class Test(str: String) { sout(dummy(test)) Test(test) } + + init { + myStr = str + } } \ No newline at end of file diff --git a/nj2k/testData/newJ2k/annotations/jetbrainsNullable.kt b/nj2k/testData/newJ2k/annotations/jetbrainsNullable.kt index 1fa41beb399..527f8362858 100644 --- a/nj2k/testData/newJ2k/annotations/jetbrainsNullable.kt +++ b/nj2k/testData/newJ2k/annotations/jetbrainsNullable.kt @@ -3,11 +3,6 @@ package test class Test(str: String?) { internal var myStr: String? = "String2" - - init { - myStr = str - } - fun sout(str: String?) { println(str) } @@ -21,7 +16,10 @@ class Test(str: String?) { val test: String = "String2" sout(test) sout(dummy(test)) - Test(test) } + + init { + myStr = str + } } \ No newline at end of file diff --git a/nj2k/testData/newJ2k/annotations/modifiersToAnnotationsFromPropertyAccessors.kt b/nj2k/testData/newJ2k/annotations/modifiersToAnnotationsFromPropertyAccessors.kt index d8ecfb24dfe..c201be1555d 100644 --- a/nj2k/testData/newJ2k/annotations/modifiersToAnnotationsFromPropertyAccessors.kt +++ b/nj2k/testData/newJ2k/annotations/modifiersToAnnotationsFromPropertyAccessors.kt @@ -1,10 +1,4 @@ class WithModifiersOnAccessors { - @get:Synchronized - @set:Synchronized - var sync = 0 - @get:Strictfp - var strict = 0.0 - @Synchronized private fun methSync() { } @@ -13,4 +7,10 @@ class WithModifiersOnAccessors { protected fun methStrict() { } + @get:Synchronized + @set:Synchronized + var sync = 0 + + @get:Strictfp + var strict = 0.0 } \ No newline at end of file diff --git a/nj2k/testData/newJ2k/class/utilityClass1.kt b/nj2k/testData/newJ2k/class/utilityClass1.kt index 3223975e501..1aecda41a33 100644 --- a/nj2k/testData/newJ2k/class/utilityClass1.kt +++ b/nj2k/testData/newJ2k/class/utilityClass1.kt @@ -1,6 +1,5 @@ internal object Util { - - const val CONSTANT = 10 fun util1() {} fun util2() {} + const val CONSTANT = 10 } \ No newline at end of file diff --git a/nj2k/testData/newJ2k/class/utilityClass2.kt b/nj2k/testData/newJ2k/class/utilityClass2.kt index 6d4859454bc..1aecda41a33 100644 --- a/nj2k/testData/newJ2k/class/utilityClass2.kt +++ b/nj2k/testData/newJ2k/class/utilityClass2.kt @@ -1,7 +1,5 @@ internal object Util { - - const val CONSTANT = 10 - fun util1() {} fun util2() {} + const val CONSTANT = 10 } \ No newline at end of file diff --git a/nj2k/testData/newJ2k/class/utilityClass3.kt b/nj2k/testData/newJ2k/class/utilityClass3.kt index 3223975e501..1aecda41a33 100644 --- a/nj2k/testData/newJ2k/class/utilityClass3.kt +++ b/nj2k/testData/newJ2k/class/utilityClass3.kt @@ -1,6 +1,5 @@ internal object Util { - - const val CONSTANT = 10 fun util1() {} fun util2() {} + const val CONSTANT = 10 } \ No newline at end of file diff --git a/nj2k/testData/newJ2k/comments/comments2.kt b/nj2k/testData/newJ2k/comments/comments2.kt index 82eff953126..cabe5c04e57 100644 --- a/nj2k/testData/newJ2k/comments/comments2.kt +++ b/nj2k/testData/newJ2k/comments/comments2.kt @@ -3,16 +3,17 @@ package foo internal class A { - private/*it's private*/ val field = 0 fun /* nothing to return */ foo(/* no parameters at all */) { // let declare a variable // with 2 comments before + val /*int*/ a /* it's a */ = 2 /* it's 2 */ + 1 /* it's 1 */ // variable a declared } // end of foo fun /* we return int*/ foo( /*int*/ p: Int/* parameter p */): Int { /* body is empty */ } + private/*it's private*/ val field = 0 /*it's public*/ fun foo(s: String?): Char {} protected/*it's protected*/ fun foo(c: Char) {} /** diff --git a/nj2k/testData/newJ2k/comments/commentsForConstructors.kt b/nj2k/testData/newJ2k/comments/commentsForConstructors.kt index a970d50d42f..7dcbc70b3f6 100644 --- a/nj2k/testData/newJ2k/comments/commentsForConstructors.kt +++ b/nj2k/testData/newJ2k/comments/commentsForConstructors.kt @@ -1,5 +1,9 @@ internal class A @JvmOverloads constructor(p: Int = 1) { private val v: Int + + // this is a secondary constructor 2 + constructor(s: String) : this(s.length) {} // end of secondary constructor 2 body + // this is a secondary constructor 1 @@ -10,16 +14,13 @@ internal class A @JvmOverloads constructor(p: Int = 1) { // end of secondary constructor 1 body - - // this is a secondary constructor 2 - constructor(s: String) : this(s.length) {} // end of secondary constructor 2 body } internal class B // this constructor will disappear // end of constructor body (private val x: Int) { - fun foo() {} + } internal class CtorComment { diff --git a/nj2k/testData/newJ2k/constructors/customerBuilder.kt b/nj2k/testData/newJ2k/constructors/customerBuilder.kt index 10a7cc9f54e..655225b0bac 100644 --- a/nj2k/testData/newJ2k/constructors/customerBuilder.kt +++ b/nj2k/testData/newJ2k/constructors/customerBuilder.kt @@ -1,14 +1,14 @@ package org.test.customer internal class Customer(val firstName: String, val lastName: String) { + + private fun doSmthBefore() {} + private fun doSmthAfter() {} + init { doSmthBefore() doSmthAfter() } - - private fun doSmthBefore() {} - - private fun doSmthAfter() {} } internal class CustomerBuilder { @@ -31,10 +31,7 @@ internal class CustomerBuilder { object User { fun main() { - val customer = CustomerBuilder() - .WithFirstName("Homer") - .WithLastName("Simpson") - .Build() + val customer = CustomerBuilder().WithFirstName("Homer").WithLastName("Simpson").Build() println(customer.firstName) println(customer.lastName) } diff --git a/nj2k/testData/newJ2k/constructors/parameterModification.kt b/nj2k/testData/newJ2k/constructors/parameterModification.kt index d96edf38fdc..fc6b8e4c547 100644 --- a/nj2k/testData/newJ2k/constructors/parameterModification.kt +++ b/nj2k/testData/newJ2k/constructors/parameterModification.kt @@ -1,6 +1,11 @@ internal class C @JvmOverloads constructor(arg1: Int, arg2: Int = 0, arg3: Int = 0) { private val field: Int + constructor(arg1: Int, arg2: Int) : this(arg1, arg2, 0) { + var arg2 = arg2 + arg2++ + } + init { var arg1 = arg1 var arg3 = arg3 @@ -9,11 +14,6 @@ internal class C @JvmOverloads constructor(arg1: Int, arg2: Int = 0, arg3: Int = field = arg3 arg3++ } - - constructor(arg1: Int, arg2: Int) : this(arg1, arg2, 0) { - var arg2 = arg2 - arg2++ - } } object User { diff --git a/nj2k/testData/newJ2k/detectProperties/DataClassWithMutableField.kt b/nj2k/testData/newJ2k/detectProperties/DataClassWithMutableField.kt index e1b933a129f..f3bc87b570a 100644 --- a/nj2k/testData/newJ2k/detectProperties/DataClassWithMutableField.kt +++ b/nj2k/testData/newJ2k/detectProperties/DataClassWithMutableField.kt @@ -2,11 +2,11 @@ class Test(count: Int) { var count: Int private set - init { - this.count = count - } - fun inc() { this.count++ } -} + + init { + this.count = count + } +} \ No newline at end of file diff --git a/nj2k/testData/newJ2k/field/specifyType.kt b/nj2k/testData/newJ2k/field/specifyType.kt index 86b97ecf9e1..8eaecfbe610 100644 --- a/nj2k/testData/newJ2k/field/specifyType.kt +++ b/nj2k/testData/newJ2k/field/specifyType.kt @@ -11,10 +11,6 @@ internal class A { var field8 = 0 private var field9: String? = "a" private var field10: String? = foo() - private val anonymous: I = object : I {} - var anonymous2: I = object : I {} - private var anonymous3: I = object : I {} - private var iimpl = anonymous fun foo(): String { return "x" } @@ -29,6 +25,10 @@ internal class A { internal interface I + private val anonymous: I = object : I {} + var anonymous2: I = object : I {} + private var anonymous3: I = object : I {} + private var iimpl = anonymous fun testAnonymousObject(i: Any) { if (true) { iimpl = i as I diff --git a/nj2k/testData/newJ2k/field/valOrVar.kt b/nj2k/testData/newJ2k/field/valOrVar.kt index b5f531c4166..8c4f7fcd59f 100644 --- a/nj2k/testData/newJ2k/field/valOrVar.kt +++ b/nj2k/testData/newJ2k/field/valOrVar.kt @@ -8,6 +8,9 @@ internal class A(private val field6: Int, private val field8: Int, a: A) { private val field9: Int private var field10 = 0 private var field11 = 0 + fun foo() { + field3 = field2 + } init { field7 = 10 @@ -17,8 +20,4 @@ internal class A(private val field6: Int, private val field8: Int, a: A) { } a.field11 = 10 } - - fun foo() { - field3 = field2 - } } \ No newline at end of file diff --git a/nj2k/testData/newJ2k/formatting/nonStaticMembers.kt b/nj2k/testData/newJ2k/formatting/nonStaticMembers.kt index d74c636540d..2ad64866b45 100644 --- a/nj2k/testData/newJ2k/formatting/nonStaticMembers.kt +++ b/nj2k/testData/newJ2k/formatting/nonStaticMembers.kt @@ -1,10 +1,6 @@ internal class F { - var i = 0 - fun f1() {} - - fun f2() {} - + var i = 0 fun f3() {} } \ No newline at end of file diff --git a/nj2k/testData/newJ2k/formatting/nonStaticMembersWithComments.kt b/nj2k/testData/newJ2k/formatting/nonStaticMembersWithComments.kt index 24945a292f6..4adc41f86c3 100644 --- a/nj2k/testData/newJ2k/formatting/nonStaticMembersWithComments.kt +++ b/nj2k/testData/newJ2k/formatting/nonStaticMembersWithComments.kt @@ -1,5 +1,4 @@ internal class F { - var i = 0 //c1 @@ -13,9 +12,11 @@ internal class F { //c4 - fun f2() {} + fun f2() {} + var i = 0 fun f3() {} //c5 + } \ No newline at end of file diff --git a/nj2k/testData/newJ2k/formatting/staticAndNonStaticMembersWithComments.kt b/nj2k/testData/newJ2k/formatting/staticAndNonStaticMembersWithComments.kt index 1ef2d0b37fd..5d593e6d99d 100644 --- a/nj2k/testData/newJ2k/formatting/staticAndNonStaticMembersWithComments.kt +++ b/nj2k/testData/newJ2k/formatting/staticAndNonStaticMembersWithComments.kt @@ -1,31 +1,29 @@ internal class F { + //c1 - //c3 + /*c2*///c3 //c4 fun f2() {} - fun f3() {} - fun f4() {} + //c5 + companion object { - //c1 - - /*c2*/ - fun f1() {} + + var i = 0 - //c5 fun f5() {} + + //c6 } - //c6 - } \ No newline at end of file diff --git a/nj2k/testData/newJ2k/formatting/staticMembersWithComments.kt b/nj2k/testData/newJ2k/formatting/staticMembersWithComments.kt index 1ea2afcb160..0845bcad1fb 100644 --- a/nj2k/testData/newJ2k/formatting/staticMembersWithComments.kt +++ b/nj2k/testData/newJ2k/formatting/staticMembersWithComments.kt @@ -1,7 +1,4 @@ -internal object F { - var i = 0 - - //c1 +internal object F {//c1 /*c2*/ @@ -13,8 +10,9 @@ internal object F { //c4 - fun f2() {} + fun f2() {} + var i = 0 fun f3() {} //c5 diff --git a/nj2k/testData/newJ2k/issues/comments.kt b/nj2k/testData/newJ2k/issues/comments.kt index 1dc8ee0ae2c..1c7f33f9e73 100644 --- a/nj2k/testData/newJ2k/issues/comments.kt +++ b/nj2k/testData/newJ2k/issues/comments.kt @@ -12,30 +12,11 @@ This is a block comment internal class C { // This is a class comment + /** * This is a field doc comment. */ - private val i: Int = 0 - - //simple one line comment for field - var j: Int = 0 - - //double c style - //comment before field - var k: Int = 0 - - //combination - /** of - */ - // - /** - * different - */ - //comments - var l: Int = 0 - - /*two*/ /*comments*//*line*/ - var z: Int = 0 + private val i = 0 /** * This is a function doc comment. @@ -47,17 +28,40 @@ internal class C { //simple one line comment for function fun f1() {} + //simple one line comment for field + var j = 0 + //double c style //comment before function fun f2() {} + //double c style + //comment before field + var k = 0 + //combination /** of */ // + + /** * different */ //comments fun f3() {} -} + + //combination + /** of + */ + // + + + /** + * different + */ + //comments + var l = 0 + /*two*/ /*comments*//*line*/ + var z = 0 +} \ No newline at end of file diff --git a/nj2k/testData/newJ2k/mutableCollections/FunctionReturnValue2.kt b/nj2k/testData/newJ2k/mutableCollections/FunctionReturnValue2.kt index 4b13f3aa8c1..48208e635a7 100644 --- a/nj2k/testData/newJ2k/mutableCollections/FunctionReturnValue2.kt +++ b/nj2k/testData/newJ2k/mutableCollections/FunctionReturnValue2.kt @@ -2,11 +2,6 @@ import java.util.* internal class A { private val collection: MutableCollection - - init { - collection = createCollection() - } - fun createCollection(): MutableCollection { return ArrayList() } @@ -18,4 +13,8 @@ internal class A { fun getCollection(): Collection { return collection } + + init { + collection = createCollection() + } } \ No newline at end of file diff --git a/nj2k/testData/newJ2k/nullability/nullableInitializer1.kt b/nj2k/testData/newJ2k/nullability/nullableInitializer1.kt index 9d0073eb480..b3e21cb2303 100644 --- a/nj2k/testData/newJ2k/nullability/nullableInitializer1.kt +++ b/nj2k/testData/newJ2k/nullability/nullableInitializer1.kt @@ -1,15 +1,13 @@ class Test { - - private var nullableInitializerField = nullableString(3) - private val nullableInitializerFieldFinal = nullableString(3) - var nullableInitializerPublicField = nullableString(3) fun nullableString(p: Int): String? { return if (p > 0) "response" else null } + private var nullableInitializerField = nullableString(3) + private val nullableInitializerFieldFinal = nullableString(3) + var nullableInitializerPublicField = nullableString(3) fun testProperty() { nullableInitializerField = "aaa" - nullableInitializerField!![0] nullableInitializerFieldFinal!![0] nullableInitializerPublicField!![0] diff --git a/nj2k/testData/newJ2k/nullability/nullableInitializer2.kt b/nj2k/testData/newJ2k/nullability/nullableInitializer2.kt index 4e8a73f77fe..e781b87b47c 100644 --- a/nj2k/testData/newJ2k/nullability/nullableInitializer2.kt +++ b/nj2k/testData/newJ2k/nullability/nullableInitializer2.kt @@ -1,11 +1,10 @@ class TestJava { - - var nullableInitializerFieldCast = nullableObj(3) as String? - private val nullableInitializerPrivateFieldCast = nullableObj(3) as String? fun nullableObj(p: Int): Any? { return if (p > 0) "response" else null } + var nullableInitializerFieldCast = nullableObj(3) as String? + private val nullableInitializerPrivateFieldCast = nullableObj(3) as String? fun testProperty() { nullableInitializerFieldCast!![0] nullableInitializerPrivateFieldCast!![0] @@ -13,7 +12,6 @@ class TestJava { fun testLocalVariable() { val nullableInitializerValCast = nullableObj(3) as String? - nullableInitializerValCast!![0] } } \ No newline at end of file diff --git a/nj2k/testData/newJ2k/nullability/nullableInitializer3.kt b/nj2k/testData/newJ2k/nullability/nullableInitializer3.kt index d275f9eecf3..99aaa35cec6 100644 --- a/nj2k/testData/newJ2k/nullability/nullableInitializer3.kt +++ b/nj2k/testData/newJ2k/nullability/nullableInitializer3.kt @@ -1,11 +1,10 @@ class Test { - - private val notNullInitializerField = notNullString(3) - var notNullInitializerPublicField = notNullString(3) fun notNullString(p: Int): String { return "response" } + private val notNullInitializerField = notNullString(3) + var notNullInitializerPublicField = notNullString(3) fun testProperty() { notNullInitializerField[0] notNullInitializerPublicField[0] diff --git a/nj2k/testData/newJ2k/protected/inheritorsSamePackage.kt b/nj2k/testData/newJ2k/protected/inheritorsSamePackage.kt index 1605ba663ef..cb51bbc7ef2 100644 --- a/nj2k/testData/newJ2k/protected/inheritorsSamePackage.kt +++ b/nj2k/testData/newJ2k/protected/inheritorsSamePackage.kt @@ -1,20 +1,14 @@ package test open class BaseInheritorSamePackage { - - var i = 1 - - constructor() { - - } - - protected constructor(x: Int) { - - } + constructor() {} + protected constructor(x: Int) {} fun foo() { BaseInheritorSamePackage(1) } + + var i = 1 } internal class DerivedInheritorSamePackage : BaseInheritorSamePackage() { diff --git a/nj2k/testData/newJ2k/protected/protectedInSamePackage.kt b/nj2k/testData/newJ2k/protected/protectedInSamePackage.kt index 77fe252f6a8..e3e6c728b59 100644 --- a/nj2k/testData/newJ2k/protected/protectedInSamePackage.kt +++ b/nj2k/testData/newJ2k/protected/protectedInSamePackage.kt @@ -1,12 +1,8 @@ package test class BaseSamePackage { - + fun foo() {} var i = 1 - - fun foo() { - - } } internal class DerivedSamePackage { diff --git a/nj2k/testData/newJ2k/protected/superInSamePackage.kt b/nj2k/testData/newJ2k/protected/superInSamePackage.kt index cbc4d05ef29..3ab21980330 100644 --- a/nj2k/testData/newJ2k/protected/superInSamePackage.kt +++ b/nj2k/testData/newJ2k/protected/superInSamePackage.kt @@ -9,10 +9,6 @@ internal open class BaseSuperSamePackage { } internal class DerivedSuperSamePackage : BaseSuperSamePackage() { - + fun foo() {} var i = 1 - - fun foo() { - - } } \ No newline at end of file diff --git a/nj2k/testData/newJ2k/protected/usages.kt b/nj2k/testData/newJ2k/protected/usages.kt index ff7f93d3bce..bf8f8584638 100644 --- a/nj2k/testData/newJ2k/protected/usages.kt +++ b/nj2k/testData/newJ2k/protected/usages.kt @@ -1,39 +1,28 @@ package test class BaseProtectedConstructor { - fun usageInConstructor() { - - } - + fun usageInConstructor() {} fun usageInPropertyInitializer(): Int { return 1 } - fun usageInStaticInit() { - - } - - fun usageInMethod() { - - } + fun usageInStaticInit() {} + fun usageInMethod() {} } internal class DerivedSamePackage { - private val i = BaseProtectedConstructor().usageInPropertyInitializer() - init { - BaseProtectedConstructor().usageInConstructor() + companion object {init { + BaseProtectedConstructor().usageInStaticInit() } - - companion object { - - init { - BaseProtectedConstructor().usageInStaticInit() - } } fun usage() { BaseProtectedConstructor().usageInMethod() } + + init { + BaseProtectedConstructor().usageInConstructor() + } } diff --git a/nj2k/testData/newJ2k/returnStatement/currentMethodBug.kt b/nj2k/testData/newJ2k/returnStatement/currentMethodBug.kt index 04e8742ff01..e900f08948d 100644 --- a/nj2k/testData/newJ2k/returnStatement/currentMethodBug.kt +++ b/nj2k/testData/newJ2k/returnStatement/currentMethodBug.kt @@ -3,7 +3,6 @@ internal interface I { } internal class C { - var string: String? = null val `object`: Any? get() { foo(object : I { @@ -14,4 +13,5 @@ internal class C { } fun foo(i: I) {} + var string: String? = null } \ No newline at end of file