/** * Calculate and return the private size of a method proto. * * Calculated as: shorty_idx + return_type_idx + parameters_off + type_list size * * @return size in bytes */ public int getSize() { int size = ProtoIdItem.ITEM_SIZE; //3 * uint List<String> parameters = getParameterTypes(); if (!parameters.isEmpty()) { size += 4 + parameters.size() * 2; //uint + size * ushort for type_idxs } return size; } }
@Nonnull @Override public MethodProtoReference getValue() { return new DexBackedMethodProtoReference(dexFile, methodProtoIndex); } }
@Nonnull @Override public MethodProtoReference getValue() { return new DexBackedMethodProtoReference(dexFile, methodProtoIndex); } }
public static Reference makeReference(@Nonnull DexBackedDexFile dexFile, int referenceType, int referenceIndex) { switch (referenceType) { case ReferenceType.STRING: return new DexBackedStringReference(dexFile, referenceIndex); case ReferenceType.TYPE: return new DexBackedTypeReference(dexFile, referenceIndex); case ReferenceType.METHOD: return new DexBackedMethodReference(dexFile, referenceIndex); case ReferenceType.FIELD: return new DexBackedFieldReference(dexFile, referenceIndex); case ReferenceType.METHOD_PROTO: return new DexBackedMethodProtoReference(dexFile, referenceIndex); case ReferenceType.METHOD_HANDLE: return new DexBackedMethodHandleReference(dexFile, referenceIndex); case ReferenceType.CALL_SITE: return new DexBackedCallSiteReference(dexFile, referenceIndex); default: throw new ExceptionWithContext("Invalid reference type: %d", referenceType); } } }
/** * Calculate and return the private size of a method proto. * * Calculated as: shorty_idx + return_type_idx + parameters_off + type_list size * * @return size in bytes */ public int getSize() { int size = ProtoIdItem.ITEM_SIZE; //3 * uint List<String> parameters = getParameterTypes(); if (!parameters.isEmpty()) { size += 4 + parameters.size() * 2; //uint + size * ushort for type_idxs } return size; } }
public static Reference makeReference(@Nonnull DexBackedDexFile dexFile, int referenceType, int referenceIndex) { switch (referenceType) { case ReferenceType.STRING: return new DexBackedStringReference(dexFile, referenceIndex); case ReferenceType.TYPE: return new DexBackedTypeReference(dexFile, referenceIndex); case ReferenceType.METHOD: return new DexBackedMethodReference(dexFile, referenceIndex); case ReferenceType.FIELD: return new DexBackedFieldReference(dexFile, referenceIndex); case ReferenceType.METHOD_PROTO: return new DexBackedMethodProtoReference(dexFile, referenceIndex); case ReferenceType.METHOD_HANDLE: return new DexBackedMethodHandleReference(dexFile, referenceIndex); case ReferenceType.CALL_SITE: return new DexBackedCallSiteReference(dexFile, referenceIndex); default: throw new ExceptionWithContext("Invalid reference type: %d", referenceType); } } }