List of usage examples for org.aspectj.apache.bcel.classfile ClassParser ClassParser
public ClassParser(ByteArrayInputStream baos, String filename)
From source file:br.jabuti.lookup.java.bytecode.Program.java
License:Open Source License
/** this constructor uses a Map where the keys have the names of the * classes and the elements their bytecodes. */ public Program(Map hs) throws ClassNotFoundException, IOException { ClassClosure cc = new ClassClosure(); classes = new Hashtable(); Iterator keys = hs.keySet().iterator(); while (keys.hasNext()) { String keyName = (String) keys.next(); byte[] b = (byte[]) hs.get(keyName); JavaClass jv = (new ClassParser(new ByteArrayInputStream(b), keyName)).parse(); RClassCode rc = new RClassCode(jv, keyName); classes.put(keyName, rc);/* ww w . j a va 2 s .c o m*/ String[] closure = cc.accessedClasses(jv); for (int i = 0; i < closure.length; i++) { if (!classes.containsKey(closure[i])) { Debug.D("Closure " + closure[i]); // javaClass = new ClassParser ( closure[i] ).parse ( ); // mc = new RClassCode ( javaClass, closure[i] ); RClass mc = new RClass(closure[i]); classes.put(closure[i], mc); } } } updateSubSuper(); // links super and subclasses }
From source file:br.jabuti.lookup.java.bytecode.Program.java
License:Open Source License
/** * The same of {@link Program#Program(String, boolean, String, String)} but * all the classes in the {@link ZipFile} are included in the * structure of the program, as well as the classes they reference.. * /*from w w w . j av a 2 s.c o m*/ * */ public Program(ZipFile zippedFile, boolean noSys, String toAvoid) throws ClassNotFoundException, IOException { classes = new Hashtable(); ClassClosure cc = new ClassClosure(); Enumeration en = zippedFile.entries(); ZipEntry zippedEntry = null; while (en.hasMoreElements()) { zippedEntry = (ZipEntry) en.nextElement(); String className = zippedEntry.getName(); if (!className.endsWith(".class")) { continue; } JavaClass javaClass; javaClass = new ClassParser(zippedFile.getInputStream(zippedEntry), className).parse(); // May throw IOException className = cc.toPoint(className.substring(0, className.length() - 6)); RClass mc = new RClassCode(javaClass, className); classes.put(className, mc); Debug.D("Class " + className); String[] closure = cc.getJCClosure(javaClass, noSys, toAvoid); for (int i = 0; i < closure.length; i++) { if (!classes.containsKey(closure[i])) { Debug.D("Closure " + closure[i]); // javaClass = new ClassParser ( closure[i] ).parse ( ); // mc = new RClassCode ( javaClass, closure[i] ); mc = new RClass(closure[i]); classes.put(closure[i], mc); } } } updateSubSuper(); // links super and subclasses }
From source file:br.jabuti.lookup.java.bytecode.RClassCode.java
License:Open Source License
/** Return the {@link JavaClass} object that represents this class /*from w w w. j av a 2s . co m*/ @return the {@link JavaClass} object that represents this class */ public JavaClass getTheClass() { if (theClass != null) return theClass; try { byte[] b = (byte[]) Persistency.get(theClassPersistent); ByteArrayInputStream bais = new ByteArrayInputStream(b); JavaClass javaClass = new ClassParser(bais, null).parse(); bais.close(); return javaClass; } catch (Exception e) { return null; } }
From source file:br.jabuti.ui.cli.ClassSummary.java
License:Open Source License
public static void main(String args[]) throws Throwable { JavaClass jc = null;//w w w . j ava 2s. c o m HashSet toInstrumenter = null; String fileName; // A given class or compressed file name ZipFile zippedFile = null; // To handle compressed class files if (args.length > 0) { int i = 0; if (args.length == 1) { if (("-v".equals(args[i])) || ("-h".equals(args[i]))) { if ("-v".equals(args[i])) { System.out.println("Bytecode ClassSummaty v0.0001"); } else if ("-h".equals(args[i])) { usage(); } System.exit(0); } } while (i < args.length && args[i].startsWith("-")) { // -i: Classes to be instrumented if (("-i".equals(args[i])) && (i < args.length - 1)) { if (zippedFile == null) { if (toInstrumenter == null) { toInstrumenter = new HashSet(); } i++; fileName = args[i]; toInstrumenter.add(getRealName(fileName, ".class")); i++; } else { System.out.println("Options -i and -jar can not appear toghether. "); System.out.println("try java instrumenter.ClassSummary -h for help."); System.exit(0); } } // Compressed file... else if (("-jar".equals(args[i])) && (i < args.length - 1)) { if (toInstrumenter == null) { i++; fileName = args[i]; if (fileName.endsWith(".jar")) { zippedFile = new JarFile(getRealName(fileName, ".jar")); } else if (fileName.endsWith(".zip")) { zippedFile = new ZipFile(getRealName(fileName, ".zip")); } else { System.out.println("ERROR: after a -jar should be specified a .jar or .zip file!!!"); System.exit(0); } i++; } else { System.out.println("Options -i and -jar can not appear toghether. "); System.out.println("try java instrumenter.ClassSummary -h for help."); System.exit(0); } } else if (("-call".equals(args[i]))) { i++; callNodes = true; } else if (("-du".equals(args[i]))) { i++; detailed = true; defuse = true; } else if (("-li".equals(args[i]))) { i++; detailed = true; alive = true; } else if (("-do".equals(args[i]))) { i++; detailed = true; dominators = true; } else if (("-ch".equals(args[i]))) { i++; detailed = true; childrens = true; } else if (("-cfg".equals(args[i]))) { i++; cfg = true; } else if (("-all".equals(args[i]))) { i++; detailed = true; defuse = true; dominators = true; childrens = true; cfg = true; alive = true; } else { System.out.println("Unrecognized option: " + args[i]); System.out.println("try java instrumenter.ClassSummary -h for help."); System.exit(0); } } if (zippedFile != null) { Enumeration en = zippedFile.entries(); ZipEntry zippedEntry = null; while (en.hasMoreElements()) { zippedEntry = (ZipEntry) en.nextElement(); String className = zippedEntry.getName(); if (!className.endsWith(".class")) { continue; } jc = new ClassParser(zippedFile.getInputStream(zippedEntry), className).parse(); // May // throw // IOException getClassSummary(jc); } } if (toInstrumenter != null) { Iterator it = toInstrumenter.iterator(); while (it.hasNext()) { jc = new ClassParser((String) it.next()).parse(); getClassSummary(jc); } } } else { usage(); } System.exit(0); }
From source file:org.caesarj.mixer.intern.ClassModifier.java
License:Open Source License
public void modify(String className, String newClassName, String newSuperclassName, String outerClassName, KjcEnvironment env) throws MixerException { JavaClass clazz = null;/*from w ww . j a va2 s. com*/ // Load the class try { InputStream is = _classPath.getInputStream(className); clazz = new ClassParser(is, className).parse(); } catch (IOException e) { throw new MixerException("Class not found " + className); } String oldSuperclassName = clazz.getSuperclassName().replace('.', '/'); // use the typesystem to calculate some missing information String outerOfOldSuper = null; // CCjSourceClass oldSuperClass = env.getClassReader().findSourceClass(oldSuperclassName); CClass oldSuperClass = lookupClass(env, oldSuperclassName); if (oldSuperClass != null && oldSuperClass.getOwner() != null) { outerOfOldSuper = oldSuperClass.getOwner().getQualifiedName(); } String outerOfNewSuper = null; // CCjSourceClass newSuperClass = env.getClassReader().findSourceClass(newSuperclassName); CClass newSuperClass = lookupClass(env, newSuperclassName); if (newSuperClass != null && newSuperClass.getOwner() != null) { outerOfNewSuper = newSuperClass.getOwner().getQualifiedName(); } // collect all outer classes for this mixin Vector<String> outerClasses = new Vector<String>(); CClass //mixinType = // lookupClass(env, newClassName), // env.getClassReader().findSourceClass(newClassName), // outerType = mixinType.getOwner(); outerType = lookupClass(env, outerClassName); while (outerType != null) { String identifier = new JavaQualifiedName(outerType.getQualifiedName()).getIdent(); outerClasses.add(identifier); outerType = outerType.getOwner(); } String[] outers = outerClasses.toArray(new String[outerClasses.size()]); // tranform class final ClassModifyingVisitor visitor = new ClassModifyingVisitor(className, newClassName, newSuperclassName, outerClassName, outerOfOldSuper, outerOfNewSuper, outers); JavaClass newClass = visitor.transform(clazz); // write tranformed class copy writeClass(newClassName, newClass); // CClass cc = env.getClassReader().findSourceClass(className); CClass cc = lookupClass(env, className); CReferenceType[] innerTypes = cc.getInnerClasses(); // transform anonymous inner classes for (int i = 0; i < innerTypes.length; i++) { CReferenceType innerType = innerTypes[i]; CClass inner = innerType.getCClass(); if (inner.isAnonymous()) { String innerClassName = inner.getQualifiedName(), newSuperName = inner.getSuperClass().getQualifiedName(), innerOuterName = className; String ident = innerClassName.split("\\$")[1], newInnerName = newClassName + "$" + ident; modify(innerClassName, newInnerName, newSuperName, newClassName, env); } } }