svn: Refactored "QuickMergeInteraction" - @NotNull

This commit is contained in:
Konstantin Kolosovsky
2016-10-11 04:28:23 +03:00
parent 6455b1d78e
commit 8cc5e9bf08
8 changed files with 79 additions and 58 deletions
@@ -16,13 +16,13 @@
package org.jetbrains.idea.svn.integrate;
import com.intellij.openapi.diagnostic.Logger;
import org.jetbrains.annotations.CalledInAny;
import com.intellij.openapi.vcs.VcsException;
import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.continuation.ContinuationContext;
import com.intellij.util.continuation.TaskDescriptor;
import com.intellij.util.continuation.Where;
import org.jetbrains.annotations.CalledInAny;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.idea.svn.SvnUtil;
@@ -87,7 +87,7 @@ public abstract class BaseMergeTask extends TaskDescriptor {
}
@CalledInAny
protected void finishWithError(@NotNull ContinuationContext context, @NotNull final String message, final boolean isError) {
protected void finishWithError(@NotNull ContinuationContext context, @NotNull String message, boolean isError) {
LOG.info((isError ? "Error: " : "Info: ") + message);
context.next(new TaskDescriptor(message, Where.AWT) {
@Override
@@ -99,9 +99,7 @@ public abstract class BaseMergeTask extends TaskDescriptor {
}
@CalledInAny
protected void finishWithError(@NotNull ContinuationContext context,
final String message,
@Nullable final List<VcsException> exceptions) {
protected void finishWithError(@NotNull ContinuationContext context, @NotNull String message, @NotNull List<VcsException> exceptions) {
log(message, exceptions);
context.cancelEverything();
@@ -113,11 +111,9 @@ public abstract class BaseMergeTask extends TaskDescriptor {
});
}
private static void log(String message, @Nullable List<VcsException> exceptions) {
if (exceptions != null) {
for (VcsException exception : exceptions) {
LOG.info(message, exception);
}
private static void log(@NotNull String message, @NotNull List<VcsException> exceptions) {
for (VcsException exception : exceptions) {
LOG.info(message, exception);
}
}
}
@@ -25,37 +25,42 @@ import org.jetbrains.idea.svn.mergeinfo.MergeChecker;
import java.util.List;
/**
* Created with IntelliJ IDEA.
* User: Irina.Chernushina
* Date: 3/26/13
* Time: 8:29 PM
*/
public interface QuickMergeInteraction {
void setTitle(@NotNull final String title);
QuickMergeContentsVariants selectMergeVariant();
boolean shouldContinueSwitchedRootFound();
boolean shouldReintegrate(@NotNull final String sourceUrl, @NotNull final String targetUrl);
void setTitle(@NotNull String title);
@NotNull
SelectMergeItemsResult selectMergeItems(final List<CommittedChangeList> lists, final String mergeTitle, final MergeChecker mergeChecker);
QuickMergeContentsVariants selectMergeVariant();
boolean shouldContinueSwitchedRootFound();
boolean shouldReintegrate(@NotNull String sourceUrl, @NotNull String targetUrl);
@NotNull
SelectMergeItemsResult selectMergeItems(@NotNull List<CommittedChangeList> lists,
@NotNull String mergeTitle,
@NotNull MergeChecker mergeChecker);
@NotNull
LocalChangesAction selectLocalChangesAction(boolean mergeAll);
void showIntersectedLocalPaths(final List<FilePath> paths);
void showIntersectedLocalPaths(@NotNull List<FilePath> paths);
void showErrors(final String message, final List<VcsException> exceptions);
void showErrors(final String message, final boolean isError);
void showErrors(@NotNull String message, @NotNull List<VcsException> exceptions);
void showErrors(@NotNull String message, boolean isError);
@NotNull
List<CommittedChangeList> showRecentListsForSelection(@NotNull List<CommittedChangeList> list,
@NotNull String mergeTitle,
@NotNull MergeChecker mergeChecker,
@NotNull PairConsumer<Long, MergeDialogI> loader, boolean everyThingLoaded);
@NotNull PairConsumer<Long, MergeDialogI> loader,
boolean everyThingLoaded);
interface SelectMergeItemsResult {
@NotNull
QuickMergeContentsVariants getResultCode();
@NotNull
List<CommittedChangeList> getSelectedLists();
}
}
@@ -27,11 +27,14 @@ import com.intellij.openapi.vcs.ui.VcsBalloonProblemNotifier;
import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList;
import com.intellij.util.PairConsumer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.idea.svn.dialogs.*;
import org.jetbrains.idea.svn.dialogs.IntersectingLocalChangesPanel;
import org.jetbrains.idea.svn.dialogs.MergeDialogI;
import org.jetbrains.idea.svn.mergeinfo.MergeChecker;
import java.util.List;
import static java.util.Collections.emptyList;
/**
* Created with IntelliJ IDEA.
* User: Irina.Chernushina
@@ -51,6 +54,7 @@ public class QuickMergeInteractionImpl implements QuickMergeInteraction {
myTitle = title;
}
@NotNull
@Override
public QuickMergeContentsVariants selectMergeVariant() {
final QuickMergeWayOptionsPanel panel = new QuickMergeWayOptionsPanel();
@@ -70,19 +74,22 @@ public class QuickMergeInteractionImpl implements QuickMergeInteraction {
}
@Override
public boolean shouldReintegrate(@NotNull final String sourceUrl, @NotNull final String targetUrl) {
public boolean shouldReintegrate(@NotNull String sourceUrl, @NotNull String targetUrl) {
return prompt("<html><body>You are going to reintegrate changes.<br><br>This will make branch '" + sourceUrl +
"' <b>no longer usable for further work</b>." +
"<br>It will not be able to correctly absorb new trunk (" + targetUrl +
") changes,<br>nor can this branch be properly reintegrated to trunk again.<br><br>Are you sure?</body></html>");
"' <b>no longer usable for further work</b>." +
"<br>It will not be able to correctly absorb new trunk (" + targetUrl +
") changes,<br>nor can this branch be properly reintegrated to trunk again.<br><br>Are you sure?</body></html>");
}
@NotNull
@Override
public SelectMergeItemsResult selectMergeItems(List<CommittedChangeList> lists, String mergeTitle, MergeChecker mergeChecker) {
public SelectMergeItemsResult selectMergeItems(@NotNull List<CommittedChangeList> lists,
@NotNull String mergeTitle,
@NotNull MergeChecker mergeChecker) {
final ToBeMergedDialog dialog = new ToBeMergedDialog(myProject, lists, mergeTitle, mergeChecker, null);
dialog.show();
return new SelectMergeItemsResult() {
@NotNull
@Override
public QuickMergeContentsVariants getResultCode() {
final int code = dialog.getExitCode();
@@ -92,6 +99,7 @@ public class QuickMergeInteractionImpl implements QuickMergeInteraction {
return DialogWrapper.OK_EXIT_CODE == code ? QuickMergeContentsVariants.select : QuickMergeContentsVariants.cancel;
}
@NotNull
@Override
public List<CommittedChangeList> getSelectedLists() {
return dialog.getSelected();
@@ -119,21 +127,22 @@ public class QuickMergeInteractionImpl implements QuickMergeInteraction {
}
@Override
public void showIntersectedLocalPaths(final List<FilePath> paths) {
public void showIntersectedLocalPaths(@NotNull List<FilePath> paths) {
IntersectingLocalChangesPanel.showInVersionControlToolWindow(myProject, myTitle + ", local changes intersection",
paths, "The following file(s) have local changes that will intersect with merge changes:");
}
@Override
public void showErrors(String message, List<VcsException> exceptions) {
public void showErrors(@NotNull String message, @NotNull List<VcsException> exceptions) {
AbstractVcsHelper.getInstance(myProject).showErrors(exceptions, message);
}
@Override
public void showErrors(String message, boolean isError) {
public void showErrors(@NotNull String message, boolean isError) {
VcsBalloonProblemNotifier.showOverChangesView(myProject, message, isError ? MessageType.ERROR : MessageType.WARNING);
}
@NotNull
@Override
public List<CommittedChangeList> showRecentListsForSelection(@NotNull List<CommittedChangeList> list,
@NotNull String mergeTitle,
@@ -148,10 +157,10 @@ public class QuickMergeInteractionImpl implements QuickMergeInteraction {
if (DialogWrapper.OK_EXIT_CODE == dialog.getExitCode()) {
return dialog.getSelected();
}
return null;
return emptyList();
}
private boolean prompt(final String question) {
private boolean prompt(@NotNull String question) {
return Messages.showOkCancelDialog(myProject, question, myTitle, Messages.getQuestionIcon()) == Messages.OK;
}
}
@@ -18,6 +18,7 @@ package org.jetbrains.idea.svn.integrate;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.MultiLineLabelUI;
import com.intellij.util.ui.JBUI;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.event.ActionEvent;
@@ -57,7 +58,7 @@ public class QuickMergeWayOptionsPanel {
myFindsWhereOneOfLabel.setBorder(JBUI.Borders.emptyBottom(10));
}
private ActionListener setCodeAndClose(final QuickMergeContentsVariants variant) {
private ActionListener setCodeAndClose(@NotNull QuickMergeContentsVariants variant) {
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
@@ -75,6 +76,7 @@ public class QuickMergeWayOptionsPanel {
myWrapper = wrapper;
}
@NotNull
public QuickMergeContentsVariants getVariant() {
return myVariant;
}
@@ -54,7 +54,7 @@ public class ShowRecentInDialogTask extends BaseMergeTask {
createMoreChangeListsLoader(),
myInitialChangeListsLoader.isLastLoaded());
if (lists != null && !lists.isEmpty()) {
if (!lists.isEmpty()) {
runChangeListsMerge(context, lists, createBranchCopyPoint(), myMergeContext.getTitle());
}
else {
@@ -96,9 +96,9 @@ public class ToBeMergedDialog extends DialogWrapper implements MergeDialogI {
private ToBeMergedDialog.MoreXAction myMore500Action;
public ToBeMergedDialog(final Project project,
final List<CommittedChangeList> lists,
@NotNull List<CommittedChangeList> lists,
final String title,
final MergeChecker mergeChecker,
@NotNull MergeChecker mergeChecker,
final PairConsumer<Long, MergeDialogI> moreLoader) {
super(project, true);
myMoreLoader = moreLoader;
@@ -30,6 +30,7 @@ import java.util.List;
import static com.intellij.util.containers.ContainerUtil.isEmpty;
import static com.intellij.util.containers.ContainerUtil.newArrayList;
import static com.intellij.util.containers.ContainerUtilRt.emptyList;
public class QuickMergeTestInteraction implements QuickMergeInteraction {
@@ -46,12 +47,13 @@ public class QuickMergeTestInteraction implements QuickMergeInteraction {
public void setTitle(@NotNull String title) {
}
@NotNull
@Override
public QuickMergeContentsVariants selectMergeVariant() {
return myMergeVariant;
}
public void setMergeVariant(QuickMergeContentsVariants mergeVariant) {
public void setMergeVariant(@NotNull QuickMergeContentsVariants mergeVariant) {
myMergeVariant = mergeVariant;
}
@@ -67,27 +69,32 @@ public class QuickMergeTestInteraction implements QuickMergeInteraction {
@NotNull
@Override
public SelectMergeItemsResult selectMergeItems(List<CommittedChangeList> lists, String mergeTitle, MergeChecker mergeChecker) {
public SelectMergeItemsResult selectMergeItems(@NotNull List<CommittedChangeList> lists,
@NotNull String mergeTitle,
@NotNull MergeChecker mergeChecker) {
return new SelectMergeItemsResult() {
@NotNull
@Override
public QuickMergeContentsVariants getResultCode() {
return QuickMergeContentsVariants.all;
}
@NotNull
@Override
public List<CommittedChangeList> getSelectedLists() {
return null;
return emptyList();
}
};
}
@NotNull
@Override
public List<CommittedChangeList> showRecentListsForSelection(@NotNull List<CommittedChangeList> list,
@NotNull String mergeTitle,
@NotNull MergeChecker mergeChecker,
@NotNull PairConsumer<Long, MergeDialogI> loader,
boolean everyThingLoaded) {
return null;
return emptyList();
}
@NotNull
@@ -97,11 +104,11 @@ public class QuickMergeTestInteraction implements QuickMergeInteraction {
}
@Override
public void showIntersectedLocalPaths(List<FilePath> paths) {
public void showIntersectedLocalPaths(@NotNull List<FilePath> paths) {
}
@Override
public void showErrors(String message, List<VcsException> exceptions) {
public void showErrors(@NotNull String message, @NotNull List<VcsException> exceptions) {
if (!isEmpty(exceptions)) {
myExceptions.addAll(exceptions);
}
@@ -111,7 +118,7 @@ public class QuickMergeTestInteraction implements QuickMergeInteraction {
}
@Override
public void showErrors(String message, boolean isError) {
public void showErrors(@NotNull String message, boolean isError) {
if (isError) {
myExceptions.add(new RuntimeException(message));
} else {
@@ -57,6 +57,8 @@ import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import static java.util.stream.Collectors.toList;
/**
* Created with IntelliJ IDEA.
* User: Irina.Chernushina
@@ -172,6 +174,7 @@ public class SvnQuickMergeTest extends Svn17TestCase {
// by default merges all
final AtomicReference<String> selectionError = new AtomicReference<>();
QuickMergeTestInteraction testInteraction = new QuickMergeTestInteraction(true) {
@NotNull
@Override
public List<CommittedChangeList> showRecentListsForSelection(@NotNull List<CommittedChangeList> list,
@NotNull String mergeTitle,
@@ -259,6 +262,7 @@ public class SvnQuickMergeTest extends Svn17TestCase {
// by default merges all
final AtomicReference<String> selectionError = new AtomicReference<>();
QuickMergeTestInteraction testInteraction = new QuickMergeTestInteraction(true) {
@NotNull
@Override
public List<CommittedChangeList> showRecentListsForSelection(@NotNull List<CommittedChangeList> list,
@NotNull String mergeTitle,
@@ -329,24 +333,22 @@ public class SvnQuickMergeTest extends Svn17TestCase {
QuickMergeTestInteraction testInteraction = new QuickMergeTestInteraction(true) {
@NotNull
@Override
public SelectMergeItemsResult selectMergeItems(final List<CommittedChangeList> lists,
String mergeTitle,
MergeChecker mergeChecker) {
public SelectMergeItemsResult selectMergeItems(@NotNull List<CommittedChangeList> lists,
@NotNull String mergeTitle,
@NotNull MergeChecker mergeChecker) {
return new SelectMergeItemsResult() {
@NotNull
@Override
public QuickMergeContentsVariants getResultCode() {
return QuickMergeContentsVariants.select;
}
@NotNull
@Override
public List<CommittedChangeList> getSelectedLists() {
final List<CommittedChangeList> result = new ArrayList<>();
for (CommittedChangeList list : lists) {
if (numberBefore + 1 == list.getNumber() || numberBefore + 2 == list.getNumber()) {
result.add(list);
}
}
return result;
return lists.stream()
.filter(list -> numberBefore + 1 == list.getNumber() || numberBefore + 2 == list.getNumber())
.collect(toList());
}
};
}