diff --git a/dexlib/src/main/java/org/jf/dexlib/AnnotationDirectoryItem.java b/dexlib/src/main/java/org/jf/dexlib/AnnotationDirectoryItem.java index b485930c..7605ecd6 100644 --- a/dexlib/src/main/java/org/jf/dexlib/AnnotationDirectoryItem.java +++ b/dexlib/src/main/java/org/jf/dexlib/AnnotationDirectoryItem.java @@ -109,9 +109,11 @@ public class AnnotationDirectoryItem extends OffsettedItem { } } + public void copyTo(DexFile dexFile, EncodedMethod copy) { + super.copyTo(dexFile, copy); + + CodeItem codeItem = copy.codeItemReferenceField.getReference(); + if (codeItem != null) { + codeItem.setParent(copy.methodReferenceField.getReference()); + } + } + public int getAccessFlags() { return accessFlagsField.getCachedValue(); } diff --git a/dexlib/src/main/java/org/jf/dexlib/ClassDefItem.java b/dexlib/src/main/java/org/jf/dexlib/ClassDefItem.java index 838cdd0c..897871da 100644 --- a/dexlib/src/main/java/org/jf/dexlib/ClassDefItem.java +++ b/dexlib/src/main/java/org/jf/dexlib/ClassDefItem.java @@ -171,6 +171,20 @@ public class ClassDefItem extends IndexedItem { return ((Integer)this.offset).compareTo(o.offset); } + public void copyTo(DexFile dexFile, ClassDefItem copy) { + super.copyTo(dexFile, copy); + + AnnotationDirectoryItem annotationDirectoryItem = copy.classAnnotationsReferenceField.getReference(); + if (annotationDirectoryItem != null) { + annotationDirectoryItem.setParent(copy); + } + + ClassDataItem classDataItem = copy.classDataReferenceField.getReference(); + if (classDataItem != null) { + classDataItem.setParent(copy); + } + } + public void addField(ClassDataItem.EncodedField encodedField, EncodedValue initialValue) { //fields are added in ClassDefItem instead of ClassDataItem because we need to grab //the static initializers for StaticFieldInitialValues