New J2K: Fix for conversion due to using operator tokens

This commit is contained in:
Ilya Kirillov
2018-11-01 13:41:39 +03:00
committed by Ilya Kirillov
parent 1851239e7e
commit a1ac0c2e4b
2 changed files with 19 additions and 17 deletions
@@ -98,17 +98,19 @@ class ForConversion(private val context: ConversionContext) : RecursiveApplicabl
val start = loopVar::initializer.detached() val start = loopVar::initializer.detached()
val operationType = val operationType =
(loopStatement.updater as? JKExpressionStatement)?.expression?.isVariableIncrementOrDecrement(loopVar) (loopStatement.updater as? JKExpressionStatement)?.expression?.isVariableIncrementOrDecrement(loopVar)
val reversed = when ((operationType as? JKJavaOperatorImpl)?.token?.psiToken) { val reversed = when (operationType?.token?.text) {
JavaTokenType.PLUSPLUS -> false "++" -> false
JavaTokenType.MINUSMINUS -> true "--" -> true
else -> return null else -> return null
} }
val inclusive = when ((condition.operator as? JKJavaOperatorImpl)?.token ?: (condition.operator as? JKKtOperatorImpl)?.token) { val operatorToken =
JavaTokenType.LT, KtTokens.LT -> if (reversed) return null else false ((condition.operator as? JKKtOperatorImpl)?.token as? JKKtSingleValueOperatorToken)?.psiToken
JavaTokenType.LE, KtTokens.LTEQ -> if (reversed) return null else true val inclusive = when (operatorToken) {
JavaTokenType.GT, KtTokens.GT -> if (reversed) false else return null KtTokens.LT -> if (reversed) return null else false
JavaTokenType.GE, KtTokens.GTEQ -> if (reversed) true else return null KtTokens.LTEQ -> if (reversed) return null else true
JavaTokenType.NE, KtTokens.EXCLEQ -> false KtTokens.GT -> if (reversed) false else return null
KtTokens.GTEQ -> if (reversed) true else return null
KtTokens.EXCLEQ -> false
else -> return null else -> return null
} }
val range = forIterationRange(start, right, reversed, inclusive, loopVarPsi) val range = forIterationRange(start, right, reversed, inclusive, loopVarPsi)
@@ -195,7 +197,7 @@ class ForConversion(private val context: ConversionContext) : RecursiveApplicabl
if ((bound as? JKLiteralExpression)?.literal?.toIntOrNull() != 0) return null if ((bound as? JKLiteralExpression)?.literal?.toIntOrNull() != 0) return null
if (start !is JKBinaryExpression) return null if (start !is JKBinaryExpression) return null
if ((start.operator as? JKKtOperatorImpl)?.token != KtTokens.MINUS) return null if (start.operator.token.text != "-") return null
if ((start.right as? JKLiteralExpression)?.literal?.toIntOrNull() != 1) return null if ((start.right as? JKLiteralExpression)?.literal?.toIntOrNull() != 1) return null
start.left start.left
} else { } else {
@@ -242,12 +244,12 @@ class ForConversion(private val context: ConversionContext) : RecursiveApplicabl
} }
private fun toIndicesCall(javaSizeCall: JKQualifiedExpression): JKQualifiedExpression? { private fun toIndicesCall(javaSizeCall: JKQualifiedExpression): JKQualifiedExpression? {
val psiContext = javaSizeCall.psi<PsiExpression>() ?: return null val psiContext = javaSizeCall.psi ?: return null
val indiciesSymbol = context.symbolProvider.provideDirectSymbol( val indiciesSymbol = context.symbolProvider.provideDirectSymbol(
multiResolveFqName(ClassId.fromString("kotlin/collections/indices"), psiContext).first() multiResolveFqName(ClassId.fromString("kotlin/collections/indices"), psiContext).first()
) as JKMultiversePropertySymbol ) as JKMultiversePropertySymbol
javaSizeCall.selector = JKFieldAccessExpressionImpl(indiciesSymbol) val selector = JKFieldAccessExpressionImpl(indiciesSymbol)
return javaSizeCall return JKQualifiedExpressionImpl(javaSizeCall::receiver.detached(), javaSizeCall.operator, selector)
} }
@@ -260,7 +262,4 @@ class ForConversion(private val context: ConversionContext) : RecursiveApplicabl
if ((pair.second as? JKFieldAccessExpression)?.identifier?.target != variable) return null if ((pair.second as? JKFieldAccessExpression)?.identifier?.target != variable) return null
return pair.first return pair.first
} }
private inline fun <reified ElementType : PsiElement> JKElement.psi() =
this.psi as? ElementType
} }
@@ -476,3 +476,6 @@ class PsiOwnerImpl(override var psi: PsiElement? = null) : PsiOwner
val JKElement.psi: PsiElement? val JKElement.psi: PsiElement?
get() = (this as? PsiOwner)?.psi get() = (this as? PsiOwner)?.psi
fun <Elem : PsiElement>JKElement.psi(): Elem? =
(this as? PsiOwner)?.psi as? Elem