From b5aca450b1427ed1eaf5512148f104adc01440bb Mon Sep 17 00:00:00 2001 From: Pavel Kirpichenkov Date: Sat, 1 Aug 2020 12:39:49 +0300 Subject: [PATCH] Make cancellation checks when building resolution anchor caches ^KT-39734 --- .../ResolutionAnchorModuleDependencyProviderExtension.kt | 2 ++ .../idea/caches/resolve/ResolutionAnchorCacheService.kt | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ResolutionAnchorModuleDependencyProviderExtension.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ResolutionAnchorModuleDependencyProviderExtension.kt index 3cad4070db4..8b047afab8d 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ResolutionAnchorModuleDependencyProviderExtension.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/ResolutionAnchorModuleDependencyProviderExtension.kt @@ -12,6 +12,7 @@ import com.intellij.util.CommonProcessors import org.jetbrains.kotlin.idea.caches.resolve.ResolutionAnchorCacheService import org.jetbrains.kotlin.idea.caches.trackers.ModuleDependencyProviderExtension import org.jetbrains.kotlin.idea.project.libraryToSourceAnalysisEnabled +import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus.checkCanceled class ResolutionAnchorModuleDependencyProviderExtension(private val project: Project) : ModuleDependencyProviderExtension { /** @@ -32,6 +33,7 @@ class ResolutionAnchorModuleDependencyProviderExtension(private val project: Pro val resolutionAnchorDependencies = HashSet() ModuleRootManager.getInstance(module).orderEntries().recursively().forEachLibrary { library -> getIdeaModelInfosCache(project).getLibraryInfosForLibrary(library).flatMapTo(resolutionAnchorDependencies) { libraryInfo -> + checkCanceled() ResolutionAnchorCacheService.getInstance(project).getDependencyResolutionAnchors(libraryInfo) } true diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ResolutionAnchorCacheService.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ResolutionAnchorCacheService.kt index 3c09cdb023a..0b39cd2f301 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ResolutionAnchorCacheService.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ResolutionAnchorCacheService.kt @@ -19,7 +19,7 @@ import org.jetbrains.kotlin.idea.caches.project.LibraryDependenciesCache import org.jetbrains.kotlin.idea.caches.project.LibraryInfo import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo import org.jetbrains.kotlin.idea.caches.project.getModuleInfosFromIdeaModel -import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus +import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus.checkCanceled import org.jetbrains.kotlin.types.typeUtil.closure import org.jetbrains.kotlin.utils.addToStdlib.cast @@ -81,6 +81,7 @@ class ResolutionAnchorCacheServiceImpl(val project: Project) : val allTransitiveLibraryDependencies = with(LibraryDependenciesCache.getInstance(project)) { val (directDependenciesOnLibraries, _) = getLibrariesAndSdksUsedWith(libraryInfo) directDependenciesOnLibraries.closure { libraryDependency -> + checkCanceled() getLibrariesAndSdksUsedWith(libraryDependency).first } } @@ -90,7 +91,7 @@ class ResolutionAnchorCacheServiceImpl(val project: Project) : private fun associateModulesByNames(): Map { return getModuleInfosFromIdeaModel(project).associateBy { moduleInfo -> - ProgressIndicatorAndCompilationCanceledStatus.checkCanceled() + checkCanceled() when (moduleInfo) { is LibraryInfo -> moduleInfo.library.name ?: "" // TODO: when does library have no name? is ModuleSourceInfo -> moduleInfo.module.name