merge some more expressions; correctly generate javaClass() call
This commit is contained in:
committed by
Pavel V. Talanov
parent
055cad793c
commit
d0b46704d3
@@ -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()
|
||||
|
||||
@@ -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,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>())
|
||||
Reference in New Issue
Block a user