From 3223cba4e5e076d29724bd0997a3bd2c12acd417 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 16 Nov 2011 11:42:50 +0100 Subject: [PATCH] jar diff in history and change lists --- .../intellij/openapi/diff/DirDiffManager.java | 6 +++++- .../diff/impl/external/BinaryDiffTool.java | 16 +++++++++++++++- .../diff/impl/dir/DirDiffManagerImpl.java | 10 ++++++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/platform/platform-api/src/com/intellij/openapi/diff/DirDiffManager.java b/platform/platform-api/src/com/intellij/openapi/diff/DirDiffManager.java index 915a49a1e054..24212e36eb29 100644 --- a/platform/platform-api/src/com/intellij/openapi/diff/DirDiffManager.java +++ b/platform/platform-api/src/com/intellij/openapi/diff/DirDiffManager.java @@ -32,7 +32,11 @@ public abstract class DirDiffManager { return ServiceManager.getService(project, DirDiffManager.class); } - public abstract void showDiff(@NotNull DiffElement dir1, @NotNull DiffElement dir2, DirDiffSettings settings, WindowListener windowListener); + public abstract void showDiff(@NotNull DiffElement dir1, @NotNull DiffElement dir2, DirDiffSettings settings, @Nullable WindowListener windowListener); + + public abstract void showDiff(@NotNull DiffElement dir1, @NotNull DiffElement dir2, DirDiffSettings settings); + + public abstract void showDiff(@NotNull DiffElement dir1, @NotNull DiffElement dir2); public abstract boolean canShow(@NotNull DiffElement dir1, @NotNull DiffElement dir2); diff --git a/platform/platform-impl/src/com/intellij/openapi/diff/impl/external/BinaryDiffTool.java b/platform/platform-impl/src/com/intellij/openapi/diff/impl/external/BinaryDiffTool.java index 90d5ea7cf3cf..10332a76965b 100644 --- a/platform/platform-impl/src/com/intellij/openapi/diff/impl/external/BinaryDiffTool.java +++ b/platform/platform-impl/src/com/intellij/openapi/diff/impl/external/BinaryDiffTool.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.diff.impl.external; +import com.intellij.ide.diff.DiffElement; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.diff.*; import com.intellij.openapi.fileEditor.FileEditorProvider; @@ -79,6 +80,15 @@ public class BinaryDiffTool implements DiffTool { } }.show(); return; + } else { + final DirDiffManager diffManager = DirDiffManager.getInstance(project); + final DiffElement before = diffManager.createDiffElement(src); + final DiffElement after = diffManager.createDiffElement(trg); + + if (before != null && after != null && diffManager.canShow(after, before)) { + diffManager.showDiff(before, after); + return; + } } } } @@ -111,6 +121,10 @@ public class BinaryDiffTool implements DiffTool { } public static boolean canShow(@NotNull Project project, VirtualFile file) { - return file != null && FileEditorProviderManager.getInstance().getProviders(project, file).length > 0; + if (file == null) return false; + if (FileEditorProviderManager.getInstance().getProviders(project, file).length > 0) return true; + + final DirDiffManager diffManager = DirDiffManager.getInstance(project); + return diffManager.createDiffElement(file) != null; } } diff --git a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffManagerImpl.java b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffManagerImpl.java index d803cc50622d..75aca288ce16 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffManagerImpl.java +++ b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffManagerImpl.java @@ -62,6 +62,16 @@ public class DirDiffManagerImpl extends DirDiffManager { } } + @Override + public void showDiff(@NotNull DiffElement dir1, @NotNull DiffElement dir2, DirDiffSettings settings) { + showDiff(dir1, dir2, settings, null); + } + + @Override + public void showDiff(@NotNull DiffElement dir1, @NotNull DiffElement dir2) { + showDiff(dir1, dir2, new DirDiffSettings()); + } + @Override public boolean canShow(@NotNull DiffElement dir1, @NotNull DiffElement dir2) { return dir1.isContainer() && dir2.isContainer();