Recientemente comencé a usar la herramienta de análisis estático de findbugs en una compilación java que estaba haciendo. El primer informe regresó con un montón de advertencias de alta prioridad. Siendo el tipo de persona obsesiva, estaba listo para ir a todos. Sin embargo, debo estar perdiendo algo. Recibo la mayoría de las advertencias cuando comparo cosas. Como el siguiente código:Findbugs y comparando
public void setSpacesPerLevel(int value)
{
if(value >= 0)
{
spacesPerLevel = value;
}
else
{
spacesPerLevel = 0;
}
}
produce una advertencia de prioridad alta en la instrucción if que se lee.
del archivo: Indenter.java, línea: 60, Tipo: BIT_AND_ZZ, Prioridad: alta, Categoría: CORRECCIÓN Compruebe para ver si ((...) & 0) == 0 en muestra. Indenter.setSpacesPerLevel (int)
Estoy comparando un int con un int, parece una cosa en común. Obtengo bastantes de ese tipo de error con comparaciones simples similares.
Tengo muchas otras advertencias de alta prioridad en lo que parecen ser simples bloques de código. ¿Me estoy perdiendo de algo? Me doy cuenta de que el análisis estático puede producir falsos positivos, pero los errores que estoy viendo parecen demasiado triviales como para ser un falso positivo.
Este me tiene a mí también rascándome la cabeza.
for(int spaces = 0;spaces < spacesPerLevel;spaces++)
{
result = result.concat(" ");
}
que da la advertencia findbugs siguientes:
File: Indenter.java, Line: 160, Type: IL_INFINITE_LOOP, Priority: High, Category: CORRECTNESS
There is an apparent infinite loop in sample.Indenter.indent()
This loop doesn't seem to have a way to terminate (other than by perhaps throwing an exception).
¿Alguna idea?
Así que básicamente tengo un puñado de archivos y 50-60 advertencias de alta prioridad similares a las de arriba. Estoy usando findbugs 1.3.9 y decir que es a partir de los findbugs tarea ant
ACTUALIZACIÓN: He esta acumulación de ser ejecutado por un servidor de Hudson y tenía el código que está siendo instrumentado por el trébol de cobertura de código. Cuando lo apagué, todas mis advertencias de alta prioridad desaparecieron. Eso tiene sentido ahora. Gracias por la respuesta.
Esto podría ser un bucle infinito si está cambiando spacesPerLevel dentro del bucle, por ejemplo. spacesPerLevel = espacios + 2; o disminuyendo espacios. – Anton
Acabo de actualizar la pregunta para contener más los fragmentos de código –
¿Está compilando con información de depuración? – Anton