From 30a7c67aaad8bb817d98fea9ae994d5d6fc92142 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Tue, 24 Jun 2014 21:09:29 +0400 Subject: [PATCH] Java to Kotlin converter: fixed crash in converter + more correct auto insertion of !! #KT-851 Fixed --- j2k/src/org/jetbrains/jet/j2k/Converter.kt | 6 +++--- .../jet/j2k/test/JavaToKotlinConverterTestGenerated.java | 5 +++++ j2k/tests/testData/ast/issues/kt-794-mixed.kt | 2 +- j2k/tests/testData/ast/issues/kt-851.java | 9 +++++++++ j2k/tests/testData/ast/issues/kt-851.kt | 9 +++++++++ .../ast/kotlinApiAccess/GlobalGenericFunction.kt | 2 +- j2k/tests/testData/ast/localVariable/autoBangBang.kt | 2 +- 7 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 j2k/tests/testData/ast/issues/kt-851.java create mode 100644 j2k/tests/testData/ast/issues/kt-851.kt diff --git a/j2k/src/org/jetbrains/jet/j2k/Converter.kt b/j2k/src/org/jetbrains/jet/j2k/Converter.kt index b96ed693e3f..3d292ef5964 100644 --- a/j2k/src/org/jetbrains/jet/j2k/Converter.kt +++ b/j2k/src/org/jetbrains/jet/j2k/Converter.kt @@ -569,9 +569,9 @@ public class Converter private(val project: Project, val settings: ConverterSett val actualType = expression.getType() if (actualType == null) return convertedExpression - if (actualType is PsiPrimitiveType && convertedExpression.isNullable || - expectedType is PsiPrimitiveType && actualType is PsiClassType) { - convertedExpression = BangBangExpression(convertedExpression) + if (convertedExpression.isNullable && + (actualType is PsiPrimitiveType || actualType is PsiClassType && expectedType is PsiPrimitiveType)) { + convertedExpression = BangBangExpression(convertedExpression).assignNoPrototype() } if (canConvertType(actualType, expectedType) && convertedExpression !is LiteralExpression) { diff --git a/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterTestGenerated.java b/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterTestGenerated.java index 0cd3fe05716..bc34c2a64ab 100644 --- a/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterTestGenerated.java +++ b/j2k/tests/test/org/jetbrains/jet/j2k/test/JavaToKotlinConverterTestGenerated.java @@ -1672,6 +1672,11 @@ public class JavaToKotlinConverterTestGenerated extends AbstractJavaToKotlinConv doTest("j2k/tests/testData/ast/issues/kt-837.java"); } + @TestMetadata("kt-851.java") + public void testKt_851() throws Exception { + doTest("j2k/tests/testData/ast/issues/kt-851.java"); + } + @TestMetadata("kt-852.java") public void testKt_852() throws Exception { doTest("j2k/tests/testData/ast/issues/kt-852.java"); diff --git a/j2k/tests/testData/ast/issues/kt-794-mixed.kt b/j2k/tests/testData/ast/issues/kt-794-mixed.kt index 50b165d27f0..b40935b89ad 100644 --- a/j2k/tests/testData/ast/issues/kt-794-mixed.kt +++ b/j2k/tests/testData/ast/issues/kt-794-mixed.kt @@ -6,6 +6,6 @@ class Test() { } fun test() { - val i = getInteger(10)!! + val i = getInteger(10) } } \ No newline at end of file diff --git a/j2k/tests/testData/ast/issues/kt-851.java b/j2k/tests/testData/ast/issues/kt-851.java new file mode 100644 index 00000000000..340371298af --- /dev/null +++ b/j2k/tests/testData/ast/issues/kt-851.java @@ -0,0 +1,9 @@ +//file +class Test { + void putInt(int i) {} + + void test() { + Byte b = 10; + putInt(b); + } +} \ No newline at end of file diff --git a/j2k/tests/testData/ast/issues/kt-851.kt b/j2k/tests/testData/ast/issues/kt-851.kt new file mode 100644 index 00000000000..200c33442d1 --- /dev/null +++ b/j2k/tests/testData/ast/issues/kt-851.kt @@ -0,0 +1,9 @@ +class Test() { + fun putInt(i: Int) { + } + + fun test() { + val b = 10 + putInt(b.toInt()) + } +} \ No newline at end of file diff --git a/j2k/tests/testData/ast/kotlinApiAccess/GlobalGenericFunction.kt b/j2k/tests/testData/ast/kotlinApiAccess/GlobalGenericFunction.kt index 1962cd451ea..da4f2b3f3dd 100644 --- a/j2k/tests/testData/ast/kotlinApiAccess/GlobalGenericFunction.kt +++ b/j2k/tests/testData/ast/kotlinApiAccess/GlobalGenericFunction.kt @@ -2,6 +2,6 @@ import kotlinApi.* class C() { fun foo() { - val v = globalGenericFunction(1)!! + val v = globalGenericFunction(1) } } \ No newline at end of file diff --git a/j2k/tests/testData/ast/localVariable/autoBangBang.kt b/j2k/tests/testData/ast/localVariable/autoBangBang.kt index 0a68789db6f..b1ea23613e5 100644 --- a/j2k/tests/testData/ast/localVariable/autoBangBang.kt +++ b/j2k/tests/testData/ast/localVariable/autoBangBang.kt @@ -1,4 +1,4 @@ fun foo(i: Int) { - var i1 = i!! + var i1 = i i1++ } \ No newline at end of file