Entre Java 5 y Java 6, las reglas con respecto a las anotaciones @Override
para métodos que se originan en interfaces (a diferencia de las superclases) se cambiaron, antes de que no se permitieran, pero después de que lo fueran. Sin embargo, no son requerido por javac.¿Cómo puedo detectar estáticamente las anotaciones @Override que faltan?
Algunos IDEs, como Eclipse, pueden generar errores o advertencias sobre las omisiones que faltan. Estoy buscando cualquier tipo de herramienta de análisis estático que pueda detectar las anulaciones faltantes, así puedo informar/bloquearlas programáticamente.
No parece que ninguno de los grandes que conozco como findbugs, et al pueda hacerlo, probablemente porque @Override
solo tiene nivel de retención de fuente, por lo que no está presente en los archivos .class en los que estas herramientas operar, y las herramientas de nivel de origen como checkstyle no comprenden la jerarquía de clase completa.
Cuando invoco checkstyle no hay lugar para un classpath. Eso está bien para las comprobaciones de estilo de cheque, pero ¿cómo comprobaría checkstyle mi 'void doStuff()' anula el método 'void doStuff()' sin tener tus clases (ya sea en el origen o classpath). – emory
Sí exactamente, por lo que incluso aparte del problema de retención en tiempo de ejecución, checkstyle solo está haciendo comprobaciones "locales" en un archivo y es probable que no pueda detectarlo. – BeeOnRope
No entiendo por qué la retención es un problema. El corrector necesitará acceder a su código fuente y a los archivos de clase de sus dependencias. No necesitará acceder al código fuente de sus dependencias. (Si encontró un '@ Override' faltante en el código fuente que no tiene privilegios de escritura, ¿qué haría?) – emory