Added various acccessors

git-svn-id: https://smali.googlecode.com/svn/trunk@169 55b6fa8a-2a1e-11de-a435-ffa8d773f76a
This commit is contained in:
JesusFreke@JesusFreke.com
2009-06-19 03:42:12 +00:00
parent 45b5a1d0e3
commit b3fde8be30
13 changed files with 116 additions and 13 deletions

View File

@ -124,9 +124,15 @@ public class AnnotationDirectoryItem extends OffsettedItem<AnnotationDirectoryIt
} }
public List<MethodAnnotation> getMethodAnnotations() { public List<MethodAnnotation> getMethodAnnotations() {
return methodAnnotationList; return (List<MethodAnnotation>)methodAnnotationList.clone();
} }
public List<FieldAnnotation> getFieldAnnotations() {
return (List<FieldAnnotation>)fieldAnnotationList.clone();
}
public static class FieldAnnotation extends CompositeField<FieldAnnotation> public static class FieldAnnotation extends CompositeField<FieldAnnotation>
implements Comparable<FieldAnnotation> { implements Comparable<FieldAnnotation> {
private final IndexedItemReference<FieldIdItem> fieldReferenceField; private final IndexedItemReference<FieldIdItem> fieldReferenceField;
@ -152,39 +158,47 @@ public class AnnotationDirectoryItem extends OffsettedItem<AnnotationDirectoryIt
return ((Integer) fieldReferenceField.getReference().getIndex()).compareTo( return ((Integer) fieldReferenceField.getReference().getIndex()).compareTo(
o.fieldReferenceField.getReference().getIndex()); o.fieldReferenceField.getReference().getIndex());
} }
public FieldIdItem getField() {
return fieldReferenceField.getReference();
}
public AnnotationSetItem getAnnotationSet() {
return annotationSetReferenceField.getReference();
}
} }
public static class MethodAnnotation extends CompositeField<MethodAnnotation> public static class MethodAnnotation extends CompositeField<MethodAnnotation>
implements Comparable<MethodAnnotation> { implements Comparable<MethodAnnotation> {
private final IndexedItemReference<MethodIdItem> method; private final IndexedItemReference<MethodIdItem> methodReferenceField;
private final OffsettedItemReference<AnnotationSetItem> annotationSet; private final OffsettedItemReference<AnnotationSetItem> annotationSetReferenceField;
public MethodAnnotation(DexFile dexFile) { public MethodAnnotation(DexFile dexFile) {
super("method_annotation"); super("method_annotation");
fields = new Field[] { fields = new Field[] {
method = new IndexedItemReference<MethodIdItem>(dexFile.MethodIdsSection, methodReferenceField = new IndexedItemReference<MethodIdItem>(dexFile.MethodIdsSection,
new IntegerField(null), "method_idx"), new IntegerField(null), "method_idx"),
annotationSet = new OffsettedItemReference<AnnotationSetItem>(dexFile.AnnotationSetsSection, annotationSetReferenceField = new OffsettedItemReference<AnnotationSetItem>(dexFile.AnnotationSetsSection,
new IntegerField(null), "annotations_off") new IntegerField(null), "annotations_off")
}; };
} }
public MethodAnnotation(DexFile dexFile, MethodIdItem method, AnnotationSetItem annotationSet) { public MethodAnnotation(DexFile dexFile, MethodIdItem method, AnnotationSetItem annotationSet) {
this(dexFile); this(dexFile);
this.method.setReference(method); this.methodReferenceField.setReference(method);
this.annotationSet.setReference(annotationSet); this.annotationSetReferenceField.setReference(annotationSet);
} }
public int compareTo(MethodAnnotation o) { public int compareTo(MethodAnnotation o) {
return ((Integer)method.getReference().getIndex()).compareTo(o.method.getReference().getIndex()); return ((Integer) methodReferenceField.getReference().getIndex()).compareTo(o.methodReferenceField.getReference().getIndex());
} }
public MethodIdItem getMethod() { public MethodIdItem getMethod() {
return method.getReference(); return methodReferenceField.getReference();
} }
public AnnotationSetItem getAnnotationSet() { public AnnotationSetItem getAnnotationSet() {
return annotationSet.getReference(); return annotationSetReferenceField.getReference();
} }
} }

View File

@ -276,7 +276,7 @@ public class ClassDataItem extends OffsettedItem<ClassDataItem> {
return (accessFlagsField.getCachedValue() & AccessFlags.STATIC.getValue()) != 0; return (accessFlagsField.getCachedValue() & AccessFlags.STATIC.getValue()) != 0;
} }
public FieldIdItem getFieldReference() { public FieldIdItem getField() {
return fieldReferenceField.getReference(); return fieldReferenceField.getReference();
} }

View File

@ -112,6 +112,14 @@ public class ClassDefItem extends IndexedItem<ClassDefItem> {
return classTypeReferenceField.getReference().getTypeDescriptor(); return classTypeReferenceField.getReference().getTypeDescriptor();
} }
public String getSourceFile() {
StringIdItem stringIdItem = sourceFileReferenceField.getReference();
if (stringIdItem == null) {
return null;
}
return stringIdItem.getStringValue();
}
public int getAccessFlags() { public int getAccessFlags() {
return accessFlagsField.getCachedValue(); return accessFlagsField.getCachedValue();
} }
@ -181,7 +189,7 @@ public class ClassDefItem extends IndexedItem<ClassDefItem> {
for (int i=staticFieldInitialValuesList.size(); i < fieldIndex; i++) { for (int i=staticFieldInitialValuesList.size(); i < fieldIndex; i++) {
ClassDataItem.EncodedField staticField = classDataItem.getStaticFieldAtIndex(i); ClassDataItem.EncodedField staticField = classDataItem.getStaticFieldAtIndex(i);
EncodedValueSubField subField = TypeUtils.makeDefaultValueForType(dexFile, EncodedValueSubField subField = TypeUtils.makeDefaultValueForType(dexFile,
staticField.getFieldReference().getFieldType().getTypeDescriptor()); staticField.getField().getFieldType().getTypeDescriptor());
EncodedValue encodedValue = new EncodedValue(dexFile, subField); EncodedValue encodedValue = new EncodedValue(dexFile, subField);
staticFieldInitialValuesList.add(i, encodedValue); staticFieldInitialValuesList.add(i, encodedValue);
} }
@ -189,7 +197,7 @@ public class ClassDefItem extends IndexedItem<ClassDefItem> {
staticFieldInitialValuesList.add(fieldIndex, initialValue); staticFieldInitialValuesList.add(fieldIndex, initialValue);
} else if (staticFieldInitialValuesList != null && encodedField.isStatic() && fieldIndex < staticFieldInitialValuesList.size()) { } else if (staticFieldInitialValuesList != null && encodedField.isStatic() && fieldIndex < staticFieldInitialValuesList.size()) {
EncodedValueSubField subField = TypeUtils.makeDefaultValueForType(dexFile, EncodedValueSubField subField = TypeUtils.makeDefaultValueForType(dexFile,
encodedField.getFieldReference().getFieldType().getTypeDescriptor()); encodedField.getField().getFieldType().getTypeDescriptor());
EncodedValue encodedValue = new EncodedValue(dexFile, subField); EncodedValue encodedValue = new EncodedValue(dexFile, subField);
staticFieldInitialValuesList.add(fieldIndex, encodedValue); staticFieldInitialValuesList.add(fieldIndex, encodedValue);
} }

View File

@ -122,6 +122,14 @@ public class CodeItem extends OffsettedItem<CodeItem> {
return (List<InstructionField>)instructionList.clone(); return (List<InstructionField>)instructionList.clone();
} }
public List<TryItem> getTries() {
return (List<TryItem>)tryItems.clone();
}
public DebugInfoItem getDebugInfo() {
return debugInfoReferenceField.getReference();
}
public void copyTo(DexFile dexFile, CodeItem copy) public void copyTo(DexFile dexFile, CodeItem copy)
{ {
for (int i = 0; i < fields.length-2; i++) { for (int i = 0; i < fields.length-2; i++) {
@ -408,13 +416,19 @@ public class CodeItem extends OffsettedItem<CodeItem> {
} }
} }
//TODO: GROT
public int getHandlerCount() { public int getHandlerCount() {
return list.size(); return list.size();
} }
//TODO: GROT
public EncodedTypeAddrPair getHandler(int index) { public EncodedTypeAddrPair getHandler(int index) {
return list.get(index); return list.get(index);
} }
public List<EncodedTypeAddrPair> getHandlers() {
return (List<EncodedTypeAddrPair>)list.clone();
}
} }
public static class EncodedTypeAddrPair extends CompositeField<EncodedTypeAddrPair> { public static class EncodedTypeAddrPair extends CompositeField<EncodedTypeAddrPair> {

View File

@ -90,6 +90,16 @@ public class DebugInfoItem extends OffsettedItem<DebugInfoItem> {
return "debug_info_item @0x" + Integer.toHexString(getOffset()); return "debug_info_item @0x" + Integer.toHexString(getOffset());
} }
public int getLineStart() {
return lineStartField.getCachedValue();
}
public List<DebugInstruction> getDebugInstructions() {
return (List<DebugInstruction>)instructionFields.clone();
}
private class DebugInstructionList implements Field<DebugInstructionList> { private class DebugInstructionList implements Field<DebugInstructionList> {
private final DexFile dexFile; private final DexFile dexFile;
private final ArrayList<DebugInstruction> list; private final ArrayList<DebugInstruction> list;

View File

@ -53,4 +53,8 @@ public class AdvanceLine extends CompositeField<AdvanceLine> implements DebugIns
public byte getOpcode() { public byte getOpcode() {
return 0x02; return 0x02;
} }
public int getLineDelta() {
return lineDeltaField.getCachedValue();
}
} }

View File

@ -53,4 +53,8 @@ public class AdvancePC extends CompositeField<AdvancePC> implements DebugInstruc
public byte getOpcode() { public byte getOpcode() {
return 0x01; return 0x01;
} }
public int getAddressDelta() {
return addressDeltaField.getCachedValue();
}
} }

View File

@ -53,4 +53,8 @@ public class EndLocal extends CompositeField<EndLocal> implements DebugInstructi
public byte getOpcode() { public byte getOpcode() {
return 0x05; return 0x05;
} }
public int getRegisterNumber() {
return registerNumber.getCachedValue();
}
} }

View File

@ -53,4 +53,8 @@ public class RestartLocal extends CompositeField<RestartLocal> implements DebugI
public byte getOpcode() { public byte getOpcode() {
return 0x06; return 0x06;
} }
public int getRegisterNumber() {
return registerNumber.getCachedValue();
}
} }

View File

@ -51,4 +51,8 @@ public class SetFile extends CompositeField<SetFile> implements DebugInstruction
public byte getOpcode() { public byte getOpcode() {
return 0x09; return 0x09;
} }
public StringIdItem getFileName() {
return fileName.getReference();
}
} }

View File

@ -47,4 +47,13 @@ public class SpecialOpcode extends CompositeField<SpecialOpcode> implements Debu
public byte getOpcode() { public byte getOpcode() {
return opcode; return opcode;
} }
public byte getLineDelta() {
return (byte)((((opcode & 0xFF) - 0x0A) % 15) - 4);
}
public byte getAddressDelta() {
return (byte)(((opcode & 0xFF) - 0x0A) / 15);
}
} }

View File

@ -58,4 +58,16 @@ public class StartLocal extends CompositeField<StartLocal> implements DebugInstr
public byte getOpcode() { public byte getOpcode() {
return 0x03; return 0x03;
} }
public int getRegisterNumber() {
return registerNumber.getCachedValue();
}
public StringIdItem getName() {
return localName.getReference();
}
public TypeIdItem getType() {
return localType.getReference();
}
} }

View File

@ -63,4 +63,20 @@ public class StartLocalExtended extends CompositeField<StartLocalExtended> imple
public byte getOpcode() { public byte getOpcode() {
return 0x04; return 0x04;
} }
public int getRegisterNumber() {
return registerNumber.getCachedValue();
}
public StringIdItem getName() {
return localName.getReference();
}
public TypeIdItem getType() {
return localType.getReference();
}
public StringIdItem getSignature() {
return signature.getReference();
}
} }