merge some more expressions; correctly generate javaClass() call

This commit is contained in:
Dmitry Jemerov
2012-06-01 17:39:34 +02:00
committed by Pavel V. Talanov
parent 055cad793c
commit d0b46704d3
13 changed files with 46 additions and 61 deletions
+7
View File
@@ -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()
+30 -3
View File
@@ -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("@")
}
@@ -1,6 +0,0 @@
package org.jetbrains.jet.j2k.ast
public open class ParenthesizedExpression(val expression : Expression) : Expression() {
public override fun toKotlin() = "(" + expression.toKotlin() + ")"
}
@@ -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
}
@@ -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()
}
@@ -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()
}
}
@@ -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()
}
}
@@ -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() + ")"
}
+3 -3
View File
@@ -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()
}
@@ -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 {
@@ -1 +1 @@
getJavaClass<Any?>
javaClass<Any>()
@@ -1 +1 @@
getJavaClass<String?>
javaClass<String>()
@@ -1 +1 @@
var constrArgTypes : Array<Class<*>?>? = array<Class<*>?>(getJavaClass<Array<String?>?>, getJavaClass<String?>)
var constrArgTypes : Array<Class<*>?>? = array<Class<*>?>(javaClass<Array<String?>>(), javaClass<String>())