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 }