List of usage examples for org.objectweb.asm.util TraceClassVisitor TraceClassVisitor
public TraceClassVisitor(final ClassVisitor classVisitor, final Printer printer, final PrintWriter printWriter)
From source file:ch.raffael.contracts.devtools.browser.BrowserPanel.java
License:Apache License
private void updateSource() { if (tree.getSelectionPath() == null) { asmSource.setText(""); reloadClassAction.setEnabled(false); return;// ww w . java2 s . co m } BrowserTreeNode node = (BrowserTreeNode) tree.getSelectionPath().getLastPathComponent(); if (node.getKind() != BrowserTreeNode.Kind.CLASS) { asmSource.setText(""); reloadClassAction.setEnabled(false); } else { boolean indent = false; reloadClassAction.setEnabled(true); StringWriter string = new StringWriter(); try (InputStream in = new BufferedInputStream(Files.newInputStream(node.getPath())); PrintWriter out = new PrintWriter(string)) { ASMifier printer = new ASMifier(); ClassReader reader = new ClassReader(in); TraceClassVisitor tracer; if (sourceStyle.getSelectedItem() != null && sourceStyle.getSelectedItem().equals("Bytecode")) { tracer = new TraceClassVisitor(null, new Textifier(), out); } else { tracer = new TraceClassVisitor(null, new ASMifier(), out); indent = true; } reader.accept(tracer, 0); } catch (IOException e) { this.context.require(ErrorDisplayer.class).displayError(root, e); } if (indent) { StringBuilder buf = new StringBuilder(); int d = 0; for (String line : string.toString().split("\\n\\r?|\\r")) { if (line.equals("}")) { d--; } for (int i = 0; i < d; i++) { buf.append(" "); } buf.append(line).append('\n'); if (line.equals("{")) { d++; } } asmSource.setText(buf.toString()); } else { asmSource.setText(string.toString()); } asmSource.setSelectionStart(0); asmSource.setSelectionEnd(0); } }
From source file:ch.sourcepond.utils.podescoin.devel.PrintASMInstructions.java
License:Apache License
@Test public void printInstructions() throws Exception { final ClassReader reader = new ClassReader(WriteInjectorMethodClass.class.getName()); final ClassVisitor visitor = new PrintClassVisitor( new TraceClassVisitor(null, new ASMifier(), new PrintWriter(System.out))); reader.accept(visitor, ClassReader.SKIP_DEBUG); }
From source file:co.paralleluniverse.fibers.instrument.Retransform.java
License:Open Source License
public static void dumpClass(String className, byte[] data) { System.out.println("DUMP OF CLASS: " + className); ClassReader cr = new ClassReader(data); ClassVisitor cv = new TraceClassVisitor(null, new Textifier(), new PrintWriter(System.out)); cr.accept(cv, ClassReader.SKIP_FRAMES); System.out.println("================="); }
From source file:com.android.build.gradle.tasks.fd.InjectBootstrapApplicationTaskTest.java
License:Apache License
private static String asmify(File expected) throws IOException { ClassReader reader = new ClassReader(new FileInputStream(expected)); StringWriter writer = new StringWriter(); try (PrintWriter printWriter = new PrintWriter(writer)) { reader.accept(new TraceClassVisitor(null, new ASMifier(), printWriter), 0); }//from ww w. j a v a2s . c om return writer.toString(); }
From source file:com.costlowcorp.eriktools.jardetails.JarNavigationController.java
private void readClass(String filename) { try (JarFile jar = new JarFile(this.file)) { final JarEntry entry = jar.getJarEntry(filename); final ClassNode node = new ClassNode(ASM5); final InputStream in = jar.getInputStream(entry); final ClassReader reader = new ClassReader(in); //reader.accept(node, ClassReader.EXPAND_FRAMES); final Printer asmifier = new ASMifier(); //final InputStream in2 = jar.getInputStream(entry); final ByteArrayOutputStream bout = new ByteArrayOutputStream(); final TraceClassVisitor tracer = new TraceClassVisitor(node, asmifier, new PrintWriter(bout)); reader.accept(tracer, ClassReader.EXPAND_FRAMES); final String className = filename.replace('/', '.').substring(0, filename.length() - ".class".length()); final String javap = JavaPGrabber.INSTANCE.run(file.toPath(), className); Platform.runLater(() -> {//from ww w . j a v a2 s. c o m classDetails.populateClassSummary(node.name, filename, node.sourceFile, node.version, node.superName, node.interfaces); classDetails.populateAsmifierTab(bout.toString()); classDetails.populateJavaPTab(javap); }); } catch (IOException ex) { Logger.getLogger(JarNavigationController.class.getName()).log(Level.SEVERE, null, ex); } }
From source file:com.facebook.buck.jvm.java.JarDumper.java
License:Apache License
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(); }//from w w w. j a v a 2 s .co m try (InputStreamReader streamReader = new InputStreamReader(new ByteArrayInputStream(textifiedClass))) { return CharStreams.readLines(streamReader).stream(); } }
From source file:com.facebook.presto.bytecode.ClassGenerator.java
License:Apache License
public Map<String, Class<?>> defineClasses(List<ClassDefinition> classDefinitions) { ClassInfoLoader classInfoLoader = createClassInfoLoader(classDefinitions, classLoader); Map<String, byte[]> bytecodes = new LinkedHashMap<>(); for (ClassDefinition classDefinition : classDefinitions) { ClassWriter writer = new SmartClassWriter(classInfoLoader); try {//from w w w . j ava 2s . c om classDefinition.visit(fakeLineNumbers ? new AddFakeLineNumberClassVisitor(writer) : writer); } catch (IndexOutOfBoundsException | NegativeArraySizeException e) { StringWriter out = new StringWriter(); classDefinition.visit(new TraceClassVisitor(null, new Textifier(), new PrintWriter(out))); throw new IllegalArgumentException("Error processing class definition:\n" + out, e); } byte[] bytecode; try { bytecode = writer.toByteArray(); } catch (RuntimeException e) { throw new CompilationException("Error compiling class: " + classDefinition.getName(), e); } bytecodes.put(classDefinition.getType().getJavaClassName(), bytecode); if (runAsmVerifier) { ClassReader reader = new ClassReader(bytecode); CheckClassAdapter.verify(reader, classLoader, true, new PrintWriter(output)); } } dumpClassPath.ifPresent(path -> bytecodes.forEach((className, bytecode) -> { String name = typeFromJavaClassName(className).getClassName() + ".class"; Path file = path.resolve(name).toAbsolutePath(); try { createDirectories(file.getParent()); Files.write(file, bytecode); } catch (IOException e) { throw new UncheckedIOException("Failed to write generated class file: " + file, e); } })); if (dumpRawBytecode) { for (byte[] bytecode : bytecodes.values()) { ClassReader classReader = new ClassReader(bytecode); classReader.accept(new TraceClassVisitor(new PrintWriter(output)), ClassReader.EXPAND_FRAMES); } } Map<String, Class<?>> classes = classLoader.defineClasses(bytecodes); try { for (Class<?> clazz : classes.values()) { Reflection.initialize(clazz); } } catch (VerifyError e) { throw new RuntimeException(e); } return classes; }
From source file:com.facebook.presto.bytecode.CompilerUtils.java
License:Apache License
private static Map<String, Class<?>> defineClasses(List<ClassDefinition> classDefinitions, DynamicClassLoader classLoader) { ClassInfoLoader classInfoLoader = ClassInfoLoader.createClassInfoLoader(classDefinitions, classLoader); if (DUMP_BYTE_CODE_TREE) { ByteArrayOutputStream out = new ByteArrayOutputStream(); DumpBytecodeVisitor dumpBytecode = new DumpBytecodeVisitor(new PrintStream(out)); for (ClassDefinition classDefinition : classDefinitions) { dumpBytecode.visitClass(classDefinition); }/*from w w w. j ava 2s. co m*/ System.out.println(new String(out.toByteArray(), StandardCharsets.UTF_8)); } Map<String, byte[]> bytecodes = new LinkedHashMap<>(); for (ClassDefinition classDefinition : classDefinitions) { ClassWriter cw = new SmartClassWriter(classInfoLoader); try { classDefinition.visit(ADD_FAKE_LINE_NUMBER ? new AddFakeLineNumberClassVisitor(cw) : cw); } catch (IndexOutOfBoundsException e) { Printer printer = new Textifier(); StringWriter stringWriter = new StringWriter(); TraceClassVisitor tcv = new TraceClassVisitor(null, printer, new PrintWriter(stringWriter)); classDefinition.visit(tcv); throw new IllegalArgumentException("An error occurred while processing classDefinition:" + System.lineSeparator() + stringWriter.toString(), e); } try { byte[] bytecode = cw.toByteArray(); if (RUN_ASM_VERIFIER) { ClassReader reader = new ClassReader(bytecode); CheckClassAdapter.verify(reader, classLoader, true, new PrintWriter(System.out)); } bytecodes.put(classDefinition.getType().getJavaClassName(), bytecode); } catch (RuntimeException e) { throw new CompilationException("Error compiling class " + classDefinition.getName(), e); } } String dumpClassPath = DUMP_CLASS_FILES_TO.get(); if (dumpClassPath != null) { for (Map.Entry<String, byte[]> entry : bytecodes.entrySet()) { File file = new File(dumpClassPath, ParameterizedType.typeFromJavaClassName(entry.getKey()).getClassName() + ".class"); try { log.debug("ClassFile: " + file.getAbsolutePath()); Files.createParentDirs(file); Files.write(entry.getValue(), file); } catch (IOException e) { log.error(e, "Failed to write generated class file to: %s" + file.getAbsolutePath()); } } } if (DUMP_BYTE_CODE_RAW) { for (byte[] bytecode : bytecodes.values()) { ClassReader classReader = new ClassReader(bytecode); classReader.accept(new TraceClassVisitor(new PrintWriter(System.err)), ClassReader.EXPAND_FRAMES); } } Map<String, Class<?>> classes = classLoader.defineClasses(bytecodes); try { for (Class<?> clazz : classes.values()) { Reflection.initialize(clazz); } } catch (VerifyError e) { throw new RuntimeException(e); } return classes; }
From source file:com.gargoylesoftware.js.nashorn.internal.codegen.ClassEmitter.java
License:Open Source License
/** * Disassemble an array of byte code./*from w ww . j a va 2s. c o m*/ * * @param bytecode byte array representing bytecode * * @return disassembly as human readable string */ static String disassemble(final byte[] bytecode) { final ByteArrayOutputStream baos = new ByteArrayOutputStream(); try (final PrintWriter pw = new PrintWriter(baos)) { final NashornClassReader cr = new NashornClassReader(bytecode); final Context ctx = AccessController.doPrivileged(new PrivilegedAction<Context>() { @Override public Context run() { return Context.getContext(); } }); final TraceClassVisitor tcv = new TraceClassVisitor(null, new NashornTextifier(ctx.getEnv(), cr), pw); cr.accept(tcv, 0); } final String str = new String(baos.toByteArray()); return str; }
From source file:com.github.anba.es6draft.compiler.assembler.Code.java
License:Open Source License
/** * Returns the decompiled byte code.// ww w .j a v a 2s . com * * @param bytes * the class byte code * @param simpleTypes * {@code true} to use simple type representation * @return the decompiled byte code */ public static String toByteCode(byte[] bytes, boolean simpleTypes) { Printer p = simpleTypes ? new SimpleTypeTextifier() : new Textifier(); return toByteCode(new TraceClassVisitor(null, p, null), p, bytes); }