Make cancellation checks when building resolution anchor caches

^KT-39734
This commit is contained in:
Pavel Kirpichenkov
2020-08-01 12:39:49 +03:00
parent 54811613f4
commit b5aca450b1
2 changed files with 5 additions and 2 deletions
@@ -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<ModuleSourceInfo>()
ModuleRootManager.getInstance(module).orderEntries().recursively().forEachLibrary { library ->
getIdeaModelInfosCache(project).getLibraryInfosForLibrary(library).flatMapTo(resolutionAnchorDependencies) { libraryInfo ->
checkCanceled()
ResolutionAnchorCacheService.getInstance(project).getDependencyResolutionAnchors(libraryInfo)
}
true
@@ -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<String, ModuleInfo> {
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