001 package net.sourceforge.retroweaver;
002
003 import java.io.FileInputStream;
004 import java.io.IOException;
005 import java.io.PrintWriter;
006
007 import org.objectweb.asm.Attribute;
008 import org.objectweb.asm.ClassReader;
009 import org.objectweb.asm.util.ASMifierClassVisitor;
010
011 public class ASMifier extends ASMifierClassVisitor {
012
013 public static void main(final String[] args) throws IOException {
014 int i = 0;
015 boolean skipDebug = true;
016
017 boolean ok = true;
018 if (args.length < 1 || args.length > 2) {
019 ok = false;
020 }
021 if (ok && args[0].equals("-debug")) {
022 i = 1;
023 skipDebug = false;
024 if (args.length != 2) {
025 ok = false;
026 }
027 }
028 if (!ok) {
029 System.err.println("Prints the ASM code to generate the given class."); // NOPMD by xlv
030 System.err.println("Usage: RetroweaverASMifier [-debug] " // NOPMD by xlv
031 + "<fully qualified class name or class file name>");
032 return;
033 }
034 ClassReader cr;
035 if (args[i].endsWith(".class") || args[i].indexOf('\\') > -1
036 || args[i].indexOf('/') > -1) {
037 cr = new ClassReader(new FileInputStream(args[i]));
038 } else {
039 cr = new ClassReader(args[i]);
040 }
041 cr.accept(new ASMifier(new PrintWriter(System.out)),
042 getDefaultAttributes(),
043 skipDebug?ClassReader.SKIP_DEBUG:0);
044 }
045
046 public ASMifier(final PrintWriter pw) {
047 super(pw);
048 }
049
050 public static Attribute[] getDefaultAttributes() {
051 return RetroWeaver.CUSTOM_ATTRIBUTES;
052 }
053
054 }