Example usage for org.aspectj.apache.bcel.classfile ClassParser ClassParser

List of usage examples for org.aspectj.apache.bcel.classfile ClassParser ClassParser

Introduction

In this page you can find the example usage for org.aspectj.apache.bcel.classfile ClassParser ClassParser.

Prototype

public ClassParser(ByteArrayInputStream baos, String filename) 

Source Link

Usage

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);
        }
    }
}