New J2K: Convert tiled prefix operation to inv invocation
This commit is contained in:
committed by
Ilya Kirillov
parent
d09e72656a
commit
6c696f6c60
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.j2k.conversions
|
||||
|
||||
import com.intellij.psi.JavaTokenType
|
||||
import org.jetbrains.kotlin.j2k.*
|
||||
import org.jetbrains.kotlin.j2k.tree.*
|
||||
import org.jetbrains.kotlin.j2k.tree.impl.*
|
||||
@@ -14,20 +15,21 @@ import org.jetbrains.kotlin.lexer.KtTokens
|
||||
class OperatorExpressionConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||
if (element !is JKOperatorExpression) return recurse(element)
|
||||
val operatorToken =
|
||||
(element.operator as? JKJavaOperatorImpl)?.token?.toKtToken() ?: return recurse(element)
|
||||
val operator = element.operator as? JKJavaOperatorImpl ?: return recurse(element)
|
||||
|
||||
return when (element) {
|
||||
is JKBinaryExpression -> {
|
||||
val operatorToken = operator.token.toKtToken()
|
||||
val left = applyToElement(element::left.detached()) as JKExpression
|
||||
val right = applyToElement(element::right.detached()) as JKExpression
|
||||
recurse(convertBinaryExpression(left, right, operatorToken))
|
||||
}
|
||||
is JKPrefixExpression -> {
|
||||
val operand = applyToElement(element::expression.detached()) as JKExpression
|
||||
recurse(kotlinPrefixExpression(operand, operatorToken, context.symbolProvider))
|
||||
recurse(convertPrefixExpression(operand, operator))
|
||||
}
|
||||
is JKPostfixExpression -> {
|
||||
val operatorToken = operator.token.toKtToken()
|
||||
val operand = applyToElement(element::expression.detached()) as JKExpression
|
||||
recurse(kotlinPostfixExpression(operand, operatorToken, context.symbolProvider))
|
||||
}
|
||||
@@ -35,6 +37,25 @@ class OperatorExpressionConversion(private val context: ConversionContext) : Rec
|
||||
} ?: recurse(element)
|
||||
}
|
||||
|
||||
|
||||
private fun convertPrefixExpression(operand: JKExpression, javaOperator: JKJavaOperatorImpl) =
|
||||
convertTildeExpression(operand, javaOperator)
|
||||
?: kotlinPrefixExpression(operand, javaOperator.token.toKtToken(), context.symbolProvider)
|
||||
|
||||
private fun convertTildeExpression(operand: JKExpression, javaOperator: JKJavaOperatorImpl): JKExpression? =
|
||||
if (javaOperator.token.psiToken == JavaTokenType.TILDE) {
|
||||
val invCall =
|
||||
JKKtCallExpressionImpl(
|
||||
context.symbolProvider.provideByFqName("kotlin.Int.inv"),//TODO check if Long
|
||||
JKExpressionListImpl()
|
||||
)
|
||||
JKQualifiedExpressionImpl(
|
||||
JKParenthesizedExpressionImpl(operand),
|
||||
JKKtQualifierImpl.DOT,
|
||||
invCall
|
||||
)
|
||||
} else null
|
||||
|
||||
private fun convertBinaryExpression(left: JKExpression, right: JKExpression, token: JKKtOperatorToken): JKBinaryExpression =
|
||||
convertStringImplicitConcatenation(left, right, token)
|
||||
?: kotlinBinaryExpression(left, right, token, context.symbolProvider)
|
||||
|
||||
@@ -118,6 +118,7 @@ class JKJavaOperatorToken(val psiToken: IElementType) : JKOperatorToken {
|
||||
JavaTokenType.GTGTGTEQ -> "ushr"
|
||||
JavaTokenType.PLUSPLUS -> "++"
|
||||
JavaTokenType.MINUSMINUS -> "--"
|
||||
JavaTokenType.TILDE -> "~"
|
||||
else -> TODO(psiToken.toString())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user