Pregunta

Estoy tratando de escribir reglas para detectar algunos errores en programas java multiproceso anotados . Como ejemplo de juguete, me gustaría detectar si algún método anotado con @ThreadSafe llama a un método sin esa anotación, sin sincronización. Estoy buscando una herramienta que me permita escribir tal prueba.

He analizado los analizadores de origen, como CheckStyle y PMD, y realmente no tienen capacidades de análisis de clase cruzada. Los analizadores de código de bytes, como FindBugs y JLint, parecen bastante difíciles de ampliar.

Me conformaría con una solución para algo aún más simple, pero que plantea la misma dificultad: escribir una regla personalizada que verifique si cada método reemplazado está anotado con @Override.

¿Fue útil?

Solución

¿Has probado FindBugs ? En realidad, admite un conjunto de anotaciones para la seguridad del hilo (igual que los utilizados en Concurrencia de Java en la práctica ). Además, puede escribir sus propias reglas personalizadas. No estoy seguro de si puedes hacer análisis de clase cruzada, pero creo que sí.

Peter Ventjeer tiene un herramienta de verificación de concurrencia (que usa ASM) para detectar cosas como esta. No estoy seguro de si lo ha lanzado públicamente, pero podría ayudarte.

Y creo que Las herramientas de análisis estático / dinámico de Coverity para la seguridad de subprocesos hacen una comprobación como esta.

Otros consejos

Puede hacer análisis de clase cruzada en PMD (aunque nunca he lo usé para este propósito específico). Creo que es posible usar este patrón de visitante que documentan, aunque te dejaré los detalles.

Una herramienta simple para verificar anotaciones es apt ( http: //java.sun.com/j2se/1.5.0/docs/guide/apt/ también parte de la API de Java 6 en javax.annotation.processing) sin embargo, esto solo tiene información de tipo (es decir, no pude encontrar una forma rápida de llegar a la jerarquía de herencia utilizando la API javax.lang.model, sin embargo, si puede cargar la clase, puede obtener esa información utilizando la reflexión).

Pruebe javap + expresiones regulares (por ejemplo, Perl)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top