From e1d7c9d42c42600e2a86092d1dd6519fef1a1b6d Mon Sep 17 00:00:00 2001 From: Santeri Hiltunen Date: Thu, 14 Feb 2013 13:30:46 +0200 Subject: [PATCH] Fixes to handling of boxed types Boxed types and primitive types should cooperate properly now with primitive types in all basic cases. Added tests that verify this. --- src/org/jetbrains/jet/j2k/Converter.kt | 5 +++++ .../jet/j2k/visitors/ExpressionVisitor.kt | 2 +- tests/testData/ast/boxedType/file/Boxing.jav | 14 ++++++++++++++ tests/testData/ast/boxedType/file/Boxing.kt | 12 ++++++++++++ tests/testData/ast/file/comp/intNullability.kt | 2 +- tests/testData/ast/issues/file/kt-794-mixed.kt | 2 +- 6 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 tests/testData/ast/boxedType/file/Boxing.jav create mode 100644 tests/testData/ast/boxedType/file/Boxing.kt diff --git a/src/org/jetbrains/jet/j2k/Converter.kt b/src/org/jetbrains/jet/j2k/Converter.kt index 5826f9bfd54..8a2ed61c688 100644 --- a/src/org/jetbrains/jet/j2k/Converter.kt +++ b/src/org/jetbrains/jet/j2k/Converter.kt @@ -496,6 +496,11 @@ public open class Converter() { if (isPrimitiveTypeOrNull && expression.isNullable()) { expression = BangBangExpression(expression) } + else if (expectedType is PsiPrimitiveType && actualType is PsiClassType) { + if (PsiPrimitiveType.getUnboxedType(actualType) == expectedType) { + expression = BangBangExpression(expression) + } + } if (actualType != null) { if (isConversionNeeded(actualType, expectedType) && !(expression is LiteralExpression)) diff --git a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt index 087a182ac84..14d798063da 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt +++ b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt @@ -49,7 +49,7 @@ public open class ExpressionVisitor(converter: Converter): StatementVisitor(conv } val lhs = getConverter().expressionToExpression(expression?.getLExpression()!!) - val rhs = getConverter().expressionToExpression(expression?.getRExpression()!!, expression?.getRExpression()?.getType()) + val rhs = getConverter().expressionToExpression(expression?.getRExpression()!!, expression?.getLExpression()?.getType()) if (!secondOp.isEmpty()) { myResult = AssignmentExpression(lhs, BinaryExpression(lhs, rhs, secondOp), "=") } diff --git a/tests/testData/ast/boxedType/file/Boxing.jav b/tests/testData/ast/boxedType/file/Boxing.jav new file mode 100644 index 00000000000..57648c23044 --- /dev/null +++ b/tests/testData/ast/boxedType/file/Boxing.jav @@ -0,0 +1,14 @@ +import java.util.ArrayList; +import java.util.List; + +class Boxing { + void test() { + Integer i = 0; + Number n = 0.0f; + i = 1; + int j = i; + Integer k = i+2; + i = null; + j = i; + } +} \ No newline at end of file diff --git a/tests/testData/ast/boxedType/file/Boxing.kt b/tests/testData/ast/boxedType/file/Boxing.kt new file mode 100644 index 00000000000..55612e18a7b --- /dev/null +++ b/tests/testData/ast/boxedType/file/Boxing.kt @@ -0,0 +1,12 @@ +import java.util.ArrayList +open class Boxing() { +open fun test() : Unit { +var i : Int? = 0 +var n : Number? = 0.0.toFloat() +i = 1 +var j : Int = i!! +var k : Int? = i!! + 2 +i = null +j = i!! +} +} \ No newline at end of file diff --git a/tests/testData/ast/file/comp/intNullability.kt b/tests/testData/ast/file/comp/intNullability.kt index 891c5720f20..e3e6c4ca889 100644 --- a/tests/testData/ast/file/comp/intNullability.kt +++ b/tests/testData/ast/file/comp/intNullability.kt @@ -4,6 +4,6 @@ open class Test() { open fun test() : Unit { var i : Int? = 10 var j : Int? = 10 -System.out?.println(i + j) +System.out?.println(i!! + j!!) } } \ No newline at end of file diff --git a/tests/testData/ast/issues/file/kt-794-mixed.kt b/tests/testData/ast/issues/file/kt-794-mixed.kt index 4ec128cbf11..769c7a2e2bf 100644 --- a/tests/testData/ast/issues/file/kt-794-mixed.kt +++ b/tests/testData/ast/issues/file/kt-794-mixed.kt @@ -4,6 +4,6 @@ open fun getInteger(i : Int?) : Int? { return i } open fun test() : Unit { -var i : Int = getInteger(10) +var i : Int = getInteger(10)!! } } \ No newline at end of file