diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/collections/ConvertCallChainIntoSequenceInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/collections/ConvertCallChainIntoSequenceInspection.kt index 00ead970b02..16e37772179 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/collections/ConvertCallChainIntoSequenceInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/collections/ConvertCallChainIntoSequenceInspection.kt @@ -173,7 +173,7 @@ private fun KtQualifiedExpression.collectCallExpression(context: BindingContext) .dropWhile { !it.isTransformationOrTermination(context) } .takeWhile { it.isTransformationOrTermination(context) && !it.hasReturn() } .toList() - .dropLastWhile { it.calleeExpression?.text == "groupingBy" } + .dropLastWhile { it.isLazyTermination(context) } if (transformationCalls.size < 2) return emptyList() return transformationCalls @@ -201,6 +201,11 @@ private fun KtCallExpression.isTermination(context: BindingContext): Boolean { return fqName == getResolvedCall(context)?.resultingDescriptor?.fqNameSafe } +private fun KtCallExpression.isLazyTermination(context: BindingContext): Boolean { + val fqName = lazyTerminations[calleeExpression?.text] ?: return false + return fqName == getResolvedCall(context)?.resultingDescriptor?.fqNameSafe +} + private val transformations = listOf( "chunked", "distinct", @@ -302,4 +307,6 @@ private val terminations = listOf( it to FqName("$pkg.$it") } +private val lazyTerminations = terminations.filter { (key, _) -> key == "groupingBy" } + private val transformationAndTerminations = transformations + terminations