From e1acd2e2c5448ce9d4ab9f724d56545a8f033853 Mon Sep 17 00:00:00 2001 From: "Vitaliy.Bibaev" Date: Fri, 17 Aug 2018 18:56:52 +0300 Subject: [PATCH] Use heuristics with call name to avoid redundant types resolve --- .../lib/sequence/KotlinSequenceSupportProvider.kt | 3 ++- ...yName.kt => SequenceCallCheckerWithNameHeuristics.kt} | 9 +++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) rename idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/sequence/psi/sequence/{SequenceCallCheckerByName.kt => SequenceCallCheckerWithNameHeuristics.kt} (79%) diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/sequence/lib/sequence/KotlinSequenceSupportProvider.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/sequence/lib/sequence/KotlinSequenceSupportProvider.kt index 0f560017185..7ad06c96d5a 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/sequence/lib/sequence/KotlinSequenceSupportProvider.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/sequence/lib/sequence/KotlinSequenceSupportProvider.kt @@ -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())) diff --git a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/sequence/psi/sequence/SequenceCallCheckerByName.kt b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/sequence/psi/sequence/SequenceCallCheckerWithNameHeuristics.kt similarity index 79% rename from idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/sequence/psi/sequence/SequenceCallCheckerByName.kt rename to idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/sequence/psi/sequence/SequenceCallCheckerWithNameHeuristics.kt index 32b2560a086..1018f2eb6b1 100644 --- a/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/sequence/psi/sequence/SequenceCallCheckerByName.kt +++ b/idea/idea-jvm/src/org/jetbrains/kotlin/idea/debugger/sequence/psi/sequence/SequenceCallCheckerWithNameHeuristics.kt @@ -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 = 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) } } \ No newline at end of file