Implement skipping for all variable sized lists

This commit is contained in:
Ben Gruver 2012-10-20 23:36:23 -07:00
parent 36e2ee2005
commit 380ca70a2c
7 changed files with 46 additions and 0 deletions

View File

@ -71,6 +71,11 @@ public class DexBackedAnnotation implements Annotation {
return new DexBackedAnnotationElement(reader);
}
@Override
protected void skipItem(DexReader reader, int index) {
DexBackedAnnotationElement.skipFrom(reader);
}
@Override public int size() { return size;}
};
}

View File

@ -46,6 +46,11 @@ public class DexBackedAnnotationElement implements AnnotationElement {
this.value = DexBackedEncodedValue.readFrom(reader);
}
public static void skipFrom(DexReader reader) {
reader.skipUleb128();
DexBackedEncodedValue.skipFrom(reader);
}
@Nonnull @Override public String getName() { return name; }
@Nonnull @Override public EncodedValue getValue() { return value; }
}

View File

@ -42,4 +42,8 @@ public class DexBackedCatchAllExceptionHandler extends ImmutableExceptionHandler
super(null,
instructionOffsetMap.getInstructionIndexAtOffsetExact(reader.readSmallUleb128()));
}
public static void skipFrom(DexReader reader) {
reader.skipUleb128();
}
}

View File

@ -43,4 +43,9 @@ public class DexBackedExceptionHandler extends ImmutableExceptionHandler {
super(reader.getType(reader.readSmallUleb128()),
instructionOffsetMap.getInstructionIndexAtOffsetExact(reader.readSmallUleb128()));
}
public static void skipFrom(DexReader reader) {
reader.skipUleb128();
reader.skipUleb128();
}
}

View File

@ -92,6 +92,12 @@ public class DexBackedTryBlock implements TryBlock {
protected ExceptionHandler readItem(DexReader reader, int index) {
return new DexBackedExceptionHandler(reader, instructionOffsetMap);
}
@Override
protected void skipItem(DexReader dexReader, int index) {
DexBackedExceptionHandler.skipFrom(dexReader);
}
@Override public int size() { return encodedSize; }
};
} else {
@ -107,6 +113,17 @@ public class DexBackedTryBlock implements TryBlock {
return new DexBackedExceptionHandler(dexReader, instructionOffsetMap);
}
}
@Override
protected void skipItem(DexReader dexReader, int index) {
if (index == sizeWithCatchAll-1) {
DexBackedCatchAllExceptionHandler.skipFrom(dexReader);
} else {
DexBackedExceptionHandler.skipFrom(dexReader);
}
}
@Override public int size() { return sizeWithCatchAll; }
};
}

View File

@ -83,6 +83,11 @@ public class DexBackedAnnotationEncodedValue implements AnnotationEncodedValue {
return new DexBackedAnnotationElement(dexReader);
}
@Override
protected void skipItem(DexReader reader, int index) {
DexBackedAnnotationElement.skipFrom(reader);
}
@Override public int size() { return size;}
};
}

View File

@ -73,6 +73,11 @@ public class DexBackedArrayEncodedValue implements ArrayEncodedValue {
return DexBackedEncodedValue.readFrom(dexReader);
}
@Override
protected void skipItem(DexReader reader, int index) {
DexBackedEncodedValue.skipFrom(reader);
}
@Override public int size() { return size;}
};
}