mirror of
https://github.com/revanced/smali.git
synced 2025-06-12 04:17:36 +02:00
Added support for parameter names and annotations
git-svn-id: https://smali.googlecode.com/svn/trunk@172 55b6fa8a-2a1e-11de-a435-ffa8d773f76a
This commit is contained in:
@ -131,6 +131,9 @@ public class AnnotationDirectoryItem extends OffsettedItem<AnnotationDirectoryIt
|
||||
return (List<FieldAnnotation>)fieldAnnotationList.clone();
|
||||
}
|
||||
|
||||
public List<ParameterAnnotation> getParameterAnnotations() {
|
||||
return (List<ParameterAnnotation>)parameterAnnotationList.clone();
|
||||
}
|
||||
|
||||
|
||||
public static class FieldAnnotation extends CompositeField<FieldAnnotation>
|
||||
@ -204,27 +207,36 @@ public class AnnotationDirectoryItem extends OffsettedItem<AnnotationDirectoryIt
|
||||
|
||||
public static class ParameterAnnotation extends CompositeField<ParameterAnnotation>
|
||||
implements Comparable<ParameterAnnotation> {
|
||||
private final IndexedItemReference<MethodIdItem> method;
|
||||
private final OffsettedItemReference<AnnotationSetRefList> parameterAnnotations;
|
||||
|
||||
private final IndexedItemReference<MethodIdItem> methodReferenceField;
|
||||
private final OffsettedItemReference<AnnotationSetRefList> parameterAnnotationsReferenceField;
|
||||
|
||||
public ParameterAnnotation(DexFile dexFile) {
|
||||
super("parameter_annotation");
|
||||
fields = new Field[] {
|
||||
method = new IndexedItemReference<MethodIdItem>(dexFile.MethodIdsSection,
|
||||
methodReferenceField = new IndexedItemReference<MethodIdItem>(dexFile.MethodIdsSection,
|
||||
new IntegerField(null), "method_idx"),
|
||||
parameterAnnotations = new OffsettedItemReference<AnnotationSetRefList>(
|
||||
parameterAnnotationsReferenceField = new OffsettedItemReference<AnnotationSetRefList>(
|
||||
dexFile.AnnotationSetRefListsSection, new IntegerField(null), "annotations_off")
|
||||
};
|
||||
}
|
||||
|
||||
public ParameterAnnotation(DexFile dexFile, MethodIdItem method, AnnotationSetRefList parameterAnnotations) {
|
||||
this(dexFile);
|
||||
this.method.setReference(method);
|
||||
this.parameterAnnotations.setReference(parameterAnnotations);
|
||||
this.methodReferenceField.setReference(method);
|
||||
this.parameterAnnotationsReferenceField.setReference(parameterAnnotations);
|
||||
}
|
||||
|
||||
public int compareTo(ParameterAnnotation o) {
|
||||
return ((Integer)method.getReference().getIndex()).compareTo(o.method.getReference().getIndex());
|
||||
return ((Integer) methodReferenceField.getReference().getIndex()).compareTo(o.methodReferenceField.getReference().getIndex());
|
||||
}
|
||||
|
||||
public MethodIdItem getMethod() {
|
||||
return methodReferenceField.getReference();
|
||||
}
|
||||
|
||||
public AnnotationSetRefList getParameterAnnotations() {
|
||||
return parameterAnnotationsReferenceField.getReference();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -74,4 +74,18 @@ public class AnnotationSetRefList extends OffsettedItem<AnnotationSetRefList> {
|
||||
public String getConciseIdentity() {
|
||||
return "annotation_set_item @0x" + Integer.toHexString(getOffset());
|
||||
}
|
||||
|
||||
public int getCount() {
|
||||
return annotationSetReferences.size();
|
||||
}
|
||||
|
||||
public List<AnnotationSetItem> getAnnotationSets() {
|
||||
List<AnnotationSetItem> annotationSets = new ArrayList<AnnotationSetItem>();
|
||||
|
||||
for (OffsettedItemReference<AnnotationSetItem> annotationSetReference: annotationSetReferences) {
|
||||
annotationSets.add(annotationSetReference.getReference());
|
||||
}
|
||||
|
||||
return annotationSets;
|
||||
}
|
||||
}
|
||||
|
@ -98,6 +98,20 @@ public class DebugInfoItem extends OffsettedItem<DebugInfoItem> {
|
||||
return (List<DebugInstruction>)instructionFields.clone();
|
||||
}
|
||||
|
||||
public List<String> getParameterNames() {
|
||||
List<String> parameterNamesList = new ArrayList<String>();
|
||||
|
||||
for (IndexedItemReference<StringIdItem> parameterNameReference: parameterNames) {
|
||||
StringIdItem parameterNameItem = parameterNameReference.getReference();
|
||||
if (parameterNameItem == null) {
|
||||
parameterNamesList.add(null);
|
||||
} else {
|
||||
parameterNamesList.add(parameterNameItem.getStringValue());
|
||||
}
|
||||
}
|
||||
return parameterNamesList;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private class DebugInstructionList implements Field<DebugInstructionList> {
|
||||
|
Reference in New Issue
Block a user