Remove the DexBuffer wrapper methods from DexReader

This commit is contained in:
Ben Gruver 2012-12-30 21:48:35 -08:00
parent 982e9f614f
commit fd26bc6062
15 changed files with 20 additions and 34 deletions

View File

@ -38,16 +38,16 @@ import org.jf.dexlib2.iface.value.EncodedValue;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
public class DexBackedAnnotationElement extends BaseAnnotationElement { public class DexBackedAnnotationElement extends BaseAnnotationElement {
@Nonnull private final DexBuffer dexBuffer; @Nonnull private final DexBuffer dexBuf;
public final int nameIndex; public final int nameIndex;
@Nonnull public final EncodedValue value; @Nonnull public final EncodedValue value;
public DexBackedAnnotationElement(@Nonnull DexReader reader) { public DexBackedAnnotationElement(@Nonnull DexReader reader) {
this.dexBuffer = reader.getDexBuffer(); this.dexBuf = reader.dexBuf;
this.nameIndex = reader.readSmallUleb128(); this.nameIndex = reader.readSmallUleb128();
this.value = DexBackedEncodedValue.readFrom(reader); this.value = DexBackedEncodedValue.readFrom(reader);
} }
@Nonnull @Override public String getName() { return dexBuffer.getString(nameIndex); } @Nonnull @Override public String getName() { return dexBuf.getString(nameIndex); }
@Nonnull @Override public EncodedValue getValue() { return value; } @Nonnull @Override public EncodedValue getValue() { return value; }
} }

View File

@ -43,7 +43,7 @@ public class DexBackedExceptionHandler extends BaseExceptionHandler implements E
public DexBackedExceptionHandler(@Nonnull DexReader reader) { public DexBackedExceptionHandler(@Nonnull DexReader reader) {
// TODO: verify dalvik doesn't accept an exception handler that points in the middle of an instruction // TODO: verify dalvik doesn't accept an exception handler that points in the middle of an instruction
this.dexBuf = reader.getDexBuffer(); this.dexBuf = reader.dexBuf;
this.typeId = reader.readSmallUleb128(); this.typeId = reader.readSmallUleb128();
this.handlerCodeAddress = reader.readSmallUleb128(); this.handlerCodeAddress = reader.readSmallUleb128();
} }

View File

@ -63,7 +63,7 @@ public class DexBackedField extends BaseFieldReference implements Field {
int previousFieldIndex, int previousFieldIndex,
@Nonnull StaticInitialValueIterator staticInitialValueIterator, @Nonnull StaticInitialValueIterator staticInitialValueIterator,
@Nonnull AnnotationsDirectory.AnnotationIterator annotationIterator) { @Nonnull AnnotationsDirectory.AnnotationIterator annotationIterator) {
this.dexBuf = reader.getDexBuffer(); this.dexBuf = reader.dexBuf;
this.classDef = classDef; this.classDef = classDef;
int fieldIndexDiff = reader.readSmallUleb128(); int fieldIndexDiff = reader.readSmallUleb128();

View File

@ -73,7 +73,7 @@ public class DexBackedMethod extends BaseMethodReference implements Method {
public DexBackedMethod(@Nonnull DexReader reader, public DexBackedMethod(@Nonnull DexReader reader,
@Nonnull DexBackedClassDef classDef, @Nonnull DexBackedClassDef classDef,
int previousMethodIndex) { int previousMethodIndex) {
this.dexBuf = reader.getDexBuffer(); this.dexBuf = reader.dexBuf;
this.classDef = classDef; this.classDef = classDef;
int methodIndexDiff = reader.readSmallUleb128(); int methodIndexDiff = reader.readSmallUleb128();
@ -90,7 +90,7 @@ public class DexBackedMethod extends BaseMethodReference implements Method {
int previousMethodIndex, int previousMethodIndex,
@Nonnull AnnotationsDirectory.AnnotationIterator methodAnnotationIterator, @Nonnull AnnotationsDirectory.AnnotationIterator methodAnnotationIterator,
@Nonnull AnnotationsDirectory.AnnotationIterator paramaterAnnotationIterator) { @Nonnull AnnotationsDirectory.AnnotationIterator paramaterAnnotationIterator) {
this.dexBuf = reader.getDexBuffer(); this.dexBuf = reader.dexBuf;
this.classDef = classDef; this.classDef = classDef;
int methodIndexDiff = reader.readSmallUleb128(); int methodIndexDiff = reader.readSmallUleb128();

View File

@ -36,7 +36,7 @@ import org.jf.util.ExceptionWithContext;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
public class DexReader { public class DexReader {
@Nonnull private final DexBuffer dexBuf; @Nonnull public final DexBuffer dexBuf;
private int offset; private int offset;
public DexReader(@Nonnull DexBuffer dexBuf, int offset) { public DexReader(@Nonnull DexBuffer dexBuf, int offset) {
@ -44,24 +44,9 @@ public class DexReader {
this.offset = offset; this.offset = offset;
} }
@Nonnull public DexBuffer getDexBuffer() { return dexBuf; }
public int getOffset() { return offset; } public int getOffset() { return offset; }
public void setOffset(int offset) { this.offset = offset; } public void setOffset(int offset) { this.offset = offset; }
public int getStringIdItemOffset(int stringIndex) { return dexBuf.getStringIdItemOffset(stringIndex); }
public int getTypeIdItemOffset(int typeIndex) { return dexBuf.getTypeIdItemOffset(typeIndex); }
public int getFieldIdItemOffset(int fieldIndex) { return dexBuf.getFieldIdItemOffset(fieldIndex); }
public int getMethodIdItemOffset(int methodIndex) { return dexBuf.getMethodIdItemOffset(methodIndex); }
public int getProtoIdItemOffset(int methodIndex) { return dexBuf.getProtoIdItemOffset(methodIndex); }
public int getClassDefItemOffset(int classIndex) { return dexBuf.getClassDefItemOffset(classIndex); }
public String getString(int stringIndex) { return dexBuf.getString(stringIndex); }
public String getOptionalString(int stringIndex) { return dexBuf.getOptionalString(stringIndex); }
public String getType(int typeIndex) { return dexBuf.getType(typeIndex); }
public String getOptionalType(int typeIndex) { return dexBuf.getOptionalType(typeIndex); }
public String getField(int fieldIndex) { return dexBuf.getField(fieldIndex); }
public String getMethod(int methodIndex) { return dexBuf.getMethod(methodIndex); }
public String getReference(int type, int index) { return dexBuf.getReference(type, index); }
/** {@inheritDoc} */ /** {@inheritDoc} */
public int readSleb128() { public int readSleb128() {
int end = offset; int end = offset;

View File

@ -66,7 +66,7 @@ public abstract class DexBackedInstruction implements Instruction {
Opcode opcode = Opcode.getOpcodeByValue(opcodeValue); Opcode opcode = Opcode.getOpcodeByValue(opcodeValue);
//TODO: handle unexpected/unknown opcodes //TODO: handle unexpected/unknown opcodes
Instruction instruction = buildInstruction(reader.getDexBuffer(), opcode, reader.getOffset()); Instruction instruction = buildInstruction(reader.dexBuf, opcode, reader.getOffset());
reader.moveRelative(instruction.getCodeUnits()*2); reader.moveRelative(instruction.getCodeUnits()*2);
return instruction; return instruction;
} }

View File

@ -247,7 +247,7 @@ public abstract class DebugInfo implements Iterable<DebugItem> {
final MethodParameter methodParameter = methodParametersWithoutNames.get(index); final MethodParameter methodParameter = methodParametersWithoutNames.get(index);
String _name = null; String _name = null;
if (index < parameterNameCount) { if (index < parameterNameCount) {
_name = reader.getOptionalString(reader.readSmallUleb128() - 1); _name = dexBuf.getOptionalString(reader.readSmallUleb128() - 1);
} }
final String name = _name; final String name = _name;

View File

@ -48,8 +48,8 @@ public class DexBackedAnnotationEncodedValue extends BaseAnnotationEncodedValue
private final int elementsOffset; private final int elementsOffset;
public DexBackedAnnotationEncodedValue(@Nonnull DexReader reader) { public DexBackedAnnotationEncodedValue(@Nonnull DexReader reader) {
this.dexBuf = reader.getDexBuffer(); this.dexBuf = reader.dexBuf;
this.type = reader.getType(reader.readSmallUleb128()); this.type = dexBuf.getType(reader.readSmallUleb128());
this.elementCount = reader.readSmallUleb128(); this.elementCount = reader.readSmallUleb128();
this.elementsOffset = reader.getOffset(); this.elementsOffset = reader.getOffset();
skipElements(reader, elementCount); skipElements(reader, elementCount);

View File

@ -47,7 +47,7 @@ public class DexBackedArrayEncodedValue extends BaseArrayEncodedValue implements
private final int encodedArrayOffset; private final int encodedArrayOffset;
public DexBackedArrayEncodedValue(@Nonnull DexReader reader) { public DexBackedArrayEncodedValue(@Nonnull DexReader reader) {
this.dexBuf = reader.getDexBuffer(); this.dexBuf = reader.dexBuf;
this.elementCount = reader.readSmallUleb128(); this.elementCount = reader.readSmallUleb128();
this.encodedArrayOffset = reader.getOffset(); this.encodedArrayOffset = reader.getOffset();
skipElementsFrom(reader, elementCount); skipElementsFrom(reader, elementCount);

View File

@ -79,7 +79,8 @@ public abstract class DexBackedEncodedValue {
return new DexBackedStringEncodedValue(reader, valueArg); return new DexBackedStringEncodedValue(reader, valueArg);
case ValueType.TYPE: case ValueType.TYPE:
Preconditions.checkValueArg(valueArg, 3); Preconditions.checkValueArg(valueArg, 3);
return new ImmutableTypeEncodedValue(reader.getType(reader.readSizedSmallUint(valueArg + 1))); return new ImmutableTypeEncodedValue(reader.dexBuf.getType(
reader.readSizedSmallUint(valueArg + 1)));
case ValueType.FIELD: case ValueType.FIELD:
Preconditions.checkValueArg(valueArg, 3); Preconditions.checkValueArg(valueArg, 3);
return new DexBackedFieldEncodedValue(reader, valueArg); return new DexBackedFieldEncodedValue(reader, valueArg);

View File

@ -44,7 +44,7 @@ public class DexBackedEnumEncodedValue extends BaseEnumEncodedValue {
private final int fieldIndex; private final int fieldIndex;
public DexBackedEnumEncodedValue(@Nonnull DexReader reader, int valueArg) { public DexBackedEnumEncodedValue(@Nonnull DexReader reader, int valueArg) {
this.dexBuf = reader.getDexBuffer(); this.dexBuf = reader.dexBuf;
fieldIndex = reader.readSizedSmallUint(valueArg + 1); fieldIndex = reader.readSizedSmallUint(valueArg + 1);
} }

View File

@ -44,7 +44,7 @@ public class DexBackedFieldEncodedValue extends BaseFieldEncodedValue {
private final int fieldIndex; private final int fieldIndex;
public DexBackedFieldEncodedValue(@Nonnull DexReader reader, int valueArg) { public DexBackedFieldEncodedValue(@Nonnull DexReader reader, int valueArg) {
this.dexBuf = reader.getDexBuffer(); this.dexBuf = reader.dexBuf;
fieldIndex = reader.readSizedSmallUint(valueArg + 1); fieldIndex = reader.readSizedSmallUint(valueArg + 1);
} }

View File

@ -44,7 +44,7 @@ public class DexBackedMethodEncodedValue extends BaseMethodEncodedValue {
private final int MethodIndex; private final int MethodIndex;
public DexBackedMethodEncodedValue(@Nonnull DexReader reader, int valueArg) { public DexBackedMethodEncodedValue(@Nonnull DexReader reader, int valueArg) {
this.dexBuf = reader.getDexBuffer(); this.dexBuf = reader.dexBuf;
MethodIndex = reader.readSizedSmallUint(valueArg + 1); MethodIndex = reader.readSizedSmallUint(valueArg + 1);
} }

View File

@ -42,7 +42,7 @@ public class DexBackedStringEncodedValue extends BaseStringEncodedValue {
private final int stringIndex; private final int stringIndex;
public DexBackedStringEncodedValue(@Nonnull DexReader reader, int valueArg) { public DexBackedStringEncodedValue(@Nonnull DexReader reader, int valueArg) {
this.dexBuf = reader.getDexBuffer(); this.dexBuf = reader.dexBuf;
stringIndex = reader.readSizedSmallUint(valueArg + 1); stringIndex = reader.readSizedSmallUint(valueArg + 1);
} }

View File

@ -42,7 +42,7 @@ public class DexBackedTypeEncodedValue extends BaseTypeEncodedValue {
private final int typeIndex; private final int typeIndex;
public DexBackedTypeEncodedValue(@Nonnull DexReader reader, int valueArg) { public DexBackedTypeEncodedValue(@Nonnull DexReader reader, int valueArg) {
this.dexBuf = reader.getDexBuffer(); this.dexBuf = reader.dexBuf;
typeIndex = reader.readSizedSmallUint(valueArg + 1); typeIndex = reader.readSizedSmallUint(valueArg + 1);
} }