IDEA-CR-1477: extension point for External Merge tool provided by plugin, see RIDER-33411 UnityYAMLMerge support

(cherry picked from commit 3c8551d52b365fecfac886e2d031ec5b038fd402)

GitOrigin-RevId: d005b1f0a582d6dd70c6903557a3b8ce2b11c0d4
This commit is contained in:
Ivan.Shakhov
2020-05-14 15:24:13 +00:00
committed by intellij-monorepo-bot
parent 184af1e4f5
commit 29b1e3ef39
3 changed files with 23 additions and 0 deletions
@@ -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<AutomaticExternalMergeTool> EP_NAME = ExtensionPointName.create("com.intellij.diff.merge.external.AutomaticExternalMergeTool");
boolean canShow(@NotNull MergeRequest request);
void show(@Nullable Project project, @NotNull MergeRequest request);
}
@@ -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;
@@ -282,6 +282,7 @@
<extensionPoint name="diff.DiffExtension" interface="com.intellij.diff.DiffExtension" dynamic="true"/>
<extensionPoint name="diff.lang.DiffIgnoredRangeProvider" interface="com.intellij.diff.lang.DiffIgnoredRangeProvider" dynamic="true"/>
<extensionPoint name="diff.impl.DiffToolSubstitutor" interface="com.intellij.diff.impl.DiffToolSubstitutor" dynamic="true"/>
<extensionPoint name="diff.tools.external.AutomaticExternalMergeTool" interface="com.intellij.diff.merge.external.AutomaticExternalMergeTool" dynamic="true"/>
<extensionPoint name="testStatusListener" interface="com.intellij.execution.testframework.TestStatusListener"/>
<extensionPoint name="diff.actions.ShowDiffAction.ExtensionProvider"