From 5be80be74d0cd2bab602b7b3ec3bb632742802e1 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Fri, 10 Jan 2020 12:05:07 +0300 Subject: [PATCH] New J2K: fix converting multiline comment with /* inside #KT-18001 fixed #KT-35081 fixed --- .../kotlin/nj2k/printing/JKCommentPrinter.kt | 7 ++++--- .../beginningOfCommentInsideMultilineOne.java | 16 ++++++++++++++++ .../beginningOfCommentInsideMultilineOne.kt | 14 ++++++++++++++ ...ToKotlinConverterSingleFileTestGenerated.java | 5 +++++ 4 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 nj2k/testData/newJ2k/comments/beginningOfCommentInsideMultilineOne.java create mode 100644 nj2k/testData/newJ2k/comments/beginningOfCommentInsideMultilineOne.kt diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/printing/JKCommentPrinter.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/printing/JKCommentPrinter.kt index 44ad47a702a..5bc45c1278b 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/printing/JKCommentPrinter.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/printing/JKCommentPrinter.kt @@ -21,9 +21,10 @@ internal class JKCommentPrinter(val printer: JKPrinter) { if (this !in printedTokens) { printedTokens += this - // hack till #KT-16845 is fixed - if (!isSingleline && text.endsWith("/*/")) { - text.replaceRange(text.length - "/*/".length, text.length, "/ */") + // hack till #KT-16845, #KT-23333 are fixed + if (!isSingleline && text.lastIndexOf("/*") != text.indexOf("/*")) { + text.replace("/*", "/ *") + .replaceFirst("/ *", "/*") } else text } else null diff --git a/nj2k/testData/newJ2k/comments/beginningOfCommentInsideMultilineOne.java b/nj2k/testData/newJ2k/comments/beginningOfCommentInsideMultilineOne.java new file mode 100644 index 00000000000..9cad8490287 --- /dev/null +++ b/nj2k/testData/newJ2k/comments/beginningOfCommentInsideMultilineOne.java @@ -0,0 +1,16 @@ +/** + /* comment + */ +class A + + +/** + /** / B + */ +class B + + +/** + /** / C + /*/ +class C \ No newline at end of file diff --git a/nj2k/testData/newJ2k/comments/beginningOfCommentInsideMultilineOne.kt b/nj2k/testData/newJ2k/comments/beginningOfCommentInsideMultilineOne.kt new file mode 100644 index 00000000000..a0387ff49df --- /dev/null +++ b/nj2k/testData/newJ2k/comments/beginningOfCommentInsideMultilineOne.kt @@ -0,0 +1,14 @@ +/** + * / * comment + */ +internal class A + +/** + * / ** / B + */ +internal class B + +/** + * / ** / C + * / */ +internal class C \ No newline at end of file diff --git a/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterSingleFileTestGenerated.java b/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterSingleFileTestGenerated.java index 8130f1ffd47..561846e2c61 100644 --- a/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterSingleFileTestGenerated.java +++ b/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterSingleFileTestGenerated.java @@ -1030,6 +1030,11 @@ public class NewJavaToKotlinConverterSingleFileTestGenerated extends AbstractNew KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("nj2k/testData/newJ2k/comments"), Pattern.compile("^([^\\.]+)\\.java$"), null, true); } + @TestMetadata("beginningOfCommentInsideMultilineOne.java") + public void testBeginningOfCommentInsideMultilineOne() throws Exception { + runTest("nj2k/testData/newJ2k/comments/beginningOfCommentInsideMultilineOne.java"); + } + @TestMetadata("commentInsideCall.java") public void testCommentInsideCall() throws Exception { runTest("nj2k/testData/newJ2k/comments/commentInsideCall.java");