Added test and asserts

This commit is contained in:
Valentin Kipyatkov
2016-08-09 19:26:08 +03:00
parent 8b4f8e8359
commit e5903f90f2
4 changed files with 1062 additions and 0 deletions
@@ -85,6 +85,7 @@ class FilterTransformation(
// we merge filter transformations here instead of FilterTransformation.mergeWithPrevious() because of filterIndexed that won't merge otherwise
var (transformation, currentState) = matchOneTransformation(state) ?: return null
assert(currentState.indexVariable == state.indexVariable) // indexVariable should not change
if (transformation is FilterTransformation) {
while (true) {
@@ -92,6 +93,7 @@ class FilterTransformation(
val (nextTransformation, nextState) = matchOneTransformation(currentState) ?: break
if (nextTransformation !is FilterTransformation) break
assert(nextState.indexVariable == currentState.indexVariable) // indexVariable should not change
val indexVariable = transformation.indexVariable ?: nextTransformation.indexVariable
val mergedCondition = KtPsiFactory(state.outerLoop).createExpressionByPattern(
@@ -0,0 +1,11 @@
// WITH_RUNTIME
// INTENTION_TEXT: "Replace with 'filterIndexed{}.firstOrNull()'"
fun foo(list: List<String>): String? {
var index2 = 0
<caret>for ((index1, s) in list.withIndex()) {
if (s.length > index1) continue
if (s.length < index2++) continue
return s
}
return null
}
@@ -0,0 +1,8 @@
// WITH_RUNTIME
// INTENTION_TEXT: "Replace with 'filterIndexed{}.firstOrNull()'"
fun foo(list: List<String>): String? {
var index2 = 0
return list
.filterIndexed { index1, s -> s.length <= index1 && s.length >= index2++ }
.firstOrNull()
}
File diff suppressed because it is too large Load Diff