J2K: Fix incorrect early detaching of elements in for conversion

This commit is contained in:
Simon Ogorodnik
2020-07-17 23:02:34 +03:00
parent 8c2dd876b5
commit cd0c644654
@@ -118,10 +118,8 @@ class ForConversion(context: NewJ2kConverterContext) : RecursiveApplicableConver
&& !loopVarPsi.hasWriteAccesses(referenceSearcher, loopStatement.condition.psi())
) {
val left = condition.left as? JKFieldAccessExpression ?: return null
val right = condition::right.detached()
if (right.psi<PsiExpression>()?.type in listOf(PsiType.DOUBLE, PsiType.FLOAT, PsiType.CHAR)) return null
if (condition.right.psi<PsiExpression>()?.type in listOf(PsiType.DOUBLE, PsiType.FLOAT, PsiType.CHAR)) return null
if (left.identifier.target != loopVar) return null
val start = loopVar::initializer.detached()
val operationType =
(loopStatement.updaters.singleOrNull() as? JKExpressionStatement)?.expression?.isVariableIncrementOrDecrement(loopVar)
val reversed = when (operationType?.token?.text) {
@@ -139,6 +137,8 @@ class ForConversion(context: NewJ2kConverterContext) : RecursiveApplicableConver
KtTokens.EXCLEQ -> false
else -> return null
}
val start = loopVar::initializer.detached()
val right = condition::right.detached()
val range = forIterationRange(start, right, reversed, inclusive)
val explicitType =
if (context.converter.settings.specifyLocalVariableTypeByDefault)