mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
diff: extract installation of line number conversion from FoldingModelSupport
This commit is contained in:
@@ -378,9 +378,9 @@ public class UnifiedDiffViewer extends ListenerDiffViewerBase {
|
||||
myPanel.addNotification(DiffNotifications.createEqualContents(equalCharsets, equalSeparators));
|
||||
}
|
||||
|
||||
TIntFunction separatorLines = myFoldingModel.getLineNumberConvertor();
|
||||
myEditor.getGutterComponentEx().setLineNumberConvertor(mergeConverters(data.getLineConvertor1(), separatorLines),
|
||||
mergeConverters(data.getLineConvertor2(), separatorLines));
|
||||
TIntFunction separatorLineConvertor = myFoldingModel.getLineNumberConvertor();
|
||||
myEditor.getGutterComponentEx().setLineNumberConvertor(DiffUtil.mergeLineConverters(data.getLineConvertor1(), separatorLineConvertor),
|
||||
DiffUtil.mergeLineConverters(data.getLineConvertor2(), separatorLineConvertor));
|
||||
|
||||
ApplicationManager.getApplication().runWriteAction(() -> {
|
||||
myDuringOnesideDocumentModification = true;
|
||||
@@ -442,11 +442,6 @@ public class UnifiedDiffViewer extends ListenerDiffViewerBase {
|
||||
return block;
|
||||
}
|
||||
|
||||
@Contract("!null, _ -> !null")
|
||||
private static TIntFunction mergeConverters(@NotNull final TIntFunction convertor, @NotNull final TIntFunction separatorLines) {
|
||||
return value -> convertor.execute(separatorLines.execute(value));
|
||||
}
|
||||
|
||||
/*
|
||||
* This convertor returns -1 if exact matching is impossible
|
||||
*/
|
||||
|
||||
@@ -85,6 +85,10 @@ public class SimpleDiffViewer extends TwosideTextDiffViewer {
|
||||
|
||||
myTextDiffProvider = DiffUtil.createTextDiffProvider(getProject(), getRequest(), getTextSettings(), this::rediff, this);
|
||||
|
||||
for (Side side : Side.values()) {
|
||||
DiffUtil.installLineConvertor(getEditor(side), myFoldingModel, side.getIndex());
|
||||
}
|
||||
|
||||
DiffUtil.registerAction(new ReplaceSelectedChangesAction(Side.LEFT, true), myPanel);
|
||||
DiffUtil.registerAction(new AppendSelectedChangesAction(Side.LEFT, true), myPanel);
|
||||
DiffUtil.registerAction(new ReplaceSelectedChangesAction(Side.RIGHT, true), myPanel);
|
||||
|
||||
@@ -71,6 +71,10 @@ public abstract class ThreesideTextDiffViewerEx extends ThreesideTextDiffViewer
|
||||
myStatusPanel = new MyStatusPanel();
|
||||
myFoldingModel = new MyFoldingModel(toObjectArray(getEditors(), EditorEx.class), this);
|
||||
|
||||
for (ThreeSide side : ThreeSide.values()) {
|
||||
DiffUtil.installLineConvertor(getEditor(side), myFoldingModel, side.getIndex());
|
||||
}
|
||||
|
||||
DiffUtil.registerAction(new PrevConflictAction(), myPanel);
|
||||
DiffUtil.registerAction(new NextConflictAction(), myPanel);
|
||||
}
|
||||
|
||||
@@ -86,10 +86,13 @@ public class FoldingModelSupport {
|
||||
if (myCount > 1) {
|
||||
myEditors[i].getFoldingModel().addListener(new MyFoldingListener(i), disposable);
|
||||
}
|
||||
myEditors[i].getGutterComponentEx().setLineNumberConvertor(getLineConvertor(i));
|
||||
}
|
||||
}
|
||||
|
||||
public int getCount() {
|
||||
return myCount;
|
||||
}
|
||||
|
||||
//
|
||||
// Init
|
||||
//
|
||||
@@ -280,7 +283,7 @@ public class FoldingModelSupport {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
protected TIntFunction getLineConvertor(final int index) {
|
||||
public TIntFunction getLineConvertor(final int index) {
|
||||
return value -> {
|
||||
updateLineNumbers(false);
|
||||
for (FoldedBlock folding : getFoldedBlocks()) { // TODO: avoid full scan - it could slowdown painting
|
||||
|
||||
@@ -32,6 +32,7 @@ import com.intellij.diff.fragments.MergeWordFragment;
|
||||
import com.intellij.diff.impl.DiffSettingsHolder.DiffSettings;
|
||||
import com.intellij.diff.requests.ContentDiffRequest;
|
||||
import com.intellij.diff.tools.util.DiffNotifications;
|
||||
import com.intellij.diff.tools.util.FoldingModelSupport;
|
||||
import com.intellij.diff.tools.util.base.TextDiffSettingsHolder.TextDiffSettings;
|
||||
import com.intellij.diff.tools.util.base.TextDiffViewerUtil;
|
||||
import com.intellij.diff.tools.util.text.*;
|
||||
@@ -98,6 +99,7 @@ import com.intellij.util.ui.JBInsets;
|
||||
import com.intellij.util.ui.JBUI;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import gnu.trove.Equality;
|
||||
import gnu.trove.TIntFunction;
|
||||
import org.jetbrains.annotations.*;
|
||||
|
||||
import javax.swing.*;
|
||||
@@ -254,6 +256,22 @@ public class DiffUtil {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
public static void installLineConvertor(@NotNull EditorEx editor, @NotNull FoldingModelSupport foldingSupport) {
|
||||
assert foldingSupport.getCount() == 1;
|
||||
installLineConvertor(editor, foldingSupport, 0);
|
||||
}
|
||||
|
||||
public static void installLineConvertor(@NotNull EditorEx editor, @NotNull FoldingModelSupport foldingSupport, int editorIndex) {
|
||||
TIntFunction lineConvertor = foldingSupport.getLineConvertor(editorIndex);
|
||||
editor.getGutterComponentEx().setLineNumberConvertor(lineConvertor);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static TIntFunction mergeLineConverters(@NotNull TIntFunction convertor1, @NotNull TIntFunction convertor2) {
|
||||
return value -> convertor1.execute(convertor2.execute(value));
|
||||
}
|
||||
|
||||
//
|
||||
// Scrolling
|
||||
//
|
||||
|
||||
+2
@@ -141,6 +141,8 @@ class ApplyPatchViewer implements DataProvider, Disposable {
|
||||
myFoldingModel = new MyFoldingModel(myResultEditor, this);
|
||||
|
||||
|
||||
DiffUtil.installLineConvertor(myResultEditor, myFoldingModel);
|
||||
|
||||
new MyFocusOppositePaneAction().install(myPanel);
|
||||
new TextDiffViewerUtil.EditorActionsPopup(createEditorPopupActions()).install(editors);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user