Fix KotlinNativeABICompatibilityChecker.getLibrariesToNotifyAbout freeze

Get rid of O(n^2) in copyProperties
make ModuleProductionSourceInfo.stableName lazy
add checkCanceled in loops in IdeaModelInfosCache

#KT-38318 Fixed
This commit is contained in:
Vladimir Dolzhenko
2020-04-17 10:13:07 +02:00
parent 06275a201c
commit 86a02c07f6
5 changed files with 20 additions and 10 deletions
@@ -213,7 +213,7 @@ data class ModuleProductionSourceInfo internal constructor(
override val name = Name.special("<production sources for module ${module.name}>")
override val stableName: Name = module.getStableName()
override val stableName: Name by lazy { module.getStableName() }
override fun contentScope(): GlobalSearchScope {
return enlargedSearchScope(ModuleProductionSourceScope(module), module, isTestScope = false)
@@ -229,7 +229,7 @@ data class ModuleTestSourceInfo internal constructor(override val module: Module
override val displayedName get() = KotlinIdeaAnalysisBundle.message("module.name.0.test", module.name)
override val stableName: Name = module.getStableName()
override val stableName: Name by lazy { module.getStableName() }
override fun contentScope(): GlobalSearchScope = enlargedSearchScope(ModuleTestSourceScope(module), module, isTestScope = true)
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.idea.caches.project
import com.intellij.openapi.module.Module
import com.intellij.openapi.module.ModuleManager
import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.Sdk
@@ -16,6 +15,7 @@ import org.jetbrains.kotlin.caches.project.cacheInvalidatingOnRootModifications
import org.jetbrains.kotlin.idea.util.getProjectJdkTableSafe
import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.isCommon
import org.jetbrains.kotlin.progress.ProgressIndicatorAndCompilationCanceledStatus.checkCanceled
import org.jetbrains.kotlin.types.typeUtil.closure
import java.util.concurrent.ConcurrentHashMap
@@ -67,8 +67,15 @@ private fun collectModuleInfosFromIdeaModel(
}
return IdeaModelInfosCache(
moduleSourceInfos = ideaModules.flatMap(Module::correspondingModuleInfos),
libraryInfos = ideaLibraries.flatMap { createLibraryInfo(project, it) },
moduleSourceInfos = ideaModules.flatMap {
checkCanceled()
it.correspondingModuleInfos()
},
libraryInfos = ideaLibraries.flatMap {
checkCanceled()
createLibraryInfo(project, it)
},
sdkInfos = (sdksFromModulesDependencies + getAllProjectSdks()).filterNotNull().toSet().map { SdkInfo(project, it) }
)
}