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.KotlinChainTransformerImpl
import org.jetbrains.kotlin.idea.debugger.sequence.psi.impl.TerminatedChainBuilder 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.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.psi.sequence.SequenceTypeExtractor
import org.jetbrains.kotlin.idea.debugger.sequence.trace.dsl.KotlinCollectionsPeekCallFactory import org.jetbrains.kotlin.idea.debugger.sequence.trace.dsl.KotlinCollectionsPeekCallFactory
import org.jetbrains.kotlin.idea.debugger.sequence.trace.dsl.KotlinStatementFactory import org.jetbrains.kotlin.idea.debugger.sequence.trace.dsl.KotlinStatementFactory
@@ -22,7 +23,7 @@ class KotlinSequenceSupportProvider : LibrarySupportProvider {
private companion object { private companion object {
val builder: StreamChainBuilder = TerminatedChainBuilder( val builder: StreamChainBuilder = TerminatedChainBuilder(
KotlinChainTransformerImpl(SequenceTypeExtractor()), KotlinChainTransformerImpl(SequenceTypeExtractor()),
SequenceCallChecker() SequenceCallCheckerWithNameHeuristics(SequenceCallChecker())
) )
val support = KotlinSequencesSupport() val support = KotlinSequencesSupport()
val dsl = DslImpl(KotlinStatementFactory(KotlinCollectionsPeekCallFactory())) 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.idea.debugger.sequence.psi.StreamCallChecker
import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtCallExpression
class SequenceCallCheckerByName(private val nestedChecker: StreamCallChecker) : StreamCallChecker { class SequenceCallCheckerWithNameHeuristics(private val nestedChecker: StreamCallChecker) : StreamCallChecker {
private companion object { private companion object {
val TERMINATION_CALLS: Set<String> = setOf( val TERMINATION_CALLS: Set<String> = setOf(
"all", "any", "associate", "associateBy", "associateByTo", "associateTo", "average", "chunked", "contains", "count", "distinct", "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 { 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)
} }
} }