From 12603cdd8105e30302618428e9b3f7abe590151a Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 1 Jun 2012 18:29:45 +0200 Subject: [PATCH] casts to a primitive types are coercion methods instead --- .../jetbrains/jet/j2k/visitors/ExpressionVisitor.kt | 13 +++++++++++-- .../typeCastExpression/expression/primitiveType.kt | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt index ae609f1eb29..ea7356eeeb4 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt +++ b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt @@ -269,8 +269,17 @@ public open class ExpressionVisitor(converter: Converter): StatementVisitor(conv public override fun visitTypeCastExpression(expression: PsiTypeCastExpression?): Unit { val castType: PsiTypeElement? = expression?.getCastType() if (castType != null) { - myResult = TypeCastExpression(getConverter().typeToType(castType.getType()), - getConverter().expressionToExpression(expression?.getOperand())) + val operand = expression?.getOperand() + val operandType = operand?.getType() + val typeText = castType.getType().getCanonicalText() + val typeConversion = Converter.PRIMITIVE_TYPE_CONVERSIONS[typeText] + if (operandType is PsiPrimitiveType && typeConversion != null) { + myResult = MethodCallExpression.build(getConverter().expressionToExpression(operand), typeConversion) + } + else { + myResult = TypeCastExpression(getConverter().typeToType(castType.getType()), + getConverter().expressionToExpression(operand)) + } } } diff --git a/tests/testData/ast/typeCastExpression/expression/primitiveType.kt b/tests/testData/ast/typeCastExpression/expression/primitiveType.kt index ad9dd5d2a7b..e312f02e742 100644 --- a/tests/testData/ast/typeCastExpression/expression/primitiveType.kt +++ b/tests/testData/ast/typeCastExpression/expression/primitiveType.kt @@ -1 +1 @@ -(100.00 as Int) \ No newline at end of file +100.00.toInt() \ No newline at end of file