diff --git a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ImplicitCastsConversion.kt b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ImplicitCastsConversion.kt index 303087b84f4..cbff0757e06 100644 --- a/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ImplicitCastsConversion.kt +++ b/nj2k/src/org/jetbrains/kotlin/nj2k/conversions/ImplicitCastsConversion.kt @@ -141,7 +141,7 @@ class ImplicitCastsConversion(context: NewJ2kConverterContext) : RecursiveApplic val initialTypeName = expressionTypeAsPrimitive.jvmPrimitiveType.javaKeywordName.capitalize() val conversionFunctionName = "to${toTypeAsPrimitive.jvmPrimitiveType.javaKeywordName.capitalize()}" return JKQualifiedExpression( - copyTreeAndDetach(), + copyTreeAndDetach().parenthesizeIfBinaryExpression(), JKCallExpressionImpl( symbolProvider.provideMethodSymbol("kotlin.$initialTypeName.$conversionFunctionName"), JKArgumentList() diff --git a/nj2k/testData/newJ2k/implicitCasts/arithmeticInFunctionCall.java b/nj2k/testData/newJ2k/implicitCasts/arithmeticInFunctionCall.java new file mode 100644 index 00000000000..c1d65fac84d --- /dev/null +++ b/nj2k/testData/newJ2k/implicitCasts/arithmeticInFunctionCall.java @@ -0,0 +1,11 @@ +class A { + void acceptDouble(double d) {} + void acceptDoubleBoxed(Double d) {} + + public void conversion() { + int a = 10; + float b = 0.7f; + acceptDouble(a * b) + acceptDoubleBoxed(a * b) + } +} \ No newline at end of file diff --git a/nj2k/testData/newJ2k/implicitCasts/arithmeticInFunctionCall.kt b/nj2k/testData/newJ2k/implicitCasts/arithmeticInFunctionCall.kt new file mode 100644 index 00000000000..08d10baf4c2 --- /dev/null +++ b/nj2k/testData/newJ2k/implicitCasts/arithmeticInFunctionCall.kt @@ -0,0 +1,10 @@ +internal class A { + fun acceptDouble(d: Double) {} + fun acceptDoubleBoxed(d: Double?) {} + fun conversion() { + val a = 10 + val b = 0.7f + acceptDouble((a * b).toDouble()) + acceptDoubleBoxed((a * b).toDouble()) + } +} diff --git a/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterSingleFileTestGenerated.java b/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterSingleFileTestGenerated.java index 0a00f2b4e03..34a745cd912 100644 --- a/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterSingleFileTestGenerated.java +++ b/nj2k/tests/org/jetbrains/kotlin/nj2k/NewJavaToKotlinConverterSingleFileTestGenerated.java @@ -2727,6 +2727,24 @@ public class NewJavaToKotlinConverterSingleFileTestGenerated extends AbstractNew } } + @TestMetadata("nj2k/testData/newJ2k/implicitCasts") + @TestDataPath("$PROJECT_ROOT") + @RunWith(JUnit3RunnerWithInners.class) + public static class ImplicitCasts extends AbstractNewJavaToKotlinConverterSingleFileTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); + } + + public void testAllFilesPresentInImplicitCasts() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("nj2k/testData/newJ2k/implicitCasts"), Pattern.compile("^([^\\.]+)\\.java$"), null, true); + } + + @TestMetadata("arithmeticInFunctionCall.java") + public void testArithmeticInFunctionCall() throws Exception { + runTest("nj2k/testData/newJ2k/implicitCasts/arithmeticInFunctionCall.java"); + } + } + @TestMetadata("nj2k/testData/newJ2k/importStatement") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)