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()) && !loopVarPsi.hasWriteAccesses(referenceSearcher, loopStatement.condition.psi())
) { ) {
val left = condition.left as? JKFieldAccessExpression ?: return null val left = condition.left as? JKFieldAccessExpression ?: return null
val right = condition::right.detached() if (condition.right.psi<PsiExpression>()?.type in listOf(PsiType.DOUBLE, PsiType.FLOAT, PsiType.CHAR)) return null
if (right.psi<PsiExpression>()?.type in listOf(PsiType.DOUBLE, PsiType.FLOAT, PsiType.CHAR)) return null
if (left.identifier.target != loopVar) return null if (left.identifier.target != loopVar) return null
val start = loopVar::initializer.detached()
val operationType = val operationType =
(loopStatement.updaters.singleOrNull() as? JKExpressionStatement)?.expression?.isVariableIncrementOrDecrement(loopVar) (loopStatement.updaters.singleOrNull() as? JKExpressionStatement)?.expression?.isVariableIncrementOrDecrement(loopVar)
val reversed = when (operationType?.token?.text) { val reversed = when (operationType?.token?.text) {
@@ -139,6 +137,8 @@ class ForConversion(context: NewJ2kConverterContext) : RecursiveApplicableConver
KtTokens.EXCLEQ -> false KtTokens.EXCLEQ -> false
else -> return null else -> return null
} }
val start = loopVar::initializer.detached()
val right = condition::right.detached()
val range = forIterationRange(start, right, reversed, inclusive) val range = forIterationRange(start, right, reversed, inclusive)
val explicitType = val explicitType =
if (context.converter.settings.specifyLocalVariableTypeByDefault) if (context.converter.settings.specifyLocalVariableTypeByDefault)