[kotlin j2k] Fix conversion of escaped dollar sign in string literals
authorAlexey Belkov <alexey.belkov@jetbrains.com>
Wed, 26 Jan 2022 18:35:54 +0000 (21:35 +0300)
committerintellij-monorepo-bot <intellij-monorepo-bot-no-reply@jetbrains.com>
Thu, 27 Jan 2022 09:34:48 +0000 (09:34 +0000)
Note: `LiteralConversion` was erroneously registered twice,
so the dollar sign was escaped twice as well.

^KTIJ-18130 Fixed

GitOrigin-RevId: 154fb4f34194da26cdd947d51c652527835890a5

plugins/kotlin/j2k/new/src/org/jetbrains/kotlin/nj2k/ConversionsRunner.kt
plugins/kotlin/j2k/new/src/org/jetbrains/kotlin/nj2k/conversions/LiteralConversion.kt
plugins/kotlin/j2k/new/tests/testData/newJ2k/literalExpression/dollarInsideString.java
plugins/kotlin/j2k/new/tests/testData/newJ2k/literalExpression/dollarInsideString.kt

index 4247b9253f8fe6a3a37bf449ec8240389205256d..9b1a5d0b1c39acc8f6204683f426f632d321e24b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
 
 package org.jetbrains.kotlin.nj2k
 
@@ -45,7 +45,6 @@ object ConversionsRunner {
         AssertStatementConversion(context),
         SwitchToWhenConversion(context),
         YieldStatementConversion(context),
-        LiteralConversion(context),
         ForConversion(context),
         LabeledStatementConversion(context),
         ArrayOperationsConversion(context),
index 3122a26d9c6617a48e92b2427523199e5ba25791..0391430052e9def3b27c0989df2e3668a7333867 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
 
 package org.jetbrains.kotlin.nj2k.conversions
 
@@ -68,7 +68,7 @@ class LiteralConversion(context: NewJ2kConverterContext) : RecursiveApplicableCo
             if (leadingBackslashes.length % 2 == 0)
                 String.format("%s\\u%04x", leadingBackslashes, Integer.parseInt(matchResult.groupValues[2], 8))
             else matchResult.value
-        }.replace("""(?<!\\)\$([A-Za-z]+|\{)""".toRegex(), "\\\\$0")
+        }.replace("""\$([A-Za-z]+|\{)""".toRegex(), "\\\\$0")
             .replace( "\\f", "\\u000c")
 
 
index 4db952cf11f711b9abd762d20814b2aa22fbca99..cfe19fd0893e7154d728882a655032e4c3f51b26 100644 (file)
@@ -4,7 +4,7 @@ package demo;
 class Test {
   void test() {
     String name = "$$$$";
-    name = name.replaceAll("\\$[0-9]+", "\\$")
+    name = name.replaceAll("\\$[0-9]+", "\\$ \\$a ${a} \\${a}")
 
     char c = '$';
     System.out.println(c);
index 47d1aaa12bab70375e301193dc894bfef22a205f..b039dc2ffd47c1be2ad03ce52eeca44a3f4c0798 100644 (file)
@@ -3,10 +3,10 @@ package demo
 internal class Test {
     fun test() {
         var name = "$$$$"
-        name = name.replace("\\$[0-9]+".toRegex(), "\\$")
+        name = name.replace("\\$[0-9]+".toRegex(), "\\$ \\\$a \${a} \\\${a}")
         val c = '$'
         println(c)
         val C = '$'
         println(C)
     }
-}
\ No newline at end of file
+}