From fdef6422d2c5c87c0a6599bd568943d493436820 Mon Sep 17 00:00:00 2001 From: "JesusFreke@JesusFreke.com" Date: Tue, 23 Jun 2009 02:37:34 +0000 Subject: [PATCH] - Fixed an issue when trying to set a null AnnotationDirectoryItem to a ClassDefItem - Fixed an issue when interning a CodeItem with no debug info - Fixed an issue where the MapItem wasn't getting added to the dex file correctly when creating a dex file from scratch git-svn-id: https://smali.googlecode.com/svn/trunk@213 55b6fa8a-2a1e-11de-a435-ffa8d773f76a --- .../main/java/org/jf/dexlib/ClassDefItem.java | 18 +++++++++++------- .../src/main/java/org/jf/dexlib/CodeItem.java | 2 +- .../src/main/java/org/jf/dexlib/DexFile.java | 2 +- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/dexlib/src/main/java/org/jf/dexlib/ClassDefItem.java b/dexlib/src/main/java/org/jf/dexlib/ClassDefItem.java index 130398f8..838cdd0c 100644 --- a/dexlib/src/main/java/org/jf/dexlib/ClassDefItem.java +++ b/dexlib/src/main/java/org/jf/dexlib/ClassDefItem.java @@ -209,7 +209,9 @@ public class ClassDefItem extends IndexedItem { public void setAnnotations(AnnotationDirectoryItem annotations) { this.classAnnotationsReferenceField.setReference(annotations); - annotations.setParent(this); + if (annotations != null) { + annotations.setParent(this); + } } public void setClassDataItem(ClassDataItem classDataItem) { @@ -261,12 +263,14 @@ public class ClassDefItem extends IndexedItem { public int placeSection(int offset) { currentOffset = offset; - //presort the list, to guarantee a unique ordering - Collections.sort(section.items, new Comparator() { - public int compare(ClassDefItem classDefItem, ClassDefItem classDefItem1) { - return classDefItem.getClassType().compareTo(classDefItem1.getClassType()); - } - }); + if (section.dexFile.getSortAllItems()) { + //presort the list, to guarantee a unique ordering + Collections.sort(section.items, new Comparator() { + public int compare(ClassDefItem classDefItem, ClassDefItem classDefItem1) { + return classDefItem.getClassType().compareTo(classDefItem1.getClassType()); + } + }); + } for (ClassDefItem classDefItem: section.items) { classDefItem.offset = -1; diff --git a/dexlib/src/main/java/org/jf/dexlib/CodeItem.java b/dexlib/src/main/java/org/jf/dexlib/CodeItem.java index cf8275e5..d51f3cca 100644 --- a/dexlib/src/main/java/org/jf/dexlib/CodeItem.java +++ b/dexlib/src/main/java/org/jf/dexlib/CodeItem.java @@ -152,7 +152,7 @@ public class CodeItem extends OffsettedItem { triesListField.copyTo(dexFile, copy.triesListField); DebugInfoItem copyDebugInfo = copy.getDebugInfo(); - if (copy != null) { + if (copyDebugInfo != null) { copyDebugInfo.setParent(copy); } } diff --git a/dexlib/src/main/java/org/jf/dexlib/DexFile.java b/dexlib/src/main/java/org/jf/dexlib/DexFile.java index 8ec246e3..3bc7e488 100644 --- a/dexlib/src/main/java/org/jf/dexlib/DexFile.java +++ b/dexlib/src/main/java/org/jf/dexlib/DexFile.java @@ -588,7 +588,7 @@ public class DexFile return new MapItem(dexFile, index); } - public MapItem intern(DexFile dexFile, MapItem item) { + public MapItem intern(MapItem item) { this.items.add(item); return item; }