From d7762778a2c8b45f8fdca0ab50ca4d7b10faddeb Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Tue, 5 Apr 2016 20:46:42 +0300 Subject: [PATCH] Cannot transform to flatMap if old working variable used in the nested loop --- .../loopToCallChain/sequence/FlatMapTransformation.kt | 6 ++++-- .../loopToCallChain/flatMap_workingVarStillNeeded.kt | 10 ++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 idea/testData/intentions/loopToCallChain/flatMap_workingVarStillNeeded.kt diff --git a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/sequence/FlatMapTransformation.kt b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/sequence/FlatMapTransformation.kt index 80064894c31..7d60b43c67c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/sequence/FlatMapTransformation.kt +++ b/idea/src/org/jetbrains/kotlin/idea/intentions/loopToCallChain/sequence/FlatMapTransformation.kt @@ -64,12 +64,14 @@ class FlatMapTransformation( val iterableType = FuzzyType(builtIns.iterableType, builtIns.iterable.declaredTypeParameters) if (iterableType.checkIsSuperTypeOf(nestedSequenceType) == null) return null + val nestedLoopBody = nestedLoop.body ?: return null + if (state.workingVariable.hasUsages(listOf(nestedLoopBody))) return null // workingVariable is still needed - cannot transform + val newWorkingVariable = nestedLoop.loopParameter ?: return null - val loopBody = nestedLoop.body ?: return null val transformation = FlatMapTransformation(state.workingVariable, transform) val newState = state.copy( innerLoop = nestedLoop, - statements = listOf(loopBody), + statements = listOf(nestedLoopBody), workingVariable = newWorkingVariable ) return SequenceTransformationMatch(transformation, newState) diff --git a/idea/testData/intentions/loopToCallChain/flatMap_workingVarStillNeeded.kt b/idea/testData/intentions/loopToCallChain/flatMap_workingVarStillNeeded.kt new file mode 100644 index 00000000000..0b878edc866 --- /dev/null +++ b/idea/testData/intentions/loopToCallChain/flatMap_workingVarStillNeeded.kt @@ -0,0 +1,10 @@ +// WITH_RUNTIME +// IS_APPLICABLE: false +fun foo(list: List): String? { + for (s in list) { + for (line in s.lines()) { + if (line.isNotBlank() && line.length < s.length / 10) return line + } + } + return null +} \ No newline at end of file