Search in sources :

Example 1 with Mark

use of com.jopdesign.common.tools.UsedCodeFinder.Mark in project jop by jop-devel.

the class UnusedCodeRemover method removeUnusedMembers.

/**
     * Remove all unused classes, methods and fields.
     */
private void removeUnusedMembers() {
    AppInfo appInfo = AppInfo.getSingleton();
    // we cannot modify the lists while iterating through it
    List<ClassInfo> unusedClasses = new LinkedList<ClassInfo>();
    List<FieldInfo> unusedFields = new LinkedList<FieldInfo>();
    List<MethodInfo> unusedMethods = new LinkedList<MethodInfo>();
    int fields = 0;
    int methods = 0;
    for (ClassInfo cls : appInfo.getClassInfos()) {
        if (ucf.getMark(cls) == Mark.UNUSED) {
            unusedClasses.add(cls);
            logger.debug("Removing unused class " + cls);
            continue;
        }
        unusedFields.clear();
        unusedMethods.clear();
        if (appInfo.isHwObject(cls)) {
            // Do not remove fields from hardware objects, else the mapping gets broken and
            // chaos takes over!
            logger.debug("Skipping fields of used hardware object " + cls);
        } else {
            for (FieldInfo f : cls.getFields()) {
                if (ucf.getMark(f) == Mark.UNUSED) {
                    unusedFields.add(f);
                }
            }
        }
        for (MethodInfo m : cls.getMethods()) {
            Mark mark = ucf.getMark(m);
            if (mark == Mark.UNUSED) {
                unusedMethods.add(m);
            }
            if (mark == Mark.MARKED && !m.isNative() && !m.isAbstract()) {
                logger.info("Making unused method " + m + " abstract");
                m.setAbstract(true);
                m.getClassInfo().setAbstract(true);
            }
        }
        for (FieldInfo f : unusedFields) {
            fields += removeField(f);
        }
        for (MethodInfo m : unusedMethods) {
            methods += removeMethod(m);
        }
    }
    appInfo.removeClasses(unusedClasses);
    int classes = unusedClasses.size();
    logger.info("Removed " + classes + (classes == 1 ? " class, " : " classes, ") + fields + (fields == 1 ? " field, " : " fields, ") + methods + (methods == 1 ? " method" : " methods"));
}
Also used : Mark(com.jopdesign.common.tools.UsedCodeFinder.Mark) MethodInfo(com.jopdesign.common.MethodInfo) LinkedList(java.util.LinkedList) FieldInfo(com.jopdesign.common.FieldInfo) AppInfo(com.jopdesign.common.AppInfo) ClassInfo(com.jopdesign.common.ClassInfo)

Aggregations

AppInfo (com.jopdesign.common.AppInfo)1 ClassInfo (com.jopdesign.common.ClassInfo)1 FieldInfo (com.jopdesign.common.FieldInfo)1 MethodInfo (com.jopdesign.common.MethodInfo)1 Mark (com.jopdesign.common.tools.UsedCodeFinder.Mark)1 LinkedList (java.util.LinkedList)1