/*
* 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.simple;
import com.intellij.diff.fragments.MergeLineFragment;
import com.intellij.diff.util.DiffUtil;
import com.intellij.diff.util.MergeConflictType;
import com.intellij.diff.util.ThreeSide;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.ex.EditorEx;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import consulo.annotations.RequiredDispatchThread;
import java.util.List;
public class SimpleThreesideDiffChange extends ThreesideDiffChangeBase {
@NotNull private final List<? extends EditorEx> myEditors;
@Nullable private final MergeInnerDifferences myInnerFragments;
private int[] myLineStarts = new int[3];
private int[] myLineEnds = new int[3];
public SimpleThreesideDiffChange(@NotNull MergeLineFragment fragment,
@NotNull MergeConflictType conflictType,
@Nullable MergeInnerDifferences innerFragments,
@NotNull SimpleThreesideDiffViewer viewer) {
super(conflictType);
myEditors = viewer.getEditors();
myInnerFragments = innerFragments;
for (ThreeSide side : ThreeSide.values()) {
myLineStarts[side.getIndex()] = fragment.getStartLine(side);
myLineEnds[side.getIndex()] = fragment.getEndLine(side);
}
reinstallHighlighters();
}
@RequiredDispatchThread
public void destroy() {
destroyHighlighters();
destroyInnerHighlighters();
}
@RequiredDispatchThread
public void reinstallHighlighters() {
destroyHighlighters();
installHighlighters();
destroyInnerHighlighters();
installInnerHighlighters();
}
//
// Getters
//
@Override
public int getStartLine(@NotNull ThreeSide side) {
return side.select(myLineStarts);
}
@Override
public int getEndLine(@NotNull ThreeSide side) {
return side.select(myLineEnds);
}
@Override
public boolean isResolved(@NotNull ThreeSide side) {
return false;
}
@NotNull
@Override
protected Editor getEditor(@NotNull ThreeSide side) {
return side.select(myEditors);
}
@Nullable
@Override
protected MergeInnerDifferences getInnerFragments() {
return myInnerFragments;
}
//
// Shift
//
public boolean processChange(int oldLine1, int oldLine2, int shift, @NotNull ThreeSide side) {
int line1 = getStartLine(side);
int line2 = getEndLine(side);
int sideIndex = side.getIndex();
DiffUtil.UpdatedLineRange newRange = DiffUtil.updateRangeOnModification(line1, line2, oldLine1, oldLine2, shift);
myLineStarts[sideIndex] = newRange.startLine;
myLineEnds[sideIndex] = newRange.endLine;
return newRange.damaged;
}
}