Usted puede escribir su propia utilidad para que (dentro de una hora después de leer esto) utilizando la biblioteca de análisis de código de bytes ASM (http://asm.ow2.org). Tendrá que implementar un ClassVisitor y un MethodVisitor. Utilizará un ClassReader para analizar los archivos de clase en su biblioteca.
- Se llamará a su ClassVisitor's visitMethod (..) para cada método declarado.
- Se llamará a your MethodVisitor's visitMethodInsn (..) para cada método invocado.
Mantenga un Mapa para hacer el recuento. Las teclas representan los métodos (ver abajo). Aquí hay un código:
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);
}
// ...
}
Básicamente eso es todo. Estás comenzando el programa con algo como esto:
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());
}
}
¡Disfrútalo!
¿Parece que quieres algo como Cobertura o Emma que supervisa tu aplicación en ejecución, en lugar de depender de un conjunto de cobertura de prueba unitaria? –