From d19c6fe8656574f80351faf8cb13c63dc65e101e Mon Sep 17 00:00:00 2001 From: Chris Lemaire Date: Thu, 10 Apr 2025 12:25:24 +0200 Subject: [PATCH] [collab] Fix selection in reviewer selector popups (IJPL-165077) #IJPL-165077 Fixed Selection used the filtered list models to provide the list of selected users. Instead, it should use the original list model. GitOrigin-RevId: d02105a115e4237f10b12887dea20000fc6f5bda --- platform/collaboration-tools/api-dump-experimental.txt | 2 +- .../ui/codereview/list/search/ChooserPopupUtil.kt | 2 +- .../ui/util/popup/CollaborationToolsPopupUtil.kt | 9 +++++---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/platform/collaboration-tools/api-dump-experimental.txt b/platform/collaboration-tools/api-dump-experimental.txt index 670bab3dd775..ad64fab544cb 100644 --- a/platform/collaboration-tools/api-dump-experimental.txt +++ b/platform/collaboration-tools/api-dump-experimental.txt @@ -1585,7 +1585,7 @@ f:com.intellij.collaboration.ui.codereview.diff.viewer.DiffViewerUtilKt - sf:showAndAwait(com.intellij.openapi.ui.popup.JBPopup,com.intellij.ui.awt.RelativePoint,com.intellij.collaboration.ui.codereview.list.search.ShowDirection,kotlin.coroutines.Continuation):java.lang.Object - sf:showAndAwaitListSubmission(com.intellij.openapi.ui.popup.JBPopup,com.intellij.ui.awt.RelativePoint,com.intellij.collaboration.ui.codereview.list.search.ShowDirection,kotlin.coroutines.Continuation):java.lang.Object - sf:showAndAwaitSubmission(com.intellij.openapi.ui.popup.JBPopup,javax.swing.JList,com.intellij.ui.awt.RelativePoint,com.intellij.collaboration.ui.codereview.list.search.ShowDirection,kotlin.coroutines.Continuation):java.lang.Object -- sf:showAndAwaitSubmissions(com.intellij.openapi.ui.popup.JBPopup,javax.swing.JList,com.intellij.ui.awt.RelativePoint,com.intellij.collaboration.ui.codereview.list.search.ShowDirection,kotlin.coroutines.Continuation):java.lang.Object +- sf:showAndAwaitSubmissions(com.intellij.openapi.ui.popup.JBPopup,javax.swing.ListModel,com.intellij.ui.awt.RelativePoint,com.intellij.collaboration.ui.codereview.list.search.ShowDirection,kotlin.coroutines.Continuation):java.lang.Object *:com.intellij.collaboration.ui.util.popup.PopupItemPresentation - a:getFullText():java.lang.String - a:getIcon():javax.swing.Icon diff --git a/platform/collaboration-tools/src/com/intellij/collaboration/ui/codereview/list/search/ChooserPopupUtil.kt b/platform/collaboration-tools/src/com/intellij/collaboration/ui/codereview/list/search/ChooserPopupUtil.kt index faf08e040635..eb46c662371d 100644 --- a/platform/collaboration-tools/src/com/intellij/collaboration/ui/codereview/list/search/ChooserPopupUtil.kt +++ b/platform/collaboration-tools/src/com/intellij/collaboration/ui/codereview/list/search/ChooserPopupUtil.kt @@ -185,7 +185,7 @@ object ChooserPopupUtil { CollaborationToolsPopupUtil.configureSearchField(popup, popupConfig) PopupUtil.setPopupToggleComponent(popup, point.component) - popup.showAndAwaitSubmissions(list, point, popupConfig.showDirection) + popup.showAndAwaitSubmissions(listModel, point, popupConfig.showDirection) } private fun createList(listModel: CollectionListModel, renderer: ListCellRenderer): JBList = diff --git a/platform/collaboration-tools/src/com/intellij/collaboration/ui/util/popup/CollaborationToolsPopupUtil.kt b/platform/collaboration-tools/src/com/intellij/collaboration/ui/util/popup/CollaborationToolsPopupUtil.kt index 1f103abaa769..e441c589940d 100644 --- a/platform/collaboration-tools/src/com/intellij/collaboration/ui/util/popup/CollaborationToolsPopupUtil.kt +++ b/platform/collaboration-tools/src/com/intellij/collaboration/ui/util/popup/CollaborationToolsPopupUtil.kt @@ -18,6 +18,7 @@ import com.intellij.util.ui.UIUtil import kotlinx.coroutines.* import java.awt.Point import javax.swing.JList +import javax.swing.ListModel import kotlin.coroutines.resume internal object CollaborationToolsPopupUtil { @@ -70,9 +71,9 @@ suspend fun JBPopup.showAndAwaitSubmission(list: JList, point: RelativePo return waitForChoiceAsync(list) } -suspend fun JBPopup.showAndAwaitSubmissions(list: JList>, point: RelativePoint, showDirection: ShowDirection): List { +suspend fun JBPopup.showAndAwaitSubmissions(originalListModel: ListModel>, point: RelativePoint, showDirection: ShowDirection): List { showPopup(point, showDirection) - return waitForMultipleChoiceAsync(list) + return waitForMultipleChoiceAsync(originalListModel) } /** @@ -94,12 +95,12 @@ private suspend fun JBPopup.waitForChoiceAsync(list: JList): T { } } -private suspend fun JBPopup.waitForMultipleChoiceAsync(list: JList>): List { +private suspend fun JBPopup.waitForMultipleChoiceAsync(originalListModel: ListModel>): List { checkDisposed() return try { suspendCancellableCoroutine> { continuation -> addChoicesPopupListener(continuation) { - list.model.items + originalListModel.items .filter { item -> item.isSelected } .map { item -> item.value } }