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 78f579b26d4..eccb81ab3a5 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 @@ -60,8 +60,31 @@ class KotlinNativeABICompatibilityChecker(private val project: Project) : Projec return val librariesToNotify = getLibrariesToNotifyAbout() + val notifications = prepareNotifications(librariesToNotify) + + notifications.forEach { it.notify(project) } + } + + private fun getLibrariesToNotifyAbout(): Map = synchronized(this) { + val incompatibleLibraries = getModuleInfosFromIdeaModel(project).asSequence() + .filterIsInstance() + .filter { it.safeAbiVersion != KotlinAbiVersion.CURRENT } + .associateBy { it.libraryRoot } + + val newEntries = if (cachedIncompatibleLibraries.isNotEmpty()) + incompatibleLibraries.filterKeys { it !in cachedIncompatibleLibraries } + else + incompatibleLibraries + + cachedIncompatibleLibraries.clear() + cachedIncompatibleLibraries.addAll(incompatibleLibraries.keys) + + return newEntries + } + + private fun prepareNotifications(librariesToNotify: Map): List { if (librariesToNotify.isEmpty()) - return + return emptyList() val librariesByGroups = HashMap, MutableList>>() librariesToNotify.forEach { (libraryRoot, libraryInfo) -> @@ -70,12 +93,12 @@ class KotlinNativeABICompatibilityChecker(private val project: Project) : Projec librariesByGroups.computeIfAbsent(libraryGroup to isOldAbi) { mutableListOf() } += libraryName to libraryRoot } - librariesByGroups.keys.sortedWith( + return librariesByGroups.keys.sortedWith( compareBy( { (libraryGroup, _) -> libraryGroup }, { (_, isOldAbi) -> isOldAbi } ) - ).forEach { key -> + ).map { key -> val (libraryGroup, isOldAbi) = key val libraries = @@ -154,27 +177,10 @@ class KotlinNativeABICompatibilityChecker(private val project: Project) : Projec StringUtilRt.convertLineSeparators(message, "
"), NotificationType.ERROR, null - ).notify(project) + ) } } - private fun getLibrariesToNotifyAbout(): Map = synchronized(this) { - val incompatibleLibraries = getModuleInfosFromIdeaModel(project).asSequence() - .filterIsInstance() - .filter { it.safeAbiVersion != KotlinAbiVersion.CURRENT } - .associateBy { it.libraryRoot } - - val newEntries = if (cachedIncompatibleLibraries.isNotEmpty()) - incompatibleLibraries.filterKeys { it !in cachedIncompatibleLibraries } - else - incompatibleLibraries - - cachedIncompatibleLibraries.clear() - cachedIncompatibleLibraries.addAll(incompatibleLibraries.keys) - - return newEntries - } - // returns pair of library name and library group private fun parseIDELibraryName(libraryInfo: NativeLibraryInfo): Pair { val ideLibraryName = libraryInfo.library.name?.takeIf(String::isNotEmpty)