mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
vcs: Refactored "ScheduleForAdditionAction"
This commit is contained in:
@@ -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 <T> Stream<T> notNullize(@Nullable Stream<T> items) {
|
||||
return ObjectUtils.notNull(items, Stream.empty());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static <T> Stream<T> toStream(@Nullable T... items) {
|
||||
return items == null ? Stream.empty() : Stream.of(items);
|
||||
|
||||
@@ -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<VirtualFile> modifiedWithoutEditing = ContainerUtil.newHashSet(manager.getModifiedWithoutEditing());
|
||||
Stream<VirtualFile> 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));
|
||||
}
|
||||
|
||||
|
||||
+20
-53
@@ -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<VirtualFile> 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<VirtualFile> getUnversionedFiles(final AnActionEvent e) {
|
||||
Stream<VirtualFile> unversionedFilesStream = e.getData(ChangesListView.UNVERSIONED_FILES_DATA_KEY);
|
||||
List<VirtualFile> 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<VirtualFile> getUnversionedFiles(@NotNull AnActionEvent e, @NotNull Project project) {
|
||||
ProjectLevelVcsManager vcsManager = ProjectLevelVcsManager.getInstance(project);
|
||||
FileStatusManager fileStatusManager = FileStatusManager.getInstance(project);
|
||||
unversionedFiles = new ArrayList<VirtualFile>();
|
||||
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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user