From a1ac0c2e4b42caa7bd9992bcf22717c32b5b09a6 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Thu, 1 Nov 2018 13:41:39 +0300 Subject: [PATCH] New J2K: Fix for conversion due to using operator tokens --- .../kotlin/j2k/conversions/ForConversion.kt | 31 +++++++++---------- .../org/jetbrains/kotlin/j2k/tree/impl/jk.kt | 5 ++- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ForConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ForConversion.kt index 5db875655e2..6cd375683fa 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ForConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ForConversion.kt @@ -98,17 +98,19 @@ class ForConversion(private val context: ConversionContext) : RecursiveApplicabl val start = loopVar::initializer.detached() val operationType = (loopStatement.updater as? JKExpressionStatement)?.expression?.isVariableIncrementOrDecrement(loopVar) - val reversed = when ((operationType as? JKJavaOperatorImpl)?.token?.psiToken) { - JavaTokenType.PLUSPLUS -> false - JavaTokenType.MINUSMINUS -> true + val reversed = when (operationType?.token?.text) { + "++" -> false + "--" -> true else -> return null } - val inclusive = when ((condition.operator as? JKJavaOperatorImpl)?.token ?: (condition.operator as? JKKtOperatorImpl)?.token) { - JavaTokenType.LT, KtTokens.LT -> if (reversed) return null else false - JavaTokenType.LE, KtTokens.LTEQ -> if (reversed) return null else true - JavaTokenType.GT, KtTokens.GT -> if (reversed) false else return null - JavaTokenType.GE, KtTokens.GTEQ -> if (reversed) true else return null - JavaTokenType.NE, KtTokens.EXCLEQ -> false + val operatorToken = + ((condition.operator as? JKKtOperatorImpl)?.token as? JKKtSingleValueOperatorToken)?.psiToken + val inclusive = when (operatorToken) { + KtTokens.LT -> if (reversed) return null else false + KtTokens.LTEQ -> if (reversed) return null else true + KtTokens.GT -> if (reversed) false else return null + KtTokens.GTEQ -> if (reversed) true else return null + KtTokens.EXCLEQ -> false else -> return null } 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 (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 start.left } else { @@ -242,12 +244,12 @@ class ForConversion(private val context: ConversionContext) : RecursiveApplicabl } private fun toIndicesCall(javaSizeCall: JKQualifiedExpression): JKQualifiedExpression? { - val psiContext = javaSizeCall.psi() ?: return null + val psiContext = javaSizeCall.psi ?: return null val indiciesSymbol = context.symbolProvider.provideDirectSymbol( multiResolveFqName(ClassId.fromString("kotlin/collections/indices"), psiContext).first() ) as JKMultiversePropertySymbol - javaSizeCall.selector = JKFieldAccessExpressionImpl(indiciesSymbol) - return javaSizeCall + val selector = JKFieldAccessExpressionImpl(indiciesSymbol) + 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 return pair.first } - - private inline fun JKElement.psi() = - this.psi as? ElementType } \ No newline at end of file diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt index a4745049b68..0b340052245 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/jk.kt @@ -475,4 +475,7 @@ class JKLabeledStatementImpl(statement: JKStatement, labels: ListJKElement.psi(): Elem? = + (this as? PsiOwner)?.psi as? Elem