public AnnotationIteratorImpl(int startOffset, int size) { this.startOffset = startOffset; this.size = size; this.currentItemIndex = dexFile.readSmallUint(startOffset); this.currentIndex = 0; }
public void reset() { this.currentItemIndex = dexFile.readSmallUint(startOffset); this.currentIndex = 0; } }
public int seekTo(int itemIndex) { while (currentItemIndex < itemIndex && (currentIndex+1) < size) { currentIndex++; currentItemIndex = dexFile.readSmallUint(startOffset + (currentIndex*8)); } if (currentItemIndex == itemIndex) { return dexFile.readSmallUint(startOffset + (currentIndex*8)+4); } return 0; }
public List<MapItem> getMapItems() { final int mapSize = readSmallUint(mapOffset); return new FixedSizeList<MapItem>() { @Override public MapItem readItem(int index) { int mapItemOffset = mapOffset + 4 + index * MapItem.ITEM_SIZE; return new MapItem(DexBackedDexFile.this, mapItemOffset); } @Override public int size() { return mapSize; } }; }
public int getMethodAnnotationCount() { return dexFile.readSmallUint(directoryOffset + METHOD_COUNT_OFFSET); }
public int getItemCount() { return dexFile.readSmallUint(offset + SIZE_OFFSET); }
public int getOffset() { return dexFile.readSmallUint(offset + OFFSET_OFFSET); }
@Override public int getAccessFlags() { return dexFile.readSmallUint(classDefOffset + ClassDefItem.ACCESS_FLAGS_OFFSET); }
@Nonnull @Override public String getName() { return dexFile.getString(dexFile.readSmallUint(methodIdItemOffset + MethodIdItem.NAME_OFFSET)); }
@Nonnull @Override public Set<? extends DexBackedAnnotation> readItem(int index) { int annotationSetOffset = dexFile.readSmallUint(annotationSetListOffset + 4 + index * 4); return getAnnotations(dexFile, annotationSetOffset); }
private AnnotationsDirectory getAnnotationsDirectory() { if (annotationsDirectory == null) { int annotationsDirectoryOffset = dexFile.readSmallUint(classDefOffset + ClassDefItem.ANNOTATIONS_OFFSET); annotationsDirectory = AnnotationsDirectory.newOrEmpty(dexFile, annotationsDirectoryOffset); } return annotationsDirectory; }
private int getParametersOffset() { if (parametersOffset == -1) { parametersOffset = dexFile.readSmallUint(getProtoIdItemOffset() + ProtoIdItem.PARAMETERS_OFFSET); } return parametersOffset; }
@Nonnull @Override public String getReturnType() { return dexFile.getType(dexFile.readSmallUint(protoIdItemOffset + ProtoIdItem.RETURN_TYPE_OFFSET)); }
@Nonnull @Override public DexBackedAnnotation readItem(int index) { int annotationOffset = dexFile.readSmallUint(annotationSetOffset + 4 + (4*index)); return new DexBackedAnnotation(dexFile, annotationOffset); }
@Nonnull @Override public String getType() { return dexFile.getType(dexFile.readSmallUint(classDefOffset + ClassDefItem.CLASS_OFFSET)); }
@Nonnull @Override public String getName() { return dexFile.getString(dexFile.readSmallUint(getMethodIdItemOffset() + MethodIdItem.NAME_OFFSET)); }
@Nonnull @Override public String getReturnType() { int protoIdItemOffset = getProtoIdItemOffset(); return dexFile.getType(dexFile.readSmallUint(protoIdItemOffset + ProtoIdItem.RETURN_TYPE_OFFSET)); }
@Nonnull public String getType(int typeIndex) { int typeOffset = getTypeIdItemOffset(typeIndex); int stringIndex = readSmallUint(typeOffset); return getString(stringIndex); }
@Nonnull @Override public String getReturnType() { return dexFile.getType(dexFile.readSmallUint(getProtoIdItemOffset() + ProtoIdItem.RETURN_TYPE_OFFSET)); }
@Nonnull public String getString(int stringIndex) { int stringOffset = getStringIdItemOffset(stringIndex); int stringDataOffset = readSmallUint(stringOffset); DexReader reader = readerAt(stringDataOffset); int utf16Length = reader.readSmallUleb128(); return reader.readString(utf16Length); }