From beecfea20361284104fa6e501b99181e210a8e4c Mon Sep 17 00:00:00 2001 From: Yuriy Artamonov Date: Sun, 29 Sep 2024 12:19:42 +0200 Subject: [PATCH] [api] NotificationGroupManagerImpl is not part of platform API GitOrigin-RevId: 7b8409537fd307a841f8d2b03ff600271d8478d4 --- .../ide-core-impl/api-dump-unreviewed.txt | 6 ---- .../impl/NotificationGroupManagerImpl.kt | 36 +++++++++++-------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/platform/ide-core-impl/api-dump-unreviewed.txt b/platform/ide-core-impl/api-dump-unreviewed.txt index 42e47dafa6cb..98ae59ddb89b 100644 --- a/platform/ide-core-impl/api-dump-unreviewed.txt +++ b/platform/ide-core-impl/api-dump-unreviewed.txt @@ -329,12 +329,6 @@ f:com.intellij.notification.impl.NotificationGroupEP - getDisplayName(com.intellij.openapi.extensions.PluginDescriptor):java.lang.String - getDisplayType():com.intellij.notification.NotificationDisplayType - setPluginDescriptor(com.intellij.openapi.extensions.PluginDescriptor):V -f:com.intellij.notification.impl.NotificationGroupManagerImpl -- com.intellij.notification.NotificationGroupManager -- getNotificationGroup(java.lang.String):com.intellij.notification.NotificationGroup -- getRegisteredNotificationGroups():java.util.Collection -- isGroupRegistered(java.lang.String):Z -- isRegisteredNotificationId(java.lang.String):Z f:com.intellij.notification.impl.NotificationParentGroupBean - id:java.lang.String - parentId:java.lang.String diff --git a/platform/ide-core-impl/src/com/intellij/notification/impl/NotificationGroupManagerImpl.kt b/platform/ide-core-impl/src/com/intellij/notification/impl/NotificationGroupManagerImpl.kt index 96b710b34f3f..66def7c92929 100644 --- a/platform/ide-core-impl/src/com/intellij/notification/impl/NotificationGroupManagerImpl.kt +++ b/platform/ide-core-impl/src/com/intellij/notification/impl/NotificationGroupManagerImpl.kt @@ -7,30 +7,22 @@ import com.intellij.notification.NotificationGroupManager import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.extensions.ExtensionPointListener import com.intellij.openapi.extensions.PluginDescriptor -import com.intellij.util.concurrency.SynchronizedClearableLazy import java.util.concurrent.ConcurrentHashMap private val LOG = logger() -class NotificationGroupManagerImpl private constructor() : NotificationGroupManager { - private val registeredGroups = computeGroups() +internal class NotificationGroupManagerImpl() : NotificationGroupManager { + private val registeredGroups: MutableMap = computeGroups() - private val registeredNotificationIds = SynchronizedClearableLazy> { - val result = HashSet() - NotificationGroupEP.EP_NAME.processWithPluginDescriptor { extension, pluginDescriptor -> - if (extension.notificationIds != null && PluginManagerCore.isDevelopedByJetBrains(pluginDescriptor)) { - result.addAll(extension.notificationIds!!) - } - } - result - } + @Volatile + private var registeredNotificationIds: Set? = null init { NotificationGroupEP.EP_NAME.addExtensionPointListener(object : ExtensionPointListener { override fun extensionAdded(extension: NotificationGroupEP, pluginDescriptor: PluginDescriptor) { registerNotificationGroup(extension, pluginDescriptor, registeredGroups) if (extension.notificationIds != null) { - registeredNotificationIds.drop() + registeredNotificationIds = null } } @@ -40,19 +32,33 @@ class NotificationGroupManagerImpl private constructor() : NotificationGroupMana registeredGroups.remove(extension.id) } if (extension.notificationIds != null) { - registeredNotificationIds.drop() + registeredNotificationIds = null } } }, null) } + private fun getNotificationIds(): Set { + val existing = registeredNotificationIds + if (existing != null) return existing + + val result = HashSet() + NotificationGroupEP.EP_NAME.processWithPluginDescriptor { extension, pluginDescriptor -> + if (extension.notificationIds != null && PluginManagerCore.isDevelopedByJetBrains(pluginDescriptor)) { + result.addAll(extension.notificationIds!!) + } + } + registeredNotificationIds = result + return result + } + override fun getNotificationGroup(groupId: String): NotificationGroup? = registeredGroups[groupId] override fun isGroupRegistered(groupId: String): Boolean = registeredGroups.containsKey(groupId) override fun getRegisteredNotificationGroups(): MutableCollection = registeredGroups.values - override fun isRegisteredNotificationId(notificationId: String): Boolean = registeredNotificationIds.value.contains(notificationId) + override fun isRegisteredNotificationId(notificationId: String): Boolean = getNotificationIds().contains(notificationId) } private fun computeGroups(): MutableMap {