[merge] refactoring: make FragmentSide to be enum

* Make some DRY.
* Use IllegalArgumentException to a not-public InvalidParameterException
This commit is contained in:
Kirill Likhodedov
2012-05-18 21:37:08 +04:00
parent f571391945
commit 741bcb6954
4 changed files with 73 additions and 64 deletions
@@ -482,7 +482,7 @@ public class DiffPanelImpl implements DiffPanelEx, ContentChangeListener, TwoSid
return myLeftSide;
}
if (side == FragmentSide.SIDE2) return myRightSide;
throw new InvalidParameterException(String.valueOf(side));
throw new IllegalArgumentException(String.valueOf(side));
}
public LineBlocks getLineBlocks() { return myLineBlocks; }
@@ -42,7 +42,7 @@ public class InlineFragment implements Fragment {
public TextRange getRange(FragmentSide side) {
if (side == FragmentSide.SIDE1) return myRange1;
if (side == FragmentSide.SIDE2) return myRange2;
throw new InvalidParameterException(String.valueOf(side));
throw new IllegalArgumentException(String.valueOf(side));
}
public Fragment shift(TextRange range1, TextRange range2, int startingLine1, int startingLine2) {
@@ -21,7 +21,6 @@ import com.intellij.openapi.diff.impl.util.TextDiffTypeEnum;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.TextRange;
import java.security.InvalidParameterException;
import java.util.ArrayList;
import java.util.Iterator;
@@ -55,7 +54,7 @@ public class LineFragment extends LineBlock implements Fragment {
public TextRange getRange(FragmentSide side) {
if (side == FragmentSide.SIDE1) return myRange1;
if (side == FragmentSide.SIDE2) return myRange2;
throw new InvalidParameterException(String.valueOf(side));
throw new IllegalArgumentException(String.valueOf(side));
}
public Fragment shift(TextRange range1, TextRange range2, int startingLine1, int startingLine2) {
@@ -17,84 +17,94 @@ package com.intellij.openapi.diff.impl.highlighting;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.diff.ex.DiffFragment;
import org.jetbrains.annotations.NotNull;
import java.security.InvalidParameterException;
public enum FragmentSide {
SIDE1(0, 0) {
@Override
public String getText(DiffFragment fragment) {
return fragment.getText1();
}
@Override
protected DiffFragment createDiffFragment(String text, String otherText) {
return new DiffFragment(text, otherText);
}
@Override
public FragmentSide otherSide() {
return SIDE2;
}
},
SIDE2(1, 2) {
@Override
public String getText(DiffFragment fragment) {
return fragment.getText2();
}
@Override
protected DiffFragment createDiffFragment(String text, String otherText) {
return new DiffFragment(otherText, text);
}
@Override
public FragmentSide otherSide() {
return SIDE1;
}
};
private static final Logger LOG = Logger.getInstance(FragmentSide.class);
private final int myIndex;
private final int myMergeIndex;
FragmentSide(int index, int mergeIndex) {
myIndex = index;
myMergeIndex = mergeIndex;
}
public DiffFragment createFragment(String text, String otherText, boolean modified) {
DiffFragment fragment = createDiffFragment(text, otherText);
if (!fragment.isOneSide()) fragment.setModified(modified);
return fragment;
}
public abstract class FragmentSide {
private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.diff.impl.highlighting.FragmentSide");
public abstract String getText(DiffFragment fragment);
public abstract DiffFragment createFragment(String text, String otherText, boolean modified);
public abstract FragmentSide otherSide();
public abstract int getIndex();
public abstract int getMergeIndex();
protected abstract DiffFragment createDiffFragment(String text, String otherText);
public int getIndex() {
return myIndex;
}
public int getMergeIndex() {
return myMergeIndex;
}
public String getOtherText(DiffFragment fragment) {
return otherSide().getText(fragment);
}
public InvalidParameterException invalidException() {
return new InvalidParameterException(String.valueOf(this));
public IllegalArgumentException invalidException() {
return new IllegalArgumentException(String.valueOf(this));
}
public static final FragmentSide SIDE1 = new FragmentSide() {
public String getText(DiffFragment fragment) {
return fragment.getText1();
}
public DiffFragment createFragment(String text, String otherText, boolean modified) {
DiffFragment fragment = new DiffFragment(text, otherText);
if (!fragment.isOneSide()) fragment.setModified(modified);
return fragment;
}
public FragmentSide otherSide() {
return SIDE2;
}
public int getIndex() {
return 0;
}
public int getMergeIndex() {
return 0;
}
};
public static final FragmentSide SIDE2 = new FragmentSide() {
public String getText(DiffFragment fragment) {
return fragment.getText2();
}
public DiffFragment createFragment(String text, String otherText, boolean modified) {
DiffFragment fragment = new DiffFragment(otherText, text);
if (!fragment.isOneSide()) fragment.setModified(modified);
return fragment;
}
public FragmentSide otherSide() {
return SIDE1;
}
public int getIndex() {
return 1;
}
public int getMergeIndex() {
return 2;
}
};
public static FragmentSide chooseSide(DiffFragment oneSide) {
LOG.assertTrue(oneSide.isOneSide());
LOG.assertTrue(oneSide.getText1() != oneSide.getText2());
return oneSide.getText1() == null ? SIDE2 : SIDE1;
}
@NotNull
public static FragmentSide fromIndex(int index) {
switch (index) {
case 0: return SIDE1;
case 1: return SIDE2;
default: throw new InvalidParameterException(String.valueOf(index));
for (FragmentSide side : FragmentSide.values()) {
if (side.getIndex() == index) {
return side;
}
}
throw new IllegalArgumentException(String.valueOf(index));
}
}