diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedClassDef.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedClassDef.java index 15d4fc2b..06f07796 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedClassDef.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedClassDef.java @@ -152,16 +152,16 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef { final int staticInitialValuesOffset = dexFile.readSmallUint(classDefOffset + ClassDefItem.STATIC_VALUES_OFFSET); final int fieldsStartOffset = reader.getOffset(); - final AnnotationsDirectory.AnnotationIterator annotationIterator = - annotationsDirectory.getFieldAnnotationIterator(); - final StaticInitialValueIterator staticInitialValueIterator = - StaticInitialValueIterator.newOrEmpty(dexFile, staticInitialValuesOffset); - return new Iterable() { @Nonnull @Override public Iterator iterator() { + final AnnotationsDirectory.AnnotationIterator annotationIterator = + annotationsDirectory.getFieldAnnotationIterator(); + final StaticInitialValueIterator staticInitialValueIterator = + StaticInitialValueIterator.newOrEmpty(dexFile, staticInitialValuesOffset); + return new VariableSizeLookaheadIterator(dexFile, fieldsStartOffset) { private int count; @Nullable private FieldReference previousField; @@ -212,14 +212,15 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef { DexReader reader = dexFile.readerAt(getInstanceFieldsOffset()); final AnnotationsDirectory annotationsDirectory = getAnnotationsDirectory(); - final AnnotationsDirectory.AnnotationIterator annotationIterator = - annotationsDirectory.getFieldAnnotationIterator(); final int fieldsStartOffset = reader.getOffset(); return new Iterable() { @Nonnull @Override public Iterator iterator() { + final AnnotationsDirectory.AnnotationIterator annotationIterator = + annotationsDirectory.getFieldAnnotationIterator(); + return new VariableSizeLookaheadIterator(dexFile, fieldsStartOffset) { private int count; @Nullable private FieldReference previousField; @@ -278,16 +279,17 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef { DexReader reader = dexFile.readerAt(getDirectMethodsOffset()); final AnnotationsDirectory annotationsDirectory = getAnnotationsDirectory(); - final AnnotationsDirectory.AnnotationIterator methodAnnotationIterator = - annotationsDirectory.getMethodAnnotationIterator(); - final AnnotationsDirectory.AnnotationIterator parameterAnnotationIterator = - annotationsDirectory.getParameterAnnotationIterator(); final int methodsStartOffset = reader.getOffset(); return new Iterable() { @Nonnull @Override public Iterator iterator() { + final AnnotationsDirectory.AnnotationIterator methodAnnotationIterator = + annotationsDirectory.getMethodAnnotationIterator(); + final AnnotationsDirectory.AnnotationIterator parameterAnnotationIterator = + annotationsDirectory.getParameterAnnotationIterator(); + return new VariableSizeLookaheadIterator(dexFile, methodsStartOffset) { private int count; @Nullable private MethodReference previousMethod; @@ -334,13 +336,14 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef { DexReader reader = dexFile.readerAt(getVirtualMethodsOffset()); final AnnotationsDirectory annotationsDirectory = getAnnotationsDirectory(); - final AnnotationsDirectory.AnnotationIterator methodAnnotationIterator = - annotationsDirectory.getMethodAnnotationIterator(); - final AnnotationsDirectory.AnnotationIterator parameterAnnotationIterator = - annotationsDirectory.getParameterAnnotationIterator(); final int methodsStartOffset = reader.getOffset(); return new Iterable() { + final AnnotationsDirectory.AnnotationIterator methodAnnotationIterator = + annotationsDirectory.getMethodAnnotationIterator(); + final AnnotationsDirectory.AnnotationIterator parameterAnnotationIterator = + annotationsDirectory.getParameterAnnotationIterator(); + @Nonnull @Override public Iterator iterator() {