From b3fde8be3020e84010cc820d0cc16e2955755353 Mon Sep 17 00:00:00 2001 From: "JesusFreke@JesusFreke.com" Date: Fri, 19 Jun 2009 03:42:12 +0000 Subject: [PATCH] Added various acccessors git-svn-id: https://smali.googlecode.com/svn/trunk@169 55b6fa8a-2a1e-11de-a435-ffa8d773f76a --- .../jf/dexlib/AnnotationDirectoryItem.java | 34 +++++++++++++------ .../java/org/jf/dexlib/ClassDataItem.java | 2 +- .../main/java/org/jf/dexlib/ClassDefItem.java | 12 +++++-- .../src/main/java/org/jf/dexlib/CodeItem.java | 14 ++++++++ .../java/org/jf/dexlib/DebugInfoItem.java | 10 ++++++ .../java/org/jf/dexlib/debug/AdvanceLine.java | 4 +++ .../java/org/jf/dexlib/debug/AdvancePC.java | 4 +++ .../java/org/jf/dexlib/debug/EndLocal.java | 4 +++ .../org/jf/dexlib/debug/RestartLocal.java | 4 +++ .../java/org/jf/dexlib/debug/SetFile.java | 4 +++ .../org/jf/dexlib/debug/SpecialOpcode.java | 9 +++++ .../java/org/jf/dexlib/debug/StartLocal.java | 12 +++++++ .../jf/dexlib/debug/StartLocalExtended.java | 16 +++++++++ 13 files changed, 116 insertions(+), 13 deletions(-) diff --git a/dexlib/src/main/java/org/jf/dexlib/AnnotationDirectoryItem.java b/dexlib/src/main/java/org/jf/dexlib/AnnotationDirectoryItem.java index 47076fc3..7936fa80 100644 --- a/dexlib/src/main/java/org/jf/dexlib/AnnotationDirectoryItem.java +++ b/dexlib/src/main/java/org/jf/dexlib/AnnotationDirectoryItem.java @@ -124,9 +124,15 @@ public class AnnotationDirectoryItem extends OffsettedItem getMethodAnnotations() { - return methodAnnotationList; + return (List)methodAnnotationList.clone(); } + public List getFieldAnnotations() { + return (List)fieldAnnotationList.clone(); + } + + + public static class FieldAnnotation extends CompositeField implements Comparable { private final IndexedItemReference fieldReferenceField; @@ -152,39 +158,47 @@ public class AnnotationDirectoryItem extends OffsettedItem implements Comparable { - private final IndexedItemReference method; - private final OffsettedItemReference annotationSet; + private final IndexedItemReference methodReferenceField; + private final OffsettedItemReference annotationSetReferenceField; public MethodAnnotation(DexFile dexFile) { super("method_annotation"); fields = new Field[] { - method = new IndexedItemReference(dexFile.MethodIdsSection, + methodReferenceField = new IndexedItemReference(dexFile.MethodIdsSection, new IntegerField(null), "method_idx"), - annotationSet = new OffsettedItemReference(dexFile.AnnotationSetsSection, + annotationSetReferenceField = new OffsettedItemReference(dexFile.AnnotationSetsSection, new IntegerField(null), "annotations_off") }; } public MethodAnnotation(DexFile dexFile, MethodIdItem method, AnnotationSetItem annotationSet) { this(dexFile); - this.method.setReference(method); - this.annotationSet.setReference(annotationSet); + this.methodReferenceField.setReference(method); + this.annotationSetReferenceField.setReference(annotationSet); } 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() { - return method.getReference(); + return methodReferenceField.getReference(); } public AnnotationSetItem getAnnotationSet() { - return annotationSet.getReference(); + return annotationSetReferenceField.getReference(); } } diff --git a/dexlib/src/main/java/org/jf/dexlib/ClassDataItem.java b/dexlib/src/main/java/org/jf/dexlib/ClassDataItem.java index 50775465..cb42d7c8 100644 --- a/dexlib/src/main/java/org/jf/dexlib/ClassDataItem.java +++ b/dexlib/src/main/java/org/jf/dexlib/ClassDataItem.java @@ -276,7 +276,7 @@ public class ClassDataItem extends OffsettedItem { return (accessFlagsField.getCachedValue() & AccessFlags.STATIC.getValue()) != 0; } - public FieldIdItem getFieldReference() { + public FieldIdItem getField() { return fieldReferenceField.getReference(); } diff --git a/dexlib/src/main/java/org/jf/dexlib/ClassDefItem.java b/dexlib/src/main/java/org/jf/dexlib/ClassDefItem.java index 8a072529..93ec9a71 100644 --- a/dexlib/src/main/java/org/jf/dexlib/ClassDefItem.java +++ b/dexlib/src/main/java/org/jf/dexlib/ClassDefItem.java @@ -112,6 +112,14 @@ public class ClassDefItem extends IndexedItem { return classTypeReferenceField.getReference().getTypeDescriptor(); } + public String getSourceFile() { + StringIdItem stringIdItem = sourceFileReferenceField.getReference(); + if (stringIdItem == null) { + return null; + } + return stringIdItem.getStringValue(); + } + public int getAccessFlags() { return accessFlagsField.getCachedValue(); } @@ -181,7 +189,7 @@ public class ClassDefItem extends IndexedItem { for (int i=staticFieldInitialValuesList.size(); i < fieldIndex; i++) { ClassDataItem.EncodedField staticField = classDataItem.getStaticFieldAtIndex(i); EncodedValueSubField subField = TypeUtils.makeDefaultValueForType(dexFile, - staticField.getFieldReference().getFieldType().getTypeDescriptor()); + staticField.getField().getFieldType().getTypeDescriptor()); EncodedValue encodedValue = new EncodedValue(dexFile, subField); staticFieldInitialValuesList.add(i, encodedValue); } @@ -189,7 +197,7 @@ public class ClassDefItem extends IndexedItem { staticFieldInitialValuesList.add(fieldIndex, initialValue); } else if (staticFieldInitialValuesList != null && encodedField.isStatic() && fieldIndex < staticFieldInitialValuesList.size()) { EncodedValueSubField subField = TypeUtils.makeDefaultValueForType(dexFile, - encodedField.getFieldReference().getFieldType().getTypeDescriptor()); + encodedField.getField().getFieldType().getTypeDescriptor()); EncodedValue encodedValue = new EncodedValue(dexFile, subField); staticFieldInitialValuesList.add(fieldIndex, encodedValue); } diff --git a/dexlib/src/main/java/org/jf/dexlib/CodeItem.java b/dexlib/src/main/java/org/jf/dexlib/CodeItem.java index f0a7e8fd..c9d9bc2e 100644 --- a/dexlib/src/main/java/org/jf/dexlib/CodeItem.java +++ b/dexlib/src/main/java/org/jf/dexlib/CodeItem.java @@ -122,6 +122,14 @@ public class CodeItem extends OffsettedItem { return (List)instructionList.clone(); } + public List getTries() { + return (List)tryItems.clone(); + } + + public DebugInfoItem getDebugInfo() { + return debugInfoReferenceField.getReference(); + } + public void copyTo(DexFile dexFile, CodeItem copy) { for (int i = 0; i < fields.length-2; i++) { @@ -408,13 +416,19 @@ public class CodeItem extends OffsettedItem { } } + //TODO: GROT public int getHandlerCount() { return list.size(); } + //TODO: GROT public EncodedTypeAddrPair getHandler(int index) { return list.get(index); } + + public List getHandlers() { + return (List)list.clone(); + } } public static class EncodedTypeAddrPair extends CompositeField { diff --git a/dexlib/src/main/java/org/jf/dexlib/DebugInfoItem.java b/dexlib/src/main/java/org/jf/dexlib/DebugInfoItem.java index c9f32334..c6dfc003 100644 --- a/dexlib/src/main/java/org/jf/dexlib/DebugInfoItem.java +++ b/dexlib/src/main/java/org/jf/dexlib/DebugInfoItem.java @@ -90,6 +90,16 @@ public class DebugInfoItem extends OffsettedItem { return "debug_info_item @0x" + Integer.toHexString(getOffset()); } + public int getLineStart() { + return lineStartField.getCachedValue(); + } + + public List getDebugInstructions() { + return (List)instructionFields.clone(); + } + + + private class DebugInstructionList implements Field { private final DexFile dexFile; private final ArrayList list; diff --git a/dexlib/src/main/java/org/jf/dexlib/debug/AdvanceLine.java b/dexlib/src/main/java/org/jf/dexlib/debug/AdvanceLine.java index 7a533774..a4aa4500 100644 --- a/dexlib/src/main/java/org/jf/dexlib/debug/AdvanceLine.java +++ b/dexlib/src/main/java/org/jf/dexlib/debug/AdvanceLine.java @@ -53,4 +53,8 @@ public class AdvanceLine extends CompositeField implements DebugIns public byte getOpcode() { return 0x02; } + + public int getLineDelta() { + return lineDeltaField.getCachedValue(); + } } diff --git a/dexlib/src/main/java/org/jf/dexlib/debug/AdvancePC.java b/dexlib/src/main/java/org/jf/dexlib/debug/AdvancePC.java index 03b3bf49..d341f368 100644 --- a/dexlib/src/main/java/org/jf/dexlib/debug/AdvancePC.java +++ b/dexlib/src/main/java/org/jf/dexlib/debug/AdvancePC.java @@ -53,4 +53,8 @@ public class AdvancePC extends CompositeField implements DebugInstruc public byte getOpcode() { return 0x01; } + + public int getAddressDelta() { + return addressDeltaField.getCachedValue(); + } } diff --git a/dexlib/src/main/java/org/jf/dexlib/debug/EndLocal.java b/dexlib/src/main/java/org/jf/dexlib/debug/EndLocal.java index c8eea8c0..7aba5ab4 100644 --- a/dexlib/src/main/java/org/jf/dexlib/debug/EndLocal.java +++ b/dexlib/src/main/java/org/jf/dexlib/debug/EndLocal.java @@ -53,4 +53,8 @@ public class EndLocal extends CompositeField implements DebugInstructi public byte getOpcode() { return 0x05; } + + public int getRegisterNumber() { + return registerNumber.getCachedValue(); + } } diff --git a/dexlib/src/main/java/org/jf/dexlib/debug/RestartLocal.java b/dexlib/src/main/java/org/jf/dexlib/debug/RestartLocal.java index 8313e279..71d5fa73 100644 --- a/dexlib/src/main/java/org/jf/dexlib/debug/RestartLocal.java +++ b/dexlib/src/main/java/org/jf/dexlib/debug/RestartLocal.java @@ -53,4 +53,8 @@ public class RestartLocal extends CompositeField implements DebugI public byte getOpcode() { return 0x06; } + + public int getRegisterNumber() { + return registerNumber.getCachedValue(); + } } diff --git a/dexlib/src/main/java/org/jf/dexlib/debug/SetFile.java b/dexlib/src/main/java/org/jf/dexlib/debug/SetFile.java index 37ba78b4..e1e727c1 100644 --- a/dexlib/src/main/java/org/jf/dexlib/debug/SetFile.java +++ b/dexlib/src/main/java/org/jf/dexlib/debug/SetFile.java @@ -51,4 +51,8 @@ public class SetFile extends CompositeField implements DebugInstruction public byte getOpcode() { return 0x09; } + + public StringIdItem getFileName() { + return fileName.getReference(); + } } diff --git a/dexlib/src/main/java/org/jf/dexlib/debug/SpecialOpcode.java b/dexlib/src/main/java/org/jf/dexlib/debug/SpecialOpcode.java index 9b84611f..70bf9d6f 100644 --- a/dexlib/src/main/java/org/jf/dexlib/debug/SpecialOpcode.java +++ b/dexlib/src/main/java/org/jf/dexlib/debug/SpecialOpcode.java @@ -47,4 +47,13 @@ public class SpecialOpcode extends CompositeField implements Debu public byte getOpcode() { return opcode; } + + public byte getLineDelta() { + return (byte)((((opcode & 0xFF) - 0x0A) % 15) - 4); + } + + public byte getAddressDelta() { + return (byte)(((opcode & 0xFF) - 0x0A) / 15); + } } + diff --git a/dexlib/src/main/java/org/jf/dexlib/debug/StartLocal.java b/dexlib/src/main/java/org/jf/dexlib/debug/StartLocal.java index 76999b0f..2e07b928 100644 --- a/dexlib/src/main/java/org/jf/dexlib/debug/StartLocal.java +++ b/dexlib/src/main/java/org/jf/dexlib/debug/StartLocal.java @@ -58,4 +58,16 @@ public class StartLocal extends CompositeField implements DebugInstr public byte getOpcode() { return 0x03; } + + public int getRegisterNumber() { + return registerNumber.getCachedValue(); + } + + public StringIdItem getName() { + return localName.getReference(); + } + + public TypeIdItem getType() { + return localType.getReference(); + } } diff --git a/dexlib/src/main/java/org/jf/dexlib/debug/StartLocalExtended.java b/dexlib/src/main/java/org/jf/dexlib/debug/StartLocalExtended.java index 32ce24b4..05e86773 100644 --- a/dexlib/src/main/java/org/jf/dexlib/debug/StartLocalExtended.java +++ b/dexlib/src/main/java/org/jf/dexlib/debug/StartLocalExtended.java @@ -63,4 +63,20 @@ public class StartLocalExtended extends CompositeField imple public byte getOpcode() { 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(); + } }