Make cancellation checks when building resolution anchor caches
^KT-39734
This commit is contained in:
+2
@@ -12,6 +12,7 @@ import com.intellij.util.CommonProcessors
|
|||||||
import org.jetbrains.kotlin.idea.caches.resolve.ResolutionAnchorCacheService
|
import org.jetbrains.kotlin.idea.caches.resolve.ResolutionAnchorCacheService
|
||||||
import org.jetbrains.kotlin.idea.caches.trackers.ModuleDependencyProviderExtension
|
import org.jetbrains.kotlin.idea.caches.trackers.ModuleDependencyProviderExtension
|
||||||
import org.jetbrains.kotlin.idea.project.libraryToSourceAnalysisEnabled
|
import org.jetbrains.kotlin.idea.project.libraryToSourceAnalysisEnabled
|
||||||
|
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus.checkCanceled
|
||||||
|
|
||||||
class ResolutionAnchorModuleDependencyProviderExtension(private val project: Project) : ModuleDependencyProviderExtension {
|
class ResolutionAnchorModuleDependencyProviderExtension(private val project: Project) : ModuleDependencyProviderExtension {
|
||||||
/**
|
/**
|
||||||
@@ -32,6 +33,7 @@ class ResolutionAnchorModuleDependencyProviderExtension(private val project: Pro
|
|||||||
val resolutionAnchorDependencies = HashSet<ModuleSourceInfo>()
|
val resolutionAnchorDependencies = HashSet<ModuleSourceInfo>()
|
||||||
ModuleRootManager.getInstance(module).orderEntries().recursively().forEachLibrary { library ->
|
ModuleRootManager.getInstance(module).orderEntries().recursively().forEachLibrary { library ->
|
||||||
getIdeaModelInfosCache(project).getLibraryInfosForLibrary(library).flatMapTo(resolutionAnchorDependencies) { libraryInfo ->
|
getIdeaModelInfosCache(project).getLibraryInfosForLibrary(library).flatMapTo(resolutionAnchorDependencies) { libraryInfo ->
|
||||||
|
checkCanceled()
|
||||||
ResolutionAnchorCacheService.getInstance(project).getDependencyResolutionAnchors(libraryInfo)
|
ResolutionAnchorCacheService.getInstance(project).getDependencyResolutionAnchors(libraryInfo)
|
||||||
}
|
}
|
||||||
true
|
true
|
||||||
|
|||||||
+3
-2
@@ -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.LibraryInfo
|
||||||
import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo
|
import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo
|
||||||
import org.jetbrains.kotlin.idea.caches.project.getModuleInfosFromIdeaModel
|
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.types.typeUtil.closure
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.cast
|
import org.jetbrains.kotlin.utils.addToStdlib.cast
|
||||||
|
|
||||||
@@ -81,6 +81,7 @@ class ResolutionAnchorCacheServiceImpl(val project: Project) :
|
|||||||
val allTransitiveLibraryDependencies = with(LibraryDependenciesCache.getInstance(project)) {
|
val allTransitiveLibraryDependencies = with(LibraryDependenciesCache.getInstance(project)) {
|
||||||
val (directDependenciesOnLibraries, _) = getLibrariesAndSdksUsedWith(libraryInfo)
|
val (directDependenciesOnLibraries, _) = getLibrariesAndSdksUsedWith(libraryInfo)
|
||||||
directDependenciesOnLibraries.closure { libraryDependency ->
|
directDependenciesOnLibraries.closure { libraryDependency ->
|
||||||
|
checkCanceled()
|
||||||
getLibrariesAndSdksUsedWith(libraryDependency).first
|
getLibrariesAndSdksUsedWith(libraryDependency).first
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -90,7 +91,7 @@ class ResolutionAnchorCacheServiceImpl(val project: Project) :
|
|||||||
|
|
||||||
private fun associateModulesByNames(): Map<String, ModuleInfo> {
|
private fun associateModulesByNames(): Map<String, ModuleInfo> {
|
||||||
return getModuleInfosFromIdeaModel(project).associateBy { moduleInfo ->
|
return getModuleInfosFromIdeaModel(project).associateBy { moduleInfo ->
|
||||||
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled()
|
checkCanceled()
|
||||||
when (moduleInfo) {
|
when (moduleInfo) {
|
||||||
is LibraryInfo -> moduleInfo.library.name ?: "" // TODO: when does library have no name?
|
is LibraryInfo -> moduleInfo.library.name ?: "" // TODO: when does library have no name?
|
||||||
is ModuleSourceInfo -> moduleInfo.module.name
|
is ModuleSourceInfo -> moduleInfo.module.name
|
||||||
|
|||||||
Reference in New Issue
Block a user