diff --git a/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt b/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt index d67ac3661c0..1d4206866c7 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/Converter.kt @@ -431,7 +431,7 @@ class Converter private constructor( function.annotations += Annotations( listOf(Annotation(Identifier("jvmOverloads").assignNoPrototype(), listOf(), - withAt = function is PrimaryConstructor, + withAt = false, 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 8096dd9e840..70596948153 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/ast/Annotation.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/ast/Annotation.kt @@ -63,6 +63,3 @@ class Annotations(val annotations: List) : Element() { val Empty = Annotations(listOf()) } } - -fun Annotations.withAt(): Annotations - = Annotations(annotations.map { Annotation(it.name, it.arguments, withAt = true, newLineAfter = 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 951a74315d7..55bfc95cf58 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/ast/Constructors.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/ast/Constructors.kt @@ -61,7 +61,7 @@ class PrimaryConstructorSignature(val annotations: Annotations, private val modi var needConstructorKeyword = false if (!annotations.isEmpty) { - builder append " " append annotations.withAt() + builder append " " append annotations needConstructorKeyword = true } diff --git a/j2k/testData/fileOrElement/annotations/primaryConstructorAnnotation.java b/j2k/testData/fileOrElement/annotations/primaryConstructorAnnotation.java new file mode 100644 index 00000000000..d7884d7a6e0 --- /dev/null +++ b/j2k/testData/fileOrElement/annotations/primaryConstructorAnnotation.java @@ -0,0 +1,5 @@ +class C { + @Deprecated + public C() { + } +} diff --git a/j2k/testData/fileOrElement/annotations/primaryConstructorAnnotation.kt b/j2k/testData/fileOrElement/annotations/primaryConstructorAnnotation.kt new file mode 100644 index 00000000000..6ec023e61cf --- /dev/null +++ b/j2k/testData/fileOrElement/annotations/primaryConstructorAnnotation.kt @@ -0,0 +1,2 @@ +class C deprecated("") +constructor() diff --git a/j2k/testData/fileOrElement/comments/commentsForConstructors.kt b/j2k/testData/fileOrElement/comments/commentsForConstructors.kt index 65143384217..d957586d9c2 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 constructor(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 641f352b3e2..f27f523b4c2 100644 --- a/j2k/testData/fileOrElement/constructors/allCallsPrimary.kt +++ b/j2k/testData/fileOrElement/constructors/allCallsPrimary.kt @@ -1,6 +1,6 @@ package pack -class C @jvmOverloads constructor(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 6f0536e2457..8c7fca9b05e 100644 --- a/j2k/testData/fileOrElement/constructors/constructorAnnotations.kt +++ b/j2k/testData/fileOrElement/constructors/constructorAnnotations.kt @@ -1,7 +1,7 @@ import javaApi.Anon5 class A -@Anon5(10) +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 @@ -9,8 +9,8 @@ constructor(private val a: Int, private val b: Int) { } } -class B @Anon5(11) +class B Anon5(11) constructor() -class C @Anon5(12) +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 88d23a2e9b6..e4d9bad2519 100644 --- a/j2k/testData/fileOrElement/constructors/fieldsInitializedFromParams9.kt +++ b/j2k/testData/fileOrElement/constructors/fieldsInitializedFromParams9.kt @@ -1 +1 @@ -class C @jvmOverloads constructor(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 4cfc913d2e3..76de64b2e04 100644 --- a/j2k/testData/fileOrElement/constructors/nestedClassNameInParameterDefaults.kt +++ b/j2k/testData/fileOrElement/constructors/nestedClassNameInParameterDefaults.kt @@ -1,4 +1,4 @@ -class A @jvmOverloads constructor(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 47b34921a92..574888bb3c2 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 constructor(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 02974eb4e03..8b2dbc2204f 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 constructor(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 54cda87bb39..7b9aabf0fff 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 constructor(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 969d9e5859d..be71bc80587 100644 --- a/j2k/testData/fileOrElement/constructors/parameterDefaults1.kt +++ b/j2k/testData/fileOrElement/constructors/parameterDefaults1.kt @@ -1,6 +1,6 @@ package pack -class C @jvmOverloads constructor(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 06fd8dd541c..f78ffe62d4f 100644 --- a/j2k/testData/fileOrElement/constructors/parameterDefaults2.kt +++ b/j2k/testData/fileOrElement/constructors/parameterDefaults2.kt @@ -1,6 +1,6 @@ package pack -class C @jvmOverloads constructor(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 fb0f2dcd634..3ed89327e4c 100644 --- a/j2k/testData/fileOrElement/constructors/parameterDefaults3.kt +++ b/j2k/testData/fileOrElement/constructors/parameterDefaults3.kt @@ -1,6 +1,6 @@ package pack -class C @jvmOverloads constructor(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 66e6bbb9d8c..c37cbf22911 100644 --- a/j2k/testData/fileOrElement/constructors/parameterDefaults4.kt +++ b/j2k/testData/fileOrElement/constructors/parameterDefaults4.kt @@ -1,3 +1,3 @@ package pack -class C @jvmOverloads constructor(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 66e6bbb9d8c..c37cbf22911 100644 --- a/j2k/testData/fileOrElement/constructors/parameterDefaults5.kt +++ b/j2k/testData/fileOrElement/constructors/parameterDefaults5.kt @@ -1,3 +1,3 @@ package pack -class C @jvmOverloads constructor(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 242266a8493..913e836e98c 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 constructor(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 596457e9d9c..c3503175dd8 100644 --- a/j2k/testData/fileOrElement/constructors/privateConstructors.kt +++ b/j2k/testData/fileOrElement/constructors/privateConstructors.kt @@ -1,4 +1,4 @@ -class C @jvmOverloads private constructor(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 28483976d56..6ea6a413b52 100644 --- a/j2k/testData/fileOrElement/dropAccessors/DifferentFieldNameAndDefaultParameterValue.kt +++ b/j2k/testData/fileOrElement/dropAccessors/DifferentFieldNameAndDefaultParameterValue.kt @@ -1 +1 @@ -public class C @jvmOverloads constructor(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/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java index f8fa544604a..a12a7e4c0ad 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java @@ -102,6 +102,12 @@ public class JavaToKotlinConverterForWebDemoTestGenerated extends AbstractJavaTo String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/annotations/jetbrainsNullable.java"); doTest(fileName); } + + @TestMetadata("primaryConstructorAnnotation.java") + public void testPrimaryConstructorAnnotation() throws Exception { + String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/annotations/primaryConstructorAnnotation.java"); + doTest(fileName); + } } @TestMetadata("j2k/testData/fileOrElement/anonymousBlock") diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java index 2446d95b0fc..8c1c28e6f50 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java @@ -102,6 +102,12 @@ public class JavaToKotlinConverterSingleFileTestGenerated extends AbstractJavaTo String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/annotations/jetbrainsNullable.java"); doTest(fileName); } + + @TestMetadata("primaryConstructorAnnotation.java") + public void testPrimaryConstructorAnnotation() throws Exception { + String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/annotations/primaryConstructorAnnotation.java"); + doTest(fileName); + } } @TestMetadata("j2k/testData/fileOrElement/anonymousBlock")