From 87cb36e8e9517ffc70c15de372bbdc9bde271e25 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Wed, 27 May 2015 13:30:58 +0300 Subject: [PATCH] Updating java to kotlin convert to new language syntax --- .../kotlin/j2k/AnnotationConverter.kt | 10 ++--- j2k/src/org/jetbrains/kotlin/j2k/Converter.kt | 2 +- .../jetbrains/kotlin/j2k/ast/Annotation.kt | 39 ++++++++----------- .../jetbrains/kotlin/j2k/ast/Constructors.kt | 10 ++++- .../annotations/annotationUsages.kt | 2 +- .../comments/commentsForConstructors.kt | 2 +- .../constructors/allCallsPrimary.kt | 2 +- .../constructors/constructorAnnotations.kt | 12 +++--- .../fieldsInitializedFromParams9.kt | 2 +- .../nestedClassNameInParameterDefaults.kt | 2 +- .../nestedClassNameInParameterDefaults2.kt | 2 +- .../nestedClassNameInParameterDefaults3.kt | 2 +- .../nestedClassNameInParameterDefaults4.kt | 2 +- .../constructors/parameterDefaults1.kt | 2 +- .../constructors/parameterDefaults2.kt | 2 +- .../constructors/parameterDefaults3.kt | 2 +- .../constructors/parameterDefaults4.kt | 2 +- .../constructors/parameterDefaults5.kt | 2 +- .../constructors/parameterModification.kt | 2 +- .../constructors/privateConstructors.kt | 2 +- ...ferentFieldNameAndDefaultParameterValue.kt | 2 +- j2k/testData/fileOrElement/enum/colorEnum.kt | 2 +- .../fieldsWithPrimaryPrivateConstructor.kt | 2 +- .../enum/primaryPrivateConstructor.kt | 2 +- 24 files changed, 56 insertions(+), 55 deletions(-) diff --git a/j2k/src/org/jetbrains/kotlin/j2k/AnnotationConverter.kt b/j2k/src/org/jetbrains/kotlin/j2k/AnnotationConverter.kt index 04068b62387..16f3cc04e05 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/AnnotationConverter.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/AnnotationConverter.kt @@ -43,9 +43,9 @@ class AnnotationConverter(private val converter: Converter) { var child: PsiElement? = modifierList while (true) { child = child!!.getNextSibling() - if (child == null || child!!.getTextLength() != 0) break + if (child == null || child.getTextLength() != 0) break } - if (child is PsiWhiteSpace) !child!!.isInSingleLine() else false + if (child is PsiWhiteSpace) !child.isInSingleLine() else false } annotations.map { convertAnnotation(it, owner is PsiLocalVariable, newLines) }.filterNotNull() //TODO: brackets are also needed for local classes @@ -88,11 +88,11 @@ class AnnotationConverter(private val converter: Converter) { PsiModifier.TRANSIENT to "transient" ) - public fun convertAnnotation(annotation: PsiAnnotation, brackets: Boolean, newLineAfter: Boolean): Annotation? { + public fun convertAnnotation(annotation: PsiAnnotation, withAt: Boolean, newLineAfter: Boolean): Annotation? { val qualifiedName = annotation.getQualifiedName() if (qualifiedName == CommonClassNames.JAVA_LANG_DEPRECATED && annotation.getParameterList().getAttributes().isEmpty()) { val deferredExpression = converter.deferredElement { LiteralExpression("\"\"").assignNoPrototype() } - return Annotation(Identifier("deprecated").assignNoPrototype(), listOf(null to deferredExpression), brackets, newLineAfter).assignPrototype(annotation) //TODO: insert comment + return Annotation(Identifier("deprecated").assignNoPrototype(), listOf(null to deferredExpression), withAt, newLineAfter).assignPrototype(annotation) //TODO: insert comment } val nameRef = annotation.getNameReferenceElement() @@ -111,7 +111,7 @@ class AnnotationConverter(private val converter: Converter) { attrValues.map { attrName to converter.deferredElement(it) } } - return Annotation(name, arguments, brackets, newLineAfter).assignPrototype(annotation) + return Annotation(name, arguments, withAt, newLineAfter).assignPrototype(annotation) } public fun convertAnnotationMethodDefault(method: PsiAnnotationMethod): DeferredElement? { diff --git a/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt b/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt index 11ab1685481..3d505edaa5d 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt @@ -424,7 +424,7 @@ class Converter private( function.annotations += Annotations( listOf(Annotation(Identifier("jvmOverloads").assignNoPrototype(), listOf(), - brackets = function is PrimaryConstructor, + withAt = function is PrimaryConstructor, newLineAfter = false).assignNoPrototype())).assignNoPrototype() } diff --git a/j2k/src/org/jetbrains/kotlin/j2k/ast/Annotation.kt b/j2k/src/org/jetbrains/kotlin/j2k/ast/Annotation.kt index 178842b083e..489ce3ec83b 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/ast/Annotation.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/ast/Annotation.kt @@ -18,33 +18,26 @@ package org.jetbrains.kotlin.j2k.ast import org.jetbrains.kotlin.j2k.* -class Annotation(val name: Identifier, val arguments: List>>, val brackets: Boolean, val newLineAfter: Boolean) : Element() { - private fun CodeBuilder.surroundWithBrackets(action: () -> Unit) { - if (brackets) append("[") - action() - if (brackets) append("]") - } - +class Annotation(val name: Identifier, val arguments: List>>, val withAt: Boolean, val newLineAfter: Boolean) : Element() { override fun generateCode(builder: CodeBuilder) { + if (withAt) builder.append("@") if (arguments.isEmpty()) { - builder.surroundWithBrackets { builder.append(name) } + builder.append(name) } else { - builder.surroundWithBrackets { - builder.append(name) - .append("(") - .append(arguments.map { - { - if (it.first != null) { - builder append it.first!! append " = " append it.second - } - else { - builder append it.second - } + builder.append(name) + .append("(") + .append(arguments.map { + { + if (it.first != null) { + builder append it.first!! append " = " append it.second } - }, ", ") - .append(")") - } + else { + builder append it.second + } + } + }, ", ") + .append(")") } } @@ -69,5 +62,5 @@ class Annotations(val annotations: List) : Element() { } } -fun Annotations.withBrackets(): Annotations +fun Annotations.withAt(): Annotations = Annotations(annotations.map { Annotation(it.name, it.arguments, true, it.newLineAfter).assignPrototypesFrom(it) }).assignPrototypesFrom(this) diff --git a/j2k/src/org/jetbrains/kotlin/j2k/ast/Constructors.kt b/j2k/src/org/jetbrains/kotlin/j2k/ast/Constructors.kt index 4188a97d04a..d2190cb2d1e 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/ast/Constructors.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/ast/Constructors.kt @@ -58,12 +58,20 @@ class PrimaryConstructorSignature(val annotations: Annotations, private val modi } override fun generateCode(builder: CodeBuilder) { + var needConstructorKeyword = false + if (!annotations.isEmpty) { - builder append " " append annotations.withBrackets() + builder append " " append annotations.withAt() + needConstructorKeyword = true } if (accessModifier != null) { builder append " " append Modifiers(listOf(accessModifier)).assignPrototypesFrom(modifiers) + needConstructorKeyword = true + } + + if (needConstructorKeyword) { + builder append " constructor" } builder append "(" append parameterList append ")" diff --git a/j2k/testData/fileOrElement/annotations/annotationUsages.kt b/j2k/testData/fileOrElement/annotations/annotationUsages.kt index b67c62299ba..bb9814fbe2b 100644 --- a/j2k/testData/fileOrElement/annotations/annotationUsages.kt +++ b/j2k/testData/fileOrElement/annotations/annotationUsages.kt @@ -21,7 +21,7 @@ class C { Anon6 fun foo(deprecated("") p1: Int, deprecated("") Anon5(2) p2: Char) { - [deprecated("")] [Anon5(3)] val c = 'a' + @deprecated("") @Anon5(3) val c = 'a' } Anon5(1) fun bar() { diff --git a/j2k/testData/fileOrElement/comments/commentsForConstructors.kt b/j2k/testData/fileOrElement/comments/commentsForConstructors.kt index 9012ab56389..65143384217 100644 --- a/j2k/testData/fileOrElement/comments/commentsForConstructors.kt +++ b/j2k/testData/fileOrElement/comments/commentsForConstructors.kt @@ -1,5 +1,5 @@ class A// this is a primary constructor -[jvmOverloads] (p: Int = 1) { +@jvmOverloads constructor(p: Int = 1) { private val v: Int init { diff --git a/j2k/testData/fileOrElement/constructors/allCallsPrimary.kt b/j2k/testData/fileOrElement/constructors/allCallsPrimary.kt index 0f303410083..641f352b3e2 100644 --- a/j2k/testData/fileOrElement/constructors/allCallsPrimary.kt +++ b/j2k/testData/fileOrElement/constructors/allCallsPrimary.kt @@ -1,6 +1,6 @@ package pack -class C [jvmOverloads] (arg1: Int, arg2: Int = 0, arg3: Int = 0) +class C @jvmOverloads constructor(arg1: Int, arg2: Int = 0, arg3: Int = 0) public object User { public fun main() { diff --git a/j2k/testData/fileOrElement/constructors/constructorAnnotations.kt b/j2k/testData/fileOrElement/constructors/constructorAnnotations.kt index 1983451fe15..6f0536e2457 100644 --- a/j2k/testData/fileOrElement/constructors/constructorAnnotations.kt +++ b/j2k/testData/fileOrElement/constructors/constructorAnnotations.kt @@ -1,16 +1,16 @@ import javaApi.Anon5 class A -[Anon5(10)] -(private val a: Int, private val b: Int) { +@Anon5(10) +constructor(private val a: Int, private val b: Int) { deprecated("") // this constructor will not be replaced by default parameter value in primary because of this annotation public constructor(a: Int) : this(a, 1) { } } -class B [Anon5(11)] -() +class B @Anon5(11) +constructor() -class C [Anon5(12)] -private () \ No newline at end of file +class C @Anon5(12) +private constructor() \ No newline at end of file diff --git a/j2k/testData/fileOrElement/constructors/fieldsInitializedFromParams9.kt b/j2k/testData/fileOrElement/constructors/fieldsInitializedFromParams9.kt index eedac2deff2..88d23a2e9b6 100644 --- a/j2k/testData/fileOrElement/constructors/fieldsInitializedFromParams9.kt +++ b/j2k/testData/fileOrElement/constructors/fieldsInitializedFromParams9.kt @@ -1 +1 @@ -class C [jvmOverloads] (private val string: String, a: Int = string.length()) +class C @jvmOverloads constructor(private val string: String, a: Int = string.length()) diff --git a/j2k/testData/fileOrElement/constructors/nestedClassNameInParameterDefaults.kt b/j2k/testData/fileOrElement/constructors/nestedClassNameInParameterDefaults.kt index a097b21f6f4..4cfc913d2e3 100644 --- a/j2k/testData/fileOrElement/constructors/nestedClassNameInParameterDefaults.kt +++ b/j2k/testData/fileOrElement/constructors/nestedClassNameInParameterDefaults.kt @@ -1,4 +1,4 @@ -class A [jvmOverloads] (nested: A.Nested = A.Nested(A.Nested.FIELD)) { +class A @jvmOverloads constructor(nested: A.Nested = A.Nested(A.Nested.FIELD)) { class Nested(p: Int) { companion object { diff --git a/j2k/testData/fileOrElement/constructors/nestedClassNameInParameterDefaults2.kt b/j2k/testData/fileOrElement/constructors/nestedClassNameInParameterDefaults2.kt index 1703cd22689..47b34921a92 100644 --- a/j2k/testData/fileOrElement/constructors/nestedClassNameInParameterDefaults2.kt +++ b/j2k/testData/fileOrElement/constructors/nestedClassNameInParameterDefaults2.kt @@ -1,7 +1,7 @@ // ERROR: Property must be initialized or be abstract import A.Nested -class A [jvmOverloads] (nested: Nested = Nested(Nested.FIELD)) { +class A @jvmOverloads constructor(nested: Nested = Nested(Nested.FIELD)) { class Nested(p: Int) { companion object { diff --git a/j2k/testData/fileOrElement/constructors/nestedClassNameInParameterDefaults3.kt b/j2k/testData/fileOrElement/constructors/nestedClassNameInParameterDefaults3.kt index b729d2906e4..02974eb4e03 100644 --- a/j2k/testData/fileOrElement/constructors/nestedClassNameInParameterDefaults3.kt +++ b/j2k/testData/fileOrElement/constructors/nestedClassNameInParameterDefaults3.kt @@ -3,7 +3,7 @@ package pack import pack.A.Nested -class A [jvmOverloads] (nested: Nested = Nested(Nested.FIELD)) { +class A @jvmOverloads constructor(nested: Nested = Nested(Nested.FIELD)) { class Nested(p: Int) { companion object { diff --git a/j2k/testData/fileOrElement/constructors/nestedClassNameInParameterDefaults4.kt b/j2k/testData/fileOrElement/constructors/nestedClassNameInParameterDefaults4.kt index af3b19d2060..54cda87bb39 100644 --- a/j2k/testData/fileOrElement/constructors/nestedClassNameInParameterDefaults4.kt +++ b/j2k/testData/fileOrElement/constructors/nestedClassNameInParameterDefaults4.kt @@ -3,7 +3,7 @@ package pack import pack.A.* -class A [jvmOverloads] (nested: Nested = Nested(Nested.FIELD)) { +class A @jvmOverloads constructor(nested: Nested = Nested(Nested.FIELD)) { class Nested(p: Int) { companion object { diff --git a/j2k/testData/fileOrElement/constructors/parameterDefaults1.kt b/j2k/testData/fileOrElement/constructors/parameterDefaults1.kt index 0519f4280f4..969d9e5859d 100644 --- a/j2k/testData/fileOrElement/constructors/parameterDefaults1.kt +++ b/j2k/testData/fileOrElement/constructors/parameterDefaults1.kt @@ -1,6 +1,6 @@ package pack -class C [jvmOverloads] (a: Int = 0, b: Int = 0, c: Int = 0, d: Int = 0, e: Int = 0) { +class C @jvmOverloads constructor(a: Int = 0, b: Int = 0, c: Int = 0, d: Int = 0, e: Int = 0) { constructor(a: Int) : this(a, 0, 0, 0, 1) { } diff --git a/j2k/testData/fileOrElement/constructors/parameterDefaults2.kt b/j2k/testData/fileOrElement/constructors/parameterDefaults2.kt index 6b448823a12..06fd8dd541c 100644 --- a/j2k/testData/fileOrElement/constructors/parameterDefaults2.kt +++ b/j2k/testData/fileOrElement/constructors/parameterDefaults2.kt @@ -1,6 +1,6 @@ package pack -class C [jvmOverloads] (a: Int = 0, b: Int = 0, c: Int = 0, d: Int = 0, e: Int = 0) { +class C @jvmOverloads constructor(a: Int = 0, b: Int = 0, c: Int = 0, d: Int = 0, e: Int = 0) { constructor(a1: Int, b1: Int, c1: Int) : this(a1, b1, c1, 0, 0) { } diff --git a/j2k/testData/fileOrElement/constructors/parameterDefaults3.kt b/j2k/testData/fileOrElement/constructors/parameterDefaults3.kt index cb6ec403465..fb0f2dcd634 100644 --- a/j2k/testData/fileOrElement/constructors/parameterDefaults3.kt +++ b/j2k/testData/fileOrElement/constructors/parameterDefaults3.kt @@ -1,6 +1,6 @@ package pack -class C [jvmOverloads] (a: Int = 0, b: Int = 0, c: Int = 0, d: Int = 0, e: Int = 0) { +class C @jvmOverloads constructor(a: Int = 0, b: Int = 0, c: Int = 0, d: Int = 0, e: Int = 0) { constructor(a: Int, b: Int, c: Int) : this(b, a, c, 0, 0) { } diff --git a/j2k/testData/fileOrElement/constructors/parameterDefaults4.kt b/j2k/testData/fileOrElement/constructors/parameterDefaults4.kt index b801e3f2e87..66e6bbb9d8c 100644 --- a/j2k/testData/fileOrElement/constructors/parameterDefaults4.kt +++ b/j2k/testData/fileOrElement/constructors/parameterDefaults4.kt @@ -1,3 +1,3 @@ package pack -class C [jvmOverloads] (a: Int = 1, b: Int = 2, c: Int = 3, d: Int = 4, e: Int = 5) +class C @jvmOverloads constructor(a: Int = 1, b: Int = 2, c: Int = 3, d: Int = 4, e: Int = 5) diff --git a/j2k/testData/fileOrElement/constructors/parameterDefaults5.kt b/j2k/testData/fileOrElement/constructors/parameterDefaults5.kt index b801e3f2e87..66e6bbb9d8c 100644 --- a/j2k/testData/fileOrElement/constructors/parameterDefaults5.kt +++ b/j2k/testData/fileOrElement/constructors/parameterDefaults5.kt @@ -1,3 +1,3 @@ package pack -class C [jvmOverloads] (a: Int = 1, b: Int = 2, c: Int = 3, d: Int = 4, e: Int = 5) +class C @jvmOverloads constructor(a: Int = 1, b: Int = 2, c: Int = 3, d: Int = 4, e: Int = 5) diff --git a/j2k/testData/fileOrElement/constructors/parameterModification.kt b/j2k/testData/fileOrElement/constructors/parameterModification.kt index e7b16f6e74c..242266a8493 100644 --- a/j2k/testData/fileOrElement/constructors/parameterModification.kt +++ b/j2k/testData/fileOrElement/constructors/parameterModification.kt @@ -1,5 +1,5 @@ // ERROR: Overload resolution ambiguity: public constructor C(arg1: kotlin.Int, arg2: kotlin.Int) defined in C kotlin.jvm.jvmOverloads public constructor C(arg1: kotlin.Int, arg2: kotlin.Int = ..., arg3: kotlin.Int = ...) defined in C -class C [jvmOverloads] (arg1: Int, arg2: Int = 0, arg3: Int = 0) { +class C @jvmOverloads constructor(arg1: Int, arg2: Int = 0, arg3: Int = 0) { private val field: Int init { diff --git a/j2k/testData/fileOrElement/constructors/privateConstructors.kt b/j2k/testData/fileOrElement/constructors/privateConstructors.kt index 765e9a42de8..596457e9d9c 100644 --- a/j2k/testData/fileOrElement/constructors/privateConstructors.kt +++ b/j2k/testData/fileOrElement/constructors/privateConstructors.kt @@ -1,4 +1,4 @@ -class C [jvmOverloads] private (arg1: Int, arg2: Int, arg3: Int = 0) { +class C @jvmOverloads private constructor(arg1: Int, arg2: Int, arg3: Int = 0) { public constructor(arg1: Int) : this(arg1, 0, 0) { } diff --git a/j2k/testData/fileOrElement/dropAccessors/DifferentFieldNameAndDefaultParameterValue.kt b/j2k/testData/fileOrElement/dropAccessors/DifferentFieldNameAndDefaultParameterValue.kt index f1fc2ac7c73..28483976d56 100644 --- a/j2k/testData/fileOrElement/dropAccessors/DifferentFieldNameAndDefaultParameterValue.kt +++ b/j2k/testData/fileOrElement/dropAccessors/DifferentFieldNameAndDefaultParameterValue.kt @@ -1 +1 @@ -public class C [jvmOverloads] (c: C, public val x: Int = c.x) +public class C @jvmOverloads constructor(c: C, public val x: Int = c.x) diff --git a/j2k/testData/fileOrElement/enum/colorEnum.kt b/j2k/testData/fileOrElement/enum/colorEnum.kt index bccd12d395e..2f115c1275d 100644 --- a/j2k/testData/fileOrElement/enum/colorEnum.kt +++ b/j2k/testData/fileOrElement/enum/colorEnum.kt @@ -1,6 +1,6 @@ package demo -enum class MyEnum private (public val color: Int) { +enum class MyEnum private constructor(public val color: Int) { RED : MyEnum(10) BLUE : MyEnum(20) } \ No newline at end of file diff --git a/j2k/testData/fileOrElement/enum/fieldsWithPrimaryPrivateConstructor.kt b/j2k/testData/fileOrElement/enum/fieldsWithPrimaryPrivateConstructor.kt index 8cad55bdcad..a4e4586c567 100644 --- a/j2k/testData/fileOrElement/enum/fieldsWithPrimaryPrivateConstructor.kt +++ b/j2k/testData/fileOrElement/enum/fieldsWithPrimaryPrivateConstructor.kt @@ -1,4 +1,4 @@ -enum class Color private (public val code: Int) { +enum class Color private constructor(public val code: Int) { WHITE : Color(21) BLACK : Color(22) RED : Color(23) diff --git a/j2k/testData/fileOrElement/enum/primaryPrivateConstructor.kt b/j2k/testData/fileOrElement/enum/primaryPrivateConstructor.kt index 25f6da27e22..ad2897eb93e 100644 --- a/j2k/testData/fileOrElement/enum/primaryPrivateConstructor.kt +++ b/j2k/testData/fileOrElement/enum/primaryPrivateConstructor.kt @@ -1,3 +1,3 @@ package demo -enum class Color private (public val code: Int) \ No newline at end of file +enum class Color private constructor(public val code: Int) \ No newline at end of file