IDEA-183003 vcs: do not use "before revision" to pass files to context

follow-up: df575fae3f
This commit is contained in:
Aleksey Pivovarov
2017-12-04 14:22:13 +03:00
parent f46ea5d16b
commit 0fa02470fb
4 changed files with 33 additions and 8 deletions
@@ -154,6 +154,15 @@ public class ChangesUtil {
.filter(Objects::nonNull);
}
@NotNull
public static Stream<VirtualFile> getAfterRevisionsFiles(@NotNull Stream<Change> changes) {
return changes
.map(ChangesUtil::getAfterPath)
.filter(Objects::nonNull)
.map(FilePath::getVirtualFile)
.filter(Objects::nonNull);
}
/**
* @deprecated Use {@link ChangesUtil#getFiles(Stream)}.
*/
@@ -64,7 +64,7 @@ abstract class SpecificFilesViewDialog extends DialogWrapper {
public void calcData(DataKey key, DataSink sink) {
super.calcData(key, sink);
if (shownDataKey.is(key.getName())) {
sink.put(shownDataKey, getSelectedFiles());
sink.put(shownDataKey, getSelectedVirtualFiles(null));
}
}
@@ -52,6 +52,7 @@ import java.util.List;
import java.util.Objects;
import java.util.stream.Stream;
import static com.intellij.openapi.vcs.changes.ChangesUtil.getAfterRevisionsFiles;
import static com.intellij.openapi.vcs.changes.ChangesUtil.getFiles;
import static com.intellij.openapi.vcs.changes.ui.ChangesBrowserNode.*;
import static com.intellij.util.containers.UtilKt.getIfSingle;
@@ -156,13 +157,13 @@ public class ChangesListView extends Tree implements TypeSafeDataProvider, DnDAw
sink.put(VcsDataKeys.VIRTUAL_FILE_STREAM, getSelectedFiles());
}
else if (key == CommonDataKeys.NAVIGATABLE) {
VirtualFile file = getIfSingle(getSelectedFiles());
VirtualFile file = getIfSingle(getNavigatableFiles());
if (file != null && !file.isDirectory()) {
sink.put(CommonDataKeys.NAVIGATABLE, new OpenFileDescriptor(myProject, file, 0));
}
}
else if (key == CommonDataKeys.NAVIGATABLE_ARRAY) {
sink.put(CommonDataKeys.NAVIGATABLE_ARRAY, ChangesUtil.getNavigatableArray(myProject, getSelectedFiles()));
sink.put(CommonDataKeys.NAVIGATABLE_ARRAY, ChangesUtil.getNavigatableArray(myProject, getNavigatableFiles()));
}
else if (key == PlatformDataKeys.DELETE_ELEMENT_PROVIDER) {
if (getSelectionObjectsStream().anyMatch(userObject -> !(userObject instanceof ChangeList))) {
@@ -236,7 +237,7 @@ public class ChangesListView extends Tree implements TypeSafeDataProvider, DnDAw
}
@NotNull
private Stream<VirtualFile> getSelectedVirtualFiles(@Nullable Object tag) {
protected Stream<VirtualFile> getSelectedVirtualFiles(@Nullable Object tag) {
return getSelectionNodesStream(tag)
.flatMap(ChangesBrowserNode::getFilesUnderStream)
.distinct();
@@ -317,7 +318,15 @@ public class ChangesListView extends Tree implements TypeSafeDataProvider, DnDAw
}
@NotNull
protected Stream<VirtualFile> getSelectedFiles() {
private Stream<VirtualFile> getSelectedFiles() {
return Stream.concat(
getAfterRevisionsFiles(getSelectedChanges()),
getSelectedVirtualFiles(null)
).distinct();
}
@NotNull
private Stream<VirtualFile> getNavigatableFiles() {
return Stream.concat(
getFiles(getSelectedChanges()),
getSelectedVirtualFiles(null)
@@ -57,8 +57,7 @@ import java.util.*;
import java.util.List;
import java.util.stream.Stream;
import static com.intellij.openapi.vcs.changes.ChangesUtil.getFiles;
import static com.intellij.openapi.vcs.changes.ChangesUtil.getNavigatableArray;
import static com.intellij.openapi.vcs.changes.ChangesUtil.*;
import static com.intellij.openapi.vcs.changes.ui.ChangesBrowserNode.UNVERSIONED_FILES_TAG;
import static com.intellij.openapi.vcs.changes.ui.ChangesListView.*;
@@ -222,7 +221,7 @@ public abstract class OldChangesBrowserBase<T> extends JPanel implements TypeSaf
sink.put(CommonDataKeys.VIRTUAL_FILE_ARRAY, getSelectedFiles().toArray(VirtualFile[]::new));
}
else if (key == CommonDataKeys.NAVIGATABLE_ARRAY) {
sink.put(CommonDataKeys.NAVIGATABLE_ARRAY, getNavigatableArray(myProject, getSelectedFiles()));
sink.put(CommonDataKeys.NAVIGATABLE_ARRAY, getNavigatableArray(myProject, getNavigatableFiles()));
}
else if (VcsDataKeys.IO_FILE_ARRAY.equals(key)) {
sink.put(VcsDataKeys.IO_FILE_ARRAY, getSelectedIoFiles());
@@ -438,6 +437,14 @@ public abstract class OldChangesBrowserBase<T> extends JPanel implements TypeSaf
@NotNull
protected Stream<VirtualFile> getSelectedFiles() {
return Stream.concat(
getAfterRevisionsFiles(getSelectedChanges().stream()),
getVirtualFiles(myViewer.getSelectionPaths(), null)
).distinct();
}
@NotNull
protected Stream<VirtualFile> getNavigatableFiles() {
return Stream.concat(
getFiles(getSelectedChanges().stream()),
getVirtualFiles(myViewer.getSelectionPaths(), null)