From 851e833608d35b03aefaefe045aaa4bdd8a7889f Mon Sep 17 00:00:00 2001 From: Nadya Zabrodina Date: Mon, 8 Oct 2018 23:31:57 +0300 Subject: [PATCH] shelf: refactoring - extract methods, inline recycling * create separated methods for 2 cases: 1. only update modified old list 2. update modified old list and create new separated recycled list with unshelved changes; * inline recycled method for second case to avoid useless view update; * update view after all (notify changes); --- .../changes/shelf/ShelveChangesManager.java | 34 +++++++++++++------ 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/ShelveChangesManager.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/ShelveChangesManager.java index c454ea125112..4890fa410880 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/ShelveChangesManager.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/shelf/ShelveChangesManager.java @@ -891,25 +891,39 @@ public class ShelveChangesManager implements JDOMExternalizable, ProjectComponen public void saveRemainingPatches(final ShelvedChangeList changeList, final List remainingPatches, final List remainingBinaries, CommitContext commitContext) { - ShelvedChangeList listCopy; + if (changeList.isRecycled()) { + saveRemainingChangesInList(changeList, remainingPatches, remainingBinaries, commitContext); + } + else { + saveRemainingAndRecycleOthers(changeList, remainingPatches, remainingBinaries, commitContext); + } + notifyStateChanged(); + } + + private void saveRemainingAndRecycleOthers(@NotNull final ShelvedChangeList changeList, final List remainingPatches, + final List remainingBinaries, CommitContext commitContext) { + try { - listCopy = !changeList.isRecycled() ? createChangelistCopy(changeList) : null; + ShelvedChangeList listCopy = createChangelistCopy(changeList); + saveRemainingChangesInList(changeList, remainingPatches, remainingBinaries, commitContext); + + filterShelvedList(listCopy, changeList.getChanges(myProject), changeList.getBinaryFiles()); + listCopy.updateDate(); + listCopy.setRecycled(true); + saveListAsScheme(listCopy); } catch (IOException e) { // do not delete if cannot recycle - return; } + } + + private void saveRemainingChangesInList(@NotNull ShelvedChangeList changeList, + List remainingPatches, + List remainingBinaries, CommitContext commitContext) { writePatchesToFile(myProject, changeList.PATH, remainingPatches, commitContext); changeList.getBinaryFiles().retainAll(remainingBinaries); changeList.clearLoadedChanges(); - if (listCopy != null) { - filterShelvedList(listCopy, changeList.getChanges(myProject), changeList.getBinaryFiles()); - recycleChangeList(listCopy); - // all newly create ShelvedChangeList have to be added to SchemesManger as new scheme - saveListAsScheme(listCopy); - } - notifyStateChanged(); } private void saveListAsScheme(@NotNull ShelvedChangeList list) {