diff --git a/platform/diff-api/src/com/intellij/diff/merge/external/AutomaticExternalMergeTool.java b/platform/diff-api/src/com/intellij/diff/merge/external/AutomaticExternalMergeTool.java new file mode 100644 index 000000000000..2c1714e91b52 --- /dev/null +++ b/platform/diff-api/src/com/intellij/diff/merge/external/AutomaticExternalMergeTool.java @@ -0,0 +1,14 @@ +package com.intellij.diff.merge.external; + +import com.intellij.diff.merge.MergeRequest; +import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.openapi.project.Project; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public interface AutomaticExternalMergeTool { + ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.diff.merge.external.AutomaticExternalMergeTool"); + + boolean canShow(@NotNull MergeRequest request); + void show(@Nullable Project project, @NotNull MergeRequest request); +} diff --git a/platform/diff-impl/src/com/intellij/diff/DiffManagerImpl.java b/platform/diff-impl/src/com/intellij/diff/DiffManagerImpl.java index cdbbea370e10..21a60828b956 100644 --- a/platform/diff-impl/src/com/intellij/diff/DiffManagerImpl.java +++ b/platform/diff-impl/src/com/intellij/diff/DiffManagerImpl.java @@ -21,6 +21,7 @@ import com.intellij.diff.editor.ChainDiffVirtualFile; import com.intellij.diff.impl.DiffRequestPanelImpl; import com.intellij.diff.impl.DiffWindow; import com.intellij.diff.merge.*; +import com.intellij.diff.merge.external.AutomaticExternalMergeTool; import com.intellij.diff.requests.DiffRequest; import com.intellij.diff.tools.binary.BinaryDiffTool; import com.intellij.diff.tools.dir.DirDiffTool; @@ -124,6 +125,13 @@ public class DiffManagerImpl extends DiffManagerEx { @Override @CalledInAwt public void showMerge(@Nullable Project project, @NotNull MergeRequest request) { + // plugin may provide a better tool for this MergeRequest + AutomaticExternalMergeTool tool = AutomaticExternalMergeTool.EP_NAME.findFirstSafe(mergeTool -> mergeTool.canShow(request)); + if (tool!=null) { + tool.show(project, request); + return; + } + if (ExternalMergeTool.isDefault()) { ExternalMergeTool.show(project, request); return; diff --git a/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml b/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml index 858e7ec70d84..992a7bb1781e 100644 --- a/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml +++ b/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml @@ -282,6 +282,7 @@ +