diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/EncodedArrayPool.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/EncodedArrayPool.java index 60afc609..badbd081 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/writer/EncodedArrayPool.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/EncodedArrayPool.java @@ -114,6 +114,13 @@ public class EncodedArrayPool { private final Set fields; private final int size; + private static class FieldComparator implements Comparator { + @Override + public int compare(Field o1, Field o2) { + return o1.compareTo(o2); + } + } + private static final Function GET_INITIAL_VALUE = new Function() { @Override @@ -133,13 +140,13 @@ public class EncodedArrayPool { @Nullable public static Key of(@Nonnull ClassDef classDef) { - Set fields = classDef.getFields(); - - Iterable staticFields = FluentIterable.from(classDef.getFields()).filter(IS_STATIC_FIELD); - int lastIndex = CollectionUtils.lastIndexOf(staticFields, HAS_INITIALIZER); + Set staticFieldsSorted = FluentIterable.from(classDef.getFields()) + .filter(IS_STATIC_FIELD) + .toSortedSet(new FieldComparator()); + int lastIndex = CollectionUtils.lastIndexOf(staticFieldsSorted, HAS_INITIALIZER); if (lastIndex > -1) { - return new Key(fields, lastIndex+1); + return new Key(staticFieldsSorted, lastIndex+1); } return null; } @@ -151,7 +158,6 @@ public class EncodedArrayPool { @Nonnull public Iterable getElements() { return FluentIterable.from(fields) - .filter(IS_STATIC_FIELD) .limit(size) .transform(GET_INITIAL_VALUE); }