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 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.ast.Nullability
import org.jetbrains.kotlin.j2k.tree.* import org.jetbrains.kotlin.j2k.tree.*
import org.jetbrains.kotlin.j2k.tree.impl.JKBodyStub import org.jetbrains.kotlin.j2k.tree.impl.JKBodyStub
@@ -37,6 +39,13 @@ class NewCodeBuilder {
JKClass.ClassKind.INTERFACE -> "interface" JKClass.ClassKind.INTERFACE -> "interface"
} }
private fun operatorString(operator: IElementType): String {
return when (operator) {
JavaTokenType.DIV -> "/"
else -> "TODO: $operator"
}
}
inner class Visitor : JKVisitorVoid { inner class Visitor : JKVisitorVoid {
override fun visitTreeElement(treeElement: JKTreeElement) { override fun visitTreeElement(treeElement: JKTreeElement) {
printer.print("/* !!! Hit visitElement for element type: ${treeElement::class} !!! */") printer.print("/* !!! Hit visitElement for element type: ${treeElement::class} !!! */")
@@ -111,7 +120,7 @@ class NewCodeBuilder {
override fun visitBinaryExpression(binaryExpression: JKBinaryExpression) { override fun visitBinaryExpression(binaryExpression: JKBinaryExpression) {
binaryExpression.left.accept(this) binaryExpression.left.accept(this)
printer.printWithNoIndent(" ") printer.printWithNoIndent(" ")
printer.printWithNoIndent(binaryExpression.operator) printer.printWithNoIndent(operatorString(binaryExpression.operator.token))
printer.printWithNoIndent(" ") printer.printWithNoIndent(" ")
binaryExpression.right.accept(this) binaryExpression.right.accept(this)
} }
@@ -121,13 +130,13 @@ class NewCodeBuilder {
} }
override fun visitPrefixExpression(prefixExpression: JKPrefixExpression) { override fun visitPrefixExpression(prefixExpression: JKPrefixExpression) {
printer.printWithNoIndent(prefixExpression.operator) printer.printWithNoIndent(operatorString(prefixExpression.operator.token))
prefixExpression.expression.accept(this) prefixExpression.expression.accept(this)
} }
override fun visitPostfixExpression(postfixExpression: JKPostfixExpression) { override fun visitPostfixExpression(postfixExpression: JKPostfixExpression) {
postfixExpression.expression.accept(this) postfixExpression.expression.accept(this)
printer.printWithNoIndent(postfixExpression.operator) printer.printWithNoIndent(operatorString(postfixExpression.operator.token))
} }
override fun visitQualifiedExpression(qualifiedExpression: JKQualifiedExpression) { 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) 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 { companion object {
val tokenToOperator = OPERATION_BIT_SET.types.associate { val tokenToOperator = OPERATION_BIT_SET.types.associate {
it to JKJavaOperatorImpl(it) it to JKJavaOperatorImpl(it)
@@ -16,8 +16,10 @@
package org.jetbrains.kotlin.j2k.tree.impl 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.*
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitor
import org.jetbrains.kotlin.lexer.KtTokens
class JKKtPropertyImpl( class JKKtPropertyImpl(
modifierList: JKModifierList, modifierList: JKModifierList,
@@ -79,11 +81,11 @@ class JKKtLiteralExpressionImpl(
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtLiteralExpression(this, data) override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtLiteralExpression(this, data)
} }
sealed class JKKtOperatorImpl : JKOperator, JKElementBase() { sealed class JKKtOperatorImpl(override val token: IElementType) : JKOperator, JKElementBase() {
object PLUS : JKKtOperatorImpl() object PLUS : JKKtOperatorImpl(KtTokens.PLUS)
object MINUS : JKKtOperatorImpl() object MINUS : JKKtOperatorImpl(KtTokens.MINUS)
object EQEQ : JKKtOperatorImpl() object EQEQ : JKKtOperatorImpl(KtTokens.EQEQ)
object NE : JKKtOperatorImpl() object NE : JKKtOperatorImpl(KtTokens.NOT_IS)
} }
class JKKtModifierImpl(override val type: JKKtModifier.KtModifierType) : JKKtModifier, JKElementBase() { class JKKtModifierImpl(override val type: JKKtModifier.KtModifierType) : JKKtModifier, JKElementBase() {
@@ -16,11 +16,14 @@
package org.jetbrains.kotlin.j2k.tree package org.jetbrains.kotlin.j2k.tree
import com.intellij.psi.tree.IElementType
import org.jetbrains.kotlin.j2k.ast.Nullability import org.jetbrains.kotlin.j2k.ast.Nullability
import org.jetbrains.kotlin.j2k.tree.impl.JKSymbol import org.jetbrains.kotlin.j2k.tree.impl.JKSymbol
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType
interface JKOperator interface JKOperator {
val token: IElementType
}
interface JKQualifier interface JKQualifier