From 2c99aac5a9fc2392996c88aed4196529684b9872 Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Wed, 12 Oct 2016 12:50:35 +0300 Subject: [PATCH] Post-review fixes, added support for octal escaping definition for char --- j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt | 7 ++++--- .../fileOrElement/literalExpression/charOctal.java | 7 +++++++ j2k/testData/fileOrElement/literalExpression/charOctal.kt | 7 +++++++ .../j2k/JavaToKotlinConverterForWebDemoTestGenerated.java | 6 ++++++ .../j2k/JavaToKotlinConverterSingleFileTestGenerated.java | 6 ++++++ 5 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 j2k/testData/fileOrElement/literalExpression/charOctal.java create mode 100644 j2k/testData/fileOrElement/literalExpression/charOctal.kt diff --git a/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt b/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt index 4b95dd6c5a5..9b2e0d32a3e 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt @@ -312,11 +312,12 @@ class DefaultExpressionConverter : JavaElementVisitor(), ExpressionConverter { val toIntIsNeeded = value != null && value.toString().toInt() < 0 && !isLongField(expression.parent) text = if (value != null && !isHexLiteral(text)) value.toString() else text + (if (toIntIsNeeded) ".toInt()" else "") } + if (typeStr == "java.lang.String" || typeStr == "char") + text = text.replace("\\\\([0-3]?[0-7]{1,2})".toRegex()) { + String.format("\\u%04x", Integer.parseInt(it.groupValues[1], 8)) + } if (typeStr == "java.lang.String") { - text = text.replace("\\\\([0-3]?[0-7]{1,2})".toRegex(), { - String.format("\\u%04x", Integer.parseInt(it.groupValues[1], 8)) - }) text = text.replace("\\$([A-Za-z]+|\\{)".toRegex(), "\\\\$0") } } diff --git a/j2k/testData/fileOrElement/literalExpression/charOctal.java b/j2k/testData/fileOrElement/literalExpression/charOctal.java new file mode 100644 index 00000000000..8eceda3a975 --- /dev/null +++ b/j2k/testData/fileOrElement/literalExpression/charOctal.java @@ -0,0 +1,7 @@ +public class A { + public char a = '\77'; + public char b = '\111'; + public char c = '\377'; + public char d = '\000'; + public char f = '\0'; +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/literalExpression/charOctal.kt b/j2k/testData/fileOrElement/literalExpression/charOctal.kt new file mode 100644 index 00000000000..193a31d6298 --- /dev/null +++ b/j2k/testData/fileOrElement/literalExpression/charOctal.kt @@ -0,0 +1,7 @@ +class A { + var a = '\u003f' + var b = '\u0049' + var c = '\u00ff' + var d = '\u0000' + var f = '\u0000' +} \ 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 7a03a2ec90a..1465f6797e4 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java @@ -3178,6 +3178,12 @@ public class JavaToKotlinConverterForWebDemoTestGenerated extends AbstractJavaTo doTest(fileName); } + @TestMetadata("charOctal.java") + public void testCharOctal() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/literalExpression/charOctal.java"); + doTest(fileName); + } + @TestMetadata("dollarInsideString.java") public void testDollarInsideString() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/literalExpression/dollarInsideString.java"); diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java index f3f00ee821f..1e4b1201f21 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java @@ -3178,6 +3178,12 @@ public class JavaToKotlinConverterSingleFileTestGenerated extends AbstractJavaTo doTest(fileName); } + @TestMetadata("charOctal.java") + public void testCharOctal() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/literalExpression/charOctal.java"); + doTest(fileName); + } + @TestMetadata("dollarInsideString.java") public void testDollarInsideString() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/literalExpression/dollarInsideString.java");