java - spotbugs - Findbugs da "desreferencia de puntero nulo de System.out", ¿por qué?
findbugs eclipse (3)
Estoy utilizando Java 1.7, Eclipse 3.7 con el complemento FindBugs del mercado. El ejemplo es tan bonito como el cielo:
class Application
{
public static void main( String[] args )
{
System.out.println( "Bla" );
}
}
Este mensaje no estuvo presente en el pasado y la implementación interna siempre estuvo en el sistema:
public final static PrintStream out = null;
Entonces, Findbugs tiene razón, pero, ¿cambió algo el mensaje ahora?
Esto está marcado como un bug en Findbugs 1.3.9. Se ha corregido para Findbugs 2.0, y podría ser portada hacia atrás.
Esto solo ocurre con openjdk, no con sun jdk.
El problema es un parche publicado en 2010 para permitir tiempos del sistema más antiguos que 1970.
http://mail.openjdk.java.net/pipermail/distro-pkg-dev/2010-July/009869.html
Porque en Java 6 se veía así:
public final static PrintStream out = nullPrintStream();
/**
* The following two methods exist because in, out, and err must be
* initialized to null. The compiler, however, cannot be permitted to
* inline access to them, since they are later set to more sensible values
* by initializeSystemClass().
*/
private static PrintStream nullPrintStream() throws NullPointerException {
if (currentTimeMillis() > 0) {
return null;
}
throw new NullPointerException();
}
así que supongo que lo simplificaron en java 7 y agregaron algunas excepciones al compilador.
JVM administra el código nativo, dentro y fuera de él, por lo que este mensaje de error que da no tiene sentido.