类org.objectweb.asm.util.Textifier源码实例Demo

下面列出了怎么用org.objectweb.asm.util.Textifier的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: Bats   文件: ValueHolderReplacementVisitor.java
@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);
  }
}
 
源代码2 项目: instrumentation   文件: Helper.java
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());
        }
    }
}
 
源代码3 项目: scott   文件: ClassFileStructurePrinter.java
public static void viewByteCode(byte[] bytecode) {
	ClassReader classReader = new ClassReader(bytecode);
	ClassNode classNode = new ClassNode();
	classReader.accept(classNode, 0);
	final List<MethodNode> methodNodes = classNode.methods;
	Printer printer = new Textifier();
	TraceMethodVisitor traceMethodVisitor = new TraceMethodVisitor(printer);
	
	for (MethodNode methodNode : methodNodes) {
		InsnList insnList = methodNode.instructions;
		System.out.println(methodNode.name);
		for (int i = 0; i < insnList.size(); i++) {
			insnList.get(i).accept(traceMethodVisitor);
			StringWriter sw = new StringWriter();
			printer.print(new PrintWriter(sw));
			printer.getText().clear();
			System.out.print(sw.toString());
		}
	}
}
 
源代码4 项目: CodeChickenLib   文件: ASMHelper.java
public static void dump(Acceptor acceptor, File file, boolean filterImportant, boolean sortLocals, boolean textify) {
    try {
        if(!file.getParentFile().exists())
            file.getParentFile().mkdirs();
        if(!file.exists())
            file.createNewFile();

        PrintWriter pout = new PrintWriter(file);
        ClassVisitor cv = new TraceClassVisitor(null, textify ? new Textifier() : new ASMifier(), pout);
        if(filterImportant) cv = new ImportantInsnVisitor(cv);
        if(sortLocals) cv = new LocalVariablesSorterVisitor(cv);
        acceptor.accept(cv);
        pout.close();
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}
 
源代码5 项目: Concurnas   文件: BytecodePrettyPrinter.java
@Override
protected Textifier createTextifier() {
	if(null ==  nextTracker){
		return new Textifier();
	}
	return nextTracker;
}
 
源代码6 项目: Concurnas   文件: BytecodePrettyPrinter.java
@Override
  public Textifier visitMethod(final int access, final String name, final String desc, final String signature, final String[] exceptions) {
nextTracker = new TextifierLabelTrack();
alllabelMaps.put(name + desc,  nextTracker.getLabelNames());

  	return super.visitMethod(access, name,   desc,   signature,  exceptions);
  }
 
源代码7 项目: Stark   文件: ByteCodeUtils.java
/**
 * Converts the given method to a String.
 */
public static String textify(@NonNull MethodNode method) {
    Textifier textifier = new Textifier();
    TraceMethodVisitor trace = new TraceMethodVisitor(textifier);
    method.accept(trace);
    String ret = "";
    for (Object line : textifier.getText()) {
        ret += line;
    }
    return ret;
}
 
源代码8 项目: turbine   文件: AsmUtils.java
public static String textify(byte[] bytes, boolean skipDebug) {
  Printer textifier = new Textifier();
  StringWriter sw = new StringWriter();
  new ClassReader(bytes)
      .accept(
          new TraceClassVisitor(null, textifier, new PrintWriter(sw, true)),
          ClassReader.SKIP_FRAMES
              | ClassReader.SKIP_CODE
              | (skipDebug ? ClassReader.SKIP_DEBUG : 0));
  return sw.toString();
}
 
源代码9 项目: pitest   文件: MutantExportInterceptor.java
private void writeBytecodeToDisk(final byte[] clazz, Path folder) throws IOException {
    final ClassReader reader = new ClassReader(clazz);
    final CharArrayWriter buffer = new CharArrayWriter();
    reader.accept(new TraceClassVisitor(null, new Textifier(), new PrintWriter(
        buffer)), ClassReader.EXPAND_FRAMES);
    final Path outFile = folder.resolve(this.currentClass.asJavaName() + ".txt");
    Files.write(outFile, Collections.singleton(buffer.toString()), StandardCharsets.UTF_8, StandardOpenOption.CREATE);
}
 
源代码10 项目: pitest   文件: ClassTree.java
@Override
public String toString() {
  final StringWriter writer = new StringWriter();
  this.rawNode.accept(new TraceClassVisitor(null, new Textifier(), new PrintWriter(
      writer)));
  return writer.toString();

}
 
源代码11 项目: pitest   文件: InfiniteLoopBaseTest.java
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());
}
 
源代码12 项目: pinpoint   文件: ASMBytecodeDisassembler.java
public String dumpBytecode(final byte[] bytecode) {
    if (bytecode == null) {
        throw new NullPointerException("bytecode");
    }

    return writeBytecode(bytecode, new Textifier());
}
 
源代码13 项目: CodeChickenLib   文件: InsnListSection.java
public String toString() {
    Textifier t = new Textifier();
    accept(new TraceMethodVisitor(t));
    StringWriter sw = new StringWriter();
    t.print(new PrintWriter(sw));
    return sw.toString();
}
 
源代码14 项目: buck   文件: JarDumper.java
private Stream<String> dumpClassFile(InputStream stream) throws IOException {
  byte[] textifiedClass;
  try (ByteArrayOutputStream bos = new ByteArrayOutputStream();
      PrintWriter pw = new PrintWriter(bos)) { // NOPMD required by API
    ClassReader reader = new ClassReader(stream);
    TraceClassVisitor traceVisitor = new TraceClassVisitor(null, new Textifier(), pw);
    reader.accept(traceVisitor, asmFlags);
    textifiedClass = bos.toByteArray();
  }

  try (InputStreamReader streamReader =
      new InputStreamReader(new ByteArrayInputStream(textifiedClass))) {
    return CharStreams.readLines(streamReader).stream();
  }
}
 
源代码15 项目: Despector   文件: BytecodeEmitterContext.java
@SuppressWarnings("unchecked")
public <T extends TypeEntry> void emitOuterType(T ast) {
    ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
    this.cw = writer;
    if (VERIFY_EMITTED_BYTECODE) {
        this.cw = new CheckClassAdapter(this.cw);
    }
    AstEmitter<AbstractEmitterContext, T> emitter = (AstEmitter<AbstractEmitterContext, T>) this.set.getAstEmitter(ast.getClass());
    if (emitter == null) {
        throw new IllegalArgumentException("No emitter for ast entry " + ast.getClass().getName());
    }
    emitter.emit(this, ast);
    this.cw.visitEnd();
    byte[] clazz = writer.toByteArray();
    if (DUMP_INSTRUCTIONS_AFTER_WRITE) {
        ClassReader cr = new ClassReader(clazz);
        ClassNode cn = new ClassNode();
        cr.accept(cn, 0);
        List<MethodNode> methods = cn.methods;
        for (MethodNode mn : methods) {
            System.out.println("Method: " + mn.name + mn.desc);
            Printer printer = new Textifier();
            TraceMethodVisitor mp = new TraceMethodVisitor(printer);
            for (Iterator<AbstractInsnNode> it = mn.instructions.iterator(); it.hasNext();) {
                AbstractInsnNode insn = it.next();
                insn.accept(mp);
            }
            StringWriter sw = new StringWriter();
            printer.print(new PrintWriter(sw));
            String s = sw.toString();
            if (s.endsWith("\n")) {
                s = s.substring(0, s.length() - 1);
            }
            System.out.println(s);
            mn.instructions.accept(mp);
        }
    }
    try {
        this.out.write(clazz);
    } catch (IOException e) {
        Throwables.propagate(e);
    }
}
 
源代码16 项目: tascalate-async-await   文件: BytecodeTraceUtil.java
public static String toString(MethodNode mn) {
     Textifier t = new Textifier();
     TraceMethodVisitor tmv = new TraceMethodVisitor(t);
     mn.accept(tmv);
     return t.toString();
}
 
源代码17 项目: groovy   文件: LoggableTextifier.java
@Override
protected Textifier createTextifier() {
    return new LoggableTextifier();
}
 
源代码18 项目: groovy   文件: LoggableTextifier.java
@Override
public Textifier visitClassAnnotation(String desc, boolean visible) {
    Textifier t = super.visitClassAnnotation(desc, visible);
    log();
    return t;
}
 
源代码19 项目: groovy   文件: LoggableTextifier.java
@Override
public Textifier visitField(int access, String name, String desc, String signature, Object value) {
    Textifier t = super.visitField(access, name, desc, signature, value);
    log();
    return t;
}
 
源代码20 项目: groovy   文件: LoggableTextifier.java
@Override
public Textifier visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
    Textifier t = super.visitMethod(access, name, desc, signature, exceptions);
    log();
    return t;
}
 
源代码21 项目: groovy   文件: LoggableTextifier.java
@Override
public Textifier visitAnnotation(String name, String desc) {
    Textifier t = super.visitAnnotation(name, desc);
    log();
    return t;
}
 
源代码22 项目: groovy   文件: LoggableTextifier.java
@Override
public Textifier visitArray(String name) {
    Textifier t = super.visitArray(name);
    log();
    return t;
}
 
源代码23 项目: groovy   文件: LoggableTextifier.java
@Override
public Textifier visitFieldAnnotation(String desc, boolean visible) {
    Textifier t = super.visitFieldAnnotation(desc, visible);
    log();
    return t;
}
 
源代码24 项目: groovy   文件: LoggableTextifier.java
@Override
public Textifier visitAnnotationDefault() {
    Textifier t = super.visitAnnotationDefault();
    log();
    return t;
}
 
源代码25 项目: groovy   文件: LoggableTextifier.java
@Override
public Textifier visitMethodAnnotation(String desc, boolean visible) {
    Textifier t = super.visitMethodAnnotation(desc, visible);
    log();
    return t;
}
 
源代码26 项目: groovy   文件: LoggableTextifier.java
@Override
public Textifier visitParameterAnnotation(int parameter, String desc, boolean visible) {
    Textifier t = super.visitParameterAnnotation(parameter, desc, visible);
    log();
    return t;
}
 
源代码27 项目: groovy   文件: LoggableTextifier.java
@Override
public Textifier visitAnnotation(String desc, boolean visible) {
    Textifier t = super.visitAnnotation(desc, visible);
    log();
    return t;
}
 
源代码28 项目: groovy   文件: LoggableTextifier.java
@Override
public Textifier visitTypeAnnotation(int typeRef, TypePath typePath, String desc, boolean visible) {
    Textifier t = super.visitTypeAnnotation(typeRef, typePath, desc, visible);
    log();
    return t;
}
 
源代码29 项目: groovy   文件: LoggableTextifier.java
@Override
public Textifier visitAnnotableParameterCount(int parameterCount, boolean visible) {
    Textifier t = super.visitAnnotableParameterCount(parameterCount, visible);
    log();
    return t;
}
 
源代码30 项目: TickDynamic   文件: ExtraTextifier.java
@Override
protected Textifier createTextifier() {
    return new ExtraTextifier();
}
 
 类所在包
 类方法
 同包方法