diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/argumentUtils.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/argumentUtils.kt index 61036a3a4ef..ba548425d69 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/argumentUtils.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/argumentUtils.kt @@ -55,9 +55,11 @@ private fun copyProperties( ): To { if (from == to) return to + val toMemberProperties = to::class.memberProperties.associateBy { it.name } + for (fromProperty in propertiesToCopy) { @Suppress("UNCHECKED_CAST") - val toProperty = to::class.memberProperties.firstOrNull { it.name == fromProperty.name } as? KMutableProperty1 + val toProperty = toMemberProperties[fromProperty.name] as? KMutableProperty1 ?: continue val fromValue = fromProperty.get(from) if (filter != null && !filter(fromProperty, fromValue)) continue diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt index a5708e692aa..d9517981214 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt @@ -213,7 +213,7 @@ data class ModuleProductionSourceInfo internal constructor( override val name = Name.special("") - 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) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/moduleInfosFromIdeaModel.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/moduleInfosFromIdeaModel.kt index 32901ee609d..0585bb7247e 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/moduleInfosFromIdeaModel.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/moduleInfosFromIdeaModel.kt @@ -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) } ) } diff --git a/idea/idea-gradle-native/src/org/jetbrains/kotlin/ide/konan/KotlinNativeABICompatibilityChecker.kt b/idea/idea-gradle-native/src/org/jetbrains/kotlin/ide/konan/KotlinNativeABICompatibilityChecker.kt index 2e3cef043ff..deff2522ad4 100644 --- a/idea/idea-gradle-native/src/org/jetbrains/kotlin/ide/konan/KotlinNativeABICompatibilityChecker.kt +++ b/idea/idea-gradle-native/src/org/jetbrains/kotlin/ide/konan/KotlinNativeABICompatibilityChecker.kt @@ -9,7 +9,8 @@ import com.intellij.ProjectTopics import com.intellij.notification.Notification import com.intellij.notification.NotificationType import com.intellij.openapi.Disposable -import com.intellij.openapi.application.* +import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.application.ModalityState import com.intellij.openapi.application.ReadAction.nonBlocking import com.intellij.openapi.components.ProjectComponent import com.intellij.openapi.project.Project @@ -23,10 +24,10 @@ import org.jetbrains.concurrency.CancellablePromise import org.jetbrains.kotlin.idea.caches.project.getModuleInfosFromIdeaModel import org.jetbrains.kotlin.idea.configuration.klib.KotlinNativeLibraryNameUtil.isGradleLibraryName import org.jetbrains.kotlin.idea.configuration.klib.KotlinNativeLibraryNameUtil.parseIDELibraryName +import org.jetbrains.kotlin.idea.klib.KlibCompatibilityInfo.IncompatibleMetadata import org.jetbrains.kotlin.idea.versions.UnsupportedAbiVersionNotificationPanelProvider import org.jetbrains.kotlin.idea.versions.bundledRuntimeVersion import org.jetbrains.kotlin.konan.library.KONAN_STDLIB_NAME -import org.jetbrains.kotlin.idea.klib.KlibCompatibilityInfo.IncompatibleMetadata /** TODO: merge [KotlinNativeABICompatibilityChecker] in the future with [UnsupportedAbiVersionNotificationPanelProvider], KT-34525 */ class KotlinNativeABICompatibilityChecker(private val project: Project) : ProjectComponent, Disposable { @@ -86,7 +87,7 @@ class KotlinNativeABICompatibilityChecker(private val project: Project) : Projec } private fun getLibrariesToNotifyAbout(): Map { - val incompatibleLibraries = getModuleInfosFromIdeaModel(project).asSequence() + val incompatibleLibraries = getModuleInfosFromIdeaModel(project) .filterIsInstance() .filter { !it.compatibilityInfo.isCompatible } .associateBy { it.libraryRoot } diff --git a/idea/idea-gradle-native/src/org/jetbrains/kotlin/ide/konan/KotlinNativeABICompatibilityChecker.kt.192 b/idea/idea-gradle-native/src/org/jetbrains/kotlin/ide/konan/KotlinNativeABICompatibilityChecker.kt.192 index c698f207b87..971426eaddd 100644 --- a/idea/idea-gradle-native/src/org/jetbrains/kotlin/ide/konan/KotlinNativeABICompatibilityChecker.kt.192 +++ b/idea/idea-gradle-native/src/org/jetbrains/kotlin/ide/konan/KotlinNativeABICompatibilityChecker.kt.192 @@ -87,7 +87,7 @@ class KotlinNativeABICompatibilityChecker(private val project: Project) : Projec } private fun getLibrariesToNotifyAbout(): Map { - val incompatibleLibraries = getModuleInfosFromIdeaModel(project).asSequence() + val incompatibleLibraries = getModuleInfosFromIdeaModel(project) .filterIsInstance() .filter { !it.compatibilityInfo.isCompatible } .associateBy { it.libraryRoot }