mirror of
https://github.com/revanced/smali.git
synced 2025-05-29 12:20:11 +02:00
Change getInternedAnnotationDirectoryItem to accept lists of composite item+annotation objects instead of separate arrays of everything
git-svn-id: https://smali.googlecode.com/svn/trunk@409 55b6fa8a-2a1e-11de-a435-ffa8d773f76a
This commit is contained in:
parent
ea64b6e653
commit
f75a5c351c
@ -103,30 +103,67 @@ public class AnnotationDirectoryItem extends Item<AnnotationDirectoryItem> {
|
|||||||
* <code>DexFile</code>
|
* <code>DexFile</code>
|
||||||
* @param dexFile The <code>DexFile</code> that this item belongs to
|
* @param dexFile The <code>DexFile</code> that this item belongs to
|
||||||
* @param classAnnotations The annotations associated with the class
|
* @param classAnnotations The annotations associated with the class
|
||||||
* @param fieldAnnotationFields An array of <code>FieldIdItem</code> objects that the annotations in
|
* @param fieldAnnotations A list of <code>FieldAnnotation</code> objects containing the field annotations
|
||||||
* <code>fieldAnnotations</code> are associated with
|
* @param methodAnnotations A list of <code>MethodAnnotation</code> objects containing the method annotations
|
||||||
* @param fieldAnnotations An array of <code>AnnotationSetItem</code> objects that contain the annotations for the
|
* @param parameterAnnotations A list of <code>ParameterAnnotation</code> objects containin the parameter
|
||||||
* fields in <code>fieldAnnotationFields</code>
|
* annotations
|
||||||
* @param methodAnnotationMethods An array of <code>MethodIdItem</code> objects that the annotations in
|
|
||||||
* <code>methodAnnotations</code> are associated with
|
|
||||||
* @param methodAnnotations An array of <code>AnnotationSetItem</code> objects that contain the annotations for the
|
|
||||||
* methods in <code>methodAnnotationMethods</code>
|
|
||||||
* @param parameterAnnotationMethods An array of <code>MethodIdItem</code> objects that the annotations in
|
|
||||||
* <code>parameterAnnotations</code> are associated with
|
|
||||||
* @param parameterAnnotations An array of <code>AnnotationSetRefList</code> objects that contain the parameter
|
|
||||||
* annotations for the methods in <code>parameterAnnotationMethods</code>
|
|
||||||
* @return an <code>AnnotationItem</code> for the given values, and that has been interned into the given
|
* @return an <code>AnnotationItem</code> for the given values, and that has been interned into the given
|
||||||
* <code>DexFile</code>
|
* <code>DexFile</code>
|
||||||
*/
|
*/
|
||||||
public static AnnotationDirectoryItem getInternedAnnotationDirectoryItem(DexFile dexFile,
|
public static AnnotationDirectoryItem getInternedAnnotationDirectoryItem(DexFile dexFile,
|
||||||
AnnotationSetItem classAnnotations,
|
AnnotationSetItem classAnnotations,
|
||||||
FieldIdItem[] fieldAnnotationFields, AnnotationSetItem[] fieldAnnotations,
|
List<FieldAnnotation> fieldAnnotations,
|
||||||
MethodIdItem[] methodAnnotationMethods, AnnotationSetItem[] methodAnnotations,
|
List<MethodAnnotation> methodAnnotations,
|
||||||
MethodIdItem[] parameterAnnotationMethods,
|
List<ParameterAnnotation> parameterAnnotations) {
|
||||||
AnnotationSetRefList[] parameterAnnotations) {
|
FieldIdItem[] fieldAnnotationFields = null;
|
||||||
|
AnnotationSetItem[] fieldAnnotationsArray = null;
|
||||||
|
MethodIdItem[] methodAnnotationMethods = null;
|
||||||
|
AnnotationSetItem[] methodAnnotationsArray = null;
|
||||||
|
MethodIdItem[] parameterAnnotationMethods = null;
|
||||||
|
AnnotationSetRefList[] parameterAnnotationsArray = null;
|
||||||
|
|
||||||
|
if (fieldAnnotations != null && fieldAnnotations.size() > 0) {
|
||||||
|
fieldAnnotationFields = new FieldIdItem[fieldAnnotations.size()];
|
||||||
|
fieldAnnotationsArray = new AnnotationSetItem[fieldAnnotations.size()];
|
||||||
|
|
||||||
|
Collections.sort(fieldAnnotations);
|
||||||
|
|
||||||
|
int index = 0;
|
||||||
|
for (FieldAnnotation fieldAnnotation: fieldAnnotations) {
|
||||||
|
fieldAnnotationFields[index] = fieldAnnotation.field;
|
||||||
|
fieldAnnotationsArray[index++] = fieldAnnotation.annotationSet;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (methodAnnotations != null && methodAnnotations.size() > 0) {
|
||||||
|
methodAnnotationMethods = new MethodIdItem[methodAnnotations.size()];
|
||||||
|
methodAnnotationsArray = new AnnotationSetItem[methodAnnotations.size()];
|
||||||
|
|
||||||
|
Collections.sort(methodAnnotations);
|
||||||
|
|
||||||
|
int index = 0;
|
||||||
|
for (MethodAnnotation methodAnnotation: methodAnnotations) {
|
||||||
|
methodAnnotationMethods[index] = methodAnnotation.method;
|
||||||
|
methodAnnotationsArray[index++] = methodAnnotation.annotationSet;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (parameterAnnotations != null && parameterAnnotations.size() > 0) {
|
||||||
|
parameterAnnotationMethods = new MethodIdItem[parameterAnnotations.size()];
|
||||||
|
parameterAnnotationsArray = new AnnotationSetRefList[parameterAnnotations.size()];
|
||||||
|
|
||||||
|
Collections.sort(parameterAnnotations);
|
||||||
|
|
||||||
|
int index = 0;
|
||||||
|
for (ParameterAnnotation parameterAnnotation: parameterAnnotations) {
|
||||||
|
parameterAnnotationMethods[index] = parameterAnnotation.method;
|
||||||
|
parameterAnnotationsArray[index++] = parameterAnnotation.annotationSet;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
AnnotationDirectoryItem annotationDirectoryItem = new AnnotationDirectoryItem(dexFile, classAnnotations,
|
AnnotationDirectoryItem annotationDirectoryItem = new AnnotationDirectoryItem(dexFile, classAnnotations,
|
||||||
fieldAnnotationFields, fieldAnnotations, methodAnnotationMethods, methodAnnotations,
|
fieldAnnotationFields, fieldAnnotationsArray, methodAnnotationMethods, methodAnnotationsArray,
|
||||||
parameterAnnotationMethods, parameterAnnotations);
|
parameterAnnotationMethods, parameterAnnotationsArray);
|
||||||
return dexFile.AnnotationDirectoriesSection.intern(annotationDirectoryItem);
|
return dexFile.AnnotationDirectoriesSection.intern(annotationDirectoryItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -362,4 +399,46 @@ public class AnnotationDirectoryItem extends Item<AnnotationDirectoryItem> {
|
|||||||
AnnotationDirectoryItem other = (AnnotationDirectoryItem)o;
|
AnnotationDirectoryItem other = (AnnotationDirectoryItem)o;
|
||||||
return (this.compareTo(other) == 0);
|
return (this.compareTo(other) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class FieldAnnotation implements Comparable<FieldAnnotation> {
|
||||||
|
public final FieldIdItem field;
|
||||||
|
public final AnnotationSetItem annotationSet;
|
||||||
|
|
||||||
|
public FieldAnnotation(FieldIdItem field, AnnotationSetItem annotationSet) {
|
||||||
|
this.field = field;
|
||||||
|
this.annotationSet = annotationSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int compareTo(FieldAnnotation other) {
|
||||||
|
return field.compareTo(other.field);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class MethodAnnotation implements Comparable<MethodAnnotation> {
|
||||||
|
public final MethodIdItem method;
|
||||||
|
public final AnnotationSetItem annotationSet;
|
||||||
|
|
||||||
|
public MethodAnnotation(MethodIdItem method, AnnotationSetItem annotationSet) {
|
||||||
|
this.method = method;
|
||||||
|
this.annotationSet = annotationSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int compareTo(MethodAnnotation other) {
|
||||||
|
return method.compareTo(other.method);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class ParameterAnnotation implements Comparable<ParameterAnnotation> {
|
||||||
|
public final MethodIdItem method;
|
||||||
|
public final AnnotationSetRefList annotationSet;
|
||||||
|
|
||||||
|
public ParameterAnnotation(MethodIdItem method, AnnotationSetRefList annotationSet) {
|
||||||
|
this.method = method;
|
||||||
|
this.annotationSet = annotationSet;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int compareTo(ParameterAnnotation other) {
|
||||||
|
return method.compareTo(other.method);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user