From daec3a55cf31fc28c56972a479806f3681840c13 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Mon, 31 Dec 2012 17:52:00 +0400 Subject: [PATCH] [vcs] Move showMergeDialog overloading method to the base class showMergeDialog(files, provider) and (files) are just handy wrapper for the "main" method with (files, provider, customizer). Move their implementation to AbstractVcsHelper not to force inheritors implement them. --- .../openapi/vcs/AbstractVcsHelper.java | 29 +++++++++++++++---- .../vcs/impl/AbstractVcsHelperImpl.java | 26 ++--------------- .../zmlx/hg4idea/test/HgMockVcsHelper.java | 17 ++++------- 3 files changed, 31 insertions(+), 41 deletions(-) diff --git a/platform/vcs-api/src/com/intellij/openapi/vcs/AbstractVcsHelper.java b/platform/vcs-api/src/com/intellij/openapi/vcs/AbstractVcsHelper.java index b90eee515c20..68500e0a36a5 100644 --- a/platform/vcs-api/src/com/intellij/openapi/vcs/AbstractVcsHelper.java +++ b/platform/vcs-api/src/com/intellij/openapi/vcs/AbstractVcsHelper.java @@ -36,15 +36,20 @@ import org.jetbrains.annotations.Nullable; import java.awt.*; import java.io.File; -import java.util.Arrays; -import java.util.Collection; +import java.util.*; import java.util.List; -import java.util.Map; /** * Component which provides means to invoke different VCS-related services. */ public abstract class AbstractVcsHelper { + + protected final Project myProject; + + protected AbstractVcsHelper(@NotNull Project project) { + myProject = project; + } + public static AbstractVcsHelper getInstance(Project project) { return PeriodicalTasksCloser.getInstance().safeGetService(project, AbstractVcsHelper.class); } @@ -115,14 +120,28 @@ public abstract class AbstractVcsHelper { * {@link #showMergeDialog(java.util.List, com.intellij.openapi.vcs.merge.MergeProvider)} without description. */ @NotNull - public abstract List showMergeDialog(List files, MergeProvider provider); + public final List showMergeDialog(List files, MergeProvider provider) { + return showMergeDialog(files, provider, new MergeDialogCustomizer()); + } /** * {@link #showMergeDialog(java.util.List, com.intellij.openapi.vcs.merge.MergeProvider)} without description and with default merge provider * for the current VCS. */ @NotNull - public abstract List showMergeDialog(List files); + public final List showMergeDialog(List files) { + if (files.isEmpty()) return Collections.emptyList(); + MergeProvider provider = null; + for (VirtualFile virtualFile : files) { + final AbstractVcs vcs = ProjectLevelVcsManager.getInstance(myProject).getVcsFor(virtualFile); + if (vcs != null) { + provider = vcs.getMergeProvider(); + if (provider != null) break; + } + } + if (provider == null) return Collections.emptyList(); + return showMergeDialog(files, provider); + } public abstract void showFileHistory(VcsHistoryProvider vcsHistoryProvider, FilePath path, final AbstractVcs vcs, final String repositoryPath); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/AbstractVcsHelperImpl.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/AbstractVcsHelperImpl.java index 702070d17745..be10b7faa5fd 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/AbstractVcsHelperImpl.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/AbstractVcsHelperImpl.java @@ -88,11 +88,10 @@ import java.util.List; public class AbstractVcsHelperImpl extends AbstractVcsHelper { private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.vcs.impl.AbstractVcsHelperImpl"); - private final Project myProject; private Consumer myCustomHandler = null; - public AbstractVcsHelperImpl(Project project) { - myProject = project; + protected AbstractVcsHelperImpl(@NotNull Project project) { + super(project); } public void openMessagesView(final VcsErrorViewPanel errorTreeView, final String tabDisplayName) { @@ -567,12 +566,6 @@ public class AbstractVcsHelperImpl extends AbstractVcsHelper { } } - @Override - @NotNull - public List showMergeDialog(List files, MergeProvider provider) { - return showMergeDialog(files, provider, new MergeDialogCustomizer()); - } - @Override @NotNull public List showMergeDialog(List files, MergeProvider provider, @NotNull MergeDialogCustomizer mergeDialogCustomizer) { @@ -582,21 +575,6 @@ public class AbstractVcsHelperImpl extends AbstractVcsHelper { return fileMergeDialog.getProcessedFiles(); } - @NotNull - public List showMergeDialog(final List files) { - if (files.isEmpty()) return Collections.emptyList(); - MergeProvider provider = null; - for (VirtualFile virtualFile : files) { - final AbstractVcs vcs = ProjectLevelVcsManager.getInstance(myProject).getVcsFor(virtualFile); - if (vcs != null) { - provider = vcs.getMergeProvider(); - if (provider != null) break; - } - } - if (provider == null) return Collections.emptyList(); - return showMergeDialog(files, provider); - } - private static DiffContent getContentForVersion(final VcsFileRevision version, final File file) throws IOException, VcsException { VirtualFile vFile = LocalFileSystem.getInstance().findFileByIoFile(file); if (vFile != null && (version instanceof CurrentRevision) && !vFile.getFileType().isBinary()) { diff --git a/plugins/hg4idea/testSrc/org/zmlx/hg4idea/test/HgMockVcsHelper.java b/plugins/hg4idea/testSrc/org/zmlx/hg4idea/test/HgMockVcsHelper.java index c8ffe9e6b71d..301fd8be594b 100644 --- a/plugins/hg4idea/testSrc/org/zmlx/hg4idea/test/HgMockVcsHelper.java +++ b/plugins/hg4idea/testSrc/org/zmlx/hg4idea/test/HgMockVcsHelper.java @@ -16,6 +16,7 @@ package org.zmlx.hg4idea.test; import com.intellij.ide.errorTreeView.HotfixData; +import com.intellij.openapi.project.Project; import com.intellij.openapi.vcs.*; import com.intellij.openapi.vcs.annotate.AnnotationProvider; import com.intellij.openapi.vcs.annotate.FileAnnotation; @@ -50,6 +51,10 @@ public class HgMockVcsHelper extends AbstractVcsHelper { private Collection myListeners = new THashSet(); + public HgMockVcsHelper(@NotNull Project project) { + super(project); + } + @Override public void showErrors(List abstractVcsExceptions, @NotNull String tabDisplayName) { } @@ -118,18 +123,6 @@ public class HgMockVcsHelper extends AbstractVcsHelper { return null; } - @NotNull - @Override - public List showMergeDialog(List files, MergeProvider provider) { - return null; - } - - @NotNull - @Override - public List showMergeDialog(List files) { - return null; - } - @Override public void showFileHistory(VcsHistoryProvider vcsHistoryProvider, FilePath path, AbstractVcs vcs, String repositoryPath) { }