@Override public String toString() { Printer printer = new ASMifier(); TraceMethodVisitor visitor = new TraceMethodVisitor(printer); node.accept(visitor); return printer.getText().toString(); }
String format = "%05d %-" + (method.maxStack + method.maxLocals + 6) + "s|%s"; for (int j = 0; j < method.instructions.size(); ++j) { method.instructions.get(j).accept(mv);
in.accept(new MethodVisitor(ASM4) {
Object insn = method.instructions.get(j); if (insn instanceof AbstractInsnNode) { ((AbstractInsnNode) insn).accept(mv); } else { mv.visitLabel((Label) insn);
static void printAnalyzerResult(MethodNode method, Analyzer a, final PrintWriter pw) throws IllegalArgumentException, IllegalAccessException { Frame[] frames = a.getFrames(); Textifier t = new Textifier(); TraceMethodVisitor mv = new TraceMethodVisitor(t); String format = "%05d %-" + (method.maxStack + method.maxLocals + 6) + "s|%s"; for (int j = 0; j < method.instructions.size(); ++j) { method.instructions.get(j).accept(mv); StringBuffer s = new StringBuffer(); Frame f = frames[j]; if (f == null) { s.append('?'); } else { for (int k = 0; k < f.getLocals(); ++k) { s.append(getShortName(f.getLocal(k).toString())); } s.append(" : "); for (int k = 0; k < f.getStackSize(); ++k) { s.append(getShortName(f.getStack(k).toString())); } } pw.printf(format, j, s, buf.get(t)); // mv.text.get(j)); } for (int j = 0; j < method.tryCatchBlocks.size(); ++j) { ((TryCatchBlockNode) method.tryCatchBlocks.get(j)).accept(mv); pw.print(" " + buf.get(t)); } pw.println(); pw.flush(); }
bb.getInstruction(bb.startPos).accept(mv);
instructions.get(index).accept(methodVisitor); stackAfter[index] = stack; flushInstructions();
private void transformIndyBootstrap(MethodVisitor mv, AbstractInsnNode ain) { InvokeDynamicInsnNode indy = (InvokeDynamicInsnNode)ain; Object[]bsmArgs = indy.bsmArgs; // Is it a lambda conversion if (indy.bsm.getOwner().equals("java/lang/invoke/LambdaMetafactory")) { Handle lambdaBody = (Handle)bsmArgs[1]; String desc = lambdaBody.getDesc(); if (detector.isPausable(lambdaBody.getOwner(), lambdaBody.getName(), desc)) { bsmArgs[0] = addFiberType((Type)bsmArgs[0]); bsmArgs[1] = new Handle(lambdaBody.getTag(), lambdaBody.getOwner(), lambdaBody.getName(), desc.replace(")", D_FIBER_LAST_ARG), lambdaBody.isInterface()); bsmArgs[2] = addFiberType((Type)bsmArgs[2]); } } ain.accept(mv); }
transformIndyBootstrap(mv, ain); } else { ain.accept(mv);
/** * Makes the given visitor visit all the instructions in this list. * * @param methodVisitor the method visitor that must visit the instructions. */ public void accept(final MethodVisitor methodVisitor) { AbstractInsnNode currentInsn = firstInsn; while (currentInsn != null) { currentInsn.accept(methodVisitor); currentInsn = currentInsn.nextInsn; } }
/** * Makes the given visitor visit all of the instructions in this list. * * @param mv * the method visitor that must visit the instructions. */ public void accept(final MethodVisitor mv) { AbstractInsnNode insn = first; while (insn != null) { insn.accept(mv); insn = insn.next; } }
private void resetField(FieldDescriptor field) { mv.visitVarInsn(ALOAD, 0); field.reset.accept(mv); mv.visitFieldInsn(PUTFIELD, meta.type.getInternalName(), field.name, field.desc); } }
private void resetField(FieldDescriptor field) { mv.visitVarInsn(ALOAD, 0); field.reset.accept(mv); mv.visitFieldInsn(PUTFIELD, meta.type.getInternalName(), field.name, field.desc); } }
public static String toString(AbstractInsnNode insnNode) { TraceMethodVisitor asmifier = new TraceMethodVisitor(); insnNode.accept(asmifier); StringBuffer sb = new StringBuffer(); for (String line : (List<String>) asmifier.getText()) { sb.append(line); } return sb.toString(); }
public static void printMethod(MethodNode methodNode, int startIndex, int count) { Iterator<AbstractInsnNode> it = methodNode.instructions.iterator(startIndex); LOGGER.info("----- Printing " + methodNode.name + "... -----"); while (it.hasNext() && (count > 0 || count == -1)) { it.next().accept(methodVisitor); StringWriter stringWriter = new StringWriter(); printer.print(new PrintWriter(stringWriter)); printer.getText().clear(); LOGGER.info(stringWriter.toString().replace("\n", "")); if (count != -1) count--; } LOGGER.info("----- Finished! -----"); }
private static String getNodeString(AbstractInsnNode node) { Printer printer = new Textifier(); TraceMethodVisitor visitor = new TraceMethodVisitor(printer); node.accept(visitor); StringWriter sw = new StringWriter(); printer.print(new PrintWriter(sw)); printer.getText().clear(); return sw.toString().replaceAll("\n", "").trim(); }
@Override public void accept(final MethodVisitor mv) { currentInsn = inner.getFirst(); while (currentInsn != null) { currentFrame = frames[index]; nextFrame = index + 1 < frames.length ? frames[index + 1] : null; currentInsn.accept(mv); currentInsn = currentInsn.getNext(); index++; } }
@Override public void accept(final MethodNode methodNode, final MethodVisitor methodVisitor) { methodVisitor.visitCode(); for (final TryCatchBlockNode n : methodNode.tryCatchBlocks) { n.accept(methodVisitor); } currentNode = methodNode.instructions.getFirst(); while (currentNode != null) { currentNode.accept(methodVisitor); currentNode = currentNode.getNext(); } methodVisitor.visitEnd(); }
public static void viewByteCode(byte[] bytecode) { ClassReader cr = new ClassReader(bytecode); ClassNode cn = new ClassNode(); cr.accept(cn, 0); final List<MethodNode> mns = cn.methods; Printer printer = new Textifier(); TraceMethodVisitor mp = new TraceMethodVisitor(printer); for (MethodNode mn : mns) { InsnList inList = mn.instructions; System.out.println(mn.name); for (int i = 0; i < inList.size(); i++) { inList.get(i).accept(mp); StringWriter sw = new StringWriter(); printer.print(new PrintWriter(sw)); printer.getText().clear(); System.out.print(sw.toString()); } } } }
private void emitNewAndDup(MethodVisitor mv, Frame frame, int stackIndex, MethodInsnNode min) { int arguments = frame.getStackSize() - stackIndex - 1; int neededLocals = 0; for (int i = arguments; i >= 1; i--) { BasicValue v = (BasicValue) frame.getStack(stackIndex + i); mv.visitVarInsn(v.getType().getOpcode(Opcodes.ISTORE), lvarStack + 1 + neededLocals); neededLocals += v.getSize(); } db.log(LogLevel.DEBUG, "Inserting NEW & DUP for constructor call %s%s with %d arguments (%d locals)", min.owner, min.desc, arguments, neededLocals); if (additionalLocals < neededLocals) { additionalLocals = neededLocals; } ((NewValue) frame.getStack(stackIndex - 1)).insn.accept(mv); ((NewValue) frame.getStack(stackIndex)).insn.accept(mv); for (int i = 1; i <= arguments; i++) { BasicValue v = (BasicValue) frame.getStack(stackIndex + i); neededLocals -= v.getSize(); mv.visitVarInsn(v.getType().getOpcode(Opcodes.ILOAD), lvarStack + 1 + neededLocals); } }