Estoy usando un generador de analizador que crea un código algo feo. Como resultado, mi proyecto Eclipse tiene varias docenas de advertencias que emanan de archivos fuente generados. Sé que puedo usar la @SuppressWarning
anotación para suprimir advertencias particulares en elementos particulares, pero cualquier anotación que agregue a mano se perderá cuando el generador de analizador se ejecute nuevamente. ¿Hay alguna forma de configurar Eclipse para suprimir las advertencias para un archivo o directorio en particular?
java
eclipse
suppress-warnings
generated-code
Chris Conway
fuente
fuente
Respuestas:
A partir de la versión 3.8 M6, Eclipse (para ser exactos: el JDT) tiene una funcionalidad incorporada para esto. Se puede configurar a través de la ruta de compilación de un proyecto: Propiedades del proyecto> Ruta de compilación Java> Compilador> Fuente
Anunciado aquí: Eclipse 3.8 y 4.2 M6 - Nuevo y notable , llamado Ignorar selectivamente los errores / advertencias de las carpetas de origen . De ahí también es de donde es la captura de pantalla. Esta es la nueva característica desarrollada en el error 220928 previamente vinculado .
fuente
Hay un ticket para esto, Bug 220928 , que desde entonces se ha completado para Eclipse 3.8. Consulte esta respuesta para obtener más detalles.
Si está atascado con Eclipse 3.7 o inferior: El usuario "Marc" que comentó sobre ese ticket creó (o al menos se vincula a) un complemento llamado 'warningcleaner' en el comentario 35 . Lo estoy usando con mucho éxito mientras espero que esta función se integre en Eclipse.
Es realmente bastante simple:
fuente
Resolví esto usando el complemento maven regexp replace; no resuelve la causa, pero cura el dolor:
Tenga en cuenta que no logré que la notación ** funcione, por lo que es posible que deba especificar la ruta exactamente.
Consulte el comentario a continuación para ver una mejora sobre cómo no generar @SupressWarnings duplicados
fuente
^(@SuppressWarnings\(.*?\)\s+)?public class
. Al incluir la anotación en el patrón, no se duplica si ya está allí.${basedir}/
antestarget
en la<include>
etiqueta. Se siente un poco raro, pero como solo funciona en archivos generados, ¡lo tomaré!Creo que lo mejor que puede hacer es habilitar la configuración específica del proyecto para mostrar advertencias.
En la parte superior del formulario hay un enlace para configurar los ajustes específicos del proyecto.
fuente
El usuario @Jorn insinuó el código Ant para hacer esto. Esto es lo que tengo
Tenga en cuenta que <replace> de Ant reemplaza el texto, no la expresión regular, por lo que no puede usar el metacarácter ^ en el token para que coincida con el comienzo de la línea como lo hace el complemento maven regexp replace.
Estoy haciendo esto al mismo tiempo que ejecuto Antlr desde maven-antrun-plugin en mi pom Maven, porque el plugin maven ANTLR no funcionó bien con el plugin Cobertura maven.
(Me doy cuenta de que esta no es una respuesta a la pregunta original, pero no puedo formatear el código Ant en un comentario / respuesta a otra respuesta, solo en una respuesta)
fuente
No creo que Eclipse proporcione inherentemente una forma de hacer esto a nivel de directorio (pero no estoy seguro).
Puede hacer que los archivos generados vayan a un proyecto Java separado y controle las advertencias para ese proyecto específico.
En general, prefiero colocar el código generado automáticamente en un proyecto separado de todos modos.
fuente
Solo puede suprimir las advertencias a nivel de proyecto. Sin embargo, puede configurar la pestaña de problemas para suprimir las advertencias de archivos o paquetes. Vaya al menú Configurar contenido y trabaje con el alcance "En conjunto de trabajo:".
fuente
Estoy haciendo esto con algunas gramáticas ANTLR, que generan un analizador de Java usando Ant. El script de compilación de Ant agrega el
@SuppressWarnings("all")
a un archivo Java y@Override
a algunos métodos en otro. Puedo buscar cómo se hace exactamente, si está interesado.fuente
Este pequeño script de Python "parchea" los
.classpath
archivos generados por M2E y agrega la etiqueta XML requerida a todas las carpetas de origen que comienzan contarget/generated-sources
. Puede ejecutarlo desde la carpeta raíz de su proyecto. Obviamente, debe volver a ejecutarlo cuando la información del proyecto Eclipse se vuelva a generar desde M2E. Y todo bajo tu propio riesgo, obviamente ;-)fuente
En el caso de ANTLR 2, es posible suprimir las advertencias en el código generado agregando
@SuppressWarnings
antes de la declaración de clase en el archivo de gramática, por ejemplofuente
Esto se puede hacer excluyendo ciertos directorios de la ruta de compilación (el siguiente ejemplo se da usando Eclipse 3.5)
[1] Abrir la ruta de compilación de Java
[2] Agregar directorios para excluir
fuente
Ha pasado un tiempo desde que lancé el complemento de limpieza de advertencias, y ahora que estoy usando Eclipse 3.8, ya no lo necesito. Sin embargo, para aquellos que todavía necesitan este complemento, lo he publicado en github con el sitio de actualización en bintray. Si todavía usa Eclipse 3.7 o antes, esto podría ser útil. Consulte este sitio para obtener detalles de instalación.
fuente
Si el proyecto eclipse se genera desde gradle usando el
eclipse
comando del complemento Eclipse, laSelectively ignore errors/warnings from source folders
opción se puede configurar agregando esto en el nivel superior de subuild.gradle
archivo:Esto supone que las fuentes generadas están en la
build/generated/parser
carpeta.fuente