New J2K: Binary expression conversion
This commit is contained in:
@@ -30,6 +30,7 @@ object ConversionsRunner {
|
|||||||
JavaMethodToKotlinFunctionConversion().runConversion(it, context)
|
JavaMethodToKotlinFunctionConversion().runConversion(it, context)
|
||||||
LiteralConversion().runConversion(it, context)
|
LiteralConversion().runConversion(it, context)
|
||||||
ModifiersConversion().runConversion(it, context)
|
ModifiersConversion().runConversion(it, context)
|
||||||
|
BinaryExpressionConverter().runConversion(it, context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,13 +16,12 @@
|
|||||||
|
|
||||||
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
|
||||||
import org.jetbrains.kotlin.j2k.tree.impl.JKClassSymbol
|
import org.jetbrains.kotlin.j2k.tree.impl.JKClassSymbol
|
||||||
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitorVoid
|
import org.jetbrains.kotlin.j2k.tree.visitors.JKVisitorVoid
|
||||||
|
import org.jetbrains.kotlin.lexer.KtSingleValueToken
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.utils.Printer
|
import org.jetbrains.kotlin.utils.Printer
|
||||||
|
|
||||||
@@ -39,11 +38,9 @@ class NewCodeBuilder {
|
|||||||
JKClass.ClassKind.INTERFACE -> "interface"
|
JKClass.ClassKind.INTERFACE -> "interface"
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun operatorString(operator: IElementType): String {
|
private fun operatorString(operator: JKOperator): String {
|
||||||
return when (operator) {
|
return (operator.token as? KtSingleValueToken)?.value ?: "TODO: $operator"
|
||||||
JavaTokenType.DIV -> "/"
|
|
||||||
else -> "TODO: $operator"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
inner class Visitor : JKVisitorVoid {
|
inner class Visitor : JKVisitorVoid {
|
||||||
@@ -120,7 +117,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(operatorString(binaryExpression.operator.token))
|
printer.printWithNoIndent(operatorString(binaryExpression.operator))
|
||||||
printer.printWithNoIndent(" ")
|
printer.printWithNoIndent(" ")
|
||||||
binaryExpression.right.accept(this)
|
binaryExpression.right.accept(this)
|
||||||
}
|
}
|
||||||
@@ -130,13 +127,13 @@ class NewCodeBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun visitPrefixExpression(prefixExpression: JKPrefixExpression) {
|
override fun visitPrefixExpression(prefixExpression: JKPrefixExpression) {
|
||||||
printer.printWithNoIndent(operatorString(prefixExpression.operator.token))
|
printer.printWithNoIndent(operatorString(prefixExpression.operator))
|
||||||
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(operatorString(postfixExpression.operator.token))
|
printer.printWithNoIndent(operatorString(postfixExpression.operator))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitQualifiedExpression(qualifiedExpression: JKQualifiedExpression) {
|
override fun visitQualifiedExpression(qualifiedExpression: JKQualifiedExpression) {
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.j2k.conversions
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.j2k.tree.JKBinaryExpression
|
||||||
|
import org.jetbrains.kotlin.j2k.tree.JKTreeElement
|
||||||
|
import org.jetbrains.kotlin.j2k.tree.impl.JKKtOperatorImpl
|
||||||
|
|
||||||
|
|
||||||
|
class BinaryExpressionConverter : RecursiveApplicableConversionBase() {
|
||||||
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
|
return if (element is JKBinaryExpression) element.also {
|
||||||
|
element.operator = JKKtOperatorImpl.javaToKotlinOperator[element.operator] ?: element.operator
|
||||||
|
} else recurse(element)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.j2k.tree.impl
|
package org.jetbrains.kotlin.j2k.tree.impl
|
||||||
|
|
||||||
|
import com.intellij.psi.JavaTokenType
|
||||||
import com.intellij.psi.tree.IElementType
|
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
|
||||||
@@ -81,11 +82,24 @@ 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(override val token: IElementType) : JKOperator, JKElementBase() {
|
class JKKtOperatorImpl private constructor(override val token: IElementType) : JKOperator, JKElementBase() {
|
||||||
object PLUS : JKKtOperatorImpl(KtTokens.PLUS)
|
companion object {
|
||||||
object MINUS : JKKtOperatorImpl(KtTokens.MINUS)
|
val tokenToOperator = KtTokens.OPERATIONS.types.associate {
|
||||||
object EQEQ : JKKtOperatorImpl(KtTokens.EQEQ)
|
it to JKKtOperatorImpl(it)
|
||||||
object NE : JKKtOperatorImpl(KtTokens.NOT_IS)
|
}
|
||||||
|
|
||||||
|
val javaToKotlinOperator = mutableMapOf<JKOperator, JKOperator>()
|
||||||
|
|
||||||
|
init {
|
||||||
|
javaToKotlinOperator.apply {
|
||||||
|
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.DIV]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.DIV]!!
|
||||||
|
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.MINUS]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.MINUS]!!
|
||||||
|
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.ANDAND]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.ANDAND]!!
|
||||||
|
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.OROR]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.OROR]!!
|
||||||
|
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.PLUS]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.PLUS]!!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKKtModifierImpl(override val type: JKKtModifier.KtModifierType) : JKKtModifier, JKElementBase() {
|
class JKKtModifierImpl(override val type: JKKtModifier.KtModifierType) : JKKtModifier, JKElementBase() {
|
||||||
|
|||||||
Reference in New Issue
Block a user