From 0285cae2fd035f6fbfddc019da2bcff1caa814aa Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 9 Oct 2018 11:32:25 +0300 Subject: [PATCH] Minor: introduce 'lazyTerminations' in Call chain --> Sequence Related to KT-27104 --- .../ConvertCallChainIntoSequenceInspection.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) 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