New J2K: Operators translation.

This commit is contained in:
Dimach
2018-06-08 12:01:28 +03:00
committed by Ilya Kirillov
parent 21ae28025c
commit 39cf373286
4 changed files with 24 additions and 10 deletions
@@ -16,6 +16,8 @@
package org.jetbrains.kotlin.j2k
import com.intellij.psi.JavaTokenType
import com.intellij.psi.tree.IElementType
import org.jetbrains.kotlin.j2k.ast.Nullability
import org.jetbrains.kotlin.j2k.tree.*
import org.jetbrains.kotlin.j2k.tree.impl.JKBodyStub
@@ -37,6 +39,13 @@ class NewCodeBuilder {
JKClass.ClassKind.INTERFACE -> "interface"
}
private fun operatorString(operator: IElementType): String {
return when (operator) {
JavaTokenType.DIV -> "/"
else -> "TODO: $operator"
}
}
inner class Visitor : JKVisitorVoid {
override fun visitTreeElement(treeElement: JKTreeElement) {
printer.print("/* !!! Hit visitElement for element type: ${treeElement::class} !!! */")
@@ -111,7 +120,7 @@ class NewCodeBuilder {
override fun visitBinaryExpression(binaryExpression: JKBinaryExpression) {
binaryExpression.left.accept(this)
printer.printWithNoIndent(" ")
printer.printWithNoIndent(binaryExpression.operator)
printer.printWithNoIndent(operatorString(binaryExpression.operator.token))
printer.printWithNoIndent(" ")
binaryExpression.right.accept(this)
}
@@ -121,13 +130,13 @@ class NewCodeBuilder {
}
override fun visitPrefixExpression(prefixExpression: JKPrefixExpression) {
printer.printWithNoIndent(prefixExpression.operator)
printer.printWithNoIndent(operatorString(prefixExpression.operator.token))
prefixExpression.expression.accept(this)
}
override fun visitPostfixExpression(postfixExpression: JKPostfixExpression) {
postfixExpression.expression.accept(this)
printer.printWithNoIndent(postfixExpression.operator)
printer.printWithNoIndent(operatorString(postfixExpression.operator.token))
}
override fun visitQualifiedExpression(qualifiedExpression: JKQualifiedExpression) {
@@ -66,7 +66,7 @@ class JKJavaModifierImpl(override val type: JKJavaModifier.JavaModifierType) : J
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitJavaModifier(this, data)
}
class JKJavaOperatorImpl private constructor(val token: IElementType) : JKOperator {
class JKJavaOperatorImpl private constructor(override val token: IElementType) : JKOperator {
companion object {
val tokenToOperator = OPERATION_BIT_SET.types.associate {
it to JKJavaOperatorImpl(it)
@@ -16,8 +16,10 @@
package org.jetbrains.kotlin.j2k.tree.impl
import com.intellij.psi.tree.IElementType
import org.jetbrains.kotlin.j2k.tree.*
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
import org.jetbrains.kotlin.lexer.KtTokens
class JKKtPropertyImpl(
modifierList: JKModifierList,
@@ -79,11 +81,11 @@ class JKKtLiteralExpressionImpl(
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtLiteralExpression(this, data)
}
sealed class JKKtOperatorImpl : JKOperator, JKElementBase() {
object PLUS : JKKtOperatorImpl()
object MINUS : JKKtOperatorImpl()
object EQEQ : JKKtOperatorImpl()
object NE : JKKtOperatorImpl()
sealed class JKKtOperatorImpl(override val token: IElementType) : JKOperator, JKElementBase() {
object PLUS : JKKtOperatorImpl(KtTokens.PLUS)
object MINUS : JKKtOperatorImpl(KtTokens.MINUS)
object EQEQ : JKKtOperatorImpl(KtTokens.EQEQ)
object NE : JKKtOperatorImpl(KtTokens.NOT_IS)
}
class JKKtModifierImpl(override val type: JKKtModifier.KtModifierType) : JKKtModifier, JKElementBase() {
@@ -16,11 +16,14 @@
package org.jetbrains.kotlin.j2k.tree
import com.intellij.psi.tree.IElementType
import org.jetbrains.kotlin.j2k.ast.Nullability
import org.jetbrains.kotlin.j2k.tree.impl.JKSymbol
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType
interface JKOperator
interface JKOperator {
val token: IElementType
}
interface JKQualifier