New J2K: More binary expressions support and boolean literals.
This commit is contained in:
@@ -31,7 +31,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)
|
BinaryExpressionConversion().runConversion(it, context)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ 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.impl.modality
|
import org.jetbrains.kotlin.j2k.tree.impl.modality
|
||||||
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,6 @@ class NewCodeBuilder {
|
|||||||
JKClass.ClassKind.INTERFACE -> "interface"
|
JKClass.ClassKind.INTERFACE -> "interface"
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun operatorString(operator: JKOperator): String {
|
|
||||||
return (operator.token as? KtSingleValueToken)?.value ?: "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} !!! */")
|
||||||
@@ -144,23 +138,23 @@ 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))
|
printer.printWithNoIndent(binaryExpression.operator.operatorText)
|
||||||
printer.printWithNoIndent(" ")
|
printer.printWithNoIndent(" ")
|
||||||
binaryExpression.right.accept(this)
|
binaryExpression.right.accept(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitKtLiteralExpression(ktLiteralExpression: JKKtLiteralExpression) {
|
override fun visitLiteralExpression(literalExpression: JKLiteralExpression) {
|
||||||
printer.printWithNoIndent(ktLiteralExpression.literal)
|
printer.printWithNoIndent(literalExpression.literal)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitPrefixExpression(prefixExpression: JKPrefixExpression) {
|
override fun visitPrefixExpression(prefixExpression: JKPrefixExpression) {
|
||||||
printer.printWithNoIndent(operatorString(prefixExpression.operator))
|
printer.printWithNoIndent(prefixExpression.operator.operatorText)
|
||||||
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))
|
printer.printWithNoIndent(postfixExpression.operator.operatorText)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitQualifiedExpression(qualifiedExpression: JKQualifiedExpression) {
|
override fun visitQualifiedExpression(qualifiedExpression: JKQualifiedExpression) {
|
||||||
|
|||||||
+1
-1
@@ -10,7 +10,7 @@ import org.jetbrains.kotlin.j2k.tree.JKTreeElement
|
|||||||
import org.jetbrains.kotlin.j2k.tree.impl.JKKtOperatorImpl
|
import org.jetbrains.kotlin.j2k.tree.impl.JKKtOperatorImpl
|
||||||
|
|
||||||
|
|
||||||
class BinaryExpressionConverter : RecursiveApplicableConversionBase() {
|
class BinaryExpressionConversion : RecursiveApplicableConversionBase() {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
return if (element is JKBinaryExpression) element.also {
|
return if (element is JKBinaryExpression) element.also {
|
||||||
element.operator = JKKtOperatorImpl.javaToKotlinOperator[element.operator] ?: element.operator
|
element.operator = JKKtOperatorImpl.javaToKotlinOperator[element.operator] ?: element.operator
|
||||||
@@ -103,5 +103,4 @@ class LiteralConversion : RecursiveApplicableConversionBase() {
|
|||||||
element.type
|
element.type
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,7 +62,10 @@ 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(override val token: IElementType) : JKOperator {
|
class JKJavaOperatorImpl private constructor(val token: IElementType) : JKOperator {
|
||||||
|
override val operatorText: String
|
||||||
|
get() = TODO(token.toString())
|
||||||
|
|
||||||
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)
|
||||||
|
|||||||
@@ -192,6 +192,8 @@ class JKBooleanLiteral(val value: Boolean) : JKLiteralExpression, JKElementBase(
|
|||||||
get() = value.toString()
|
get() = value.toString()
|
||||||
override val type: LiteralType
|
override val type: LiteralType
|
||||||
get() = BOOLEAN
|
get() = BOOLEAN
|
||||||
|
|
||||||
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitLiteralExpression(this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKLocalVariableImpl(modifierList: JKModifierList, type: JKTypeElement, name: JKNameIdentifier, initializer: JKExpression) :
|
class JKLocalVariableImpl(modifierList: JKModifierList, type: JKTypeElement, name: JKNameIdentifier, initializer: JKExpression) :
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
package org.jetbrains.kotlin.j2k.tree.impl
|
package org.jetbrains.kotlin.j2k.tree.impl
|
||||||
|
|
||||||
import com.intellij.psi.JavaTokenType
|
import com.intellij.psi.JavaTokenType
|
||||||
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.KtSingleValueToken
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
|
|
||||||
class JKKtPropertyImpl(
|
class JKKtPropertyImpl(
|
||||||
@@ -82,10 +82,13 @@ 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)
|
||||||
}
|
}
|
||||||
|
|
||||||
class JKKtOperatorImpl private constructor(override val token: IElementType) : JKOperator, JKElementBase() {
|
class JKKtOperatorImpl private constructor(val token: KtSingleValueToken) : JKOperator, JKElementBase() {
|
||||||
|
override val operatorText: String
|
||||||
|
get() = token.value
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val tokenToOperator = KtTokens.OPERATIONS.types.associate {
|
val tokenToOperator = KtTokens.OPERATIONS.types.filter { it is KtSingleValueToken }.associate {
|
||||||
it to JKKtOperatorImpl(it)
|
it to JKKtOperatorImpl(it as KtSingleValueToken)
|
||||||
}
|
}
|
||||||
|
|
||||||
val javaToKotlinOperator = mutableMapOf<JKOperator, JKOperator>()
|
val javaToKotlinOperator = mutableMapOf<JKOperator, JKOperator>()
|
||||||
@@ -97,13 +100,25 @@ class JKKtOperatorImpl private constructor(override val token: IElementType) : J
|
|||||||
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.ANDAND]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.ANDAND]!!
|
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.ANDAND]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.ANDAND]!!
|
||||||
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.OROR]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.OROR]!!
|
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.OROR]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.OROR]!!
|
||||||
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.PLUS]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.PLUS]!!
|
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.PLUS]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.PLUS]!!
|
||||||
|
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.ASTERISK]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.MUL]!!
|
||||||
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.GT]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.GT]!!
|
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.GT]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.GT]!!
|
||||||
|
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.GE]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.GTEQ]!!
|
||||||
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.LT]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.LT]!!
|
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.LT]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.LT]!!
|
||||||
|
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.LE]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.LTEQ]!!
|
||||||
|
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.PERC]!!] = JKKtOperatorImpl.tokenToOperator[KtTokens.PERC]!!
|
||||||
|
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.AND]!!] = JKKtWordOperatorImpl("and")
|
||||||
|
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.OR]!!] = JKKtWordOperatorImpl("or")
|
||||||
|
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.XOR]!!] = JKKtWordOperatorImpl("xor")
|
||||||
|
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.GTGTGT]!!] = JKKtWordOperatorImpl("ushr")
|
||||||
|
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.GTGT]!!] = JKKtWordOperatorImpl("shr")
|
||||||
|
this[JKJavaOperatorImpl.tokenToOperator[JavaTokenType.LTLT]!!] = JKKtWordOperatorImpl("shl")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class JKKtWordOperatorImpl constructor(override val operatorText: String) : JKOperator, JKElementBase()
|
||||||
|
|
||||||
class JKKtModifierImpl(override val type: JKKtModifier.KtModifierType) : JKKtModifier, JKElementBase() {
|
class JKKtModifierImpl(override val type: JKKtModifier.KtModifierType) : JKKtModifier, JKElementBase() {
|
||||||
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtModifier(this, data)
|
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtModifier(this, data)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,13 +16,12 @@
|
|||||||
|
|
||||||
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
|
val operatorText: String
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JKQualifier
|
interface JKQualifier
|
||||||
|
|||||||
Reference in New Issue
Block a user