From 741bcb69549fbed8234b5b2a9d77a55df4e2db12 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Fri, 18 May 2012 21:37:08 +0400 Subject: [PATCH] [merge] refactoring: make FragmentSide to be enum * Make some DRY. * Use IllegalArgumentException to a not-public InvalidParameterException --- .../openapi/diff/impl/DiffPanelImpl.java | 2 +- .../diff/impl/fragments/InlineFragment.java | 2 +- .../diff/impl/fragments/LineFragment.java | 3 +- .../diff/impl/highlighting/FragmentSide.java | 130 ++++++++++-------- 4 files changed, 73 insertions(+), 64 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/diff/impl/DiffPanelImpl.java b/platform/platform-impl/src/com/intellij/openapi/diff/impl/DiffPanelImpl.java index 5853849359ad..88aaf6e0af8f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/diff/impl/DiffPanelImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/diff/impl/DiffPanelImpl.java @@ -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; } diff --git a/platform/util/src/com/intellij/openapi/diff/impl/fragments/InlineFragment.java b/platform/util/src/com/intellij/openapi/diff/impl/fragments/InlineFragment.java index 5e8116586293..8b06e9847b55 100644 --- a/platform/util/src/com/intellij/openapi/diff/impl/fragments/InlineFragment.java +++ b/platform/util/src/com/intellij/openapi/diff/impl/fragments/InlineFragment.java @@ -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) { diff --git a/platform/util/src/com/intellij/openapi/diff/impl/fragments/LineFragment.java b/platform/util/src/com/intellij/openapi/diff/impl/fragments/LineFragment.java index e56f13277c4b..4aeb74fb3726 100644 --- a/platform/util/src/com/intellij/openapi/diff/impl/fragments/LineFragment.java +++ b/platform/util/src/com/intellij/openapi/diff/impl/fragments/LineFragment.java @@ -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) { diff --git a/platform/util/src/com/intellij/openapi/diff/impl/highlighting/FragmentSide.java b/platform/util/src/com/intellij/openapi/diff/impl/highlighting/FragmentSide.java index 8119a53df8ef..2a9a4fed5d2a 100644 --- a/platform/util/src/com/intellij/openapi/diff/impl/highlighting/FragmentSide.java +++ b/platform/util/src/com/intellij/openapi/diff/impl/highlighting/FragmentSide.java @@ -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)); } + }