From a35a9c1e320777fef68c41a4ef7875d39fc54d53 Mon Sep 17 00:00:00 2001 From: Konstantin Kolosovsky Date: Sat, 25 May 2019 13:18:50 +0300 Subject: [PATCH] vcs: Sync non-modal commit inclusion with "Local Changes" tree state (IDEA-212228) GitOrigin-RevId: 9ad731ff7ff6d8ff8f35b1de3999863d6df6600b --- .../vcs/changes/ChangesViewManager.java | 18 ++++++++++++++++-- .../openapi/vcs/changes/ui/ChangesTree.java | 11 +++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangesViewManager.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangesViewManager.java index 5b24212b2713..ea00b575a77f 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangesViewManager.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ChangesViewManager.java @@ -49,6 +49,7 @@ import com.intellij.util.xmlb.annotations.XCollection; import com.intellij.vcs.commit.ChangesViewCommitPanel; import com.intellij.vcs.commit.ChangesViewCommitWorkflow; import com.intellij.vcs.commit.ChangesViewCommitWorkflowHandler; +import gnu.trove.THashSet; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -335,16 +336,18 @@ public class ChangesViewManager implements ChangesViewI, ProjectComponent, Persi if (!ProjectLevelVcsManager.getInstance(myProject).hasActiveVcss()) return; ChangeListManagerImpl changeListManager = ChangeListManagerImpl.getInstanceImpl(myProject); + List changeLists = changeListManager.getChangeListsCopy(); + List unversionedFiles = changeListManager.getUnversionedFiles(); TreeModelBuilder treeModelBuilder = new TreeModelBuilder(myProject, myView.getGrouping()) - .setChangeLists(changeListManager.getChangeListsCopy(), Registry.is("vcs.skip.single.default.changelist")) + .setChangeLists(changeLists, Registry.is("vcs.skip.single.default.changelist")) .setLocallyDeletedPaths(changeListManager.getDeletedFiles()) .setModifiedWithoutEditing(changeListManager.getModifiedWithoutEditing()) .setSwitchedFiles(changeListManager.getSwitchedFilesMap()) .setSwitchedRoots(changeListManager.getSwitchedRoots()) .setLockedFolders(changeListManager.getLockedFolders()) .setLogicallyLockedFiles(changeListManager.getLogicallyLockedFolders()) - .setUnversioned(changeListManager.getUnversionedFiles()); + .setUnversioned(unversionedFiles); if (myState.myShowIgnored) { treeModelBuilder.setIgnored(changeListManager.getIgnoredFiles(), changeListManager.isIgnoredInUpdateMode()); } @@ -357,6 +360,7 @@ public class ChangesViewManager implements ChangesViewI, ProjectComponent, Persi myModelUpdateInProgress = true; try { myView.updateModel(newModel); + synchronizeInclusion(changeLists, unversionedFiles); } finally { myModelUpdateInProgress = false; @@ -366,6 +370,16 @@ public class ChangesViewManager implements ChangesViewI, ProjectComponent, Persi }, indicator); } + private void synchronizeInclusion(@NotNull List changeLists, @NotNull List unversionedFiles) { + if (myView.isShowCheckboxes() && !myView.isInclusionEmpty()) { + THashSet possibleInclusion = new THashSet<>(ChangeListChange.HASHING_STRATEGY); + changeLists.forEach(changeList -> possibleInclusion.addAll(changeList.getChanges())); + possibleInclusion.addAll(unversionedFiles); + + myView.retainInclusion(possibleInclusion); + } + } + private void updatePreview(boolean fromModelRefresh) { if (mySplitterComponent != null) { mySplitterComponent.updatePreview(fromModelRefresh); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesTree.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesTree.java index 4f9e032b8733..bba2e7549351 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesTree.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangesTree.java @@ -485,6 +485,13 @@ public abstract class ChangesTree extends Tree implements DataProvider { repaint(); } + public void retainInclusion(@NotNull Collection changes) { + if (myIncludedChanges.retainAll(changes)) { + notifyInclusionListener(); + repaint(); + } + } + public void includeChange(final Object change) { includeChanges(Collections.singleton(change)); } @@ -522,6 +529,10 @@ public abstract class ChangesTree extends Tree implements DataProvider { } } + public boolean isInclusionEmpty() { + return myIncludedChanges.isEmpty(); + } + public boolean isIncluded(final Object change) { return myIncludedChanges.contains(change); }