diff options
author | Brian Vosburgh | 2013-11-21 23:29:51 +0000 |
---|---|---|
committer | Brian Vosburgh | 2015-07-16 18:54:39 +0000 |
commit | 0847528b0f90c0872b8dbf8baa93e85edf94c149 (patch) | |
tree | f2b0197907c4fcb8309d8eb11bef7206f59656f6 | |
parent | 1c3592d3b02e4c829c5a98368b639e8245866574 (diff) | |
download | webtools.dali-0847528b0f90c0872b8dbf8baa93e85edf94c149.tar.gz webtools.dali-0847528b0f90c0872b8dbf8baa93e85edf94c149.tar.xz webtools.dali-0847528b0f90c0872b8dbf8baa93e85edf94c149.zip |
normalize Range
4 files changed, 51 insertions, 21 deletions
diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/Range.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/Range.java index 8c6227f511..c52a936cf5 100644 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/Range.java +++ b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/Range.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2012 Oracle. All rights reserved. + * Copyright (c) 2005, 2013 Oracle. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0, which accompanies this distribution * and is available at http://www.eclipse.org/legal/epl-v10.html. @@ -14,34 +14,43 @@ import java.io.Serializable; /** * This simple container class simply puts a bit of semantics * around a pair of numbers. + * <p> + * <strong>NB:</strong> The {@link #start} will be less than (or equal to) + * the {@link #end}. */ public class Range implements Cloneable, Serializable { - /** The starting index of the range. */ + /** + * The range's starting index. This will always be less than or equal to + * {@link #end the range's ending index}. + */ public final int start; - /** The ending index of the range. */ + /** + * The range's ending index. This will always be greater than or equal to + * {@link #start the range's starting index}. + */ public final int end; /** - * The size can be negative if the ending index - * is less than the starting index. + * The range's length. The range's length will never be negative. */ - public final int size; + public final int length; private static final long serialVersionUID = 1L; /** - * Construct with the specified start and end, - * both of which are immutable. + * Construct a range with the specified start and end, both of which are + * mmutable. If the specified end is less than the specified start, the + * values will be swapped in the range. */ public Range(int start, int end) { super(); - this.start = start; - this.end = end; - this.size = end - start + 1; + this.start = Math.min(start, end); + this.end = Math.max(start, end); + this.length = this.end - this.start + 1; } /** @@ -81,7 +90,16 @@ public class Range @Override public String toString() { - return '[' + this.start + ", " + this.end + ']'; //$NON-NLS-1$ + StringBuilder sb = new StringBuilder(); + this.toString(sb); + return sb.toString(); } + public void toString(StringBuilder sb) { + sb.append('['); + sb.append(this.start); + sb.append(", "); //$NON-NLS-1$ + sb.append(this.end); + sb.append(']'); + } } diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/model/value/SortedListValueModelAdapter.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/model/value/SortedListValueModelAdapter.java index 893b4b622b..3c7b7d2678 100644 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/model/value/SortedListValueModelAdapter.java +++ b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/model/value/SortedListValueModelAdapter.java @@ -117,7 +117,7 @@ public class SortedListValueModelAdapter<E> ArrayList<E> unsortedList = (ArrayList<E>) this.list.clone(); Collections.sort(this.list, this.comparator); Range diffRange = ListTools.identityDifferenceRange(unsortedList, this.list); - if (diffRange.size > 0) { + if (diffRange.length > 0) { List<E> unsortedItems = unsortedList.subList(diffRange.start, diffRange.end + 1); List<E> sortedItems = this.list.subList(diffRange.start, diffRange.end + 1); this.fireItemsReplaced(LIST_VALUES, diffRange.start, sortedItems, unsortedItems); diff --git a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/model/value/SortedListValueModelWrapper.java b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/model/value/SortedListValueModelWrapper.java index e92706ba69..47ddd0f785 100644 --- a/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/model/value/SortedListValueModelWrapper.java +++ b/common/plugins/org.eclipse.jpt.common.utility/src/org/eclipse/jpt/common/utility/internal/model/value/SortedListValueModelWrapper.java @@ -234,7 +234,7 @@ public class SortedListValueModelWrapper<E> ArrayList<E> unsortedList = (ArrayList<E>) this.sortedList.clone(); Collections.sort(this.sortedList, this.comparator); Range diffRange = ListTools.identityDifferenceRange(unsortedList, this.sortedList); - if (diffRange.size > 0) { + if (diffRange.length > 0) { List<E> unsortedItems = unsortedList.subList(diffRange.start, diffRange.end + 1); List<E> sortedItems = this.sortedList.subList(diffRange.start, diffRange.end + 1); this.fireItemsReplaced(LIST_VALUES, diffRange.start, sortedItems, unsortedItems); diff --git a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/RangeTests.java b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/RangeTests.java index dcd959295a..b5ed5bdd3f 100644 --- a/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/RangeTests.java +++ b/common/tests/org.eclipse.jpt.common.utility.tests/src/org/eclipse/jpt/common/utility/tests/internal/RangeTests.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2007 Oracle. All rights reserved. + * Copyright (c) 2005, 2013 Oracle. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0, which accompanies this distribution * and is available at http://www.eclipse.org/legal/epl-v10.html. @@ -12,8 +12,9 @@ package org.eclipse.jpt.common.utility.tests.internal; import junit.framework.TestCase; import org.eclipse.jpt.common.utility.internal.Range; -public class RangeTests extends TestCase { - +public class RangeTests + extends TestCase +{ public RangeTests(String name) { super(name); } @@ -31,6 +32,19 @@ public class RangeTests extends TestCase { assertFalse(range.includes(200)); } + public void testIncludes2() { + Range range = new Range(17, 5); + assertFalse(range.includes(-55)); + assertFalse(range.includes(0)); + assertFalse(range.includes(4)); + assertTrue(range.includes(5)); + assertTrue(range.includes(6)); + assertTrue(range.includes(16)); + assertTrue(range.includes(17)); + assertFalse(range.includes(18)); + assertFalse(range.includes(200)); + } + public void testEquals() { Range range1 = new Range(5, 17); Range range2 = new Range(5, 17); @@ -41,9 +55,8 @@ public class RangeTests extends TestCase { assertEquals(range1.hashCode(), range2.hashCode()); range2 = new Range(17, 5); - assertFalse(range1.equals(range2)); - assertFalse(range2.equals(range1)); - // although they are unequal, they can have the same hash code + assertEquals(range1, range2); + assertEquals(range2, range1); assertEquals(range1.hashCode(), range2.hashCode()); range2 = new Range(5, 15); @@ -70,5 +83,4 @@ public class RangeTests extends TestCase { assertEquals(range2, range1); assertEquals(range1.hashCode(), range2.hashCode()); } - } |