From edd72f64a3eb2206358f26c1d10b154a5125c749 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Mon, 6 Apr 2015 19:55:44 +0300 Subject: [PATCH 1/2] diff: extract common focus tracking logic --- .../diff/tools/binary/BinaryDiffViewer.java | 79 ++------ .../diff/tools/util/FocusTrackerSupport.java | 188 ++++++++++++++++++ .../threeside/ThreesideTextDiffViewer.java | 55 ++--- .../util/twoside/TwosideTextDiffViewer.java | 63 ++---- 4 files changed, 234 insertions(+), 151 deletions(-) create mode 100644 platform/diff-impl/src/com/intellij/diff/tools/util/FocusTrackerSupport.java 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 5b6fec5aaec2..eea633f3c40e 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 @@ -24,10 +24,10 @@ import com.intellij.diff.contents.FileContent; import com.intellij.diff.requests.ContentDiffRequest; import com.intellij.diff.requests.DiffRequest; import com.intellij.diff.tools.util.DiffNotifications; +import com.intellij.diff.tools.util.FocusTrackerSupport; import com.intellij.diff.tools.util.SimpleDiffPanel; import com.intellij.diff.tools.util.StatusPanel; import com.intellij.diff.tools.util.base.ListenerDiffViewerBase; -import com.intellij.diff.util.DiffUserDataKeys; import com.intellij.diff.util.DiffUtil; import com.intellij.diff.util.Side; import com.intellij.openapi.Disposable; @@ -61,8 +61,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; -import java.awt.event.FocusAdapter; -import java.awt.event.FocusEvent; import java.io.IOException; import java.util.Arrays; import java.util.List; @@ -79,10 +77,7 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase { @Nullable private final FileEditorProvider myEditorProvider1; @Nullable private final FileEditorProvider myEditorProvider2; - @Nullable private final MyEditorFocusListener myEditorFocusListener1; - @Nullable private final MyEditorFocusListener myEditorFocusListener2; - - @NotNull private Side myCurrentSide = Side.LEFT; + @NotNull private final FocusTrackerSupport.TwosideFocusTrackerSupport myFocusTrackerSupport; public BinaryDiffViewer(@NotNull DiffContext context, @NotNull DiffRequest request) { super(context, (ContentDiffRequest)request); @@ -96,16 +91,7 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase { myEditorProvider2 = editors.second.second; assert myEditor1 != null || myEditor2 != null; - if (myEditor1 != null && myEditor2 != null) { - myEditorFocusListener1 = new MyEditorFocusListener(Side.LEFT); - myEditorFocusListener2 = new MyEditorFocusListener(Side.RIGHT); - } - else { - myEditorFocusListener1 = null; - myEditorFocusListener2 = null; - } - - + myFocusTrackerSupport = new FocusTrackerSupport.TwosideFocusTrackerSupport(myEditor1, myEditor2); myContentPanel = new BinaryContentPanel(titlePanel, myEditor1, myEditor2); myPanel = new SimpleDiffPanel(myContentPanel, this, context); @@ -113,15 +99,10 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase { myStatusPanel = new MyStatusPanel(); new MyFocusOppositePaneAction().setupAction(myPanel); - - - installEditorListeners(); } - @Override @CalledInAwt public void onDispose() { - destroyEditorListeners(); destroyEditors(); super.onDispose(); } @@ -130,25 +111,14 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase { @CalledInAwt protected void processContextHints() { super.processContextHints(); - if (myEditor1 == null) { - myCurrentSide = Side.RIGHT; - } - else if (myEditor2 == null) { - myCurrentSide = Side.LEFT; - } - else { - Side side = myContext.getUserData(DiffUserDataKeys.PREFERRED_FOCUS_SIDE); - if (side != null) myCurrentSide = side; - } + myFocusTrackerSupport.processContextHints(myRequest, myContext); } @Override @CalledInAwt protected void updateContextHints() { super.updateContextHints(); - if (myEditor1 != null && myEditor2 != null) { - myContext.putUserData(DiffUserDataKeys.PREFERRED_FOCUS_SIDE, myCurrentSide); - } + myFocusTrackerSupport.updateContextHints(myRequest, myContext); } // @@ -222,20 +192,6 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase { } } - private void installEditorListeners() { - if (myEditor1 != null && myEditor2 != null) { - myEditor1.getComponent().addFocusListener(myEditorFocusListener1); - myEditor2.getComponent().addFocusListener(myEditorFocusListener2); - } - } - - private void destroyEditorListeners() { - if (myEditor1 != null && myEditor2 != null) { - myEditor1.getComponent().removeFocusListener(myEditorFocusListener1); - myEditor2.getComponent().removeFocusListener(myEditorFocusListener2); - } - } - // // Diff // @@ -364,8 +320,12 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase { } @NotNull - Side getCurrentSide() { - return myCurrentSide; + public Side getCurrentSide() { + return myFocusTrackerSupport.getCurrentSide(); + } + + public void setCurrentSide(@NotNull Side side) { + myFocusTrackerSupport.setCurrentSide(side); } @Nullable @@ -447,7 +407,7 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase { @Override public void actionPerformed(@NotNull AnActionEvent e) { assert myEditor1 != null && myEditor2 != null; - myCurrentSide = myCurrentSide.other(); + setCurrentSide(getCurrentSide().other()); myPanel.requestFocus(); } @@ -465,7 +425,7 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase { @Override public Object getData(@NonNls String dataId) { if (CommonDataKeys.VIRTUAL_FILE.is(dataId)) { - return DiffUtil.getVirtualFile(myRequest, myCurrentSide); + return DiffUtil.getVirtualFile(myRequest, getCurrentSide()); } return super.getData(dataId); } @@ -476,17 +436,4 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase { return -1; } } - - private class MyEditorFocusListener extends FocusAdapter { - @NotNull private final Side mySide; - - private MyEditorFocusListener(@NotNull Side side) { - mySide = side; - } - - public void focusGained(FocusEvent e) { - if (myEditor1 == null || myEditor2 == null) return; - myCurrentSide = mySide; - } - } } diff --git a/platform/diff-impl/src/com/intellij/diff/tools/util/FocusTrackerSupport.java b/platform/diff-impl/src/com/intellij/diff/tools/util/FocusTrackerSupport.java new file mode 100644 index 000000000000..49030bed6851 --- /dev/null +++ b/platform/diff-impl/src/com/intellij/diff/tools/util/FocusTrackerSupport.java @@ -0,0 +1,188 @@ +/* + * Copyright 2000-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.diff.tools.util; + +import com.intellij.diff.DiffContext; +import com.intellij.diff.requests.DiffRequest; +import com.intellij.diff.util.DiffUserDataKeys; +import com.intellij.diff.util.Side; +import com.intellij.diff.util.ThreeSide; +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.fileEditor.FileEditor; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import javax.swing.*; +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; +import java.util.List; + +public class FocusTrackerSupport { + public static class TwosideFocusTrackerSupport { + @NotNull private Side myCurrentSide; + + private final boolean myDumbMode; + @Nullable private final MyFocusListener myListener1; + @Nullable private final MyFocusListener myListener2; + + public TwosideFocusTrackerSupport(@Nullable Editor editor1, @Nullable Editor editor2) { + this(getComponent(editor1), getComponent(editor2)); + } + + public TwosideFocusTrackerSupport(@Nullable FileEditor editor1, @Nullable FileEditor editor2) { + this(getComponent(editor1), getComponent(editor2)); + } + + public TwosideFocusTrackerSupport(@Nullable JComponent component1, @Nullable JComponent component2) { + assert component1 != null || component2 != null; + myCurrentSide = component2 != null ? Side.RIGHT : Side.LEFT; + + myDumbMode = component1 == null || component2 == null; + if (!myDumbMode) { + myListener1 = new MyFocusListener(Side.LEFT); + component1.addFocusListener(myListener1); + + myListener2 = new MyFocusListener(Side.RIGHT); + component2.addFocusListener(myListener2); + } + else { + myListener1 = null; + myListener2 = null; + } + } + + @NotNull + public Side getCurrentSide() { + return myCurrentSide; + } + + public void setCurrentSide(@NotNull Side side) { + if (myDumbMode) return; + myCurrentSide = side; + } + + public void processContextHints(@NotNull DiffRequest request, @NotNull DiffContext context) { + Side side = context.getUserData(DiffUserDataKeys.PREFERRED_FOCUS_SIDE); + if (side != null) setCurrentSide(side); + } + + public void updateContextHints(@NotNull DiffRequest request, @NotNull DiffContext context) { + if (myDumbMode) return; + context.putUserData(DiffUserDataKeys.PREFERRED_FOCUS_SIDE, myCurrentSide); + } + + private class MyFocusListener extends FocusAdapter { + @NotNull private final Side mySide; + + private MyFocusListener(@NotNull Side side) { + mySide = side; + } + + public void focusGained(FocusEvent e) { + myCurrentSide = mySide; + } + } + } + + public static class ThreesideFocusTrackerSupport { + @NotNull private ThreeSide myCurrentSide; + + private final boolean myDumbMode; + @Nullable private final MyFocusListener myListener1; + @Nullable private final MyFocusListener myListener2; + @Nullable private final MyFocusListener myListener3; + + public ThreesideFocusTrackerSupport(@NotNull List editors) { + this(editors.get(0), editors.get(1), editors.get(2)); + } + + public ThreesideFocusTrackerSupport(@Nullable Editor editor1, @Nullable Editor editor2, @Nullable Editor editor3) { + this(getComponent(editor1), getComponent(editor2), getComponent(editor3)); + } + + public ThreesideFocusTrackerSupport(@Nullable FileEditor editor1, @Nullable FileEditor editor2, @Nullable FileEditor editor3) { + this(getComponent(editor1), getComponent(editor2), getComponent(editor3)); + } + + public ThreesideFocusTrackerSupport(@Nullable JComponent component1, @Nullable JComponent component2, @Nullable JComponent component3) { + assert component1 != null || component2 != null || component3 != null; + myCurrentSide = component2 != null ? ThreeSide.BASE : component1 != null ? ThreeSide.LEFT : ThreeSide.RIGHT; + + boolean c1 = component1 != null; + boolean c2 = component2 != null; + boolean c3 = component3 != null; + myDumbMode = (!c1 && !c2) || (!c1 && !c3) || (!c2 && !c3); // only one not-null element + + if (!myDumbMode) { + myListener1 = component1 != null ? new MyFocusListener(ThreeSide.LEFT) : null; + if (component1 != null) component1.addFocusListener(myListener1); + + myListener2 = component2 != null ? new MyFocusListener(ThreeSide.BASE) : null; + if (component2 != null) component2.addFocusListener(myListener2); + + myListener3 = component3 != null ? new MyFocusListener(ThreeSide.RIGHT) : null; + if (component3 != null) component3.addFocusListener(myListener3); + } + else { + myListener1 = null; + myListener2 = null; + myListener3 = null; + } + } + + @NotNull + public ThreeSide getCurrentSide() { + return myCurrentSide; + } + + public void setCurrentSide(@NotNull ThreeSide side) { + if (myDumbMode || side.select(myListener1, myListener2, myListener3) == null) return; + myCurrentSide = side; + } + + public void processContextHints(@NotNull DiffRequest request, @NotNull DiffContext context) { + ThreeSide side = context.getUserData(DiffUserDataKeys.PREFERRED_FOCUS_THREESIDE); + if (side != null) setCurrentSide(side); + } + + public void updateContextHints(@NotNull DiffRequest request, @NotNull DiffContext context) { + if (myDumbMode) return; + context.putUserData(DiffUserDataKeys.PREFERRED_FOCUS_THREESIDE, myCurrentSide); + } + + private class MyFocusListener extends FocusAdapter { + @NotNull private final ThreeSide mySide; + + private MyFocusListener(@NotNull ThreeSide side) { + mySide = side; + } + + public void focusGained(FocusEvent e) { + myCurrentSide = mySide; + } + } + } + + @Nullable + private static JComponent getComponent(@Nullable Editor editor) { + return editor != null ? editor.getContentComponent() : null; + } + + @Nullable + private static JComponent getComponent(@Nullable FileEditor editor) { + return editor != null ? editor.getComponent() : null; + } +} 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 86eb56b42e7c..7c87c653daf8 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 @@ -24,12 +24,12 @@ import com.intellij.diff.requests.ContentDiffRequest; import com.intellij.diff.requests.DiffRequest; import com.intellij.diff.requests.SimpleDiffRequest; import com.intellij.diff.tools.util.DiffDataKeys; +import com.intellij.diff.tools.util.FocusTrackerSupport.ThreesideFocusTrackerSupport; import com.intellij.diff.tools.util.SimpleDiffPanel; import com.intellij.diff.tools.util.SyncScrollSupport; import com.intellij.diff.tools.util.SyncScrollSupport.ThreesideSyncScrollSupport; import com.intellij.diff.tools.util.base.InitialScrollPositionSupport; import com.intellij.diff.tools.util.base.TextDiffViewerBase; -import com.intellij.diff.util.DiffUserDataKeys; import com.intellij.diff.util.DiffUtil; import com.intellij.diff.util.Side; import com.intellij.diff.util.ThreeSide; @@ -55,8 +55,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; -import java.awt.event.FocusAdapter; -import java.awt.event.FocusEvent; import java.util.ArrayList; import java.util.List; @@ -72,18 +70,14 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { @NotNull protected final List myActualContents; - @NotNull private final List myEditorFocusListeners = - ContainerUtil.newArrayList(new MyEditorFocusListener(ThreeSide.LEFT), - new MyEditorFocusListener(ThreeSide.BASE), - new MyEditorFocusListener(ThreeSide.RIGHT)); @NotNull private final MyVisibleAreaListener myVisibleAreaListener1 = new MyVisibleAreaListener(Side.LEFT); @NotNull private final MyVisibleAreaListener myVisibleAreaListener2 = new MyVisibleAreaListener(Side.RIGHT); @NotNull protected final MySetEditorSettingsAction myEditorSettingsAction; - @Nullable private ThreesideSyncScrollSupport mySyncScrollListener; + @NotNull private final ThreesideFocusTrackerSupport myFocusTrackerSupport; - @NotNull private ThreeSide myCurrentSide; + @Nullable private ThreesideSyncScrollSupport mySyncScrollListener; public ThreesideTextDiffViewer(@NotNull DiffContext context, @NotNull ContentDiffRequest request) { super(context, request); @@ -97,8 +91,7 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { myEditors = createEditors(); List titlePanel = DiffUtil.createTextTitles(myRequest, myEditors); - myCurrentSide = ThreeSide.BASE; - + myFocusTrackerSupport = new ThreesideFocusTrackerSupport(myEditors); myContentPanel = new ThreesideTextContentPanel(myEditors, titlePanel); myPanel = new SimpleDiffPanel(myContentPanel, this, context); @@ -121,15 +114,14 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { @CalledInAwt protected void processContextHints() { super.processContextHints(); - ThreeSide side = myContext.getUserData(DiffUserDataKeys.PREFERRED_FOCUS_THREESIDE); - if (side != null) myCurrentSide = side; + myFocusTrackerSupport.processContextHints(myRequest, myContext); } @Override @CalledInAwt protected void updateContextHints() { super.updateContextHints(); - myContext.putUserData(DiffUserDataKeys.PREFERRED_FOCUS_THREESIDE, myCurrentSide); + myFocusTrackerSupport.updateContextHints(myRequest, myContext); } @NotNull @@ -168,9 +160,6 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { @Override protected void installEditorListeners() { super.installEditorListeners(); - for (int i = 0; i < 3; i++) { - myEditors.get(i).getContentComponent().addFocusListener(myEditorFocusListeners.get(i)); - } myEditors.get(0).getScrollingModel().addVisibleAreaListener(myVisibleAreaListener1); myEditors.get(1).getScrollingModel().addVisibleAreaListener(myVisibleAreaListener1); @@ -190,10 +179,6 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { public void destroyEditorListeners() { super.destroyEditorListeners(); - for (int i = 0; i < 3; i++) { - myEditors.get(i).getContentComponent().removeFocusListener(myEditorFocusListeners.get(i)); - } - myEditors.get(0).getScrollingModel().removeVisibleAreaListener(myVisibleAreaListener1); myEditors.get(1).getScrollingModel().removeVisibleAreaListener(myVisibleAreaListener1); @@ -238,12 +223,12 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { @NotNull public EditorEx getCurrentEditor() { - return myCurrentSide.select(myEditors); + return getCurrentSide().select(myEditors); } @NotNull public DocumentContent getCurrentContent() { - return myCurrentSide.select(myActualContents); + return getCurrentSide().select(myActualContents); } @NotNull @@ -254,7 +239,11 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { @NotNull public ThreeSide getCurrentSide() { - return myCurrentSide; + return myFocusTrackerSupport.getCurrentSide(); + } + + public void setCurrentSide(@NotNull ThreeSide side) { + myFocusTrackerSupport.setCurrentSide(side); } // @@ -265,7 +254,7 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { protected void scrollToLine(@NotNull ThreeSide side, int line) { Editor editor = side.select(myEditors); DiffUtil.scrollEditor(editor, line, false); - myCurrentSide = side; + setCurrentSide(side); } @Nullable @@ -365,26 +354,14 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { return getCurrentEditor(); } else if (CommonDataKeys.VIRTUAL_FILE.is(dataId)) { - return DiffUtil.getVirtualFile(myRequest, myCurrentSide); + return DiffUtil.getVirtualFile(myRequest, getCurrentSide()); } else if (DiffDataKeys.CURRENT_CONTENT.is(dataId)) { return getCurrentContent(); } return super.getData(dataId); } - - private class MyEditorFocusListener extends FocusAdapter { - @NotNull private final ThreeSide mySide; - - private MyEditorFocusListener(@NotNull ThreeSide side) { - mySide = side; - } - - public void focusGained(FocusEvent e) { - myCurrentSide = mySide; - } - } - + private class MyVisibleAreaListener implements VisibleAreaListener { @NotNull Side mySide; 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 c7109814f010..2c0058b9975f 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 @@ -24,12 +24,12 @@ import com.intellij.diff.contents.EmptyContent; import com.intellij.diff.requests.ContentDiffRequest; import com.intellij.diff.requests.DiffRequest; import com.intellij.diff.tools.util.DiffDataKeys; +import com.intellij.diff.tools.util.FocusTrackerSupport.TwosideFocusTrackerSupport; import com.intellij.diff.tools.util.SimpleDiffPanel; import com.intellij.diff.tools.util.SyncScrollSupport; import com.intellij.diff.tools.util.SyncScrollSupport.TwosideSyncScrollSupport; import com.intellij.diff.tools.util.base.InitialScrollPositionSupport; import com.intellij.diff.tools.util.base.TextDiffViewerBase; -import com.intellij.diff.util.DiffUserDataKeys; import com.intellij.diff.util.DiffUtil; import com.intellij.diff.util.Side; import com.intellij.openapi.actionSystem.AnActionEvent; @@ -52,8 +52,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; -import java.awt.event.FocusAdapter; -import java.awt.event.FocusEvent; import java.util.Collections; import java.util.List; @@ -73,13 +71,11 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase { @NotNull protected final MySetEditorSettingsAction myEditorSettingsAction; - @NotNull private final MyEditorFocusListener myEditorFocusListener1 = new MyEditorFocusListener(Side.LEFT); - @NotNull private final MyEditorFocusListener myEditorFocusListener2 = new MyEditorFocusListener(Side.RIGHT); @NotNull private final MyVisibleAreaListener myVisibleAreaListener = new MyVisibleAreaListener(); - @Nullable protected TwosideSyncScrollSupport mySyncScrollSupport; + @NotNull private final TwosideFocusTrackerSupport myFocusTrackerSupport; - @NotNull private Side myCurrentSide; + @Nullable protected TwosideSyncScrollSupport mySyncScrollSupport; public TwosideTextDiffViewer(@NotNull DiffContext context, @NotNull ContentDiffRequest request) { super(context, request); @@ -97,8 +93,7 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase { myEditor2 = editors.get(1); assert myEditor1 != null || myEditor2 != null; - myCurrentSide = myEditor1 == null ? Side.RIGHT : Side.LEFT; - + myFocusTrackerSupport = new TwosideFocusTrackerSupport(myEditor1, myEditor2); myContentPanel = new TwosideTextContentPanel(titlePanel, myEditor1, myEditor2); myPanel = new SimpleDiffPanel(myContentPanel, this, context); @@ -124,25 +119,14 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase { @CalledInAwt protected void processContextHints() { super.processContextHints(); - if (myEditor1 == null) { - myCurrentSide = Side.RIGHT; - } - else if (myEditor2 == null) { - myCurrentSide = Side.LEFT; - } - else { - Side side = myContext.getUserData(DiffUserDataKeys.PREFERRED_FOCUS_SIDE); - if (side != null) myCurrentSide = side; - } + myFocusTrackerSupport.processContextHints(myRequest, myContext); } @Override @CalledInAwt protected void updateContextHints() { super.updateContextHints(); - if (myEditor1 != null && myEditor2 != null) { - myContext.putUserData(DiffUserDataKeys.PREFERRED_FOCUS_SIDE, myCurrentSide); - } + myFocusTrackerSupport.updateContextHints(myRequest, myContext); } @NotNull @@ -195,11 +179,9 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase { protected void installEditorListeners() { super.installEditorListeners(); if (myEditor1 != null) { - myEditor1.getContentComponent().addFocusListener(myEditorFocusListener1); myEditor1.getScrollingModel().addVisibleAreaListener(myVisibleAreaListener); } if (myEditor2 != null) { - myEditor2.getContentComponent().addFocusListener(myEditorFocusListener2); myEditor2.getScrollingModel().addVisibleAreaListener(myVisibleAreaListener); } if (myEditor1 != null && myEditor2 != null) { @@ -215,11 +197,9 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase { protected void destroyEditorListeners() { super.destroyEditorListeners(); if (myEditor1 != null) { - myEditor1.getContentComponent().removeFocusListener(myEditorFocusListener1); myEditor1.getScrollingModel().removeVisibleAreaListener(myVisibleAreaListener); } if (myEditor2 != null) { - myEditor2.getContentComponent().removeFocusListener(myEditorFocusListener2); myEditor2.getScrollingModel().removeVisibleAreaListener(myVisibleAreaListener); } mySyncScrollSupport = null; @@ -264,7 +244,11 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase { @NotNull public Side getCurrentSide() { - return myCurrentSide; + return myFocusTrackerSupport.getCurrentSide(); + } + + public void setCurrentSide(@NotNull Side side) { + myFocusTrackerSupport.setCurrentSide(side); } @NotNull @@ -306,7 +290,7 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase { Editor editor = side.select(myEditor1, myEditor2); if (editor == null) return; DiffUtil.scrollEditor(editor, line, false); - myCurrentSide = side; + setCurrentSide(side); } @Nullable @@ -365,13 +349,13 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase { if (myEditor1 == null || myEditor2 == null) return; if (myScrollToPosition) { - EditorEx currentEditor = myCurrentSide.select(myEditor1, myEditor2); - EditorEx targetEditor = myCurrentSide.other().select(myEditor1, myEditor2); - LogicalPosition position = transferPosition(myCurrentSide, currentEditor.getCaretModel().getLogicalPosition()); + EditorEx currentEditor = getCurrentSide().select(myEditor1, myEditor2); + EditorEx targetEditor = getCurrentSide().other().select(myEditor1, myEditor2); + LogicalPosition position = transferPosition(getCurrentSide(), currentEditor.getCaretModel().getLogicalPosition()); targetEditor.getCaretModel().moveToLogicalPosition(position); } - myCurrentSide = myCurrentSide.other(); + setCurrentSide(getCurrentSide().other()); myPanel.requestFocus(); getCurrentEditor().getScrollingModel().scrollToCaret(ScrollType.MAKE_VISIBLE); } @@ -406,25 +390,12 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase { return getCurrentContent(); } else if (CommonDataKeys.VIRTUAL_FILE.is(dataId)) { - return DiffUtil.getVirtualFile(myRequest, myCurrentSide); + return DiffUtil.getVirtualFile(myRequest, getCurrentSide()); } return super.getData(dataId); } - private class MyEditorFocusListener extends FocusAdapter { - @NotNull private final Side mySide; - - private MyEditorFocusListener(@NotNull Side side) { - mySide = side; - } - - public void focusGained(FocusEvent e) { - if (myEditor1 == null || myEditor2 == null) return; - myCurrentSide = mySide; - } - } - private class MyVisibleAreaListener implements VisibleAreaListener { @Override public void visibleAreaChanged(VisibleAreaEvent e) { From cdc1c4eaf2a79c12bf3bd6ba88e0a9d66fc6de56 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Wed, 13 May 2015 19:07:33 +0300 Subject: [PATCH 2/2] diff: use getters --- .../diff/tools/binary/BinaryDiffViewer.java | 18 ++-- .../diff/tools/simple/SimpleDiffViewer.java | 90 +++++++++---------- .../simple/SimpleThreesideDiffChange.java | 12 +-- .../simple/SimpleThreesideDiffViewer.java | 28 +++--- .../threeside/ThreesideTextDiffViewer.java | 61 +++++++------ .../util/twoside/TwosideTextDiffViewer.java | 88 ++++++++++-------- .../properties/SvnPropertiesDiffViewer.java | 34 +++---- 7 files changed, 175 insertions(+), 156 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 eea633f3c40e..4e36785f9268 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 @@ -91,8 +91,8 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase { myEditorProvider2 = editors.second.second; assert myEditor1 != null || myEditor2 != null; - myFocusTrackerSupport = new FocusTrackerSupport.TwosideFocusTrackerSupport(myEditor1, myEditor2); - myContentPanel = new BinaryContentPanel(titlePanel, myEditor1, myEditor2); + myFocusTrackerSupport = new FocusTrackerSupport.TwosideFocusTrackerSupport(getEditor1(), getEditor2()); + myContentPanel = new BinaryContentPanel(titlePanel, getEditor1(), getEditor2()); myPanel = new SimpleDiffPanel(myContentPanel, this, context); @@ -182,13 +182,13 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase { private void destroyEditors() { - if (myEditor1 != null) { + if (getEditor1() != null) { assert myEditorProvider1 != null; - myEditorProvider1.disposeEditor(myEditor1); + myEditorProvider1.disposeEditor(getEditor1()); } - if (myEditor2 != null) { + if (getEditor2() != null) { assert myEditorProvider2 != null; - myEditorProvider2.disposeEditor(myEditor2); + myEditorProvider2.disposeEditor(getEditor2()); } } @@ -341,7 +341,7 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase { @NotNull FileEditor getCurrentEditor() { //noinspection ConstantConditions - return getCurrentSide().select(myEditor1, myEditor2); + return getCurrentSide().select(getEditor1(), getEditor2()); } @NotNull @@ -406,14 +406,14 @@ public class BinaryDiffViewer extends ListenerDiffViewerBase { private class MyFocusOppositePaneAction extends FocusOppositePaneAction { @Override public void actionPerformed(@NotNull AnActionEvent e) { - assert myEditor1 != null && myEditor2 != null; + assert getEditor1() != null && getEditor2() != null; setCurrentSide(getCurrentSide().other()); myPanel.requestFocus(); } @Override public void update(@NotNull AnActionEvent e) { - e.getPresentation().setEnabled(myEditor1 != null && myEditor2 != null); + e.getPresentation().setEnabled(getEditor1() != null && getEditor2() != null); } } 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 4072c5bf5200..3e1a7786d1bf 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 @@ -86,7 +86,7 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { mySyncScrollable = new MySyncScrollable(); myPrevNextDifferenceIterable = new MyPrevNextDifferenceIterable(); myStatusPanel = new MyStatusPanel(); - myFoldingModel = createFoldingModel(myEditor1, myEditor2); + myFoldingModel = createFoldingModel(getEditor1(), getEditor2()); myModifierProvider = new ModifierProvider(); } @@ -192,10 +192,10 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { try { indicator.checkCanceled(); - assert myActualContent1 != null || myActualContent2 != null; + assert getActualContent1() != null || getActualContent2() != null; - if (myActualContent1 == null) { - final DocumentContent content = myActualContent2; + if (getActualContent1() == null) { + final DocumentContent content = getActualContent2(); final Document document = content.getDocument(); CompareData data = ApplicationManager.getApplication().runReadAction(new Computable() { @@ -210,8 +210,8 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { return apply(data); } - if (myActualContent2 == null) { - final DocumentContent content = myActualContent1; + if (getActualContent2() == null) { + final DocumentContent content = getActualContent1(); final Document document = content.getDocument(); CompareData data = ApplicationManager.getApplication().runReadAction(new Computable() { @@ -226,8 +226,8 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { return apply(data); } - final DocumentContent content1 = myActualContent1; - final DocumentContent content2 = myActualContent2; + final DocumentContent content1 = getActualContent1(); + final DocumentContent content2 = getActualContent2(); final Document document1 = content1.getDocument(); final Document document2 = content2.getDocument(); @@ -284,8 +284,8 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { return new Runnable() { @Override public void run() { - if (myEditor1 != null && myEditor1.getDocument().getModificationStamp() != data.getStamp1()) return; - if (myEditor2 != null && myEditor2.getDocument().getModificationStamp() != data.getStamp2()) return; + if (getEditor1() != null && getEditor1().getDocument().getModificationStamp() != data.getStamp1()) return; + if (getEditor2() != null && getEditor2().getDocument().getModificationStamp() != data.getStamp2()) return; if (myFoldingModel != null) myFoldingModel.updateContext(myRequest, getFoldingModelSettings()); clearDiffPresentation(); @@ -294,7 +294,7 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { if (data.getFragments() != null) { for (LineFragment fragment : data.getFragments()) { - myDiffChanges.add(new SimpleDiffChange(SimpleDiffViewer.this, fragment, myEditor1, myEditor2, + myDiffChanges.add(new SimpleDiffChange(SimpleDiffViewer.this, fragment, getEditor1(), getEditor2(), getHighlightPolicy().isFineFragments())); } } @@ -353,13 +353,13 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { protected void onBeforeDocumentChange(@NotNull DocumentEvent e) { super.onBeforeDocumentChange(e); if (myDiffChanges.isEmpty()) return; - if (myEditor1 == null || myEditor2 == null) return; + if (getEditor1() == null || getEditor2() == null) return; Side side; - if (e.getDocument() == myEditor1.getDocument()) { + if (e.getDocument() == getEditor1().getDocument()) { side = Side.LEFT; } - else if (e.getDocument() == myEditor2.getDocument()) { + else if (e.getDocument() == getEditor2().getDocument()) { side = Side.RIGHT; } else { @@ -401,7 +401,7 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { @CalledInAwt protected boolean doScrollToChange(@NotNull ScrollToPolicy scrollToPolicy) { if (myDiffChanges.isEmpty()) return false; - if (myEditor1 == null || myEditor2 == null) return true; + if (getEditor1() == null || getEditor2() == null) return true; SimpleDiffChange targetChange; switch (scrollToPolicy) { @@ -421,7 +421,7 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { } private void doScrollToChange(@NotNull SimpleDiffChange change, final boolean animated) { - if (myEditor1 == null || myEditor2 == null) return; + if (getEditor1() == null || getEditor2() == null) return; assert mySyncScrollSupport != null; final int line1 = change.getStartLine(Side.LEFT); @@ -429,14 +429,14 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { final int endLine1 = change.getEndLine(Side.LEFT); final int endLine2 = change.getEndLine(Side.RIGHT); - DiffUtil.moveCaret(myEditor1, line1); - DiffUtil.moveCaret(myEditor2, line2); + DiffUtil.moveCaret(getEditor1(), line1); + DiffUtil.moveCaret(getEditor2(), line2); mySyncScrollSupport.makeVisible(getCurrentSide(), line1, endLine1, line2, endLine2, animated); } protected boolean doScrollToContext(@NotNull DiffNavigationContext context) { - if (myEditor2 == null) return false; + if (getEditor2() == null) return false; ChangedLinesIterator changedLinesIterator = new ChangedLinesIterator(Side.RIGHT); NavigationContextChecker checker = new NavigationContextChecker(changedLinesIterator, context); @@ -492,7 +492,7 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { @NotNull @CalledInAwt private List getSelectedChanges(@NotNull Side side) { - EditorEx editor = side.select(myEditor1, myEditor2); + EditorEx editor = side.select(getEditor1(), getEditor2()); if (editor == null) return Collections.emptyList(); final BitSet lines = DiffUtil.getSelectedLines(editor); @@ -512,7 +512,7 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { @Nullable @CalledInAwt private SimpleDiffChange getSelectedChange(@NotNull Side side) { - EditorEx editor = side.select(myEditor1, myEditor2); + EditorEx editor = side.select(getEditor1(), getEditor2()); if (editor == null) return null; int caretLine = editor.getCaretModel().getLogicalPosition().line; @@ -629,19 +629,19 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { @Override public void update(@NotNull AnActionEvent e) { Editor editor = e.getData(CommonDataKeys.EDITOR); - Side side = Side.fromLeft(editor == myEditor1); + Side side = Side.fromLeft(editor == getEditor1()); - if (myEditor1 == null || myEditor2 == null) { + if (getEditor1() == null || getEditor2() == null) { e.getPresentation().setEnabledAndVisible(false); return; } - if (editor != myEditor1 && editor != myEditor2) { + if (editor != getEditor1() && editor != getEditor2()) { e.getPresentation().setEnabledAndVisible(false); return; } - Editor modifiedEditor = side.other(myModifyOpposite).select(myEditor1, myEditor2); + Editor modifiedEditor = side.other(myModifyOpposite).select(getEditor1(), getEditor2()); if (!DiffUtil.isEditable(modifiedEditor)) { e.getPresentation().setEnabledAndVisible(false); return; @@ -653,13 +653,13 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { @Override public void actionPerformed(@NotNull final AnActionEvent e) { - assert myEditor1 != null && myEditor2 != null; + assert getEditor1() != null && getEditor2() != null; Editor editor = e.getRequiredData(CommonDataKeys.EDITOR); - final Side side = Side.fromLeft(editor == myEditor1); + final Side side = Side.fromLeft(editor == getEditor1()); final List selectedChanges = getSelectedChanges(side); - Editor modifiedEditor = side.other(myModifyOpposite).select(myEditor1, myEditor2); + Editor modifiedEditor = side.other(myModifyOpposite).select(getEditor1(), getEditor2()); String title = e.getPresentation().getText() + " selected changes"; DiffUtil.executeWriteCommand(modifiedEditor.getDocument(), e.getProject(), title, new Runnable() { @Override @@ -672,7 +672,7 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { protected boolean isSomeChangeSelected(@NotNull Side side) { if (myDiffChanges.isEmpty()) return false; - Editor editor = side.select(myEditor1, myEditor2); + Editor editor = side.select(getEditor1(), getEditor2()); if (editor == null) return false; List carets = editor.getCaretModel().getAllCarets(); @@ -753,12 +753,12 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { @CalledWithWriteLock public void replaceChange(@NotNull SimpleDiffChange change, @NotNull final Side sourceSide) { - assert myEditor1 != null && myEditor2 != null; + assert getEditor1() != null && getEditor2() != null; if (!change.isValid()) return; - final Document document1 = myEditor1.getDocument(); - final Document document2 = myEditor2.getDocument(); + final Document document1 = getEditor1().getDocument(); + final Document document2 = getEditor2().getDocument(); DiffUtil.applyModification(sourceSide.other().select(document1, document2), change.getStartLine(sourceSide.other()), change.getEndLine(sourceSide.other()), @@ -771,13 +771,13 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { @CalledWithWriteLock public void appendChange(@NotNull SimpleDiffChange change, @NotNull final Side sourceSide) { - assert myEditor1 != null && myEditor2 != null; + assert getEditor1() != null && getEditor2() != null; if (!change.isValid()) return; if (change.getStartLine(sourceSide) == change.getEndLine(sourceSide)) return; - final Document document1 = myEditor1.getDocument(); - final Document document2 = myEditor2.getDocument(); + final Document document1 = getEditor1().getDocument(); + final Document document2 = getEditor2().getDocument(); DiffUtil.applyModification(sourceSide.other().select(document1, document2), change.getEndLine(sourceSide.other()), change.getEndLine(sourceSide.other()), @@ -807,7 +807,7 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { private AllLinesIterator(@NotNull Side side) { mySide = side; - Editor editor = mySide.select(myEditor1, myEditor2); + Editor editor = mySide.select(getEditor1(), getEditor2()); assert editor != null; myDocument = editor.getDocument(); } @@ -858,7 +858,7 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { int line1 = change.getStartLine(mySide); int line2 = change.getEndLine(mySide); - Editor editor = mySide.select(myEditor1, myEditor2); + Editor editor = mySide.select(getEditor1(), getEditor2()); assert editor != null; Document document = editor.getDocument(); @@ -907,28 +907,28 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { @Override protected void processHelper(@NotNull ScrollHelper helper) { - assert myEditor1 != null && myEditor2 != null; + assert getEditor1() != null && getEditor2() != null; if (!helper.process(0, 0)) return; for (SimpleDiffChange diffChange : myDiffChanges) { if (!helper.process(diffChange.getStartLine(Side.LEFT), diffChange.getStartLine(Side.RIGHT))) return; if (!helper.process(diffChange.getEndLine(Side.LEFT), diffChange.getEndLine(Side.RIGHT))) return; } - helper.process(myEditor1.getDocument().getLineCount(), myEditor2.getDocument().getLineCount()); + helper.process(getEditor1().getDocument().getLineCount(), getEditor2().getDocument().getLineCount()); } } private class MyDividerPainter implements DiffSplitter.Painter, DiffDividerDrawUtil.DividerPaintable { @Override public void paint(@NotNull Graphics g, @NotNull JComponent divider) { - if (myEditor1 == null || myEditor2 == null) return; - Graphics2D gg = DiffDividerDrawUtil.getDividerGraphics(g, divider, myEditor1.getComponent()); + if (getEditor1() == null || getEditor2() == null) return; + Graphics2D gg = DiffDividerDrawUtil.getDividerGraphics(g, divider, getEditor1().getComponent()); - gg.setColor(DiffDrawUtil.getDividerColor(myEditor1)); + gg.setColor(DiffDrawUtil.getDividerColor(getEditor1())); gg.fill(gg.getClipBounds()); - //DividerPolygonUtil.paintSimplePolygons(gg, divider.getWidth(), myEditor1, myEditor2, this); - DiffDividerDrawUtil.paintPolygons(gg, divider.getWidth(), myEditor1, myEditor2, this); + //DividerPolygonUtil.paintSimplePolygons(gg, divider.getWidth(), getEditor1(), getEditor2(), this); + DiffDividerDrawUtil.paintPolygons(gg, divider.getWidth(), getEditor1(), getEditor2(), this); if (myFoldingModel != null) myFoldingModel.paintOnDivider(gg, divider); @@ -940,7 +940,7 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer { for (SimpleDiffChange diffChange : myDiffChanges) { if (!handler.process(diffChange.getStartLine(Side.LEFT), diffChange.getEndLine(Side.LEFT), diffChange.getStartLine(Side.RIGHT), diffChange.getEndLine(Side.RIGHT), - diffChange.getDiffType().getColor(myEditor1))) { + diffChange.getDiffType().getColor(getEditor1()))) { return; } } diff --git a/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffChange.java b/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffChange.java index d38b158b1dc6..c98f6bce7ebb 100644 --- a/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffChange.java +++ b/platform/diff-impl/src/com/intellij/diff/tools/simple/SimpleThreesideDiffChange.java @@ -34,7 +34,7 @@ import java.util.List; public class SimpleThreesideDiffChange { @NotNull private final MergeLineFragment myFragment; - @NotNull private final List myEditors; + @NotNull private final List myEditors; @NotNull private ConflictType myType; @@ -44,7 +44,7 @@ public class SimpleThreesideDiffChange { private int[] myLineEndShifts = new int[3]; public SimpleThreesideDiffChange(@NotNull MergeLineFragment fragment, - @NotNull List editors, + @NotNull List editors, @NotNull ComparisonPolicy policy) { myFragment = fragment; myEditors = editors; @@ -154,7 +154,7 @@ public class SimpleThreesideDiffChange { @NotNull private static ConflictType calcType(@NotNull MergeLineFragment fragment, - @NotNull List editors, + @NotNull List editors, @NotNull ComparisonPolicy policy) { boolean isLeftEmpty = isIntervalEmpty(fragment, ThreeSide.LEFT); boolean isBaseEmpty = isIntervalEmpty(fragment, ThreeSide.BASE); @@ -192,7 +192,7 @@ public class SimpleThreesideDiffChange { } private static boolean compareLeftAndRight(@NotNull MergeLineFragment fragment, - @NotNull List editors, + @NotNull List editors, @NotNull ComparisonPolicy policy) { CharSequence content1 = getRangeContent(fragment, editors, ThreeSide.LEFT); CharSequence content2 = getRangeContent(fragment, editors, ThreeSide.RIGHT); @@ -209,7 +209,7 @@ public class SimpleThreesideDiffChange { } private static boolean compareWithBase(@NotNull MergeLineFragment fragment, - @NotNull List editors, + @NotNull List editors, @NotNull ThreeSide side) { CharSequence content1 = getRangeContent(fragment, editors, ThreeSide.BASE); CharSequence content2 = getRangeContent(fragment, editors, side); @@ -219,7 +219,7 @@ public class SimpleThreesideDiffChange { @Nullable private static CharSequence getRangeContent(@NotNull MergeLineFragment fragment, - @NotNull List editors, + @NotNull List editors, @NotNull ThreeSide side) { DocumentEx document = side.select(editors).getDocument(); int line1 = fragment.getStartLine(side); 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 2e23d720f70a..342052fd48b5 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 @@ -82,7 +82,7 @@ public class SimpleThreesideDiffViewer extends ThreesideTextDiffViewer { mySyncScrollable2 = new MySyncScrollable(Side.RIGHT); myPrevNextDifferenceIterable = new MyPrevNextDifferenceIterable(); myStatusPanel = new MyStatusPanel(); - myFoldingModel = new MyFoldingModel(myEditors.toArray(new EditorEx[3]), this); + myFoldingModel = new MyFoldingModel(getEditors().toArray(new EditorEx[3]), this); } @Override @@ -233,7 +233,7 @@ public class SimpleThreesideDiffViewer extends ThreesideTextDiffViewer { clearDiffPresentation(); for (MergeLineFragment fragment : fragments) { - myDiffChanges.add(new SimpleThreesideDiffChange(fragment, myEditors, comparisonPolicy)); + myDiffChanges.add(new SimpleThreesideDiffChange(fragment, getEditors(), comparisonPolicy)); } myFoldingModel.install(fragments, myRequest, getFoldingModelSettings()); @@ -280,13 +280,13 @@ public class SimpleThreesideDiffViewer extends ThreesideTextDiffViewer { if (myDiffChanges.isEmpty()) return; ThreeSide side; - if (e.getDocument() == myEditors.get(0).getDocument()) { + if (e.getDocument() == getEditor(0).getDocument()) { side = ThreeSide.LEFT; } - else if (e.getDocument() == myEditors.get(1).getDocument()) { + else if (e.getDocument() == getEditor(1).getDocument()) { side = ThreeSide.BASE; } - else if (e.getDocument() == myEditors.get(2).getDocument()) { + else if (e.getDocument() == getEditor(2).getDocument()) { side = ThreeSide.RIGHT; } else { @@ -396,7 +396,7 @@ public class SimpleThreesideDiffViewer extends ThreesideTextDiffViewer { @Nullable @CalledInAwt private SimpleThreesideDiffChange getSelectedChange(@NotNull ThreeSide side) { - EditorEx editor = side.select(myEditors); + EditorEx editor = side.select(getEditors()); int caretLine = editor.getCaretModel().getLogicalPosition().line; @@ -554,7 +554,7 @@ public class SimpleThreesideDiffViewer extends ThreesideTextDiffViewer { if (!helper.process(diffChange.getStartLine(left), diffChange.getStartLine(right))) return; if (!helper.process(diffChange.getEndLine(left), diffChange.getEndLine(right))) return; } - helper.process(left.select(myEditors).getDocument().getLineCount(), right.select(myEditors).getDocument().getLineCount()); + helper.process(left.select(getEditors()).getDocument().getLineCount(), right.select(getEditors()).getDocument().getLineCount()); } } @@ -574,7 +574,7 @@ public class SimpleThreesideDiffViewer extends ThreesideTextDiffViewer { if (!diffChange.getType().isChange(mySide)) continue; if (!handler.process(diffChange.getStartLine(left), diffChange.getEndLine(left), diffChange.getStartLine(right), diffChange.getEndLine(right), - diffChange.getDiffType().getColor(myEditors.get(0)))) { + diffChange.getDiffType().getColor(getEditor(0)))) { return; } } @@ -592,13 +592,13 @@ public class SimpleThreesideDiffViewer extends ThreesideTextDiffViewer { @Override public void paint(@NotNull Graphics g, @NotNull JComponent divider) { - Graphics2D gg = DiffDividerDrawUtil.getDividerGraphics(g, divider, myEditors.get(0).getComponent()); + Graphics2D gg = DiffDividerDrawUtil.getDividerGraphics(g, divider, getEditor(0).getComponent()); - gg.setColor(DiffDrawUtil.getDividerColor(myEditors.get(0))); + gg.setColor(DiffDrawUtil.getDividerColor(getEditor(0))); gg.fill(gg.getClipBounds()); - Editor editor1 = mySide.select(myEditors.get(0), myEditors.get(1)); - Editor editor2 = mySide.select(myEditors.get(1), myEditors.get(2)); + Editor editor1 = mySide.select(getEditor(0), getEditor(1)); + Editor editor2 = mySide.select(getEditor(1), getEditor(2)); //DividerPolygonUtil.paintSimplePolygons(gg, divider.getWidth(), editor1, editor2, myPaintable); DiffDividerDrawUtil.paintPolygons(gg, divider.getWidth(), editor1, editor2, myPaintable); @@ -614,8 +614,8 @@ public class SimpleThreesideDiffViewer extends ThreesideTextDiffViewer { @Override public void call(Graphics g) { - EditorEx editor1 = myEditors.get(1); - EditorEx editor2 = myEditors.get(2); + EditorEx editor1 = getEditor(1); + EditorEx editor2 = getEditor(2); int width = editor1.getScrollPane().getVerticalScrollBar().getWidth(); DiffDividerDrawUtil.paintPolygonsOnScrollbar((Graphics2D)g, width, editor1, editor2, myPaintable); 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 7c87c653daf8..086d396889c0 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 @@ -66,9 +66,8 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { @NotNull protected final SimpleDiffPanel myPanel; @NotNull protected final ThreesideTextContentPanel myContentPanel; - @NotNull protected final List myEditors; - - @NotNull protected final List myActualContents; + @NotNull private final List myEditors; + @NotNull private final List myActualContents; @NotNull private final MyVisibleAreaListener myVisibleAreaListener1 = new MyVisibleAreaListener(Side.LEFT); @NotNull private final MyVisibleAreaListener myVisibleAreaListener2 = new MyVisibleAreaListener(Side.RIGHT); @@ -77,7 +76,7 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { @NotNull private final ThreesideFocusTrackerSupport myFocusTrackerSupport; - @Nullable private ThreesideSyncScrollSupport mySyncScrollListener; + @Nullable private ThreesideSyncScrollSupport mySyncScrollSupport; public ThreesideTextDiffViewer(@NotNull DiffContext context, @NotNull ContentDiffRequest request) { super(context, request); @@ -89,10 +88,10 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { myEditors = createEditors(); - List titlePanel = DiffUtil.createTextTitles(myRequest, myEditors); + List titlePanel = DiffUtil.createTextTitles(myRequest, getEditors()); - myFocusTrackerSupport = new ThreesideFocusTrackerSupport(myEditors); - myContentPanel = new ThreesideTextContentPanel(myEditors, titlePanel); + myFocusTrackerSupport = new ThreesideFocusTrackerSupport(getEditors()); + myContentPanel = new ThreesideTextContentPanel(getEditors(), titlePanel); myPanel = new SimpleDiffPanel(myContentPanel, this, context); @@ -129,8 +128,8 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { boolean[] forceReadOnly = checkForceReadOnly(); List editors = new ArrayList(3); - for (int i = 0; i < myActualContents.size(); i++) { - DocumentContent content = myActualContents.get(i); + for (int i = 0; i < getActualContents().size(); i++) { + DocumentContent content = getActualContents().get(i); EditorEx editor = DiffUtil.createEditor(content.getDocument(), myProject, forceReadOnly[i], true); DiffUtil.configureEditor(editor, content, myProject); editors.add(editor); @@ -147,7 +146,7 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { } private void destroyEditors() { - for (EditorEx editor : myEditors) { + for (EditorEx editor : getEditors()) { myEditorFactory.releaseEditor(editor); } } @@ -161,16 +160,16 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { protected void installEditorListeners() { super.installEditorListeners(); - myEditors.get(0).getScrollingModel().addVisibleAreaListener(myVisibleAreaListener1); - myEditors.get(1).getScrollingModel().addVisibleAreaListener(myVisibleAreaListener1); + getEditor(0).getScrollingModel().addVisibleAreaListener(myVisibleAreaListener1); + getEditor(1).getScrollingModel().addVisibleAreaListener(myVisibleAreaListener1); - myEditors.get(1).getScrollingModel().addVisibleAreaListener(myVisibleAreaListener2); - myEditors.get(2).getScrollingModel().addVisibleAreaListener(myVisibleAreaListener2); + getEditor(1).getScrollingModel().addVisibleAreaListener(myVisibleAreaListener2); + getEditor(2).getScrollingModel().addVisibleAreaListener(myVisibleAreaListener2); SyncScrollSupport.SyncScrollable scrollable1 = getSyncScrollable(Side.LEFT); SyncScrollSupport.SyncScrollable scrollable2 = getSyncScrollable(Side.RIGHT); if (scrollable1 != null && scrollable2 != null) { - mySyncScrollListener = new ThreesideSyncScrollSupport(myEditors, scrollable1, scrollable2); + mySyncScrollSupport = new ThreesideSyncScrollSupport(getEditors(), scrollable1, scrollable2); } } @@ -179,18 +178,18 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { public void destroyEditorListeners() { super.destroyEditorListeners(); - myEditors.get(0).getScrollingModel().removeVisibleAreaListener(myVisibleAreaListener1); - myEditors.get(1).getScrollingModel().removeVisibleAreaListener(myVisibleAreaListener1); + getEditor(0).getScrollingModel().removeVisibleAreaListener(myVisibleAreaListener1); + getEditor(1).getScrollingModel().removeVisibleAreaListener(myVisibleAreaListener1); - myEditors.get(1).getScrollingModel().removeVisibleAreaListener(myVisibleAreaListener2); - myEditors.get(2).getScrollingModel().removeVisibleAreaListener(myVisibleAreaListener2); + getEditor(1).getScrollingModel().removeVisibleAreaListener(myVisibleAreaListener2); + getEditor(2).getScrollingModel().removeVisibleAreaListener(myVisibleAreaListener2); - mySyncScrollListener = null; + mySyncScrollSupport = null; } protected void disableSyncScrollSupport(boolean disable) { - if (mySyncScrollListener != null) { - mySyncScrollListener.setDisabled(disable); + if (mySyncScrollSupport != null) { + mySyncScrollSupport.setDisabled(disable); } } @@ -223,12 +222,12 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { @NotNull public EditorEx getCurrentEditor() { - return getCurrentSide().select(myEditors); + return getCurrentSide().select(getEditors()); } @NotNull public DocumentContent getCurrentContent() { - return getCurrentSide().select(myActualContents); + return getCurrentSide().select(getActualContents()); } @NotNull @@ -237,6 +236,16 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { return myEditors; } + @NotNull + protected EditorEx getEditor(int index) { + return myEditors.get(index); + } + + @NotNull + public List getActualContents() { + return myActualContents; + } + @NotNull public ThreeSide getCurrentSide() { return myFocusTrackerSupport.getCurrentSide(); @@ -252,7 +261,7 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { @CalledInAwt protected void scrollToLine(@NotNull ThreeSide side, int line) { - Editor editor = side.select(myEditors); + Editor editor = side.select(getEditors()); DiffUtil.scrollEditor(editor, line, false); setCurrentSide(side); } @@ -371,7 +380,7 @@ public abstract class ThreesideTextDiffViewer extends TextDiffViewerBase { @Override public void visibleAreaChanged(VisibleAreaEvent e) { - if (mySyncScrollListener != null) mySyncScrollListener.visibleAreaChanged(e); + if (mySyncScrollSupport != null) mySyncScrollSupport.visibleAreaChanged(e); if (Registry.is("diff.divider.repainting.fix")) { myContentPanel.repaint(); } 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 2c0058b9975f..6039b702d24d 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 @@ -63,11 +63,11 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase { @NotNull protected final SimpleDiffPanel myPanel; @NotNull protected final TwosideTextContentPanel myContentPanel; - @Nullable protected final EditorEx myEditor1; - @Nullable protected final EditorEx myEditor2; + @Nullable private final EditorEx myEditor1; + @Nullable private final EditorEx myEditor2; - @Nullable protected final DocumentContent myActualContent1; - @Nullable protected final DocumentContent myActualContent2; + @Nullable private final DocumentContent myActualContent1; + @Nullable private final DocumentContent myActualContent2; @NotNull protected final MySetEditorSettingsAction myEditorSettingsAction; @@ -93,8 +93,8 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase { myEditor2 = editors.get(1); assert myEditor1 != null || myEditor2 != null; - myFocusTrackerSupport = new TwosideFocusTrackerSupport(myEditor1, myEditor2); - myContentPanel = new TwosideTextContentPanel(titlePanel, myEditor1, myEditor2); + myFocusTrackerSupport = new TwosideFocusTrackerSupport(getEditor1(), getEditor2()); + myContentPanel = new TwosideTextContentPanel(titlePanel, getEditor1(), getEditor2()); myPanel = new SimpleDiffPanel(myContentPanel, this, context); @@ -136,13 +136,13 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase { // TODO: we may want to set editor highlighter in init() to speedup editor initialization EditorEx editor1 = null; EditorEx editor2 = null; - if (myActualContent1 != null) { - editor1 = DiffUtil.createEditor(myActualContent1.getDocument(), myProject, forceReadOnly[0], true); - DiffUtil.configureEditor(editor1, myActualContent1, myProject); + if (getActualContent1() != null) { + editor1 = DiffUtil.createEditor(getActualContent1().getDocument(), myProject, forceReadOnly[0], true); + DiffUtil.configureEditor(editor1, getActualContent1(), myProject); } - if (myActualContent2 != null) { - editor2 = DiffUtil.createEditor(myActualContent2.getDocument(), myProject, forceReadOnly[1], true); - DiffUtil.configureEditor(editor2, myActualContent2, myProject); + if (getActualContent2() != null) { + editor2 = DiffUtil.createEditor(getActualContent2().getDocument(), myProject, forceReadOnly[1], true); + DiffUtil.configureEditor(editor2, getActualContent2(), myProject); } if (editor1 != null && editor2 != null) { editor1.setVerticalScrollbarOrientation(EditorEx.VERTICAL_SCROLLBAR_LEFT); @@ -170,24 +170,24 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase { // private void destroyEditors() { - if (myEditor1 != null) myEditorFactory.releaseEditor(myEditor1); - if (myEditor2 != null) myEditorFactory.releaseEditor(myEditor2); + if (getEditor1() != null) myEditorFactory.releaseEditor(getEditor1()); + if (getEditor2() != null) myEditorFactory.releaseEditor(getEditor2()); } @CalledInAwt @Override protected void installEditorListeners() { super.installEditorListeners(); - if (myEditor1 != null) { - myEditor1.getScrollingModel().addVisibleAreaListener(myVisibleAreaListener); + if (getEditor1() != null) { + getEditor1().getScrollingModel().addVisibleAreaListener(myVisibleAreaListener); } - if (myEditor2 != null) { - myEditor2.getScrollingModel().addVisibleAreaListener(myVisibleAreaListener); + if (getEditor2() != null) { + getEditor2().getScrollingModel().addVisibleAreaListener(myVisibleAreaListener); } - if (myEditor1 != null && myEditor2 != null) { + if (getEditor1() != null && getEditor2() != null) { SyncScrollSupport.SyncScrollable scrollable = getSyncScrollable(); if (scrollable != null) { - mySyncScrollSupport = new TwosideSyncScrollSupport(myEditor1, myEditor2, scrollable); + mySyncScrollSupport = new TwosideSyncScrollSupport(getEditor1(), getEditor2(), scrollable); } } } @@ -196,11 +196,11 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase { @Override protected void destroyEditorListeners() { super.destroyEditorListeners(); - if (myEditor1 != null) { - myEditor1.getScrollingModel().removeVisibleAreaListener(myVisibleAreaListener); + if (getEditor1() != null) { + getEditor1().getScrollingModel().removeVisibleAreaListener(myVisibleAreaListener); } - if (myEditor2 != null) { - myEditor2.getScrollingModel().removeVisibleAreaListener(myVisibleAreaListener); + if (getEditor2() != null) { + getEditor2().getScrollingModel().removeVisibleAreaListener(myVisibleAreaListener); } mySyncScrollSupport = null; } @@ -218,14 +218,14 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase { @NotNull @Override protected List getEditors() { - if (myEditor1 != null && myEditor2 != null) { - return ContainerUtil.list(myEditor1, myEditor2); + if (getEditor1() != null && getEditor2() != null) { + return ContainerUtil.list(getEditor1(), getEditor2()); } - if (myEditor1 != null) { - return Collections.singletonList(myEditor1); + if (getEditor1() != null) { + return Collections.singletonList(getEditor1()); } - if (myEditor2 != null) { - return Collections.singletonList(myEditor2); + if (getEditor2() != null) { + return Collections.singletonList(getEditor2()); } return Collections.emptyList(); } @@ -254,13 +254,13 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase { @NotNull public EditorEx getCurrentEditor() { //noinspection ConstantConditions - return getCurrentSide().select(myEditor1, myEditor2); + return getCurrentSide().select(getEditor1(), getEditor2()); } @NotNull public DocumentContent getCurrentContent() { //noinspection ConstantConditions - return getCurrentSide().select(myActualContent1, myActualContent2); + return getCurrentSide().select(getActualContent1(), getActualContent2()); } @Nullable @@ -273,6 +273,16 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase { return myEditor2; } + @Nullable + public DocumentContent getActualContent1() { + return myActualContent1; + } + + @Nullable + public DocumentContent getActualContent2() { + return myActualContent2; + } + // // Abstract // @@ -287,7 +297,7 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase { @CalledInAwt protected void scrollToLine(@NotNull Side side, int line) { - Editor editor = side.select(myEditor1, myEditor2); + Editor editor = side.select(getEditor1(), getEditor2()); if (editor == null) return; DiffUtil.scrollEditor(editor, line, false); setCurrentSide(side); @@ -346,11 +356,11 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase { @Override public void actionPerformed(@NotNull AnActionEvent e) { - if (myEditor1 == null || myEditor2 == null) return; + if (getEditor1() == null || getEditor2() == null) return; if (myScrollToPosition) { - EditorEx currentEditor = getCurrentSide().select(myEditor1, myEditor2); - EditorEx targetEditor = getCurrentSide().other().select(myEditor1, myEditor2); + EditorEx currentEditor = getCurrentSide().select(getEditor1(), getEditor2()); + EditorEx targetEditor = getCurrentSide().other().select(getEditor1(), getEditor2()); LogicalPosition position = transferPosition(getCurrentSide(), currentEditor.getCaretModel().getLogicalPosition()); targetEditor.getCaretModel().moveToLogicalPosition(position); } @@ -364,10 +374,10 @@ public abstract class TwosideTextDiffViewer extends TextDiffViewerBase { private class MyOpenInEditorWithMouseAction extends OpenInEditorWithMouseAction { @Override protected OpenFileDescriptor getDescriptor(@NotNull Editor editor, int line) { - if (editor != myEditor1 && editor != myEditor2) return null; - Side side = Side.fromLeft(editor == myEditor1); + if (editor != getEditor1() && editor != getEditor2()) return null; + Side side = Side.fromLeft(editor == getEditor1()); - DocumentContent content = side.select(myActualContent1, myActualContent2); + DocumentContent content = side.select(getActualContent1(), getActualContent2()); if (content == null) return null; int offset = editor.logicalPositionToOffset(new LogicalPosition(line, 0)); diff --git a/plugins/svn4idea/src/org/jetbrains/idea/svn/difftool/properties/SvnPropertiesDiffViewer.java b/plugins/svn4idea/src/org/jetbrains/idea/svn/difftool/properties/SvnPropertiesDiffViewer.java index eb5ed3e0f8b0..03a989a2279a 100644 --- a/plugins/svn4idea/src/org/jetbrains/idea/svn/difftool/properties/SvnPropertiesDiffViewer.java +++ b/plugins/svn4idea/src/org/jetbrains/idea/svn/difftool/properties/SvnPropertiesDiffViewer.java @@ -69,7 +69,7 @@ public class SvnPropertiesDiffViewer extends TwosideTextDiffViewer { myWrapperRequest = request; myDiffChanges = diffChanges; - assert myEditor1 != null && myEditor2 != null; + assert getEditor1() != null && getEditor2() != null; for (EditorEx editor : getEditors()) { EditorSettings settings = editor.getSettings(); @@ -90,8 +90,8 @@ public class SvnPropertiesDiffViewer extends TwosideTextDiffViewer { } for (DiffChange change : myDiffChanges) { - DiffDrawUtil.createBorderLineMarker(myEditor1, change.myEndLine1, SeparatorPlacement.TOP); - DiffDrawUtil.createBorderLineMarker(myEditor2, change.myEndLine2, SeparatorPlacement.TOP); + DiffDrawUtil.createBorderLineMarker(getEditor1(), change.myEndLine1, SeparatorPlacement.TOP); + DiffDrawUtil.createBorderLineMarker(getEditor2(), change.myEndLine2, SeparatorPlacement.TOP); } DiffSplitter splitter = myContentPanel.getSplitter(); @@ -146,10 +146,10 @@ public class SvnPropertiesDiffViewer extends TwosideTextDiffViewer { return new Runnable() { @Override public void run() { - assert myEditor1 != null && myEditor2 != null; + assert getEditor1() != null && getEditor2() != null; for (DiffChange change : myDiffChanges) { - setupHighlighting(myEditor1, change, Side.LEFT); - setupHighlighting(myEditor2, change, Side.RIGHT); + setupHighlighting(getEditor1(), change, Side.LEFT); + setupHighlighting(getEditor2(), change, Side.RIGHT); } } }; @@ -205,7 +205,7 @@ public class SvnPropertiesDiffViewer extends TwosideTextDiffViewer { @Override public void paint(@NotNull Graphics g, @NotNull JComponent divider) { - assert myEditor1 != null && myEditor2 != null; + assert getEditor1() != null && getEditor2() != null; Graphics2D gg = DiffDividerDrawUtil.getDividerGraphics(g, divider, getEditor1().getComponent()); Rectangle clip = gg.getClipBounds(); if (clip == null) return; @@ -213,23 +213,23 @@ public class SvnPropertiesDiffViewer extends TwosideTextDiffViewer { gg.setColor(DiffDrawUtil.getDividerColor()); gg.fill(clip); - JComponent header1 = myEditor1.getHeaderComponent(); - JComponent header2 = myEditor2.getHeaderComponent(); + JComponent header1 = getEditor1().getHeaderComponent(); + JComponent header2 = getEditor2().getHeaderComponent(); int headerOffset1 = header1 == null ? 0 : header1.getHeight(); int headerOffset2 = header2 == null ? 0 : header2.getHeight(); // TODO: painting is ugly if shift1 != shift2 (ex: search field is opened for one of editors) - int shift1 = myEditor1.getScrollingModel().getVerticalScrollOffset() - headerOffset1; - int shift2 = myEditor2.getScrollingModel().getVerticalScrollOffset() - headerOffset2; + int shift1 = getEditor1().getScrollingModel().getVerticalScrollOffset() - headerOffset1; + int shift2 = getEditor2().getScrollingModel().getVerticalScrollOffset() - headerOffset2; double rotate = shift1 == shift2 ? 0 : Math.atan2(shift2 - shift1, clip.width); - DiffDividerDrawUtil.paintPolygons(gg, divider.getWidth(), false, rotate == 0, myEditor1, myEditor2, this); + DiffDividerDrawUtil.paintPolygons(gg, divider.getWidth(), false, rotate == 0, getEditor1(), getEditor2(), this); for (DiffChange change : myDiffChanges) { - int y1 = myEditor1.logicalPositionToXY(new LogicalPosition(change.getStartLine(Side.LEFT), 0)).y - shift1; - int y2 = myEditor2.logicalPositionToXY(new LogicalPosition(change.getStartLine(Side.RIGHT), 0)).y - shift2; - int endY1 = myEditor1.logicalPositionToXY(new LogicalPosition(change.getEndLine(Side.LEFT), 0)).y - shift1; - int endY2 = myEditor2.logicalPositionToXY(new LogicalPosition(change.getEndLine(Side.RIGHT), 0)).y - shift2; + int y1 = getEditor1().logicalPositionToXY(new LogicalPosition(change.getStartLine(Side.LEFT), 0)).y - shift1; + int y2 = getEditor2().logicalPositionToXY(new LogicalPosition(change.getStartLine(Side.RIGHT), 0)).y - shift2; + int endY1 = getEditor1().logicalPositionToXY(new LogicalPosition(change.getEndLine(Side.LEFT), 0)).y - shift1; + int endY2 = getEditor2().logicalPositionToXY(new LogicalPosition(change.getEndLine(Side.RIGHT), 0)).y - shift2; AffineTransform oldTransform = gg.getTransform(); gg.translate(0, y1); @@ -261,7 +261,7 @@ public class SvnPropertiesDiffViewer extends TwosideTextDiffViewer { for (LineFragment fragment : diffChange.getFragments()) { if (!handler.process(Side.LEFT.getStartLine(fragment) + shift1, Side.LEFT.getEndLine(fragment) + shift1, Side.RIGHT.getStartLine(fragment) + shift2, Side.RIGHT.getEndLine(fragment) + shift2, - DiffUtil.getLineDiffType(fragment).getColor(myEditor1))) { + DiffUtil.getLineDiffType(fragment).getColor(getEditor1()))) { return; } }