J'utilise un générateur d'analyseur qui crée du code quelque peu moche. Par conséquent, mon projet Eclipse comporte plusieurs dizaines d'avertissements émanant de fichiers source générés. Je sais que je peux utiliser le @SuppressWarning
annotation pour supprimer des avertissements particuliers dans des éléments particuliers, mais toutes les annotations que j'ajoute à la main seront perdues lorsque le générateur d'analyseur s'exécutera à nouveau. Existe-t-il un moyen de configurer Eclipse pour supprimer les avertissements pour un fichier ou un répertoire particulier?
À partir de la version 3.8 M6, Eclipse (pour être exact: le JDT) a une fonctionnalité intégrée pour cela. Il est configurable via le chemin de construction d'un projet: Propriétés du projet> Java Chemin de construction> Compilateur> Source
Annoncé ici: Eclipse 3.8 et 4.2 M6 - Nouveau et remarquable , appelé Ignorer sélectivement les erreurs/avertissements des dossiers source . C'est aussi de là que vient la capture d'écran. Il s'agit de la nouvelle fonctionnalité développée sur le lien précédent Bogue 220928 .
Il existe un ticket pour cela, Bogue 220928 , qui a depuis été terminé pour Eclipse 3.8. Veuillez voir cette réponse pour plus de détails.
Si vous êtes coincé avec Eclipse 3.7 ou une version antérieure: L'utilisateur "Marc" commentant ce ticket a créé (ou au moins un lien vers) un plugin appelé "warningcleaner" dans commentaire 35 . J'utilise cela avec beaucoup de succès en attendant que cette fonctionnalité soit intégrée dans Eclipse.
C'est vraiment assez simple:
J'ai résolu cela en utilisant le plugin de remplacement maven regexp - il 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 **, vous devrez donc peut-être spécifier exactement le chemin.
Voir le commentaire ci-dessous pour une amélioration sur la façon de ne pas générer de @SupressWarnings en double
Je pense que le mieux que vous puissiez faire est d'activer les paramètres spécifiques au projet pour afficher les avertissements.
Fenêtre -> Préférences -> Java -> Compilateur -> Erreurs/Avertissements
En haut du formulaire se trouve un lien pour configurer les paramètres spécifiques au projet.
L'utilisateur @Jorn a fait allusion au code Ant pour ce faire. 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 <replace> de Ant fait le remplacement de texte, pas le remplacement d'expressions régulières, donc il ne peut pas utiliser le méta-caractère ^ dans le jeton pour faire correspondre le début de la ligne comme le fait le plugin de remplacement maven regexp.
Je fais cela en même temps que j'exécute Antlr à partir du plug-in maven-antrun dans mon pom Maven, car le plug-in ANTLR maven ne fonctionnait pas bien avec le plug-in Cobertura maven.
(Je me rends compte que ce n'est pas une réponse à la question d'origine, mais je ne peux pas formater le code Ant dans un commentaire/réponse à une autre réponse, uniquement dans une réponse)
Je ne pense pas qu'Eclipse offre intrinsèquement un moyen de le faire au niveau du répertoire (mais je ne suis pas sûr).
Vous pouvez faire en sorte que les fichiers générés soient placés dans un projet Java Java distinct) et contrôler les avertissements pour ce projet spécifique.
Je préfère généralement placer le code généré automatiquement dans un projet distinct de toute façon.
Vous ne pouvez supprimer les avertissements qu'au niveau du projet. Cependant, vous pouvez configurer votre onglet Problèmes pour supprimer les avertissements des fichiers ou des packages. Allez dans le menu Configurer le contenu et utilisez la portée "Sur le jeu de travail:".
Ce petit script python "patche" les fichiers générés par M2E .classpath
Et ajoute la balise XML requise à tous les dossiers source commençant par target/generated-sources
. Vous pouvez simplement exécuter à partir du dossier racine de votre projet. Évidemment, vous devez le relancer lorsque les informations du projet Eclipse sont régénérées à partir de M2E. Et à vos risques et périls, évidemment ;-)
#!/usr/bin/env python
from xml.dom.minidom import parse
import glob
import os
print('Reading .classpath files...')
for root, dirs, files in os.walk('.'):
for name in files:
if (name == '.classpath'):
classpathFile = os.path.join(root, name)
print('Patching file:' + classpathFile)
classpathDOM = parse(classpathFile)
classPathEntries = classpathDOM.getElementsByTagName('classpathentry')
for classPathEntry in classPathEntries:
if classPathEntry.attributes["path"].value.startswith('target/generated-sources'):
# ensure that the <attributes> tag exists
attributesNode = None;
for attributes in classPathEntry.childNodes:
if (attributes.nodeName == 'attributes'):
attributesNode = attributes
if (attributesNode == None):
attributesNode = classpathDOM.createElement('attributes')
classPathEntry.appendChild(attributesNode)
# search if the 'ignore_optional_problems' entry exists
hasBeenSet = 0
for node in attributesNode.childNodes:
if (node.nodeName == 'attribute' and node.getAttribute('name') == 'ignore_optional_problems'):
# it exists, make sure its value is true
node.setAttribute('value','true')
#print(node.getAttribute('name'))
hasBeenSet = 1
if (not(hasBeenSet)):
# it does not exist, add it
x = classpathDOM.createElement("attribute")
x.setAttribute('name','ignore_optional_problems')
x.setAttribute('value','true')
attributesNode.appendChild(x)
try:
f = open(classpathFile, "w")
classpathDOM.writexml(f)
print('Writing file:' + classpathFile)
finally:
f.close()
print('Done.')
Je fais cela à quelques grammaires ANTLR, qui génèrent un Java utilisant Ant. Le script de construction Ant ajoute la @SuppressWarnings("all")
à une Java fichier et @Override
à quelques méthodes dans une autre. Je peux voir comment cela se fait exactement, si cela vous intéresse.
Cela peut être fait en excluant certains répertoires du chemin de génération (l'exemple suivant est donné à l'aide d'Eclipse 3.5)
[1] Affichez le Java Chemin de génération
[2] Ajouter des répertoires à exclure
Cela fait un moment que je n'ai pas sorti le plugin de nettoyage d'avertissement, et maintenant que j'utilise Eclipse 3.8, je n'en ai plus besoin. Cependant, pour ceux qui ont encore besoin de ce plugin, je l'ai publié sur github avec le site de mise à jour sur bintray. Si vous utilisez toujours Eclipse 3.7 ou une version antérieure, cela peut être utile. Vérifiez ce site pour les détails d'installation.
Dans le cas d'ANTLR 2, il est possible de supprimer les avertissements dans le code généré par appenidng @SuppressWarnings
avant la déclaration de classe dans le fichier de grammaire, par exemple.
{@SuppressWarnings("all")} class MyBaseParser extends Parser;