From d0b46704d3828540fdc1c88444b20b303c392fb1 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 1 Jun 2012 17:39:34 +0200 Subject: [PATCH] merge some more expressions; correctly generate javaClass() call --- src/org/jetbrains/jet/j2k/Converter.kt | 7 ++++ src/org/jetbrains/jet/j2k/ast/Expressions.kt | 33 +++++++++++++++++-- .../jet/j2k/ast/ParenthesizedExpression.kt | 6 ---- .../jetbrains/jet/j2k/ast/PostfixOperator.kt | 6 ---- .../jetbrains/jet/j2k/ast/PrefixOperator.kt | 7 ---- .../jetbrains/jet/j2k/ast/SuperExpression.kt | 11 ------- .../jetbrains/jet/j2k/ast/ThisExpression.kt | 10 ------ .../jet/j2k/ast/TypeCastExpression.kt | 7 ---- src/org/jetbrains/jet/j2k/ast/TypeElement.kt | 6 ++-- .../jet/j2k/visitors/ExpressionVisitor.kt | 8 ++--- .../classExpression/expression/objectClass.kt | 2 +- .../classExpression/expression/stringClass.kt | 2 +- .../statement/complexExample.kt | 2 +- 13 files changed, 46 insertions(+), 61 deletions(-) delete mode 100644 src/org/jetbrains/jet/j2k/ast/ParenthesizedExpression.kt delete mode 100644 src/org/jetbrains/jet/j2k/ast/PostfixOperator.kt delete mode 100644 src/org/jetbrains/jet/j2k/ast/PrefixOperator.kt delete mode 100644 src/org/jetbrains/jet/j2k/ast/SuperExpression.kt delete mode 100644 src/org/jetbrains/jet/j2k/ast/ThisExpression.kt delete mode 100644 src/org/jetbrains/jet/j2k/ast/TypeCastExpression.kt diff --git a/src/org/jetbrains/jet/j2k/Converter.kt b/src/org/jetbrains/jet/j2k/Converter.kt index 579c673d99b..4a41f02cf2c 100644 --- a/src/org/jetbrains/jet/j2k/Converter.kt +++ b/src/org/jetbrains/jet/j2k/Converter.kt @@ -377,6 +377,13 @@ public open class Converter() { return result } + public open fun typeElementToTypeElement(element: PsiTypeElement?): TypeElement { + return TypeElement(if (element == null) + EmptyType() + else + typeToType(element.getType())) + } + public open fun typeToType(`type`: PsiType?): Type { if (`type` == null) return EmptyType() diff --git a/src/org/jetbrains/jet/j2k/ast/Expressions.kt b/src/org/jetbrains/jet/j2k/ast/Expressions.kt index b3e597c5e5e..6af4dd2eb97 100644 --- a/src/org/jetbrains/jet/j2k/ast/Expressions.kt +++ b/src/org/jetbrains/jet/j2k/ast/Expressions.kt @@ -1,5 +1,7 @@ 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() { override fun toKotlin() = expression.toKotlin() + "[" + index.toKotlin() + "]" override fun isNullable() = expression.isNullable() @@ -17,14 +19,39 @@ public open class BinaryExpression(val left: Expression, val right: Expression, override fun toKotlin() = left.toKotlin() + " " + op + " " + right.toKotlin() } -public open class ClassObjectAccessExpression(val typeElement: Element): Expression() { - override fun toKotlin() = "getJavaClass<" + typeElement.toKotlin() + ">" +public open class ClassObjectAccessExpression(val typeElement: TypeElement): Expression() { + override fun toKotlin() = "javaClass<" + typeElement.toKotlinNotNull() + ">()" } public open class IsOperator(val expression: Expression, val typeElement: TypeElement): Expression() { - override fun toKotlin() = expression.toKotlin() + " is " + typeElement.`type`.convertedToNotNull().toKotlin() + override fun toKotlin() = expression.toKotlin() + " is " + typeElement.toKotlinNotNull() +} + +public open class TypeCastExpression(val `type` : Type, val expression : Expression) : Expression() { + override fun toKotlin() = "(" + expression.toKotlin() + " as " + `type`.toKotlin() + ")" } public open class LiteralExpression(val literalText: String): Expression() { override fun toKotlin() = literalText } + +public open class ParenthesizedExpression(val expression : Expression) : Expression() { + override fun toKotlin() = "(" + expression.toKotlin() + ")" +} + +public open class PrefixOperator(val op: String, val expression: Expression): Expression() { + override fun toKotlin() = op + expression.toKotlin() + override fun isNullable() = expression.isNullable() +} + +public open class PostfixOperator(val op: String, val expression: Expression): Expression() { + override fun toKotlin() = expression.toKotlin() + op +} + +public open class ThisExpression(val identifier: Identifier) : Expression() { + override fun toKotlin() = "this" + identifier.withPrefix("@") +} + +public open class SuperExpression(val identifier : Identifier) : Expression() { + override fun toKotlin() = "super" + identifier.withPrefix("@") +} diff --git a/src/org/jetbrains/jet/j2k/ast/ParenthesizedExpression.kt b/src/org/jetbrains/jet/j2k/ast/ParenthesizedExpression.kt deleted file mode 100644 index 5dd40be1a53..00000000000 --- a/src/org/jetbrains/jet/j2k/ast/ParenthesizedExpression.kt +++ /dev/null @@ -1,6 +0,0 @@ -package org.jetbrains.jet.j2k.ast - - -public open class ParenthesizedExpression(val expression : Expression) : Expression() { - public override fun toKotlin() = "(" + expression.toKotlin() + ")" -} diff --git a/src/org/jetbrains/jet/j2k/ast/PostfixOperator.kt b/src/org/jetbrains/jet/j2k/ast/PostfixOperator.kt deleted file mode 100644 index 0e772acdc0f..00000000000 --- a/src/org/jetbrains/jet/j2k/ast/PostfixOperator.kt +++ /dev/null @@ -1,6 +0,0 @@ -package org.jetbrains.jet.j2k.ast - - -public open class PostfixOperator(val op: String, val expression: Expression): Expression() { - public override fun toKotlin(): String = expression.toKotlin() + op -} diff --git a/src/org/jetbrains/jet/j2k/ast/PrefixOperator.kt b/src/org/jetbrains/jet/j2k/ast/PrefixOperator.kt deleted file mode 100644 index d8db37ea52b..00000000000 --- a/src/org/jetbrains/jet/j2k/ast/PrefixOperator.kt +++ /dev/null @@ -1,7 +0,0 @@ -package org.jetbrains.jet.j2k.ast - - -public open class PrefixOperator(val op: String, val expression: Expression): Expression() { - public override fun toKotlin() = op + expression.toKotlin() - public override fun isNullable() = expression.isNullable() -} diff --git a/src/org/jetbrains/jet/j2k/ast/SuperExpression.kt b/src/org/jetbrains/jet/j2k/ast/SuperExpression.kt deleted file mode 100644 index 208bf81fb34..00000000000 --- a/src/org/jetbrains/jet/j2k/ast/SuperExpression.kt +++ /dev/null @@ -1,11 +0,0 @@ -package org.jetbrains.jet.j2k.ast - - -public open class SuperExpression(val identifier : Identifier) : Expression() { - public override fun toKotlin() : String { - if (identifier.isEmpty()) { - return "super" - } - return "super@" + identifier.toKotlin() - } -} diff --git a/src/org/jetbrains/jet/j2k/ast/ThisExpression.kt b/src/org/jetbrains/jet/j2k/ast/ThisExpression.kt deleted file mode 100644 index 84928f4dceb..00000000000 --- a/src/org/jetbrains/jet/j2k/ast/ThisExpression.kt +++ /dev/null @@ -1,10 +0,0 @@ -package org.jetbrains.jet.j2k.ast - -import a.h.id - - -public open class ThisExpression(val identifier: Identifier) : Expression() { - public override fun toKotlin() : String { - return if (identifier.isEmpty()) "this" else "this@" + identifier.toKotlin() - } -} diff --git a/src/org/jetbrains/jet/j2k/ast/TypeCastExpression.kt b/src/org/jetbrains/jet/j2k/ast/TypeCastExpression.kt deleted file mode 100644 index 65672003293..00000000000 --- a/src/org/jetbrains/jet/j2k/ast/TypeCastExpression.kt +++ /dev/null @@ -1,7 +0,0 @@ -package org.jetbrains.jet.j2k.ast - -import org.jetbrains.jet.j2k.ast.types.Type - -public open class TypeCastExpression(val `type` : Type, val expression : Expression) : Expression() { - public override fun toKotlin() = "(" + expression.toKotlin() + " as " + `type`.toKotlin() + ")" -} diff --git a/src/org/jetbrains/jet/j2k/ast/TypeElement.kt b/src/org/jetbrains/jet/j2k/ast/TypeElement.kt index 7a3ce4871e2..f4671c17e77 100644 --- a/src/org/jetbrains/jet/j2k/ast/TypeElement.kt +++ b/src/org/jetbrains/jet/j2k/ast/TypeElement.kt @@ -3,7 +3,7 @@ package org.jetbrains.jet.j2k.ast import org.jetbrains.jet.j2k.ast.types.Type public open class TypeElement(val `type` : Type) : Element() { - public override fun toKotlin() : String { - return `type`.toKotlin() - } + override fun toKotlin() = `type`.toKotlin() + + public fun toKotlinNotNull(): String = `type`.convertedToNotNull().toKotlin() } diff --git a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt index a08265b9ebc..42ad8381358 100644 --- a/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt +++ b/src/org/jetbrains/jet/j2k/visitors/ExpressionVisitor.kt @@ -68,7 +68,7 @@ public open class ExpressionVisitor(converter: Converter): StatementVisitor(conv } public override fun visitClassObjectAccessExpression(expression: PsiClassObjectAccessExpression?): Unit { - myResult = ClassObjectAccessExpression(getConverter().elementToElement(expression?.getOperand())) + myResult = ClassObjectAccessExpression(getConverter().typeElementToTypeElement(expression?.getOperand())) } public override fun visitConditionalExpression(expression: PsiConditionalExpression?): Unit { @@ -89,10 +89,8 @@ public open class ExpressionVisitor(converter: Converter): StatementVisitor(conv public override fun visitInstanceOfExpression(expression: PsiInstanceOfExpression?): Unit { val checkType: PsiTypeElement? = expression?.getCheckType() - myResult = IsOperator(getConverter().expressionToExpression(expression?.getOperand()), TypeElement(if (checkType == null) - EmptyType() - else - myConverter.typeToType(checkType.getType()))) + myResult = IsOperator(getConverter().expressionToExpression(expression?.getOperand()), + myConverter.typeElementToTypeElement(checkType)) } public override fun visitLiteralExpression(expression: PsiLiteralExpression?): Unit { diff --git a/tests/testData/ast/classExpression/expression/objectClass.kt b/tests/testData/ast/classExpression/expression/objectClass.kt index 4674988b0c1..a23b22175d5 100644 --- a/tests/testData/ast/classExpression/expression/objectClass.kt +++ b/tests/testData/ast/classExpression/expression/objectClass.kt @@ -1 +1 @@ -getJavaClass \ No newline at end of file +javaClass() \ No newline at end of file diff --git a/tests/testData/ast/classExpression/expression/stringClass.kt b/tests/testData/ast/classExpression/expression/stringClass.kt index 894282ca52d..49f7ad88685 100644 --- a/tests/testData/ast/classExpression/expression/stringClass.kt +++ b/tests/testData/ast/classExpression/expression/stringClass.kt @@ -1 +1 @@ -getJavaClass \ No newline at end of file +javaClass() \ No newline at end of file diff --git a/tests/testData/ast/classExpression/statement/complexExample.kt b/tests/testData/ast/classExpression/statement/complexExample.kt index d05f082bcc6..40638ad4462 100644 --- a/tests/testData/ast/classExpression/statement/complexExample.kt +++ b/tests/testData/ast/classExpression/statement/complexExample.kt @@ -1 +1 @@ -var constrArgTypes : Array?>? = array?>(getJavaClass?>, getJavaClass) \ No newline at end of file +var constrArgTypes : Array?>? = array?>(javaClass>(), javaClass()) \ No newline at end of file