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