diff --git a/j2k/src/org/jetbrains/kotlin/j2k/CodeConverter.kt b/j2k/src/org/jetbrains/kotlin/j2k/CodeConverter.kt index 37c5cf3999a..406a9136374 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/CodeConverter.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/CodeConverter.kt @@ -124,8 +124,8 @@ class CodeConverter( if (expectedTypeStr == "float") { text += "f" } - else { - if (!text.contains(".")) { + if (expectedTypeStr == "double") { + if (!text.contains(".") && !text.contains("e", true)) { text += ".0" } } diff --git a/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt b/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt index 9959c9bbb20..2db5a8947aa 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt @@ -283,15 +283,16 @@ class DefaultExpressionConverter : JavaElementVisitor(), ExpressionConverter { if (type != null) { val typeStr = type.canonicalText if (typeStr == "double") { - text = text.replace("D", "").replace("d", "") - if (!text.contains(".")) { - text += ".0" + text = text.replace("d", "", true) + if (!text.contains(".") && !text.contains("e", true)) + text += "." + if (text.endsWith(".")) { + text += "0" } - } if (typeStr == "float") { - text = text.replace("F", "f") + text = text.replace(".f", "f", true).replace("F", "f") } if (typeStr == "long") { diff --git a/j2k/testData/fileOrElement/literalExpression/double.java b/j2k/testData/fileOrElement/literalExpression/double.java index 2836a8d4396..fc8745942ae 100644 --- a/j2k/testData/fileOrElement/literalExpression/double.java +++ b/j2k/testData/fileOrElement/literalExpression/double.java @@ -5,7 +5,10 @@ class A { private double d4 = 1.0d; private double d5 = 1.0D; private double d6 = 1.0F; - private double d7 = Math.sqrt(2) - 1 + private double d7 = Math.sqrt(2) - 1; + private double d8 = 1.; + private double d9 = 1.d; + private double x = 1 / (1. + 0); void foo1(double d){} void foo2(Double d){} @@ -15,7 +18,7 @@ class A { foo1(1f); foo1(1.0); foo2(1.0); - d1 = 1.0 - d2 = 1 + d1 = 1.0; + d2 = 1; } } \ No newline at end of file diff --git a/j2k/testData/fileOrElement/literalExpression/double.kt b/j2k/testData/fileOrElement/literalExpression/double.kt index 9d9de2fe927..083852fdf51 100644 --- a/j2k/testData/fileOrElement/literalExpression/double.kt +++ b/j2k/testData/fileOrElement/literalExpression/double.kt @@ -6,6 +6,9 @@ internal class A { private val d5 = 1.0 private val d6 = 1.0 private val d7 = Math.sqrt(2.0) - 1 + private val d8 = 1.0 + private val d9 = 1.0 + private val x = 1 / (1.0 + 0) fun foo1(d: Double) { } @@ -21,4 +24,4 @@ internal class A { d1 = 1.0 d2 = 1.0 } -} +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/literalExpression/exponentDouble.java b/j2k/testData/fileOrElement/literalExpression/exponentDouble.java new file mode 100644 index 00000000000..3c7253b0491 --- /dev/null +++ b/j2k/testData/fileOrElement/literalExpression/exponentDouble.java @@ -0,0 +1,9 @@ +public class Exponent { + private final double[] doubles = { + 5e5, +5e5, -5e5, 5e+5, 5e-5, + 5E5, +5E5, -5E5, 5E+5, 5E-5, + 2.5e5, +2.5e5, -2.5e5, 2.5e+5, 2.5e-5, + 2.5E5, +2.5E5, -2.5E5, 2.5E+5, 2.5E-5, + 5e5f, 5e5F, 5e5d, 5e5D + }; +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/literalExpression/exponentDouble.kt b/j2k/testData/fileOrElement/literalExpression/exponentDouble.kt new file mode 100644 index 00000000000..c142728d8ac --- /dev/null +++ b/j2k/testData/fileOrElement/literalExpression/exponentDouble.kt @@ -0,0 +1,3 @@ +class Exponent { + private val doubles = doubleArrayOf(5e5, +5e5, -5e5, 5e+5, 5e-5, 5E5, +5E5, -5E5, 5E+5, 5E-5, 2.5e5, +2.5e5, -2.5e5, 2.5e+5, 2.5e-5, 2.5E5, +2.5E5, -2.5E5, 2.5E+5, 2.5E-5, 5e5, 5e5, 5e5, 5e5) +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/literalExpression/exponentFloat.java b/j2k/testData/fileOrElement/literalExpression/exponentFloat.java new file mode 100644 index 00000000000..a2694135e70 --- /dev/null +++ b/j2k/testData/fileOrElement/literalExpression/exponentFloat.java @@ -0,0 +1,9 @@ +public class Exponent { + private final float[] floats = { + 5e5f, +5e5f, -5e5f, 5e+5f, 5e-5f, + 5E5f, +5E5f, -5E5f, 5E+5f, 5E-5f, + 2.5e5f, +2.5e5f, -2.5e5f, 2.5e+5f, 2.5e-5f, + 2.5E5f, +2.5E5f, -2.5E5f, 2.5E+5f, 2.5E-5f, + 5e5f, 5e5F + }; +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/literalExpression/exponentFloat.kt b/j2k/testData/fileOrElement/literalExpression/exponentFloat.kt new file mode 100644 index 00000000000..4962ad5c603 --- /dev/null +++ b/j2k/testData/fileOrElement/literalExpression/exponentFloat.kt @@ -0,0 +1,3 @@ +class Exponent { + private val floats = floatArrayOf(5e5f, +5e5f, -5e5f, 5e+5f, 5e-5f, 5E5f, +5E5f, -5E5f, 5E+5f, 5E-5f, 2.5e5f, +2.5e5f, -2.5e5f, 2.5e+5f, 2.5e-5f, 2.5E5f, +2.5E5f, -2.5E5f, 2.5E+5f, 2.5E-5f, 5e5f, 5e5f) +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/literalExpression/float.java b/j2k/testData/fileOrElement/literalExpression/float.java index 27d18225df3..2b3078249fc 100644 --- a/j2k/testData/fileOrElement/literalExpression/float.java +++ b/j2k/testData/fileOrElement/literalExpression/float.java @@ -7,6 +7,8 @@ class A { private float f6 = -1; private float f7 = -1F; private float f8 = +1; + private float f9 = 1.f; + private float f10 = 1.F; void foo1(float f){} void foo2(Float f){} @@ -18,7 +20,7 @@ class A { foo1(1L); foo1(-1); foo1(-1L); - f1 = 1 - f4 = 1.0f + f1 = 1; + f4 = 1.0f; } } \ No newline at end of file diff --git a/j2k/testData/fileOrElement/literalExpression/float.kt b/j2k/testData/fileOrElement/literalExpression/float.kt index 483698051fa..e52952b98e5 100644 --- a/j2k/testData/fileOrElement/literalExpression/float.kt +++ b/j2k/testData/fileOrElement/literalExpression/float.kt @@ -7,6 +7,8 @@ internal class A { private val f6 = -1f private val f7 = -1f private val f8 = +1f + private val f9 = 1f + private val f10 = 1f fun foo1(f: Float) { } diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java index a3848d16cba..830da8ac157 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java @@ -3196,6 +3196,18 @@ public class JavaToKotlinConverterForWebDemoTestGenerated extends AbstractJavaTo doTest(fileName); } + @TestMetadata("exponentDouble.java") + public void testExponentDouble() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/literalExpression/exponentDouble.java"); + doTest(fileName); + } + + @TestMetadata("exponentFloat.java") + public void testExponentFloat() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/literalExpression/exponentFloat.java"); + doTest(fileName); + } + @TestMetadata("float.java") public void testFloat() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/literalExpression/float.java"); diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java index 744083d62cf..283d15efa01 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java @@ -3196,6 +3196,18 @@ public class JavaToKotlinConverterSingleFileTestGenerated extends AbstractJavaTo doTest(fileName); } + @TestMetadata("exponentDouble.java") + public void testExponentDouble() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/literalExpression/exponentDouble.java"); + doTest(fileName); + } + + @TestMetadata("exponentFloat.java") + public void testExponentFloat() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/literalExpression/exponentFloat.java"); + doTest(fileName); + } + @TestMetadata("float.java") public void testFloat() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("j2k/testData/fileOrElement/literalExpression/float.java");