Build KotlinNativeABICompatibilityChecker notifications in a separate function

Issue #KT-34814
This commit is contained in:
Dmitriy Dolovov
2019-11-08 12:41:44 +03:00
parent 526e7e463b
commit d97aeb9fe0
@@ -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<String, NativeLibraryInfo> = synchronized(this) {
val incompatibleLibraries = getModuleInfosFromIdeaModel(project).asSequence()
.filterIsInstance<NativeLibraryInfo>()
.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<String, NativeLibraryInfo>): List<Notification> {
if (librariesToNotify.isEmpty())
return
return emptyList()
val librariesByGroups = HashMap<Pair<LibraryGroup, Boolean>, MutableList<Pair<String, String>>>()
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, "<br/>"),
NotificationType.ERROR,
null
).notify(project)
)
}
}
private fun getLibrariesToNotifyAbout(): Map<String, NativeLibraryInfo> = synchronized(this) {
val incompatibleLibraries = getModuleInfosFromIdeaModel(project).asSequence()
.filterIsInstance<NativeLibraryInfo>()
.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<String, LibraryGroup> {
val ideLibraryName = libraryInfo.library.name?.takeIf(String::isNotEmpty)