From 7f10374f40d6c78a71777e0814806812a0a3d72b Mon Sep 17 00:00:00 2001 From: Izzat Bahadirov Date: Mon, 11 Feb 2013 14:13:26 -0500 Subject: [PATCH] Sorting items in encoded_array to match the order of fields. --- .../java/org/jf/dexlib2/writer/EncodedArrayPool.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) 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..9f1194c3 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/writer/EncodedArrayPool.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/EncodedArrayPool.java @@ -113,6 +113,13 @@ public class EncodedArrayPool { public static class Key implements Comparable { 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() { @@ -133,9 +140,9 @@ public class EncodedArrayPool { @Nullable public static Key of(@Nonnull ClassDef classDef) { - Set fields = classDef.getFields(); + Set fields = FluentIterable.from(classDef.getFields()).toImmutableSortedSet(new FieldComparator()); - Iterable staticFields = FluentIterable.from(classDef.getFields()).filter(IS_STATIC_FIELD); + Iterable staticFields = FluentIterable.from(fields).filter(IS_STATIC_FIELD); int lastIndex = CollectionUtils.lastIndexOf(staticFields, HAS_INITIALIZER); if (lastIndex > -1) {