1 15 16 package javassist.reflect; 17 18 import javassist.CtClass; 19 import javassist.ClassPool; 20 import java.io.PrintStream ; 21 22 class CompiledClass { 23 public String classname; 24 public String metaobject; 25 public String classobject; 26 } 27 28 70 public class Compiler { 71 72 public static void main(String [] args) throws Exception { 73 if (args.length == 0) { 74 help(System.err); 75 return; 76 } 77 78 CompiledClass[] entries = new CompiledClass[args.length]; 79 int n = parse(args, entries); 80 81 if (n < 1) { 82 System.err.println("bad parameter."); 83 return; 84 } 85 86 processClasses(entries, n); 87 } 88 89 private static void processClasses(CompiledClass[] entries, int n) 90 throws Exception 91 { 92 Reflection implementor = new Reflection(); 93 ClassPool pool = ClassPool.getDefault(); 94 implementor.start(pool); 95 96 for (int i = 0; i < n; ++i) { 97 CtClass c = pool.get(entries[i].classname); 98 if (entries[i].metaobject != null 99 || entries[i].classobject != null) { 100 String metaobj, classobj; 101 102 if (entries[i].metaobject == null) 103 metaobj = "javassist.reflect.Metaobject"; 104 else 105 metaobj = entries[i].metaobject; 106 107 if (entries[i].classobject == null) 108 classobj = "javassist.reflect.ClassMetaobject"; 109 else 110 classobj = entries[i].classobject; 111 112 if (!implementor.makeReflective(c, pool.get(metaobj), 113 pool.get(classobj))) 114 System.err.println("Warning: " + c.getName() 115 + " is reflective. It was not changed."); 116 117 System.err.println(c.getName() + ": " + metaobj + ", " 118 + classobj); 119 } 120 else 121 System.err.println(c.getName() + ": not reflective"); 122 } 123 124 for (int i = 0; i < n; ++i) { 125 implementor.onLoad(pool, entries[i].classname); 126 pool.get(entries[i].classname).writeFile(); 127 } 128 } 129 130 private static int parse(String [] args, CompiledClass[] result) { 131 int n = -1; 132 for (int i = 0; i < args.length; ++i) { 133 String a = args[i]; 134 if (a.equals("-m")) 135 if (n < 0 || i + 1 > args.length) 136 return -1; 137 else 138 result[n].metaobject = args[++i]; 139 else if (a.equals("-c")) 140 if (n < 0 || i + 1 > args.length) 141 return -1; 142 else 143 result[n].classobject = args[++i]; 144 else if (a.charAt(0) == '-') 145 return -1; 146 else { 147 CompiledClass cc = new CompiledClass(); 148 cc.classname = a; 149 cc.metaobject = null; 150 cc.classobject = null; 151 result[++n] = cc; 152 } 153 } 154 155 return n + 1; 156 } 157 158 private static void help(PrintStream out) { 159 out.println("Usage: java javassist.reflect.Compiler"); 160 out.println(" (<class> [-m <metaobject>] [-c <class metaobject>])+"); 161 } 162 } 163 | Popular Tags |