From 1bf84a8187dc14cbe7b70c221417b5665094a1e5 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 1 Jun 2012 19:07:09 +0200 Subject: [PATCH] don't generate !! for array access in assignment lvalue --- src/org/jetbrains/jet/j2k/ast/Expressions.kt | 4 ++-- src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt | 5 ++++- tests/testData/ast/for/statement/forRangeWithLE.kt | 2 +- tests/testData/ast/for/statement/forRangeWithLT.kt | 2 +- tests/testData/ast/for/statement/forWithBlock.kt | 2 +- 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/org/jetbrains/jet/j2k/ast/Expressions.kt b/src/org/jetbrains/jet/j2k/ast/Expressions.kt index a0c6ddf3e12..d3e9a028744 100644 --- a/src/org/jetbrains/jet/j2k/ast/Expressions.kt +++ b/src/org/jetbrains/jet/j2k/ast/Expressions.kt @@ -2,9 +2,9 @@ package org.jetbrains.jet.j2k.ast import org.jetbrains.jet.j2k.ast.types.Type -public open class ArrayAccessExpression(val expression : Expression, val index : Expression) : Expression() { +public open class ArrayAccessExpression(val expression: Expression, val index: Expression, val lvalue: Boolean) : Expression() { override fun toKotlin() = expression.toKotlin() + - (if (expression.isNullable()) "!!" else "") + + (if (!lvalue && expression.isNullable()) "!!" else "") + "[" + index.toKotlin() + "]" } diff --git a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt index 960d3bb1dee..15f66664685 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt +++ b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt @@ -24,8 +24,11 @@ public open class ExpressionVisitor(converter: Converter): StatementVisitor(conv } public override fun visitArrayAccessExpression(expression: PsiArrayAccessExpression?): Unit { + val assignment = PsiTreeUtil.getParentOfType(expression, javaClass()) + val lvalue = assignment != null && expression == assignment.getLExpression(); myResult = ArrayAccessExpression(getConverter().expressionToExpression(expression?.getArrayExpression()), - getConverter().expressionToExpression(expression?.getIndexExpression())) + getConverter().expressionToExpression(expression?.getIndexExpression()), + lvalue) } public override fun visitArrayInitializerExpression(expression: PsiArrayInitializerExpression?): Unit { diff --git a/tests/testData/ast/for/statement/forRangeWithLE.kt b/tests/testData/ast/for/statement/forRangeWithLE.kt index 8f655bde2de..5bd70a50082 100644 --- a/tests/testData/ast/for/statement/forRangeWithLE.kt +++ b/tests/testData/ast/for/statement/forRangeWithLE.kt @@ -1,4 +1,4 @@ var array : IntArray? = IntArray(10) for (i in 0..10) { -array!![i] = i +array[i] = i } \ No newline at end of file diff --git a/tests/testData/ast/for/statement/forRangeWithLT.kt b/tests/testData/ast/for/statement/forRangeWithLT.kt index 8ad4df1b36a..9026bd5ce21 100644 --- a/tests/testData/ast/for/statement/forRangeWithLT.kt +++ b/tests/testData/ast/for/statement/forRangeWithLT.kt @@ -1,4 +1,4 @@ var array : IntArray? = IntArray(10) for (i in 0..10 - 1) { -array!![i] = i +array[i] = i } \ No newline at end of file diff --git a/tests/testData/ast/for/statement/forWithBlock.kt b/tests/testData/ast/for/statement/forWithBlock.kt index 8ad4df1b36a..9026bd5ce21 100644 --- a/tests/testData/ast/for/statement/forWithBlock.kt +++ b/tests/testData/ast/for/statement/forWithBlock.kt @@ -1,4 +1,4 @@ var array : IntArray? = IntArray(10) for (i in 0..10 - 1) { -array!![i] = i +array[i] = i } \ No newline at end of file