From c9b6e56e0629d5557f2f0ddcbd55195a58f0bf40 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Wed, 14 Mar 2018 14:34:40 +0300 Subject: [PATCH] IDEA-187479 diff: do not show active diff tool in "Diff Settings Popup" Active tool might be a substituted one, so we should not show its "base" tool. --- .../intellij/diff/impl/DiffRequestProcessor.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/platform/diff-impl/src/com/intellij/diff/impl/DiffRequestProcessor.java b/platform/diff-impl/src/com/intellij/diff/impl/DiffRequestProcessor.java index 1bae2d7e1e57..d41c9ac4859a 100644 --- a/platform/diff-impl/src/com/intellij/diff/impl/DiffRequestProcessor.java +++ b/platform/diff-impl/src/com/intellij/diff/impl/DiffRequestProcessor.java @@ -198,8 +198,8 @@ public abstract class DiffRequestProcessor implements Disposable { FrameDiffTool tool = tools.isEmpty() ? ErrorDiffTool.INSTANCE : tools.get(0); if (applySubstitutor) { - DiffTool substitutor = DiffUtil.findToolSubstitutor(tool, myContext, myActiveRequest); - if (substitutor instanceof FrameDiffTool) return (FrameDiffTool)substitutor; + FrameDiffTool substitutor = findToolSubstitutor(tool); + if (substitutor != null) return substitutor; } return tool; @@ -220,8 +220,8 @@ public abstract class DiffRequestProcessor implements Disposable { result.add((FrameDiffTool)tool); } else { - DiffTool substitutor = DiffUtil.findToolSubstitutor(tool, myContext, myActiveRequest); - if (substitutor instanceof FrameDiffTool) { + FrameDiffTool substitutor = findToolSubstitutor(tool); + if (substitutor != null) { result.add((FrameDiffTool)tool); } } @@ -235,6 +235,11 @@ public abstract class DiffRequestProcessor implements Disposable { return DiffUtil.filterSuppressedTools(result); } + private FrameDiffTool findToolSubstitutor(@NotNull DiffTool tool) { + DiffTool substitutor = DiffUtil.findToolSubstitutor(tool, myContext, myActiveRequest); + return substitutor instanceof FrameDiffTool ? (FrameDiffTool)substitutor : null; + } + private void moveToolOnTop(@NotNull DiffTool tool) { myToolOrder.remove(tool); @@ -448,7 +453,8 @@ public abstract class DiffRequestProcessor implements Disposable { List selectToolActions = new ArrayList<>(); for (DiffTool tool : getAvailableFittedTools()) { - if (tool == myState.getActiveTool()) continue; + FrameDiffTool substitutor = findToolSubstitutor(tool); + if (tool == myState.getActiveTool() || substitutor == myState.getActiveTool()) continue; selectToolActions.add(new DiffToolToggleAction(tool)); } DiffUtil.addActionBlock(myPopupActionGroup, selectToolActions);