Вы можете написать свою собственную утилиту для этого (через несколько часов после прочтения), используя библиотеку анализа байт-кода ASM (http://asm.ow2.org).). Вам потребуется реализовать ClassVisitor и MethodVisitor. Вы будете использовать ClassReader проанализировать файлы классов в вашей библиотеке.
- Ваш метод ClassVisitor visitMethod (..) будет вызываться для каждого объявленного метода.
- Ваш MethodVisitor's visitMethodInsn (..) будет вызываться для каждого вызываемого метода.
Ведение карты для подсчета. Ключи представляют методы (см. Ниже). Вот некоторый код:
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());
}
}
Наслаждайтесь!