Minor: introduce 'lazyTerminations' in Call chain --> Sequence

Related to KT-27104
This commit is contained in:
Mikhail Glukhikh
2018-10-09 11:32:25 +03:00
parent 8fc5fefc7f
commit 0285cae2fd
@@ -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