New J2K: Support all java operators

This commit is contained in:
Simon Ogorodnik
2018-05-30 21:04:48 +03:00
committed by Ilya Kirillov
parent 6dc8933a93
commit 2c2bd9ab5a
2 changed files with 9 additions and 20 deletions
@@ -93,17 +93,7 @@ class JavaToJKTreeBuilder(var symbolProvider: JKSymbolProvider) {
} }
} }
fun PsiJavaToken.toJK(): JKOperator = when (tokenType) { fun PsiJavaToken.toJK(): JKOperator = JKJavaOperatorImpl.tokenToOperator[tokenType] ?: error("Unsupported token-type: $tokenType")
JavaTokenType.PLUS -> JKJavaOperatorImpl.PLUS
JavaTokenType.MINUS -> JKJavaOperatorImpl.MINUS
JavaTokenType.EQEQ -> JKJavaOperatorImpl.EQEQ
JavaTokenType.NE -> JKJavaOperatorImpl.NE
JavaTokenType.GT -> JKJavaOperatorImpl.GT
JavaTokenType.LT -> JKJavaOperatorImpl.LT
JavaTokenType.GE -> JKJavaOperatorImpl.GE
JavaTokenType.LE -> JKJavaOperatorImpl.LE
else -> throw RuntimeException("Not supported")
}
fun PsiPrefixExpression.toJK(): JKExpression { fun PsiPrefixExpression.toJK(): JKExpression {
return JKPrefixExpressionImpl(operand.toJK(), operationSign.toJK()) return JKPrefixExpressionImpl(operand.toJK(), operationSign.toJK())
@@ -16,6 +16,8 @@
package org.jetbrains.kotlin.j2k.tree.impl package org.jetbrains.kotlin.j2k.tree.impl
import com.intellij.psi.impl.source.tree.ElementType.OPERATION_BIT_SET
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.JKLiteralExpression.LiteralType.* import org.jetbrains.kotlin.j2k.tree.JKLiteralExpression.LiteralType.*
@@ -64,15 +66,12 @@ 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)
} }
sealed class JKJavaOperatorImpl : JKOperator { class JKJavaOperatorImpl private constructor(val token: IElementType) : JKOperator {
object PLUS : JKJavaOperatorImpl() companion object {
object MINUS : JKJavaOperatorImpl() val tokenToOperator = OPERATION_BIT_SET.types.associate {
object EQEQ : JKJavaOperatorImpl() it to JKJavaOperatorImpl(it)
object NE : JKJavaOperatorImpl() }
object GT : JKJavaOperatorImpl() }
object LT : JKJavaOperatorImpl()
object GE : JKJavaOperatorImpl()
object LE : JKJavaOperatorImpl()
} }
sealed class JKJavaQualifierImpl : JKQualifier { sealed class JKJavaQualifierImpl : JKQualifier {