From 7d5439950fe52a7be4fa6cb222e301f78604f96f Mon Sep 17 00:00:00 2001 From: Ben Gruver Date: Sat, 29 Dec 2012 14:50:15 -0800 Subject: [PATCH] Fix various issues related to comparing method references. --- .../base/reference/BaseMethodReference.java | 2 +- .../dexlib2/dexbacked/util/FixedSizeList.java | 2 +- .../java/org/jf/util/CollectionUtils.java | 22 +++++++++++++++++-- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/dexlib2/src/main/java/org/jf/dexlib2/base/reference/BaseMethodReference.java b/dexlib2/src/main/java/org/jf/dexlib2/base/reference/BaseMethodReference.java index 3d797bc5..fab116e5 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/base/reference/BaseMethodReference.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/base/reference/BaseMethodReference.java @@ -66,6 +66,6 @@ public abstract class BaseMethodReference implements MethodReference { if (res != 0) return res; res = getReturnType().compareTo(o.getReturnType()); if (res != 0) return res; - return CollectionUtils.compareAsList(getParameters(), o.getParameters()); + return CollectionUtils.compareAsIterable(getParameters(), o.getParameters()); } } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/util/FixedSizeList.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/util/FixedSizeList.java index b2d6873b..b93a1205 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/util/FixedSizeList.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/util/FixedSizeList.java @@ -41,7 +41,7 @@ import java.util.AbstractList; public abstract class FixedSizeList extends AbstractList { @Override public T get(int index) { - if (index < 0 || index > size()) { + if (index < 0 || index >= size()) { throw new IndexOutOfBoundsException(); } return readItem(index); diff --git a/util/src/main/java/org/jf/util/CollectionUtils.java b/util/src/main/java/org/jf/util/CollectionUtils.java index 84de6953..23e23dc9 100644 --- a/util/src/main/java/org/jf/util/CollectionUtils.java +++ b/util/src/main/java/org/jf/util/CollectionUtils.java @@ -77,9 +77,18 @@ public class CollectionUtils { @Nonnull Iterable it2) { Iterator elements2 = it2.iterator(); for (T element1: it1) { - int res = comparator.compare(element1, elements2.next()); + T element2; + try { + element2 = elements2.next(); + } catch (NoSuchElementException ex) { + return 1; + } + int res = comparator.compare(element1, element2); if (res != 0) return res; } + if (elements2.hasNext()) { + return -1; + } return 0; } @@ -87,9 +96,18 @@ public class CollectionUtils { @Nonnull Iterable it2) { Iterator elements2 = it2.iterator(); for (T element1: it1) { - int res = element1.compareTo(elements2.next()); + T element2; + try { + element2 = elements2.next(); + } catch (NoSuchElementException ex) { + return 1; + } + int res = element1.compareTo(element2); if (res != 0) return res; } + if (elements2.hasNext()) { + return -1; + } return 0; }