From df07dbc63cde21d67d25e6f5c66295427c8a7fae Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Wed, 26 Sep 2018 14:24:48 +0300 Subject: [PATCH] vcs: cleanup - move method to another class --- .../actions/ChangeListRemoveConfirmation.kt | 37 +----- .../changes/actions/RemoveChangeListAction.kt | 109 +++++++++++------- 2 files changed, 72 insertions(+), 74 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/ChangeListRemoveConfirmation.kt b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/ChangeListRemoveConfirmation.kt index 222e173b9243..7f5401f07b1b 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/ChangeListRemoveConfirmation.kt +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/ChangeListRemoveConfirmation.kt @@ -22,9 +22,9 @@ import com.intellij.openapi.vcs.changes.LocalChangeList import com.intellij.util.ThreeState object ChangeListRemoveConfirmation { - private fun checkCanDeleteChangelist(project: Project, - list: LocalChangeList, - explicitly: Boolean): ThreeState { + fun checkCanDeleteChangelist(project: Project, + list: LocalChangeList, + explicitly: Boolean): ThreeState { val activeVcss = ProjectLevelVcsManager.getInstance(project).allActiveVcss var confirmationAsked = false @@ -52,37 +52,6 @@ object ChangeListRemoveConfirmation { } } - @JvmStatic - fun deleteLists(project: Project, lists: Collection) { - val manager = ChangeListManager.getInstance(project) - - val toRemove = mutableListOf() - val toAsk = mutableListOf() - - for (list in lists.mapNotNull { manager.getChangeList(it.id) }) { - when (checkCanDeleteChangelist(project, list, explicitly = true)) { - ThreeState.UNSURE -> toAsk.add(list) - ThreeState.YES -> toRemove.add(list) - ThreeState.NO -> { - } - } - } - - if (toAsk.isNotEmpty() && RemoveChangeListAction.askIfShouldRemoveChangeLists(project, toAsk)) { - toRemove.addAll(toAsk) - } - - // default changelist might have been changed in `askIfShouldRemoveChangeLists()` - val defaultList = manager.defaultChangeList - val shouldRemoveDefault = toRemove.remove(defaultList) - - toRemove.forEach { manager.removeChangeList(it.name) } - - if (shouldRemoveDefault && RemoveChangeListAction.confirmActiveChangeListRemoval(project, listOf(defaultList))) { - manager.removeChangeList(defaultList.name) - } - } - @JvmStatic fun deleteEmptyInactiveLists(project: Project, lists: Collection, confirm: (toAsk: List) -> Boolean) { diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/RemoveChangeListAction.kt b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/RemoveChangeListAction.kt index 4d705de7f0e3..6a4f177f148f 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/RemoveChangeListAction.kt +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/RemoveChangeListAction.kt @@ -16,6 +16,7 @@ import com.intellij.openapi.vcs.changes.ChangeList import com.intellij.openapi.vcs.changes.ChangeListManager import com.intellij.openapi.vcs.changes.LocalChangeList import com.intellij.util.ArrayUtil +import com.intellij.util.ThreeState import com.intellij.util.containers.ContainerUtil import java.util.* @@ -61,57 +62,85 @@ class RemoveChangeListAction : AnAction(), DumbAware { val selectedLists = e.getRequiredData(VcsDataKeys.CHANGE_LISTS) @Suppress("UNCHECKED_CAST") - ChangeListRemoveConfirmation.deleteLists(project, Arrays.asList(*selectedLists) as Collection) + deleteLists(project, Arrays.asList(*selectedLists) as Collection) } - companion object { - fun askIfShouldRemoveChangeLists(project: Project, lists: List): Boolean { - val activeChangelistSelected = lists.stream().anyMatch { it.isDefault } - if (activeChangelistSelected) { - return confirmActiveChangeListRemoval(project, lists) + private fun deleteLists(project: Project, lists: Collection) { + val manager = ChangeListManager.getInstance(project) + + val toRemove = mutableListOf() + val toAsk = mutableListOf() + + for (list in lists.mapNotNull { manager.getChangeList(it.id) }) { + when (ChangeListRemoveConfirmation.checkCanDeleteChangelist(project, list, explicitly = true)) { + ThreeState.UNSURE -> toAsk.add(list) + ThreeState.YES -> toRemove.add(list) + ThreeState.NO -> { + } } - - val haveNoChanges = lists.stream().allMatch { l -> l.changes.isEmpty() } - if (haveNoChanges) return true - - val message = if (lists.size == 1) - VcsBundle.message("changes.removechangelist.warning.text", lists[0].name) - else - VcsBundle.message("changes.removechangelist.multiple.warning.text", lists.size) - return Messages.YES == Messages.showYesNoDialog(project, message, VcsBundle.message("changes.removechangelist.warning.title"), - Messages.getQuestionIcon()) } - internal fun confirmActiveChangeListRemoval(project: Project, lists: List): Boolean { - val haveNoChanges = lists.stream().allMatch { l -> l.changes.isEmpty() } + if (toAsk.isNotEmpty() && askIfShouldRemoveChangeLists(project, toAsk)) { + toRemove.addAll(toAsk) + } - val remainingLists = ChangeListManager.getInstance(project).changeListsCopy - remainingLists.removeAll(lists) + // default changelist might have been changed in `askIfShouldRemoveChangeLists()` + val defaultList = manager.defaultChangeList + val shouldRemoveDefault = toRemove.remove(defaultList) - // Can't remove last changelist - if (remainingLists.isEmpty()) { - return false - } + toRemove.forEach { manager.removeChangeList(it.name) } - // don't ask "Which changelist to make active" if there is only one option anyway - // unless there are some changes to be moved - give user a chance to cancel deletion - if (remainingLists.size == 1 && haveNoChanges) { - ChangeListManager.getInstance(project).setDefaultChangeList(remainingLists[0]) - return true - } + if (shouldRemoveDefault && confirmActiveChangeListRemoval(project, listOf(defaultList))) { + manager.removeChangeList(defaultList.name) + } + } - val remainingListsNames = remainingLists.map { it.name }.toTypedArray() + private fun askIfShouldRemoveChangeLists(project: Project, lists: List): Boolean { + val activeChangelistSelected = lists.stream().anyMatch { it.isDefault } + if (activeChangelistSelected) { + return confirmActiveChangeListRemoval(project, lists) + } - val message = if (haveNoChanges) - VcsBundle.message("changes.remove.active.empty.prompt") - else - VcsBundle.message("changes.remove.active.prompt") - val nameIndex = Messages.showChooseDialog(project, message, - VcsBundle.message("changes.remove.active.title"), Messages.getQuestionIcon(), - remainingListsNames, remainingListsNames[0]) - if (nameIndex < 0) return false - ChangeListManager.getInstance(project).setDefaultChangeList(remainingLists[nameIndex]) + val haveNoChanges = lists.stream().allMatch { l -> l.changes.isEmpty() } + if (haveNoChanges) return true + + val message = if (lists.size == 1) + VcsBundle.message("changes.removechangelist.warning.text", lists[0].name) + else + VcsBundle.message("changes.removechangelist.multiple.warning.text", lists.size) + return Messages.YES == Messages.showYesNoDialog(project, message, VcsBundle.message("changes.removechangelist.warning.title"), + Messages.getQuestionIcon()) + } + + private fun confirmActiveChangeListRemoval(project: Project, lists: List): Boolean { + val haveNoChanges = lists.stream().allMatch { l -> l.changes.isEmpty() } + + val remainingLists = ChangeListManager.getInstance(project).changeListsCopy + remainingLists.removeAll(lists) + + // Can't remove last changelist + if (remainingLists.isEmpty()) { + return false + } + + // don't ask "Which changelist to make active" if there is only one option anyway + // unless there are some changes to be moved - give user a chance to cancel deletion + if (remainingLists.size == 1 && haveNoChanges) { + ChangeListManager.getInstance(project).setDefaultChangeList(remainingLists[0]) return true } + + val remainingListsNames = remainingLists.map { it.name }.toTypedArray() + + val message = if (haveNoChanges) + VcsBundle.message("changes.remove.active.empty.prompt") + else + VcsBundle.message("changes.remove.active.prompt") + val nameIndex = Messages.showChooseDialog(project, message, + VcsBundle.message("changes.remove.active.title"), Messages.getQuestionIcon(), + remainingListsNames, remainingListsNames[0]) + if (nameIndex < 0) return false + ChangeListManager.getInstance(project).setDefaultChangeList(remainingLists[nameIndex]) + return true } } \ No newline at end of file