From 0246b828334ec0bc868cf3ab257f897476014646 Mon Sep 17 00:00:00 2001 From: Toshiaki Kameyama Date: Thu, 31 Aug 2017 21:15:15 +0900 Subject: [PATCH] @deprecated with multi-line message in Javadoc converted to @Deprecated("long ugly string") #KT-19644 Fixed (#1253) --- .../org/jetbrains/kotlin/j2k/AnnotationConverter.kt | 11 ++++++++++- .../deprecatedDocTagWithMultiLineMessage.java | 10 ++++++++++ .../deprecatedDocTagWithMultiLineMessage.kt | 7 +++++++ .../JavaToKotlinConverterForWebDemoTestGenerated.java | 6 ++++++ .../JavaToKotlinConverterSingleFileTestGenerated.java | 6 ++++++ 5 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 j2k/testData/fileOrElement/docComments/deprecatedDocTagWithMultiLineMessage.java create mode 100644 j2k/testData/fileOrElement/docComments/deprecatedDocTagWithMultiLineMessage.kt diff --git a/j2k/src/org/jetbrains/kotlin/j2k/AnnotationConverter.kt b/j2k/src/org/jetbrains/kotlin/j2k/AnnotationConverter.kt index 1e9cfec8269..9990db07f56 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/AnnotationConverter.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/AnnotationConverter.kt @@ -77,7 +77,16 @@ class AnnotationConverter(private val converter: Converter) { private fun convertDeprecatedJavadocTag(element: PsiDocCommentOwner, target: AnnotationUseTarget?): Annotation? { val deprecatedTag = element.docComment?.findTagByName("deprecated") ?: return null val deferredExpression = converter.deferredElement { - LiteralExpression("\"" + StringUtil.escapeStringCharacters(deprecatedTag.content()) + "\"").assignNoPrototype() + val text = buildString { + val split = deprecatedTag.content().split("\n") + val length = split.size + split.forEachIndexed { index, s -> + if (index > 0) append("+\n") + val content = if (index == length - 1) s else s + "\n" + append("\"" + StringUtil.escapeStringCharacters(content) + "\"") + } + } + LiteralExpression(text).assignNoPrototype() } val identifier = Identifier("Deprecated").assignPrototype(deprecatedTag.nameElement) return Annotation(identifier, diff --git a/j2k/testData/fileOrElement/docComments/deprecatedDocTagWithMultiLineMessage.java b/j2k/testData/fileOrElement/docComments/deprecatedDocTagWithMultiLineMessage.java new file mode 100644 index 00000000000..91edd1eb93d --- /dev/null +++ b/j2k/testData/fileOrElement/docComments/deprecatedDocTagWithMultiLineMessage.java @@ -0,0 +1,10 @@ +/** + * @deprecated Ph'nglui mglw'nafh + * Cthulhu R'lyeh wgah'nagl fhtagn. + * 'In His House at R'lyeh + * Dead Cthulhu waits dreaming, + * yet He shall rise and His kingdom + * shall cover the Earth.' + */ +public class TestDeprecatedInJavadocWithMultilineMessage { +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/docComments/deprecatedDocTagWithMultiLineMessage.kt b/j2k/testData/fileOrElement/docComments/deprecatedDocTagWithMultiLineMessage.kt new file mode 100644 index 00000000000..44c6c6832b9 --- /dev/null +++ b/j2k/testData/fileOrElement/docComments/deprecatedDocTagWithMultiLineMessage.kt @@ -0,0 +1,7 @@ +@Deprecated("Ph'nglui mglw'nafh\n" + + " Cthulhu R'lyeh wgah'nagl fhtagn.\n" + + " 'In His House at R'lyeh\n" + + " Dead Cthulhu waits dreaming,\n" + + " yet He shall rise and His kingdom\n" + + " shall cover the Earth.'") +class TestDeprecatedInJavadocWithMultilineMessage \ No newline at end of file diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java index 5f71c936a44..2b80a7c9ba3 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java @@ -1796,6 +1796,12 @@ public class JavaToKotlinConverterForWebDemoTestGenerated extends AbstractJavaTo doTest(fileName); } + @TestMetadata("deprecatedDocTagWithMultiLineMessage.java") + public void testDeprecatedDocTagWithMultiLineMessage() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/docComments/deprecatedDocTagWithMultiLineMessage.java"); + doTest(fileName); + } + @TestMetadata("docCommentWithParamTag.java") public void testDocCommentWithParamTag() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/docComments/docCommentWithParamTag.java"); diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java index 6cdfdda2d3e..38718ed5ff2 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java @@ -1796,6 +1796,12 @@ public class JavaToKotlinConverterSingleFileTestGenerated extends AbstractJavaTo doTest(fileName); } + @TestMetadata("deprecatedDocTagWithMultiLineMessage.java") + public void testDeprecatedDocTagWithMultiLineMessage() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/docComments/deprecatedDocTagWithMultiLineMessage.java"); + doTest(fileName); + } + @TestMetadata("docCommentWithParamTag.java") public void testDocCommentWithParamTag() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/docComments/docCommentWithParamTag.java");