diff --git a/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt b/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt index 27d8b6e1e65..f695b4e8c93 100644 --- a/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt +++ b/j2k/src/org/jetbrains/kotlin/j2k/ExpressionConverter.kt @@ -428,11 +428,14 @@ class DefaultExpressionConverter : JavaElementVisitor(), ExpressionConverter { val operandType = operand?.getType() val typeText = castType.getType().getCanonicalText() val typeConversion = PRIMITIVE_TYPE_CONVERSIONS[typeText] + val operandConverted = codeConverter.convertExpression(operand) if (operandType is PsiPrimitiveType && typeConversion != null) { - result = MethodCallExpression.buildNotNull(codeConverter.convertExpression(operand), typeConversion) + result = MethodCallExpression.buildNotNull(operandConverted, typeConversion) } else { - result = TypeCastExpression(typeConverter.convertType(castType.getType()), codeConverter.convertExpression(operand)) + val typeConverted = typeConverter.convertType(castType.getType(), + if (operandConverted.isNullable) Nullability.Nullable else Nullability.NotNull) + result = TypeCastExpression(typeConverted, operandConverted) } } diff --git a/j2k/testData/fileOrElement/typeCastExpression/castNullable.java b/j2k/testData/fileOrElement/typeCastExpression/castNullable.java new file mode 100644 index 00000000000..f05bc13c8c7 --- /dev/null +++ b/j2k/testData/fileOrElement/typeCastExpression/castNullable.java @@ -0,0 +1,12 @@ +class A { + private String foo(Object o, boolean b) { + if (b) return (String) o; + return ""; + } + + void bar() { + if (foo(null, true) == null) { + System.out.println("null"); + } + } +} \ No newline at end of file diff --git a/j2k/testData/fileOrElement/typeCastExpression/castNullable.kt b/j2k/testData/fileOrElement/typeCastExpression/castNullable.kt new file mode 100644 index 00000000000..a67b620c445 --- /dev/null +++ b/j2k/testData/fileOrElement/typeCastExpression/castNullable.kt @@ -0,0 +1,12 @@ +class A { + private fun foo(o: Any?, b: Boolean): String? { + if (b) return o as String? + return "" + } + + fun bar() { + if (foo(null, true) == null) { + println("null") + } + } +} \ 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 617a8f15e03..40193f89d91 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterForWebDemoTestGenerated.java @@ -4180,6 +4180,12 @@ public class JavaToKotlinConverterForWebDemoTestGenerated extends AbstractJavaTo JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("j2k/testData/fileOrElement/typeCastExpression"), Pattern.compile("^(.+)\\.java$"), true); } + @TestMetadata("castNullable.java") + public void testCastNullable() throws Exception { + String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/typeCastExpression/castNullable.java"); + doTest(fileName); + } + @TestMetadata("extendsWildcardCast.java") public void testExtendsWildcardCast() throws Exception { String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/typeCastExpression/extendsWildcardCast.java"); diff --git a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java index 9590d77c8be..5cc160c0b9c 100644 --- a/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java +++ b/j2k/tests/org/jetbrains/kotlin/j2k/JavaToKotlinConverterSingleFileTestGenerated.java @@ -4180,6 +4180,12 @@ public class JavaToKotlinConverterSingleFileTestGenerated extends AbstractJavaTo JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("j2k/testData/fileOrElement/typeCastExpression"), Pattern.compile("^(.+)\\.java$"), true); } + @TestMetadata("castNullable.java") + public void testCastNullable() throws Exception { + String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/typeCastExpression/castNullable.java"); + doTest(fileName); + } + @TestMetadata("extendsWildcardCast.java") public void testExtendsWildcardCast() throws Exception { String fileName = JetTestUtils.navigationMetadata("j2k/testData/fileOrElement/typeCastExpression/extendsWildcardCast.java");