2011-10-13 22 views
5

Aquí está el fragmento de código:Eclipse: contradiciendo advertencias

class MyClass { 
    private native void foo(); 
} 

Por lo anterior, Eclipse (es decir, 3.7.0) da una advertencia

El método foo() de la MyClass tipo es nunca utilizado localmente

bien, pero cuando intento suprimir la advertencia:

class MyClass { 
    @SuppressWarnings("unused") 
    private native void foo(); 
} 

Se queja

@SuppressWarnings innecesarias ("sin usar")

Entonces, ¿hay alguna manera de hacer que deje de quejarse?

actualización

Lo siento por la información incompleta - esta advertencia sólo se muestra en un proyecto AspectJ. Una vez que creo un proyecto simple de Java y pongo mi clase en él, todo funciona bien.

Por lo que tengo entendido, AspectJ usa su propio compilador, por lo que esta advertencia debe ser generada por él. Estoy usando herramientas de desarrollo AspectJ plug-in:

Version: 2.1.3.e37x-20110628-1900 
AspectJ version: 1.6.12.20110613132200 
+0

Es curioso, no tengo la segunda advertencia (en Eclipse 3.5) – Shlublu

+0

... y no veo la primera advertencia: "El método foo() del tipo MyClass nunca se usa localmente". ¡Extraño! –

+0

puede probar 'Proyecto> Limpiar' y luego hacer una reconstrucción. Tal vez la primera advertencia es un marcador obsoleto. –

Respuesta

1

Dentro de un proyecto Java, esto produce ninguna advertencia:

class MyClass { 
    private native void foo(); 
} 

Esto, sin embargo, produce una advertencia Unnecessary @SuppressWarnings("unused"):

class MyClass { 
    @SuppressWarnings("unused") 
    private native void foo(); 
} 

Dentro de un proyecto AspectJ, el primer ejemplo produce una advertencia The method foo() from the type MyClass is never used locally y el segundo ejemplo produce la misma advertencia que en un proyecto Java. Esto es probablemente un error de AspectJ. Yo recomendaría plantear un problema en el bugJilla AspectJ.

https://bugs.eclipse.org/bugs/

El compilador AspectJ es un tenedor del compilador de Eclipse JDT 3.3. Por lo tanto, es probable que este error haya sido originalmente en Eclipse 3.3. Ahora que Java 7 está disponible, AspectJ probablemente migrará a Eclipse 3.7 o 3.8 y obtendrá la solución del compilador JDT. Pero vale la pena plantear un error de todos modos.

+0

Sí, parece un error de Eclipse/AspectJ, así que he archivado un problema: https://bugs.eclipse.org/bugs/show_bug.cgi?id=213755. – Andy

0

he intentado y no me sale el "innecesario ..." advertencia. ¿Estás seguro de que la advertencia es emitida por el compilador de Java y no por otra herramienta como checkstyle o findbugs?

De todos modos, hay algunas situaciones en las que un método privado no utilizado tiene sentido.

+0

Lamentablemente, de hecho es un caso en el que no hay forma de evitar declarar un método privado no utilizado. – Andy

0

Me funciona. Estoy ejecutando Eclipse Indigo como tú.

2

La lista de @SuppressWarnings es específica del compilador. En Eclipse,

sin usar es macro para unusedArgument, unusedImport, unusedLabel, unusedLocal, unusedPrivate y unusedThrown

La lista completa está aquí: the list of valid @SuppressWarnings supported in Eclipse

+0

Para ser más precisos, @SuppressWarnings no es específico de Eclipse. Sin embargo, la lista de advertencias suprimidas por esa anotación es específica del compilador. –

Cuestiones relacionadas