Use heuristics with call name to avoid redundant types resolve

This commit is contained in:
Vitaliy.Bibaev
2018-08-17 18:56:52 +03:00
committed by Yan Zhulanow
parent 9b24600b0f
commit e1acd2e2c5
2 changed files with 9 additions and 3 deletions
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.idea.debugger.sequence.psi.impl.KotlinChainTransformerImpl
import org.jetbrains.kotlin.idea.debugger.sequence.psi.impl.TerminatedChainBuilder
import org.jetbrains.kotlin.idea.debugger.sequence.psi.sequence.SequenceCallChecker
import org.jetbrains.kotlin.idea.debugger.sequence.psi.sequence.SequenceCallCheckerWithNameHeuristics
import org.jetbrains.kotlin.idea.debugger.sequence.psi.sequence.SequenceTypeExtractor
import org.jetbrains.kotlin.idea.debugger.sequence.trace.dsl.KotlinCollectionsPeekCallFactory
import org.jetbrains.kotlin.idea.debugger.sequence.trace.dsl.KotlinStatementFactory
@@ -22,7 +23,7 @@ class KotlinSequenceSupportProvider : LibrarySupportProvider {
private companion object {
val builder: StreamChainBuilder = TerminatedChainBuilder(
KotlinChainTransformerImpl(SequenceTypeExtractor()),
SequenceCallChecker()
SequenceCallCheckerWithNameHeuristics(SequenceCallChecker())
)
val support = KotlinSequencesSupport()
val dsl = DslImpl(KotlinStatementFactory(KotlinCollectionsPeekCallFactory()))
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.idea.debugger.sequence.psi.sequence
import org.jetbrains.kotlin.idea.debugger.sequence.psi.StreamCallChecker
import org.jetbrains.kotlin.psi.KtCallExpression
class SequenceCallCheckerByName(private val nestedChecker: StreamCallChecker) : StreamCallChecker {
class SequenceCallCheckerWithNameHeuristics(private val nestedChecker: StreamCallChecker) : StreamCallChecker {
private companion object {
val TERMINATION_CALLS: Set<String> = setOf(
"all", "any", "associate", "associateBy", "associateByTo", "associateTo", "average", "chunked", "contains", "count", "distinct",
@@ -25,6 +25,11 @@ class SequenceCallCheckerByName(private val nestedChecker: StreamCallChecker) :
}
override fun isTerminationCall(expression: KtCallExpression): Boolean {
return TERMINATION_CALLS.contains(expression.name) && nestedChecker.isTerminationCall(expression)
val name = expression.calleeExpression?.text
if (name != null) {
return TERMINATION_CALLS.contains(name) && nestedChecker.isTerminationCall(expression)
}
return nestedChecker.isTerminationCall(expression)
}
}