Refine search
@Override public MethodVisitor visitMethod(final int access, final String name, final String desc, final String signature, final String[] exceptions) { Printer p = this.p.visitMethod(access, name, desc, signature, exceptions); MethodVisitor mv = cv == null ? null : cv.visitMethod(access, name, desc, signature, exceptions); return new TraceMethodVisitor(mv, p); }
TraceMethodVisitor mv = new TraceMethodVisitor(null); ((AbstractInsnNode) insn).accept(mv); } else { mv.visitLabel((Label) insn); mv.visitMaxs(method.maxStack, method.maxLocals);
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(); }
((AbstractInsnNode) insn).accept(mv); } else { mv.visitLabel((Label) insn); mv.visitMaxs(method.maxStack, method.maxLocals);
((AbstractInsnNode) insn).accept(mv); } else { mv.visitLabel((Label) insn); mv.visitMaxs(method.maxStack, method.maxLocals);
@Override public String toString() { Printer printer = new ASMifier(); TraceMethodVisitor visitor = new TraceMethodVisitor(printer); node.accept(visitor); return printer.getText().toString(); }
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) {
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(); }
private String toString(MethodTree mt) { final ByteArrayOutputStream bos = new ByteArrayOutputStream(); final TraceMethodVisitor mv = new TraceMethodVisitor(new Textifier()); mt.rawNode().accept(mv); try (PrintWriter pw = new PrintWriter(bos)) { mv.p.print(pw); } return "Byte code is \n" + new String(bos.toByteArray()); }
@Override public MethodVisitor visitMethod( final int access, final String name, final String descriptor, final String signature, final String[] exceptions) { Printer methodPrinter = p.visitMethod(access, name, descriptor, signature, exceptions); return new TraceMethodVisitor( super.visitMethod(access, name, descriptor, signature, exceptions), methodPrinter); }
@Override public MethodVisitor visitMethod(final int access, final String name, final String desc, final String signature, final String[] exceptions) { Printer p = this.p.visitMethod(access, name, desc, signature, exceptions); MethodVisitor mv = cv == null ? null : cv.visitMethod(access, name, desc, signature, exceptions); return new TraceMethodVisitor(mv, p); }
@Override public MethodVisitor visitMethod( final int access, final String name, final String descriptor, final String signature, final String[] exceptions) { Printer methodPrinter = p.visitMethod(access, name, descriptor, signature, exceptions); return new TraceMethodVisitor( super.visitMethod(access, name, descriptor, signature, exceptions), methodPrinter); }
@Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { if (methodName.equals(name) && methodType.toMethodDescriptorString().equals(desc)) { Printer p = printer.visitMethod(access, name, desc, signature, exceptions); return new TraceMethodVisitor(null, p); } return null; } }
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(); }
/** Returns a human readable string for the code that this {@link BytecodeProducer} generates. */ public final String trace() { // TODO(lukes): textifier has support for custom label names by overriding appendLabel. // Consider trying to make use of (using the Label.info field? adding a custom NamedLabel // sub type?) Textifier textifier = new Textifier(Opcodes.ASM6) { { // reset tab sizes. Since we don't care about formatting class names or method // signatures (only code). We only need to set the tab2,tab3 and ltab settings (tab is // for class members). this.tab = null; // trigger an error if used. this.tab2 = " "; // tab setting for instructions this.tab3 = ""; // tab setting for switch cases this.ltab = ""; // tab setting for labels } }; gen(new CodeBuilder(new TraceMethodVisitor(textifier), 0, "trace", "()V")); StringWriter writer = new StringWriter(); textifier.print(new PrintWriter(writer)); return writer.toString(); // Note textifier always adds a trailing newline } }
/** Returns a human readable string for the code that this {@link BytecodeProducer} generates. */ public final String trace() { // TODO(lukes): textifier has support for custom label names by overriding appendLabel. // Consider trying to make use of (using the Label.info field? adding a custom NamedLabel // sub type?) Textifier textifier = new Textifier(Opcodes.ASM6) { { // reset tab sizes. Since we don't care about formatting class names or method // signatures (only code). We only need to set the tab2,tab3 and ltab settings (tab is // for class members). this.tab = null; // trigger an error if used. this.tab2 = " "; // tab setting for instructions this.tab3 = ""; // tab setting for switch cases this.ltab = ""; // tab setting for labels } }; gen(new CodeBuilder(new TraceMethodVisitor(textifier), 0, "trace", "()V")); StringWriter writer = new StringWriter(); textifier.print(new PrintWriter(writer)); return writer.toString(); // Note textifier always adds a trailing newline } }
$TraceMethodVisitor(MethodCode method, MethodVisitor mv) { super(Opcodes.ASM5, new TraceMethodVisitor(mv, new SimpleTypeTextifier())); this.method = method; }
@Override public boolean areEqual(@Nullable MethodNode first, @Nullable MethodNode second) { if (first==null && second==null) { return true; } if (first==null || second==null) { return false; } if (!first.name.equals(second.name) || !first.desc.equals(second.desc)) { return false; } VerifierTextifier firstMethodTextifier = new VerifierTextifier(); VerifierTextifier secondMethodTextifier = new VerifierTextifier(); first.accept(new TraceMethodVisitor(firstMethodTextifier)); second.accept(new TraceMethodVisitor(secondMethodTextifier)); StringWriter firstText = new StringWriter(); StringWriter secondText = new StringWriter(); firstMethodTextifier.print(new PrintWriter(firstText)); secondMethodTextifier.print(new PrintWriter(secondText)); return firstText.toString().equals(secondText.toString()); } }
@Override public void visitEnd() { try { accept(inner); super.visitEnd(); } catch(Exception e){ Textifier t = new Textifier(); accept(new TraceMethodVisitor(t)); StringBuilderWriter sw = new StringBuilderWriter(); PrintWriter pw = new PrintWriter(sw); t.print(pw); pw.flush(); String bytecode = sw.getBuilder().toString(); logger.error(String.format("Failure while rendering method %s, %s, %s. ByteCode:\n %s", name, desc, signature, bytecode), e); throw new RuntimeException(String.format("Failure while rendering method %s, %s, %s. ByteCode:\n %s", name, desc, signature, bytecode), e); } } }
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()); } } } }