From b7312266feca53aa3fcf2db18e31a3e661f11293 Mon Sep 17 00:00:00 2001 From: Konstantin Kolosovsky Date: Thu, 4 Aug 2016 14:32:48 +0300 Subject: [PATCH] vcs: Refactored "ScheduleForAdditionAction" --- .../src/com/intellij/vcsUtil/VcsUtil.java | 6 ++ .../vcs/changes/actions/RollbackAction.java | 6 +- .../actions/ScheduleForAdditionAction.java | 73 +++++-------------- 3 files changed, 28 insertions(+), 57 deletions(-) diff --git a/platform/vcs-api/src/com/intellij/vcsUtil/VcsUtil.java b/platform/vcs-api/src/com/intellij/vcsUtil/VcsUtil.java index d6e5761106b4..fbe46c0f3778 100644 --- a/platform/vcs-api/src/com/intellij/vcsUtil/VcsUtil.java +++ b/platform/vcs-api/src/com/intellij/vcsUtil/VcsUtil.java @@ -42,6 +42,7 @@ import com.intellij.openapi.vcs.roots.VcsRootDetector; import com.intellij.openapi.vfs.*; import com.intellij.openapi.vfs.newvfs.RefreshQueue; import com.intellij.openapi.wm.StatusBar; +import com.intellij.util.ObjectUtils; import com.intellij.util.containers.ContainerUtilRt; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -683,6 +684,11 @@ public class VcsUtil { return items == null || !items.findAny().isPresent(); } + @NotNull + public static Stream notNullize(@Nullable Stream items) { + return ObjectUtils.notNull(items, Stream.empty()); + } + @NotNull public static Stream toStream(@Nullable T... items) { return items == null ? Stream.empty() : Stream.of(items); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/RollbackAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/RollbackAction.java index 125b921c3fc7..9689638e01e1 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/RollbackAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/RollbackAction.java @@ -45,16 +45,15 @@ import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; -import com.intellij.util.ObjectUtils; import com.intellij.util.ThreeState; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; import com.intellij.vcsUtil.RollbackUtil; +import com.intellij.vcsUtil.VcsUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.*; -import java.util.stream.Stream; import static com.intellij.openapi.ui.Messages.getQuestionIcon; import static com.intellij.openapi.ui.Messages.showYesNoDialog; @@ -84,9 +83,8 @@ public class RollbackAction extends AnAction implements DumbAware { private static boolean hasReversibleFiles(@NotNull AnActionEvent e) { ChangeListManager manager = ChangeListManager.getInstance(e.getRequiredData(CommonDataKeys.PROJECT)); Set modifiedWithoutEditing = ContainerUtil.newHashSet(manager.getModifiedWithoutEditing()); - Stream fileStream = ObjectUtils.notNull(e.getData(VcsDataKeys.VIRTUAL_FILE_STREAM), Stream.empty()); - return fileStream.anyMatch( + return VcsUtil.notNullize(e.getData(VcsDataKeys.VIRTUAL_FILE_STREAM)).anyMatch( file -> manager.haveChangesUnder(file) != ThreeState.NO || manager.isFileAffected(file) || modifiedWithoutEditing.contains(file)); } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/ScheduleForAdditionAction.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/ScheduleForAdditionAction.java index 7ec147e11c10..28c9290e2db6 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/ScheduleForAdditionAction.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/ScheduleForAdditionAction.java @@ -38,30 +38,33 @@ import com.intellij.openapi.vcs.changes.ui.ChangesBrowserBase; import com.intellij.openapi.vcs.changes.ui.ChangesListView; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.Consumer; -import com.intellij.vcsUtil.VcsUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; +import static com.intellij.vcsUtil.VcsUtil.isEmpty; +import static com.intellij.vcsUtil.VcsUtil.notNullize; + public class ScheduleForAdditionAction extends AnAction implements DumbAware { public void update(@NotNull AnActionEvent e) { - final boolean enabled = thereAreUnversionedFiles(e); + boolean enabled = e.getProject() != null && !isEmpty(getUnversionedFiles(e, e.getProject())); + e.getPresentation().setEnabled(enabled); - final String place = e.getPlace(); - if (ActionPlaces.ACTION_PLACE_VCS_QUICK_LIST_POPUP_ACTION.equals(place) || ActionPlaces.CHANGES_VIEW_POPUP.equals(place) ) { + if (ActionPlaces.ACTION_PLACE_VCS_QUICK_LIST_POPUP_ACTION.equals(e.getPlace()) || + ActionPlaces.CHANGES_VIEW_POPUP.equals(e.getPlace())) { e.getPresentation().setVisible(enabled); } } public void actionPerformed(@NotNull AnActionEvent e) { - addUnversioned(e.getRequiredData(CommonDataKeys.PROJECT), getUnversionedFiles(e), this::isStatusForAddition, - e.getData(ChangesBrowserBase.DATA_KEY)); + Project project = e.getRequiredData(CommonDataKeys.PROJECT); + List unversionedFiles = getUnversionedFiles(e, project).collect(Collectors.toList()); + + addUnversioned(project, unversionedFiles, this::isStatusForAddition, e.getData(ChangesBrowserBase.DATA_KEY)); } public static boolean addUnversioned(@NotNull Project project, @@ -90,51 +93,21 @@ public class ScheduleForAdditionAction extends AnAction implements DumbAware { return result; } - private boolean thereAreUnversionedFiles(AnActionEvent e) { - if (!VcsUtil.isEmpty(e.getData(ChangesListView.UNVERSIONED_FILES_DATA_KEY))) { - return true; - } - VirtualFile[] files = getFromSelection(e); - Project project = e.getData(CommonDataKeys.PROJECT); - if (files == null || project == null) { - return false; - } - ProjectLevelVcsManager vcsManager = ProjectLevelVcsManager.getInstance(project); - FileStatusManager fileStatusManager = FileStatusManager.getInstance(project); - for (VirtualFile file : files) { - if (isFileUnversioned(file, vcsManager, fileStatusManager)) { - return true; - } - } - return false; - } - @NotNull - private List getUnversionedFiles(final AnActionEvent e) { - Stream unversionedFilesStream = e.getData(ChangesListView.UNVERSIONED_FILES_DATA_KEY); - List unversionedFiles = unversionedFilesStream != null ? unversionedFilesStream.collect(Collectors.toList()) : null; - if (unversionedFiles != null && !unversionedFiles.isEmpty()) { - return unversionedFiles; - } - - final VirtualFile[] files = getFromSelection(e); - final Project project = e.getData(CommonDataKeys.PROJECT); - if (files == null || project == null) { - return Collections.emptyList(); - } + private Stream getUnversionedFiles(@NotNull AnActionEvent e, @NotNull Project project) { ProjectLevelVcsManager vcsManager = ProjectLevelVcsManager.getInstance(project); FileStatusManager fileStatusManager = FileStatusManager.getInstance(project); - unversionedFiles = new ArrayList(); - for (VirtualFile file : files) { - if (isFileUnversioned(file, vcsManager, fileStatusManager)) { - unversionedFiles.add(file); - } - } - return unversionedFiles; + boolean hasExplicitUnversioned = !isEmpty(e.getData(ChangesListView.UNVERSIONED_FILES_DATA_KEY)); + + return hasExplicitUnversioned + ? e.getRequiredData(ChangesListView.UNVERSIONED_FILES_DATA_KEY) + : notNullize(e.getData(VcsDataKeys.VIRTUAL_FILE_STREAM)) + .filter(file -> isFileUnversioned(file, vcsManager, fileStatusManager)); } private boolean isFileUnversioned(@NotNull VirtualFile file, - @NotNull ProjectLevelVcsManager vcsManager, @NotNull FileStatusManager fileStatusManager) { + @NotNull ProjectLevelVcsManager vcsManager, + @NotNull FileStatusManager fileStatusManager) { AbstractVcs vcs = vcsManager.getVcsFor(file); return vcs != null && !vcs.areDirectoriesVersionedItems() && file.isDirectory() || isStatusForAddition(fileStatusManager.getStatus(file)); @@ -143,10 +116,4 @@ public class ScheduleForAdditionAction extends AnAction implements DumbAware { protected boolean isStatusForAddition(FileStatus status) { return status == FileStatus.UNKNOWN; } - - @Nullable - private static VirtualFile[] getFromSelection(AnActionEvent e) { - return CommonDataKeys.VIRTUAL_FILE_ARRAY.getData(e.getDataContext()); - } - }