@Override public void writeDebugItem(@Nonnull DebugWriter<CharSequence, CharSequence> writer, DebugItem debugItem) throws IOException { switch (debugItem.getDebugItemType()) { case DebugItemType.START_LOCAL: { StartLocal startLocal = (StartLocal)debugItem; writer.writeStartLocal(startLocal.getCodeAddress(), startLocal.getRegister(), startLocal.getName(), startLocal.getType(), startLocal.getSignature()); break; writer.writeEndLocal(endLocal.getCodeAddress(), endLocal.getRegister()); break; writer.writeRestartLocal(restartLocal.getCodeAddress(), restartLocal.getRegister()); break; writer.writePrologueEnd(debugItem.getCodeAddress()); break; writer.writeEpilogueBegin(debugItem.getCodeAddress()); break; writer.writeLineNumber(lineNumber.getCodeAddress(), lineNumber.getLineNumber()); break; writer.writeSetSourceFile(setSourceFile.getCodeAddress(), setSourceFile.getSourceFile()); throw new ExceptionWithContext("Unexpected debug item type: %d", debugItem.getDebugItemType());
@Nonnull private BuilderDebugItem convertDebugItem(@Nonnull DebugItem debugItem) { switch (debugItem.getDebugItemType()) { case DebugItemType.START_LOCAL: { StartLocal startLocal = (StartLocal) debugItem; return new BuilderStartLocal(startLocal.getRegister(), (StringReference) convertReference(startLocal.getNameReference()), (TypeReference) convertReference(startLocal.getTypeReference()), (StringReference) convertReference(startLocal.getSignatureReference())); return new BuilderEndLocal(endLocal.getRegister()); return new BuilderRestartLocal(restartLocal.getRegister()); case DebugItemType.LINE_NUMBER: { LineNumber lineNumber = (LineNumber) debugItem; return new BuilderLineNumber(lineNumber.getLineNumber()); (StringReference) convertReference(setSourceFile.getSourceFileReference()) ); throw new ExceptionWithContext("Invalid debug item type: " + debugItem.getDebugItemType());
private void internDebug(@Nonnull Method method) { for (MethodParameter param: method.getParameters()) { String paramName = param.getName(); if (paramName != null) { dexPool.stringSection.intern(paramName); } } MethodImplementation methodImpl = method.getImplementation(); if (methodImpl != null) { for (DebugItem debugItem: methodImpl.getDebugItems()) { switch (debugItem.getDebugItemType()) { case DebugItemType.START_LOCAL: StartLocal startLocal = (StartLocal)debugItem; dexPool.stringSection.internNullable(startLocal.getName()); dexPool.typeSection.internNullable(startLocal.getType()); dexPool.stringSection.internNullable(startLocal.getSignature()); break; case DebugItemType.SET_SOURCE_FILE: dexPool.stringSection.internNullable(((SetSourceFile) debugItem).getSourceFile()); break; } } } }
int debugCodeAddress = debugItem.getCodeAddress(); int locationIndex = mapCodeAddressToIndex(codeAddressToIndex, debugCodeAddress); MethodLocation debugLocation = instructionList.get(locationIndex);
@Override public int getDebugItemType() { return debugItem.getDebugItemType(); }
public int getRegister() { return debugItem.getRegister(); } }
public int getRegister() { return debugItem.getRegister(); } }
@Override public int getRegister() { return debugItem.getRegister(); }
for (org.jf.dexlib2.iface.debug.DebugItem debugItem: debugItems) { if (debugItem instanceof LineNumber) { startingLineNumber = ((LineNumber)debugItem).getLineNumber(); break;
@Override public int getCodeAddress() { return debugItem.getCodeAddress(); }
@Override public int getDebugItemType() { return debugItem.getDebugItemType(); }
public int getRegister() { return debugItem.getRegister(); } }
public int getRegister() { return debugItem.getRegister(); } }
@Override public int getRegister() { return debugItem.getRegister(); }
@Override public int getCodeAddress() { return debugItem.getCodeAddress(); }
@Override public int getDebugItemType() { return debugItem.getDebugItemType(); }
public int getRegister() { return debugItem.getRegister(); } }
public int getRegister() { return debugItem.getRegister(); } }
@Override public int getRegister() { return debugItem.getRegister(); }
@Override public int getCodeAddress() { return debugItem.getCodeAddress(); }