New J2K: Fix for conversion due to using operator tokens
This commit is contained in:
committed by
Ilya Kirillov
parent
1851239e7e
commit
a1ac0c2e4b
@@ -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
|
|
||||||
}
|
}
|
||||||
@@ -475,4 +475,7 @@ class JKLabeledStatementImpl(statement: JKStatement, labels: List<JKNameIdentifi
|
|||||||
class PsiOwnerImpl(override var psi: PsiElement? = null) : PsiOwner
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user