Don't pre-sort ClassDefItems
diff --git a/dexlib/src/main/java/org/jf/dexlib/ClassDefItem.java b/dexlib/src/main/java/org/jf/dexlib/ClassDefItem.java
index 3c9638d..a194231 100644
--- a/dexlib/src/main/java/org/jf/dexlib/ClassDefItem.java
+++ b/dexlib/src/main/java/org/jf/dexlib/ClassDefItem.java
@@ -197,9 +197,9 @@
/** {@inheritDoc} */
public int compareTo(ClassDefItem o) {
- //The actual sorting for this class is implemented in SortClassDefItemSection.
- //This method is just used for sorting the associated ClassDataItem items, so
- //we can just do the comparison based on the offsets of the items
+ //The actual sorting for this class is done during the placement phase, in ClassDefPlacer.
+ //This method is just used for sorting the associated ClassDataItem items after the ClassDefItems have been
+ //placed, so we can just do the comparison based on the offsets
return this.getOffset() - o.getOffset();
}
diff --git a/dexlib/src/main/java/org/jf/dexlib/DexFile.java b/dexlib/src/main/java/org/jf/dexlib/DexFile.java
index a31ee66..80f25f8 100644
--- a/dexlib/src/main/java/org/jf/dexlib/DexFile.java
+++ b/dexlib/src/main/java/org/jf/dexlib/DexFile.java
@@ -773,16 +773,15 @@
int ret = ClassDefItem.placeClassDefItems(this, offset);
- Collections.sort(this.items, new Comparator<ClassDefItem>() {
-
- public int compare(ClassDefItem a, ClassDefItem b) {
- return a.getOffset() - b.getOffset();
- }
- });
+ Collections.sort(this.items);
this.offset = items.get(0).getOffset();
return ret;
}
+
+ protected void sortSection() {
+ // Do nothing. Sorting is handled by ClassDefItem.ClassDefPlacer, during placement
+ }
};
/**