@Nullable @Override public DexBackedMethodImplementation getImplementation() { if (codeOffset > 0) { return new DexBackedMethodImplementation(dexFile, this, codeOffset); } return null; }
@Nonnull @Override public Iterable<? extends DebugItem> getDebugItems() { return getDebugInfo(); }
@Nonnull public Iterator<String> getParameterNames() { DexBackedMethodImplementation methodImpl = getImplementation(); if (methodImpl != null) { return methodImpl.getParameterNames(null); } return ImmutableSet.<String>of().iterator(); }
/** * Calculate and return the private size of a method implementation. * * Calculated as: debug info size + instructions size + try-catch size * * @return size in bytes */ public int getSize() { int debugSize = getDebugInfo().getSize(); //set last offset just before bytecode instructions (after insns_size) int lastOffset = codeOffset + CodeItem.INSTRUCTION_START_OFFSET; //set code_item ending offset to the end of instructions list (insns_size * ushort) lastOffset += dexFile.readSmallUint(codeOffset + CodeItem.INSTRUCTION_COUNT_OFFSET) * 2; //read any exception handlers and move code_item offset to the end for (DexBackedTryBlock tryBlock: getTryBlocks()) { Iterator<? extends DexBackedExceptionHandler> tryHandlerIter = tryBlock.getExceptionHandlers().iterator(); while (tryHandlerIter.hasNext()) { tryHandlerIter.next(); } lastOffset = ((VariableSizeListIterator)tryHandlerIter).getReaderOffset(); } //method impl size = debug block size + code_item size return debugSize + (lastOffset - codeOffset); } }
DexReader reader = dexFile.readerAt(debugInfoOffset); final int lineNumberStart = reader.readBigUleb128(); int registerCount = methodImpl.getRegisterCount();
/** * Calculate and return the private size of a method definition. * * Calculated as: method_idx_diff + access_flags + code_off + * implementation size + reference size * * @return size in bytes */ public int getSize() { int size = 0; DexReader reader = dexFile.readerAt(startOffset); reader.readLargeUleb128(); //method_idx_diff reader.readSmallUleb128(); //access_flags reader.readSmallUleb128(); //code_off size += reader.getOffset() - startOffset; DexBackedMethodImplementation impl = getImplementation(); if (impl != null) { size += impl.getSize(); } DexBackedMethodReference methodRef = new DexBackedMethodReference(dexFile, methodIndex); size += methodRef.getSize(); return size; } }
boolean find = false; for (DexBackedMethod dexBackedMethod : newDexBackedMethods) { Iterator<? extends Instruction> instructions = dexBackedMethod.getImplementation().getInstructions().iterator(); while (instructions.hasNext()) { Instruction instruction = instructions.next();
/** * Calculate and return the private size of a method implementation. * * Calculated as: debug info size + instructions size + try-catch size * * @return size in bytes */ public int getSize() { int debugSize = getDebugInfo().getSize(); //set last offset just before bytecode instructions (after insns_size) int lastOffset = codeOffset + CodeItem.INSTRUCTION_START_OFFSET; //set code_item ending offset to the end of instructions list (insns_size * ushort) lastOffset += dexFile.readSmallUint(codeOffset + CodeItem.INSTRUCTION_COUNT_OFFSET) * 2; //read any exception handlers and move code_item offset to the end for (DexBackedTryBlock tryBlock: getTryBlocks()) { Iterator<? extends DexBackedExceptionHandler> tryHandlerIter = tryBlock.getExceptionHandlers().iterator(); while (tryHandlerIter.hasNext()) { tryHandlerIter.next(); } lastOffset = ((VariableSizeListIterator)tryHandlerIter).getReaderOffset(); } //method impl size = debug block size + code_item size return debugSize + (lastOffset - codeOffset); } }
DexReader reader = dexFile.readerAt(debugInfoOffset); final int lineNumberStart = reader.readBigUleb128(); int registerCount = methodImpl.getRegisterCount();
/** * Calculate and return the private size of a method definition. * * Calculated as: method_idx_diff + access_flags + code_off + * implementation size + reference size * * @return size in bytes */ public int getSize() { int size = 0; DexReader reader = dexFile.readerAt(startOffset); reader.readLargeUleb128(); //method_idx_diff reader.readSmallUleb128(); //access_flags reader.readSmallUleb128(); //code_off size += reader.getOffset() - startOffset; DexBackedMethodImplementation impl = getImplementation(); if (impl != null) { size += impl.getSize(); } DexBackedMethodReference methodRef = new DexBackedMethodReference(dexFile, methodIndex); size += methodRef.getSize(); return size; } }
@Nonnull public Iterator<String> getParameterNames(@Nullable DexReader dexReader) { return getDebugInfo().getParameterNames(dexReader); }
@Nullable @Override public DexBackedMethodImplementation getImplementation() { if (codeOffset > 0) { return new DexBackedMethodImplementation(dexFile, this, codeOffset); } return null; }
@Nonnull public Iterator<String> getParameterNames() { DexBackedMethodImplementation methodImpl = getImplementation(); if (methodImpl != null) { return methodImpl.getParameterNames(null); } return ImmutableSet.<String>of().iterator(); }
DexReader reader = dexFile.readerAt(debugInfoOffset); final int lineNumberStart = reader.readBigUleb128(); int registerCount = methodImpl.getRegisterCount();
@Nonnull @Override public Iterable<? extends DebugItem> getDebugItems() { return getDebugInfo(); }
@Nullable @Override public DexBackedMethodImplementation getImplementation() { if (codeOffset > 0) { return new DexBackedMethodImplementation(dexFile, this, codeOffset); } return null; }
@Nonnull public Iterator<String> getParameterNames() { DexBackedMethodImplementation methodImpl = getImplementation(); if (methodImpl != null) { return methodImpl.getParameterNames(null); } return Iterators.emptyIterator(); }
@Nonnull @Override public Iterable<? extends DebugItem> getDebugItems() { return getDebugInfo(); }
@Nonnull public Iterator<String> getParameterNames(@Nullable DexReader dexReader) { return getDebugInfo().getParameterNames(dexReader); } }
@Nonnull public Iterator<String> getParameterNames(@Nullable DexReader dexReader) { return getDebugInfo().getParameterNames(dexReader); }