From a5e00ef5fc28a1907e536a917b137d5d00734ba6 Mon Sep 17 00:00:00 2001 From: irengrig Date: Tue, 21 Feb 2012 17:20:26 +0400 Subject: [PATCH] VCS: show diff: do not show empty contents panel & NPE fix --- .../openapi/diff/impl/CompositeDiffPanel.java | 1 + .../diff/impl/external/FrameDiffTool.java | 16 ++++++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/diff/impl/CompositeDiffPanel.java b/platform/platform-impl/src/com/intellij/openapi/diff/impl/CompositeDiffPanel.java index 31232ef27eeb..a823d733d9cf 100644 --- a/platform/platform-impl/src/com/intellij/openapi/diff/impl/CompositeDiffPanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/diff/impl/CompositeDiffPanel.java @@ -71,6 +71,7 @@ public class CompositeDiffPanel implements DiffViewer { viewer.setDiffRequest(diffRequest); } else { final DiffViewer newViewer = myRequest.viewerForRequest(myWindow, myParentDisposable, key, diffRequest); + if (newViewer == null) continue; myMap.put(key, newViewer); final Content content = myUi.createContent(key, newViewer.getComponent(), key, null, newViewer.getPreferredFocusedComponent()); content.setCloseable(false); diff --git a/platform/platform-impl/src/com/intellij/openapi/diff/impl/external/FrameDiffTool.java b/platform/platform-impl/src/com/intellij/openapi/diff/impl/external/FrameDiffTool.java index d08f609b6457..c7d15dcbf4f3 100644 --- a/platform/platform-impl/src/com/intellij/openapi/diff/impl/external/FrameDiffTool.java +++ b/platform/platform-impl/src/com/intellij/openapi/diff/impl/external/FrameDiffTool.java @@ -48,7 +48,7 @@ class FrameDiffTool implements DiffTool { boolean shouldOpenDialog = shouldOpenDialog(hints); if (shouldOpenDialog) { final DialogBuilder builder = new DialogBuilder(request.getProject()); - DiffPanelImpl diffPanel = createDiffPanelIfShouldShow(request, builder.getWindow(), builder); + DiffPanelImpl diffPanel = createDiffPanelIfShouldShow(request, builder.getWindow(), builder, true); if (diffPanel == null) { Disposer.dispose(builder); return; @@ -83,7 +83,7 @@ class FrameDiffTool implements DiffTool { } else { final FrameWrapper frameWrapper = new FrameWrapper(request.getProject(), request.getGroupKey()); - DiffPanelImpl diffPanel = createDiffPanelIfShouldShow(request, frameWrapper.getFrame(), frameWrapper); + DiffPanelImpl diffPanel = createDiffPanelIfShouldShow(request, frameWrapper.getFrame(), frameWrapper, true); if (diffPanel == null) { Disposer.dispose(frameWrapper); return; @@ -134,9 +134,10 @@ class FrameDiffTool implements DiffTool { }*/ @Nullable - private static DiffPanelImpl createDiffPanelIfShouldShow(DiffRequest request, Window window, @NotNull Disposable parentDisposable) { + private static DiffPanelImpl createDiffPanelIfShouldShow(DiffRequest request, Window window, @NotNull Disposable parentDisposable, + final boolean showMessage) { DiffPanelImpl diffPanel = (DiffPanelImpl)DiffManagerImpl.createDiffPanel(request, window, parentDisposable); - if (checkNoDifferenceAndNotify(diffPanel, request, window)) { + if (checkNoDifferenceAndNotify(diffPanel, request, window, showMessage)) { Disposer.dispose(diffPanel); diffPanel = null; } @@ -154,7 +155,7 @@ class FrameDiffTool implements DiffTool { return KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow() instanceof JDialog; } - private static boolean checkNoDifferenceAndNotify(DiffPanel diffPanel, DiffRequest data, final Window window) { + private static boolean checkNoDifferenceAndNotify(DiffPanel diffPanel, DiffRequest data, final Window window, final boolean showMessage) { if (!diffPanel.hasDifferences() && !data.getHints().contains(HINT_ALLOW_NO_DIFFERENCES)) { DiffManagerImpl manager = (DiffManagerImpl) DiffManager.getInstance(); if (!Comparing.equal(manager.getComparisonPolicy(), ComparisonPolicy.DEFAULT)) { @@ -170,6 +171,9 @@ class FrameDiffTool implements DiffTool { if (hasDiffs) return false; } + if (! showMessage) { + return true; + } return !askForceOpenDiff(data); } return false; @@ -208,6 +212,6 @@ class FrameDiffTool implements DiffTool { @Override public DiffViewer createComponent(String title, DiffRequest request, Window window, Disposable parentDisposable) { - return createDiffPanelIfShouldShow(request, window, parentDisposable); + return createDiffPanelIfShouldShow(request, window, parentDisposable, false); } }