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) { }