merge: cleanup

This commit is contained in:
Aleksey Pivovarov
2016-03-03 17:49:47 +03:00
parent 6cd658dfc8
commit 043cc83725
2 changed files with 33 additions and 20 deletions
@@ -73,11 +73,13 @@ public class TextMergeChange extends ThreesideDiffChangeBase {
myEndLine = myFragment.getEndLine(ThreeSide.BASE);
installHighlighter();
installOperations();
}
@CalledInAwt
public void destroy() {
destroyHighlighter();
destroyOperations();
destroyInnerHighlighter();
}
@@ -88,8 +90,6 @@ public class TextMergeChange extends ThreesideDiffChangeBase {
createHighlighter(ThreeSide.BASE);
if (getType().isLeftChange()) createHighlighter(ThreeSide.LEFT);
if (getType().isRightChange()) createHighlighter(ThreeSide.RIGHT);
doInstallActionHighlighters();
}
@CalledInAwt
@@ -107,11 +107,6 @@ public class TextMergeChange extends ThreesideDiffChangeBase {
highlighter.dispose();
}
myHighlighters.clear();
for (MyGutterOperation operation : myOperations) {
operation.dispose();
}
myOperations.clear();
}
@CalledInAwt
@@ -127,6 +122,9 @@ public class TextMergeChange extends ThreesideDiffChangeBase {
destroyHighlighter();
installHighlighter();
destroyOperations();
installOperations();
myViewer.repaintDividers();
}
@@ -281,13 +279,21 @@ public class TextMergeChange extends ThreesideDiffChangeBase {
// Gutter actions
//
private void doInstallActionHighlighters() {
private void installOperations() {
ContainerUtil.addIfNotNull(myOperations, createOperation(ThreeSide.LEFT, OperationType.APPLY));
ContainerUtil.addIfNotNull(myOperations, createOperation(ThreeSide.LEFT, OperationType.IGNORE));
ContainerUtil.addIfNotNull(myOperations, createOperation(ThreeSide.RIGHT, OperationType.APPLY));
ContainerUtil.addIfNotNull(myOperations, createOperation(ThreeSide.RIGHT, OperationType.IGNORE));
}
@CalledInAwt
private void destroyOperations() {
for (MyGutterOperation operation : myOperations) {
operation.dispose();
}
myOperations.clear();
}
@Nullable
private MyGutterOperation createOperation(@NotNull ThreeSide side, @NotNull OperationType type) {
if (isResolved(side)) return null;
@@ -52,6 +52,10 @@ public class SimpleThreesideDiffChange extends ThreesideDiffChangeBase {
createHighlighter(ThreeSide.BASE);
if (getType().isLeftChange()) createHighlighter(ThreeSide.LEFT);
if (getType().isRightChange()) createHighlighter(ThreeSide.RIGHT);
createInnerHighlighter(ThreeSide.BASE);
if (getType().isLeftChange()) createInnerHighlighter(ThreeSide.LEFT);
if (getType().isRightChange()) createInnerHighlighter(ThreeSide.RIGHT);
}
public void destroyHighlighter() {
@@ -69,22 +73,25 @@ public class SimpleThreesideDiffChange extends ThreesideDiffChangeBase {
Editor editor = side.select(myEditors);
TextDiffType type = getDiffType();
int startLine = myFragment.getStartLine(side);
int endLine = myFragment.getEndLine(side);
boolean hasInner = myFragment.getInnerFragments() != null;
int start = DiffUtil.getLinesRange(editor.getDocument(), startLine, endLine).getStartOffset();
int startLine = getStartLine(side);
int endLine = getEndLine(side);
boolean ignored = myFragment.getInnerFragments() != null;
boolean shouldHideWithoutLineNumbers = side == ThreeSide.BASE && !isChange(Side.LEFT) && isChange(Side.RIGHT);
myHighlighters.addAll(DiffDrawUtil.createHighlighter(editor, startLine, endLine, type, hasInner, false, shouldHideWithoutLineNumbers));
myHighlighters.addAll(DiffDrawUtil.createHighlighter(editor, startLine, endLine, type, ignored, false, shouldHideWithoutLineNumbers));
myHighlighters.addAll(DiffDrawUtil.createLineMarker(editor, startLine, endLine, type, false));
}
if (hasInner) {
for (MergeWordFragment innerFragment : myFragment.getInnerFragments()) {
int startOffset = innerFragment.getStartOffset(side);
int endOffset = innerFragment.getEndOffset(side);
myHighlighters.addAll(DiffDrawUtil.createInlineHighlighter(editor, start + startOffset, start + endOffset, type));
}
private void createInnerHighlighter(@NotNull ThreeSide side) {
List<MergeWordFragment> innerFragments = myFragment.getInnerFragments();
if (innerFragments == null) return;
Editor editor = side.select(myEditors);
int start = DiffUtil.getLinesRange(editor.getDocument(), getStartLine(side), getEndLine(side)).getStartOffset();
for (MergeWordFragment fragment : innerFragments) {
int innerStart = start + fragment.getStartOffset(side);
int innerEnd = start + fragment.getEndOffset(side);
myHighlighters.addAll(DiffDrawUtil.createInlineHighlighter(editor, innerStart, innerEnd, getDiffType()));
}
}