From 21b280f4131ca3d1d00b78417e590fc9bb3261e9 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 1 Jun 2012 15:54:13 +0200 Subject: [PATCH] convert .length on arrays to .size --- .../jet/j2k/visitors/ExpressionVisitor.kt | 18 +++++++++++------- tests/testData/ast/issues/file/arrayLength.jav | 5 +++++ tests/testData/ast/issues/file/arrayLength.kt | 7 +++++++ 3 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 tests/testData/ast/issues/file/arrayLength.jav create mode 100644 tests/testData/ast/issues/file/arrayLength.kt diff --git a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt index 6ed75ea0b45..04a9934fcda 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt +++ b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt @@ -219,17 +219,21 @@ public open class ExpressionVisitor(converter: Converter): StatementVisitor(conv val isThis: Boolean = isThisExpression(expression!!) val isNullable: Boolean = getConverter().typeToType(expression?.getType()).nullable val className: String = getClassNameWithConstructor(expression!!) - var identifier: Expression = Identifier(expression?.getReferenceName()!!, isNullable) + val referencedName = expression?.getReferenceName()!! + var identifier: Expression = Identifier(referencedName, isNullable) val __: String = "__" + val qualifier = expression?.getQualifierExpression() if (hasReceiver){ - identifier = CallChainExpression(Identifier(__, false), Identifier(expression?.getReferenceName()!!, isNullable)) + identifier = CallChainExpression(Identifier(__, false), Identifier(referencedName, isNullable)) + } + else if (insideSecondaryConstructor && isThis) { + identifier = Identifier("val __ = " + className) + } + else if (qualifier != null && qualifier.getType() is PsiArrayType && referencedName == "length") { + identifier = Identifier("size", isNullable) } - else - if (insideSecondaryConstructor && isThis) { - identifier = Identifier("val __ = " + className) - } - myResult = CallChainExpression(getConverter().expressionToExpression(expression?.getQualifierExpression()), identifier) + myResult = CallChainExpression(getConverter().expressionToExpression(qualifier), identifier) } public override fun visitSuperExpression(expression: PsiSuperExpression?): Unit { diff --git a/tests/testData/ast/issues/file/arrayLength.jav b/tests/testData/ast/issues/file/arrayLength.jav new file mode 100644 index 00000000000..781dd730887 --- /dev/null +++ b/tests/testData/ast/issues/file/arrayLength.jav @@ -0,0 +1,5 @@ +class Test { + public static int foo(String[] args) { + return args.length; + } +} diff --git a/tests/testData/ast/issues/file/arrayLength.kt b/tests/testData/ast/issues/file/arrayLength.kt new file mode 100644 index 00000000000..3d3f227c751 --- /dev/null +++ b/tests/testData/ast/issues/file/arrayLength.kt @@ -0,0 +1,7 @@ +open class Test() { +class object { +public open fun foo(args : Array?) : Int { +return args?.size!! +} +} +} \ No newline at end of file