jar diff in history and change lists

This commit is contained in:
Konstantin Bulenkov
2011-11-16 11:45:05 +01:00
parent 6555b17919
commit 3223cba4e5
3 changed files with 30 additions and 2 deletions
@@ -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);
@@ -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;
}
}
@@ -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();