Introduce "simplifiable call chain on collection" inspection

Related to KT-12165
So #KT-18274 Fixed
So #KT-17198 Fixed
This commit is contained in:
Mikhail Glukhikh
2017-06-21 19:54:35 +03:00
committed by Mikhail Glukhikh
parent bdb9f00c75
commit 36be1fdaef
35 changed files with 428 additions and 10 deletions
@@ -0,0 +1 @@
org.jetbrains.kotlin.idea.inspections.collections.SimplifiableCallChainInspection
@@ -0,0 +1,4 @@
// WITH_RUNTIME
val nullableList: List<String>? = listOf("1", "")
val x = nullableList?.<caret>filter { it.isNotEmpty() }?.first()
@@ -0,0 +1,4 @@
// WITH_RUNTIME
val nullableList: List<String>? = listOf("1", "")
val x = nullableList?.first { it.isNotEmpty() }
@@ -0,0 +1,4 @@
// PROBLEM: none
// WITH_RUNTIME
val x = listOf("1", "").<caret>filter { it.isNotEmpty() }.first { it[0] == 'A' }
@@ -0,0 +1,4 @@
// PROBLEM: none
// WITH_RUNTIME
val x = listOf('1', 'a', 0.toChar()).<caret>filter { it.toInt() != 0 }.first(Char::isLetter)
@@ -0,0 +1,3 @@
// WITH_RUNTIME
val x = listOf("1", "").<caret>filter(String::isNotEmpty).firstOrNull()
@@ -0,0 +1,3 @@
// WITH_RUNTIME
val x = listOf("1", "").firstOrNull(String::isNotEmpty)
@@ -0,0 +1,3 @@
// WITH_RUNTIME
val x = listOf(1, 2, 3).filter <caret>{ it % 2 != 0 }.isEmpty()
@@ -0,0 +1,3 @@
// WITH_RUNTIME
val x = listOf(1, 2, 3).none { it % 2 != 0 }
@@ -0,0 +1,3 @@
// WITH_RUNTIME
val x = listOf(1, 2, 3).filter <caret>{ it % 2 != 0 }.isNotEmpty()
@@ -0,0 +1,3 @@
// WITH_RUNTIME
val x = listOf(1, 2, 3).any { it % 2 != 0 }
@@ -0,0 +1,3 @@
// WITH_RUNTIME
val x = listOf("1", "").filter <caret>{ element -> element.isNotEmpty() }.last()
@@ -0,0 +1,3 @@
// WITH_RUNTIME
val x = listOf("1", "").last { element -> element.isNotEmpty() }
@@ -0,0 +1,3 @@
// WITH_RUNTIME
val x = "abcdef".fil<caret>ter { it.isDigit() }.isEmpty()
@@ -0,0 +1,3 @@
// WITH_RUNTIME
val x = "abcdef".none { it.isDigit() }
@@ -0,0 +1,3 @@
// WITH_RUNTIME
val x = "5abc".filter { it.isDigit() }.<caret>singleOrNull()
@@ -0,0 +1,3 @@
// WITH_RUNTIME
val x = "5abc".singleOrNull { it.isDigit() }
@@ -0,0 +1,4 @@
// WITH_RUNTIME
val sb = StringBuilder()
val x = listOf(1, 2, 3).map { "$it*$it" }.<caret>joinTo(buffer = sb, prefix = "= ", separator = " + ")
@@ -0,0 +1,4 @@
// WITH_RUNTIME
val sb = StringBuilder()
val x = listOf(1, 2, 3).joinTo(buffer = sb, prefix = "= ", separator = " + ") { "$it*$it" }
@@ -0,0 +1,5 @@
// PROBLEM: none
// WITH_RUNTIME
val sb = StringBuilder()
val x = listOf(1, 2, 3).map { "$it*$it" }.<caret>joinTo(buffer = sb, prefix = "= ", separator = " + ", transform = String::capitalize)
@@ -0,0 +1,5 @@
// PROBLEM: none
// WITH_RUNTIME
val sb = StringBuilder()
val x = listOf(1, 2, 3).map { "$it*$it" }.<caret>joinTo(buffer = sb, prefix = "= ", separator = " + ") { "${it.substring(1)}"}
@@ -0,0 +1,3 @@
// WITH_RUNTIME
val x = listOf(1, 2, 3).map { "$it*$it" }.<caret>joinToString(prefix = "= ", separator = " + ")
@@ -0,0 +1,3 @@
// WITH_RUNTIME
val x = listOf(1, 2, 3).joinToString(prefix = "= ", separator = " + ") { "$it*$it" }
@@ -0,0 +1,3 @@
// WITH_RUNTIME
val x = listOf(1, 2, 3).map(Int::toString).<caret>joinToString(prefix = "= ", separator = " + ")
@@ -0,0 +1,3 @@
// WITH_RUNTIME
val x = listOf(1, 2, 3).joinToString(prefix = "= ", separator = " + ", transform = Int::toString)
@@ -0,0 +1,4 @@
// PROBLEM: none
// WITH_RUNTIME
val x = listOf(1, 2, 3).map(Int::toDouble).<caret>joinToString(prefix = "= ", separator = " + ")
@@ -0,0 +1,3 @@
// WITH_RUNTIME
val x = listOf(1, 0, 2).map { if (it != 0) it else null }.<caret>filterNotNull()
@@ -0,0 +1,3 @@
// WITH_RUNTIME
val x = listOf(1, 0, 2).mapNotNull { if (it != 0) it else null }