From a304b4a92353ff744b336a3285e32df21d3b75ef Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Fri, 15 May 2015 19:38:23 +0300 Subject: [PATCH] diff: move context hints update/process into base class * avoid possible issues with dispose() order - we want to update hints before anything is destroyed --- .../diff/tools/binary/BinaryDiffViewer.java | 18 ++++++++---------- .../tools/fragmented/OnesideDiffViewer.java | 8 +++++--- .../diff/tools/simple/SimpleDiffViewer.java | 4 +++- .../simple/SimpleThreesideDiffViewer.java | 2 ++ .../diff/tools/util/base/DiffViewerBase.java | 11 +++++++++++ .../threeside/ThreesideTextDiffViewer.java | 14 ++++++-------- .../util/twoside/TwosideTextDiffViewer.java | 14 ++++++-------- 7 files changed, 41 insertions(+), 30 deletions(-) diff --git a/platform/diff-impl/src/com/intellij/diff/tools/binary/BinaryDiffViewer.java b/platform/diff-impl/src/com/intellij/diff/tools/binary/BinaryDiffViewer.java index dd96392a2f9e..5b6fec5aaec2 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/binary/BinaryDiffViewer.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/binary/BinaryDiffViewer.java @@ -118,23 +118,18 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase { installEditorListeners(); } - @Override - @CalledInAwt - protected void onInit() { - super.onInit(); - processContextHints(); - } - @Override @CalledInAwt public void onDispose() { - updateContextHints(); destroyEditorListeners(); destroyEditors(); super.onDispose(); } - private void processContextHints() { + @Override + @CalledInAwt + protected void processContextHints() { + super.processContextHints(); if (myEditor1 == null) { myCurrentSide = Side.RIGHT; } @@ -147,7 +142,10 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase { } } - private void updateContextHints() { + @Override + @CalledInAwt + protected void updateContextHints() { + super.updateContextHints(); if (myEditor1 != null && myEditor2 != null) { myContext.putUserData(DiffUserDataKeys.PREFERRED_FOCUS_SIDE, myCurrentSide); } diff --git a/platform/diff-impl/src/com/intellij/diff/tools/fragmented/OnesideDiffViewer.java b/platform/diff-impl/src/com/intellij/diff/tools/fragmented/OnesideDiffViewer.java index 0a897967f03f..b40ca61e9af3 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/fragmented/OnesideDiffViewer.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/fragmented/OnesideDiffViewer.java @@ -149,7 +149,6 @@ public class OnesideDiffViewer extends TextDiffViewerBase { @CalledInAwt protected void onInit() { super.onInit(); - processContextHints(); installTypingSupport(); myPanel.setLoadingContent(); // We need loading panel only for initial rediff() } @@ -157,21 +156,24 @@ public class OnesideDiffViewer extends TextDiffViewerBase { @Override @CalledInAwt protected void onDispose() { - updateContextHints(); - EditorFactory.getInstance().releaseEditor(myEditor); super.onDispose(); + EditorFactory.getInstance().releaseEditor(myEditor); } + @Override @CalledInAwt protected void processContextHints() { + super.processContextHints(); Side side = DiffUtil.getUserData(myRequest, myContext, DiffUserDataKeys.MASTER_SIDE); if (side != null && side.select(myActualContent1, myActualContent2) != null) myMasterSide = side; myInitialScrollHelper.processContext(myRequest); } + @Override @CalledInAwt protected void updateContextHints() { + super.updateContextHints(); myInitialScrollHelper.updateContext(myRequest); myFoldingModel.updateContext(myRequest, getFoldingModelSettings()); } diff --git a/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleDiffViewer.java b/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleDiffViewer.java index b564ca219ea8..4072c5bf5200 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleDiffViewer.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleDiffViewer.java @@ -161,16 +161,18 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { } @Override + @CalledInAwt protected void processContextHints() { super.processContextHints(); myInitialScrollHelper.processContext(myRequest); } @Override + @CalledInAwt protected void updateContextHints() { + super.updateContextHints(); if (myFoldingModel != null) myFoldingModel.updateContext(myRequest, getFoldingModelSettings()); myInitialScrollHelper.updateContext(myRequest); - super.updateContextHints(); } // diff --git a/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffViewer.java b/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffViewer.java index ec42e74ab28f..2e23d720f70a 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffViewer.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffViewer.java @@ -138,12 +138,14 @@ public class SimpleThreesideDiffViewer extends ThreesideTextDiffViewer { } @Override + @CalledInAwt protected void processContextHints() { super.processContextHints(); myInitialScrollHelper.processContext(myRequest); } @Override + @CalledInAwt protected void updateContextHints() { super.updateContextHints(); myFoldingModel.updateContext(myRequest, getFoldingModelSettings()); diff --git a/platform/diff-impl/src/com/intellij/diff/tools/util/base/DiffViewerBase.java b/platform/diff-impl/src/com/intellij/diff/tools/util/base/DiffViewerBase.java index 580239244dc0..e519314f7079 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/util/base/DiffViewerBase.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/util/base/DiffViewerBase.java @@ -58,6 +58,7 @@ public abstract class DiffViewerBase implements DiffViewer, DataProvider { @NotNull public final FrameDiffTool.ToolbarComponents init() { + processContextHints(); onInit(); FrameDiffTool.ToolbarComponents components = new FrameDiffTool.ToolbarComponents(); @@ -81,6 +82,8 @@ public abstract class DiffViewerBase implements DiffViewer, DataProvider { myDisposed = true; abortRediff(); + updateContextHints(); + onDispose(); } }; @@ -89,6 +92,14 @@ public abstract class DiffViewerBase implements DiffViewer, DataProvider { UIUtil.invokeLaterIfNeeded(doDispose); } + @CalledInAwt + protected void processContextHints() { + } + + @CalledInAwt + protected void updateContextHints() { + } + @CalledInAwt public final void scheduleRediff() { if (isDisposed()) return; diff --git a/platform/diff-impl/src/com/intellij/diff/tools/util/threeside/ThreesideTextDiffViewer.java b/platform/diff-impl/src/com/intellij/diff/tools/util/threeside/ThreesideTextDiffViewer.java index 0346a753215e..86eb56b42e7c 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/util/threeside/ThreesideTextDiffViewer.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/util/threeside/ThreesideTextDiffViewer.java @@ -110,27 +110,25 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { myEditorSettingsAction.applyDefaults(); } - @Override - @CalledInAwt - protected void onInit() { - super.onInit(); - processContextHints(); - } - @Override @CalledInAwt protected void onDispose() { - updateContextHints(); super.onDispose(); destroyEditors(); } + @Override + @CalledInAwt protected void processContextHints() { + super.processContextHints(); ThreeSide side = myContext.getUserData(DiffUserDataKeys.PREFERRED_FOCUS_THREESIDE); if (side != null) myCurrentSide = side; } + @Override + @CalledInAwt protected void updateContextHints() { + super.updateContextHints(); myContext.putUserData(DiffUserDataKeys.PREFERRED_FOCUS_THREESIDE, myCurrentSide); } diff --git a/platform/diff-impl/src/com/intellij/diff/tools/util/twoside/TwosideTextDiffViewer.java b/platform/diff-impl/src/com/intellij/diff/tools/util/twoside/TwosideTextDiffViewer.java index 2f0d5eb48367..c7109814f010 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/util/twoside/TwosideTextDiffViewer.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/util/twoside/TwosideTextDiffViewer.java @@ -113,22 +113,17 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase { new MyOpenInEditorWithMouseAction().register(getEditors()); } - @Override - @CalledInAwt - protected void onInit() { - super.onInit(); - processContextHints(); - } - @Override @CalledInAwt protected void onDispose() { - updateContextHints(); super.onDispose(); destroyEditors(); } + @Override + @CalledInAwt protected void processContextHints() { + super.processContextHints(); if (myEditor1 == null) { myCurrentSide = Side.RIGHT; } @@ -141,7 +136,10 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase { } } + @Override + @CalledInAwt protected void updateContextHints() { + super.updateContextHints(); if (myEditor1 != null && myEditor2 != null) { myContext.putUserData(DiffUserDataKeys.PREFERRED_FOCUS_SIDE, myCurrentSide); }