From 71dd06628848ae1abe981ae86f8ea8023bfab774 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Fri, 22 Jul 2022 22:53:37 +0200 Subject: [PATCH] [Analysis API] do not consider recursive module dependencies as scope --- .../components/KtAnalysisScopeProviderImpl.kt | 23 ++++--------------- 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/components/KtAnalysisScopeProviderImpl.kt b/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/components/KtAnalysisScopeProviderImpl.kt index bc0462c815a..0322536b62d 100644 --- a/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/components/KtAnalysisScopeProviderImpl.kt +++ b/analysis/analysis-api-impl-base/src/org/jetbrains/kotlin/analysis/api/impl/base/components/KtAnalysisScopeProviderImpl.kt @@ -10,7 +10,6 @@ import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.analysis.api.KtAnalysisSession import org.jetbrains.kotlin.analysis.api.components.KtAnalysisScopeProvider import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken -import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.analysis.project.structure.allDirectDependencies import org.jetbrains.kotlin.psi.psiUtil.contains @@ -19,7 +18,11 @@ class KtAnalysisScopeProviderImpl( override val token: KtLifetimeToken ) : KtAnalysisScopeProvider() { - private val allModules = analysisSession.useSiteModule.collectAllDependenciesWithSelf() + private val allModules = buildList { + add(analysisSession.useSiteModule) + addAll(analysisSession.useSiteModule.allDirectDependencies()) + } + private val analysisScope = GlobalSearchScope.union(allModules.map { it.contentScope }) override fun getAnalysisScope(): GlobalSearchScope = analysisScope @@ -28,19 +31,3 @@ class KtAnalysisScopeProviderImpl( return analysisScope.contains(psi) } } - -private fun KtModule.collectAllDependenciesWithSelf(): List { - val stack = mutableListOf(this) - val visited = mutableSetOf() - - while (stack.isNotEmpty()) { - val current = stack.removeLast() - if (!visited.add(current)) continue - - current.allDirectDependencies().forEach { dependency -> - if (dependency !in visited) stack += dependency - } - } - - return visited.toList() -} \ No newline at end of file