diff options
Diffstat (limited to 'dexlib2/src')
9 files changed, 44 insertions, 37 deletions
diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/BaseDexReader.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/BaseDexReader.java index 262fb546..96645b8c 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/BaseDexReader.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/BaseDexReader.java @@ -48,7 +48,6 @@ public class BaseDexReader<T extends BaseDexBuffer> { public int getOffset() { return offset; } public void setOffset(int offset) { this.offset = offset; } - /** {@inheritDoc} */ public int readSleb128() { int end = offset; int currentByteValue; 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 06f07796..9596a278 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedClassDef.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedClassDef.java @@ -173,7 +173,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef { while (true) { if (++count > staticFieldCount) { instanceFieldsOffset = reader.getOffset(); - return null; + return endOfData(); } DexBackedField item = new DexBackedField(reader, DexBackedClassDef.this, @@ -232,7 +232,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef { while (true) { if (++count > instanceFieldCount) { directMethodsOffset = reader.getOffset(); - return null; + return endOfData(); } DexBackedField item = new DexBackedField(reader, DexBackedClassDef.this, @@ -301,7 +301,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef { while (true) { if (++count > directMethodCount) { virtualMethodsOffset = reader.getOffset(); - return null; + return endOfData(); } DexBackedMethod item = new DexBackedMethod(reader, DexBackedClassDef.this, @@ -357,7 +357,7 @@ public class DexBackedClassDef extends BaseTypeReference implements ClassDef { protected DexBackedMethod readNextItem(@Nonnull DexReader reader) { while (true) { if (++count > virtualMethodCount) { - return null; + return endOfData(); } DexBackedMethod item = new DexBackedMethod(reader, DexBackedClassDef.this, diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedDexFile.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedDexFile.java index b1a13396..1774096e 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedDexFile.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedDexFile.java @@ -207,6 +207,26 @@ public class DexBackedDexFile extends BaseDexBuffer implements DexFile { return classCount; } + public int getStringCount() { + return stringCount; + } + + public int getTypeCount() { + return typeCount; + } + + public int getProtoCount() { + return protoCount; + } + + public int getFieldCount() { + return fieldCount; + } + + public int getMethodCount() { + return methodCount; + } + @Nonnull public String getString(int stringIndex) { int stringOffset = getStringIdItemOffset(stringIndex); diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedMethodImplementation.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedMethodImplementation.java index 455f397a..0c06b1d7 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedMethodImplementation.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/DexBackedMethodImplementation.java @@ -76,7 +76,7 @@ public class DexBackedMethodImplementation implements MethodImplementation { @Override protected Instruction readNextItem(@Nonnull DexReader reader) { if (reader.getOffset() >= endOffset) { - return null; + return endOfData(); } Instruction instruction = DexBackedInstruction.readFrom(reader); diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/util/DebugInfo.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/util/DebugInfo.java index ffa4c20d..6759820e 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/util/DebugInfo.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/util/DebugInfo.java @@ -160,7 +160,7 @@ public abstract class DebugInfo implements Iterable<DebugItem> { int next = reader.readUbyte(); switch (next) { case DebugItemType.END_SEQUENCE: { - return null; + return endOfData(); } case DebugItemType.ADVANCE_PC: { int addressDiff = reader.readSmallUleb128(); diff --git a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/util/VariableSizeLookaheadIterator.java b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/util/VariableSizeLookaheadIterator.java index d330094f..1f4259ff 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/util/VariableSizeLookaheadIterator.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/dexbacked/util/VariableSizeLookaheadIterator.java @@ -31,46 +31,32 @@ package org.jf.dexlib2.dexbacked.util; +import com.google.common.collect.AbstractIterator; import org.jf.dexlib2.dexbacked.DexBackedDexFile; import org.jf.dexlib2.dexbacked.DexReader; import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.util.Iterator; -import java.util.NoSuchElementException; -public abstract class VariableSizeLookaheadIterator<T> implements Iterator<T> { +public abstract class VariableSizeLookaheadIterator<T> extends AbstractIterator<T> implements Iterator<T> { @Nonnull private final DexReader reader; - private T cachedItem = null; - protected VariableSizeLookaheadIterator(@Nonnull DexBackedDexFile dexFile, int offset) { this.reader = dexFile.readerAt(offset); - cachedItem = readNextItem(reader); } /** - * Reads the next item from reader. If the end of the list has been reached, it should return null. + * Reads the next item from reader. If the end of the list has been reached, it should call endOfData. + * + * endOfData has a return value of T, so you can simply {@code return endOfData()} * - * @return The item that was read, or null if the end of the list has been reached. + * @return The item that was read. If endOfData was called, the return value is ignored. */ @Nullable protected abstract T readNextItem(@Nonnull DexReader reader); @Override - public boolean hasNext() { - return cachedItem != null; - } - - @Override - @Nonnull - public T next() { - if (cachedItem == null) { - throw new NoSuchElementException(); - } - T ret = cachedItem; - cachedItem = readNextItem(reader); - return ret; + protected T computeNext() { + return readNextItem(reader); } - - @Override public void remove() { throw new UnsupportedOperationException(); } } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/iface/debug/DebugItem.java b/dexlib2/src/main/java/org/jf/dexlib2/iface/debug/DebugItem.java index ea3f5ffb..6cf4dbbc 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/iface/debug/DebugItem.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/iface/debug/DebugItem.java @@ -48,8 +48,7 @@ public interface DebugItem { int getDebugItemType(); /** - * The code address - * @return + * @return The code address */ int getCodeAddress(); } diff --git a/dexlib2/src/main/java/org/jf/dexlib2/util/AnnotatedBytes.java b/dexlib2/src/main/java/org/jf/dexlib2/util/AnnotatedBytes.java index c48bac2d..5b4e3ee8 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/util/AnnotatedBytes.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/util/AnnotatedBytes.java @@ -268,8 +268,7 @@ public class AnnotatedBytes { } /** - * Gets the width of the right side containing the annotations - * @return + * @return The width of the right side containing the annotations */ public int getAnnotationWidth() { int leftWidth = 8 + (hexCols * 2) + (hexCols / 2); diff --git a/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderClassDef.java b/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderClassDef.java index 46e75ce0..f19a2e7f 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderClassDef.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/writer/builder/BuilderClassDef.java @@ -80,10 +80,14 @@ public class BuilderClassDef extends BaseTypeReference implements ClassDef { this.interfaces = interfaces; this.sourceFile = sourceFile; this.annotations = annotations; - this.staticFields = ImmutableSortedSet.copyOf(Iterables.filter(fields, FieldUtil.FIELD_IS_STATIC)); - this.instanceFields = ImmutableSortedSet.copyOf(Iterables.filter(fields, FieldUtil.FIELD_IS_INSTANCE)); - this.directMethods = ImmutableSortedSet.copyOf(Iterables.filter(methods, MethodUtil.METHOD_IS_DIRECT)); - this.virtualMethods = ImmutableSortedSet.copyOf(Iterables.filter(methods, MethodUtil.METHOD_IS_VIRTUAL)); + this.staticFields = ImmutableSortedSet.copyOf( + (Iterable<? extends BuilderField>)Iterables.filter(fields, FieldUtil.FIELD_IS_STATIC)); + this.instanceFields = ImmutableSortedSet.copyOf( + (Iterable<? extends BuilderField>)Iterables.filter(fields, FieldUtil.FIELD_IS_INSTANCE)); + this.directMethods = ImmutableSortedSet.copyOf( + (Iterable<? extends BuilderMethod>)Iterables.filter(methods, MethodUtil.METHOD_IS_DIRECT)); + this.virtualMethods = ImmutableSortedSet.copyOf( + (Iterable<? extends BuilderMethod>)Iterables.filter(methods, MethodUtil.METHOD_IS_VIRTUAL)); } @Nonnull @Override public String getType() { return type.getType(); } |