113 votes

Comment supprimer les avertissements Java pour des répertoires ou des fichiers spécifiques, tels que le code généré ?

J'utilise un générateur de parser qui crée un code quelque peu laid. En conséquence, mon projet Eclipse comporte plusieurs dizaines d'avertissements émanant des fichiers sources générés. Je sais que je peux utiliser la fonction @SuppressWarning pour supprimer des avertissements particuliers dans certains éléments, mais toutes les annotations que j'ajoute à la main seront perdues lorsque le générateur d'analyse syntaxique s'exécutera à nouveau. Existe-t-il un moyen de configurer Eclipse pour supprimer les avertissements pour un fichier ou un répertoire particulier ?

0 votes

96voto

hheimbuerger Points 3156

À partir de la version 3.8 M6, Eclipse (pour être exact : le JDT) a une fonctionnalité intégrée pour cela. Elle est configurable par le biais du chemin de construction d'un projet : Propriétés du projet > Chemin de construction Java > Compilateur > Source

enter image description here

Annoncé ici : Eclipse 3.8 et 4.2 M6 - Nouveautés et points à noter appelé Ignorer de manière sélective les erreurs/avertissements des dossiers sources . C'est également de là que provient la capture d'écran. Il s'agit de la nouvelle fonctionnalité développée sur le site précédemment cité. Bogue 220928 .

2 votes

Je n'ai pas trouvé comment faire basculer "Non" -> "Oui" ... c'est le bouton "Toggle" (et non pas éditer ou autre chose) ;-)

0 votes

@Betlista : Il suffit de double-cliquer dessus. Ou cliquez sur le bouton "Toggle" à droite.

1 votes

@hheimbuerger : cette solution fonctionne uniquement pour les dossiers sources. Mais que se passe-t-il si j'ai juste un dossier dans le projet contenant des fichiers XML malformés ? Je déteste voir des avertissements à leur sujet :(

20voto

hheimbuerger Points 3156

Il y a un ticket pour cela, Bogue 220928 qui a depuis été complété pour Eclipse 3.8. Veuillez consulter cette réponse pour les détails.

Si vous êtes coincé avec Eclipse 3.7 ou moins : L'utilisateur "Marc" qui commente ce ticket a créé (ou au moins fait un lien vers) un plugin appelé "warningcleaner" dans le dossier de l'utilisateur. commentaire 35 . Je l'utilise avec beaucoup de succès en attendant que cette fonctionnalité soit intégrée dans Eclipse.

C'est vraiment très simple :

  1. Installer le plugin.
  2. Cliquez avec le bouton droit de la souris sur le projet et sélectionnez "Add/remove generated code nature".
  3. Ouvrez les paramètres du projet (cliquez avec le bouton droit de la souris et sélectionnez "propriétés").
  4. Ouvrez l'onglet "Warning Cleaner".
  5. Sélectionnez les dossiers sources dont vous voulez ignorer les avertissements.

Warning Cleaner screenshot

0 votes

Malheureusement le lien vers le plugin donne un 403 maintenant

0 votes

Merde, ça craint. Je l'ai toujours, mais je préfère ne pas le télécharger sans la permission explicite de l'auteur, d'autant plus qu'il ne spécifie aucune licence. Pouvez-vous essayer de retrouver l'auteur original et lui demander de le retélécharger ? Vous pourriez poster sur le bug par exemple, il est toujours listé comme CC dessus.

1 votes

Il semble que des progrès soient toujours en cours (à la lecture des commentaires sur le bogue) vers une implémentation de base. Veillez à mettre à jour la question/réponse pour utiliser les numéros de version spécifiques si la fonctionnalité est implémentée. Sinon, les futurs utilisateurs d'Eclipse pourraient être désorientés.

18voto

Knubo Points 3020

J'ai résolu ce problème en utilisant le plugin maven regexp replace - cela ne résout pas la cause, mais guérit la douleur :

<plugin>
  <groupId>com.google.code.maven-replacer-plugin</groupId>
  <artifactId>maven-replacer-plugin</artifactId>
  <version>1.3.2</version>
  <executions>
<execution>
  <phase>prepare-package</phase>
  <goals>
    <goal>replace</goal>
  </goals>
</execution>
  </executions>
  <configuration>
<includes>
  <include>target/generated-sources/antlr/**/*.java</include>
</includes>

<regex>true</regex>
<regexFlags>
  <regexFlag>MULTILINE</regexFlag>
</regexFlags>

<replacements>
  <replacement>
    <token>^public class</token>
    <value>@SuppressWarnings("all") public class</value>
  </replacement>
</replacements>
  </configuration>
</plugin>

Notez que je n'ai pas réussi à faire fonctionner la notation **, donc vous devrez peut-être spécifier le chemin exactement.

Voir le commentaire ci-dessous pour une amélioration sur la façon de ne pas générer des @SupressWarnings en double.

0 votes

Comme Maven n'a pas été mentionné, cela ne répond pas nécessairement à la question. Mais cela fonctionne très bien dans mon cas, puisque j'utilise Maven ;-)

0 votes

La même chose peut être faite si vous utilisez Ant au lieu de Maven, voir ma réponse.

1 votes

Il semble qu'ANTLR 3.4 ajoute l'annotation par lui-même, mais j'aime la généralité de la solution (pas seulement ANTLR génère du code). Pour l'appliquer quand même à toutes les sources générées, j'utilise ce pattern : ^(@SuppressWarnings\(.*?\)\s+)?public class . En incluant l'annotation dans le modèle, elle n'est pas dupliquée si elle est déjà présente.

7voto

jjnguy Points 62123

Je pense que le mieux que vous puissiez faire est d'activer les paramètres spécifiques au projet pour l'affichage des avertissements.

Fenêtre -> Préférences -> Java -> Compilateur -> Erreurs/Avertissements

En haut du formulaire se trouve un lien permettant de configurer les paramètres spécifiques du projet.

4voto

djb Points 1809

L'utilisateur @Jorn a suggéré un code Ant pour faire cela. Voici ce que j'ai

<echo>Adding @SuppressWarnings("all") to ANTLR generated parser/lexer *.java</echo>
<echo> in ${project.build.directory}/generated-sources/antlr/</echo>
<replace dir="${project.build.directory}/generated-sources/antlr/" 
         summary="true" 
         includes="**/*.java" 
         token="public class" 
         value='@SuppressWarnings("all") public class' />

Notez que le <replace> de Ant fait du remplacement de texte, pas du remplacement d'expression régulière, donc il ne peut pas utiliser le méta-caractère ^ dans le jeton pour correspondre au début de la ligne comme le fait le plugin maven regexp replace.

Je fais cela en même temps que je lance Antlr à partir de maven-antrun-plugin dans mon pom Maven, parce que le plugin maven ANTLR n'a pas bien joué avec le plugin maven Cobertura.

(Je réalise que ce n'est pas une réponse à la question originale, mais je ne peux pas formater le code Ant dans un commentaire/réponse à une autre réponse, seulement dans une réponse)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X