From 2e33850981b033b264c82e1a3483777093525ba4 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 6 Apr 2017 18:29:19 +0200 Subject: [PATCH] Hide "Configure Kotlin" notification after Kotlin has been configured #KT-17289 Fixed --- .../ConfigureKotlinNotificationManager.kt | 24 ++++++++++++++----- .../ui/KotlinConfigurationCheckerComponent.kt | 10 ++++++++ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinNotificationManager.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinNotificationManager.kt index 8a8ac5bdd3e..d67c9cf29b4 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinNotificationManager.kt +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/ConfigureKotlinNotificationManager.kt @@ -21,6 +21,7 @@ import com.intellij.notification.NotificationsManager import com.intellij.openapi.module.Module import com.intellij.openapi.project.Project import org.jetbrains.kotlin.idea.configuration.ui.notifications.ConfigureKotlinNotification +import kotlin.reflect.KClass object ConfigureKotlinNotificationManager: KotlinSingleNotificationManager { fun notify(project: Project, excludeModules: List = emptyList()) { @@ -29,26 +30,37 @@ object ConfigureKotlinNotificationManager: KotlinSingleNotificationManager { + return NotificationsManager.getNotificationsManager().getNotificationsOfType(ConfigureKotlinNotification::class.java, project) + } + + fun expireOldNotifications(project: Project) { + expireOldNotifications(project, ConfigureKotlinNotification::class) + } } interface KotlinSingleNotificationManager { fun notify(project: Project, notification: T) { - val notificationsManager = NotificationsManager.getNotificationsManager() ?: return + if (!expireOldNotifications(project, notification::class, notification)) { + notification.notify(project) + } + } + fun expireOldNotifications(project: Project, notificationClass: KClass, notification: T? = null): Boolean { + val notificationsManager = NotificationsManager.getNotificationsManager() var isNotificationExists = false - val notifications = notificationsManager.getNotificationsOfType(notification::class.java, project) + val notifications = notificationsManager.getNotificationsOfType(notificationClass.java, project) for (oldNotification in notifications) { if (oldNotification == notification) { isNotificationExists = true } else { - oldNotification.expire() + oldNotification?.expire() } } - if (!isNotificationExists) { - notification.notify(project) - } + return isNotificationExists } } diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/ui/KotlinConfigurationCheckerComponent.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/ui/KotlinConfigurationCheckerComponent.kt index d1ee3319e0e..9778efbef2a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/ui/KotlinConfigurationCheckerComponent.kt +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/ui/KotlinConfigurationCheckerComponent.kt @@ -25,7 +25,9 @@ import com.intellij.openapi.project.Project import com.intellij.openapi.roots.ModuleRootAdapter import com.intellij.openapi.roots.ModuleRootEvent import com.intellij.openapi.startup.StartupManager +import org.jetbrains.kotlin.idea.configuration.ConfigureKotlinNotificationManager import org.jetbrains.kotlin.idea.configuration.getModulesWithKotlinFiles +import org.jetbrains.kotlin.idea.configuration.isModuleConfigured import org.jetbrains.kotlin.idea.configuration.showConfigureKotlinNotificationIfNeeded import org.jetbrains.kotlin.idea.project.getAndCacheLanguageLevelByDependencies import org.jetbrains.kotlin.idea.versions.collectModulesWithOutdatedRuntime @@ -52,6 +54,14 @@ class KotlinConfigurationCheckerComponent(project: Project) : AbstractProjectCom } } } + + if (ConfigureKotlinNotificationManager.getVisibleNotifications(project).isNotEmpty()) { + DumbService.getInstance(myProject).smartInvokeLater { + if (getModulesWithKotlinFiles(project).all(::isModuleConfigured)) { + ConfigureKotlinNotificationManager.expireOldNotifications(project) + } + } + } } }) }