From cda416b7952d3582358156a164130ba70bdfc6bf Mon Sep 17 00:00:00 2001 From: "JesusFreke@JesusFreke.com" Date: Sat, 17 Apr 2010 07:02:48 +0000 Subject: [PATCH] Sort the annotations in an AnnotationSetItem based on the TypeIdItem index git-svn-id: https://smali.googlecode.com/svn/trunk@714 55b6fa8a-2a1e-11de-a435-ffa8d773f76a --- .../java/org/jf/dexlib/AnnotationSetItem.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/dexlib/src/main/java/org/jf/dexlib/AnnotationSetItem.java b/dexlib/src/main/java/org/jf/dexlib/AnnotationSetItem.java index 908fd109..15345ebd 100644 --- a/dexlib/src/main/java/org/jf/dexlib/AnnotationSetItem.java +++ b/dexlib/src/main/java/org/jf/dexlib/AnnotationSetItem.java @@ -31,6 +31,8 @@ package org.jf.dexlib; import org.jf.dexlib.Util.AnnotatedOutput; import org.jf.dexlib.Util.Input; +import java.util.Arrays; +import java.util.Comparator; import java.util.List; public class AnnotationSetItem extends Item { @@ -87,6 +89,20 @@ public class AnnotationSetItem extends Item { /** {@inheritDoc} */ protected void writeItem(AnnotatedOutput out) { + Arrays.sort(annotations, new Comparator() { + public int compare(AnnotationItem annotationItem, AnnotationItem annotationItem2) { + int annotationItemIndex = annotationItem.getEncodedAnnotation().annotationType.getIndex(); + int annotationItemIndex2 = annotationItem2.getEncodedAnnotation().annotationType.getIndex(); + if (annotationItemIndex < annotationItemIndex2) { + return -1; + } else if (annotationItemIndex == annotationItemIndex2) { + return 0; + } + return 1; + } + }); + + if (out.annotates()) { out.annotate(4, "size: 0x" + Integer.toHexString(annotations.length) + " (" + annotations.length + ")"); for (AnnotationItem annotationItem: annotations) {