diff --git a/j2k/src/org/jetbrains/jet/j2k/Converter.kt b/j2k/src/org/jetbrains/jet/j2k/Converter.kt index 2feaeb5aa99..62cfeb92dde 100644 --- a/j2k/src/org/jetbrains/jet/j2k/Converter.kt +++ b/j2k/src/org/jetbrains/jet/j2k/Converter.kt @@ -503,7 +503,10 @@ public class Converter private(val project: Project, val settings: ConverterSett PsiModifier.PRIVATE to Modifier.PRIVATE ) - fun convertAnnotations(owner: PsiModifierListOwner): Annotations { + fun convertAnnotations(owner: PsiModifierListOwner): Annotations + = (convertAnnotationsOnly(owner) + convertModifiersToAnnotations(owner)).assignNoPrototype() + + private fun convertAnnotationsOnly(owner: PsiModifierListOwner): Annotations { val modifierList = owner.getModifierList() val annotations = modifierList?.getAnnotations()?.filter { it.getQualifiedName() !in ANNOTATIONS_TO_REMOVE } if (annotations == null || annotations.isEmpty()) return Annotations.Empty @@ -526,6 +529,20 @@ public class Converter private(val project: Project, val settings: ConverterSett return Annotations(list, newLines).assignNoPrototype() } + private fun convertModifiersToAnnotations(owner: PsiModifierListOwner): Annotations { + val list = MODIFIER_TO_ANNOTATION + .filter { owner.hasModifierProperty(it.first) } + .map { Annotation(Identifier(it.second).assignNoPrototype(), listOf(), false).assignNoPrototype() } + return Annotations(list, false).assignNoPrototype() + } + + private val MODIFIER_TO_ANNOTATION = listOf( + PsiModifier.SYNCHRONIZED to "synchronized", + PsiModifier.VOLATILE to "volatile", + PsiModifier.STRICTFP to "strictfp", + PsiModifier.TRANSIENT to "transient" + ) + private fun convertAnnotation(annotation: PsiAnnotation, brackets: Boolean): Annotation? { val qualifiedName = annotation.getQualifiedName() if (qualifiedName == CommonClassNames.JAVA_LANG_DEPRECATED && annotation.getParameterList().getAttributes().isEmpty()) { 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 38abb0f17c6..638620c05f4 100644 --- a/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterTestGenerated.java +++ b/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterTestGenerated.java @@ -1219,6 +1219,11 @@ public class JavaToKotlinConverterTestGenerated extends AbstractJavaToKotlinConv doTest("j2k/tests/testData/ast/field/varWithoutInit.java"); } + @TestMetadata("volatileTransientAndStrictFp.java") + public void testVolatileTransientAndStrictFp() throws Exception { + doTest("j2k/tests/testData/ast/field/volatileTransientAndStrictFp.java"); + } + } @TestMetadata("j2k/tests/testData/ast/for") @@ -1516,6 +1521,11 @@ public class JavaToKotlinConverterTestGenerated extends AbstractJavaToKotlinConv doTest("j2k/tests/testData/ast/function/public.java"); } + @TestMetadata("synchronizedMethod.java") + public void testSynchronizedMethod() throws Exception { + doTest("j2k/tests/testData/ast/function/synchronizedMethod.java"); + } + @TestMetadata("throws.java") public void testThrows() throws Exception { doTest("j2k/tests/testData/ast/function/throws.java"); diff --git a/j2k/tests/testData/ast/field/volatileTransientAndStrictFp.java b/j2k/tests/testData/ast/field/volatileTransientAndStrictFp.java new file mode 100644 index 00000000000..6ec3a8bde7e --- /dev/null +++ b/j2k/tests/testData/ast/field/volatileTransientAndStrictFp.java @@ -0,0 +1,8 @@ +class A { + @Deprecated + volatile int field1 = 0; + + transient int field2 = 1; + + strictfp double field3 = 2; +} \ No newline at end of file diff --git a/j2k/tests/testData/ast/field/volatileTransientAndStrictFp.kt b/j2k/tests/testData/ast/field/volatileTransientAndStrictFp.kt new file mode 100644 index 00000000000..2662a74fa42 --- /dev/null +++ b/j2k/tests/testData/ast/field/volatileTransientAndStrictFp.kt @@ -0,0 +1,9 @@ +class A { + deprecated("") + volatile + var field1 = 0 + + transient var field2 = 1 + + strictfp var field3: Double = 2 +} \ No newline at end of file diff --git a/j2k/tests/testData/ast/function/synchronizedMethod.java b/j2k/tests/testData/ast/function/synchronizedMethod.java new file mode 100644 index 00000000000..acd59b28a06 --- /dev/null +++ b/j2k/tests/testData/ast/function/synchronizedMethod.java @@ -0,0 +1,8 @@ +class A { + synchronized void foo() { + bar(); + } + + void bar() { + } +} \ No newline at end of file diff --git a/j2k/tests/testData/ast/function/synchronizedMethod.kt b/j2k/tests/testData/ast/function/synchronizedMethod.kt new file mode 100644 index 00000000000..465719b4c41 --- /dev/null +++ b/j2k/tests/testData/ast/function/synchronizedMethod.kt @@ -0,0 +1,8 @@ +class A { + synchronized fun foo() { + bar() + } + + fun bar() { + } +} \ No newline at end of file