Вы можете написать свои собственные утилиты для этого (в пределах часа после прочтения этого), используя библиотеку анализа ASM байткода (http://asm.ow2.org). Вам нужно будет реализовать ClassVisitor и MethodVisitor. Вы будете использовать ClassReader для анализа файлов классов в вашей библиотеке.
- Для каждого объявленного метода будет вызываться способ посещения вашего класса ClassMethod (..).
- Вызов метода MethodVisitorMethodInsn (..) будет вызываться для каждого вызываемого метода.
Поддержание карты для подсчета. Ключи представляют методы (см. Ниже). Вот несколько кодов:
class MyClassVisitor {
// ...
public void visit(int version, int access, String name, ...) {
this.className = name;
}
public MethodVisitor visitMethod(int access, String name, String desc, ...):
String key = className + "." + name + "#" + desc;
if (!map.containsKey() {
map.put(key, 0);
}
return new MyMethodVisitor(map);
}
// ...
}
void class MyMethodVisitor {
// ...
public visitMethodInsn(int opcode, String name, String owner, String desc, ...) {
String key = owner + "." + name + "#" + desc;
if (!map.containsKey() {
map.put(key, 0);
}
map.put(key, map.get(key) + 1);
}
// ...
}
В принципе, это все. Ваша работа начинается с чего-то типа:
Map<String,Integer> map = new HashMap<String,Integer>();
for (File classFile : my library) {
InputStream input = new FileInputStream(classFile);
new ClassReader(input).accept(new MyClassVisitor(map), 0);
input.close();
}
for (Map.Entry<String,Integer> entry : map.entrySet()) {
if (entry.getValue() == 0) {
System.out.println("Unused method: " + entry.getKey());
}
}
Наслаждайтесь!
Похоже, вы хотите что-то вроде Cobertura или Emma, которое контролирует ваше приложение, а не полагается на набор тестовых покрытий? –