Ich verwende einen Parser-Generator, der etwas hässlichen Code erstellt. Infolgedessen enthält mein Eclipse-Projekt mehrere Dutzend Warnungen, die von generierten Quelldateien ausgehen. Ich weiß, dass ich die @SuppressWarning
Annotation verwenden kann, um bestimmte Warnungen in bestimmten Elementen zu unterdrücken, aber alle Annotationen, die ich von Hand hinzufüge, gehen verloren, wenn der Parser-Generator erneut ausgeführt wird. Gibt es eine Möglichkeit, Eclipse so zu konfigurieren, dass Warnungen für eine bestimmte Datei oder ein bestimmtes Verzeichnis unterdrückt werden?
java
eclipse
suppress-warnings
generated-code
Chris Conway
quelle
quelle
Antworten:
Ab Version 3.8 M6 verfügt Eclipse (um genau zu sein: das JDT) über integrierte Funktionen. Es kann über den Erstellungspfad eines Projekts konfiguriert werden: Projekteigenschaften> Java -Erstellungspfad > Compiler> Quelle
Hier angekündigt: Eclipse 3.8 und 4.2 M6 - Neu und bemerkenswert , genannt Fehler / Warnungen aus Quellordnern selektiv ignorieren . Dort kommt auch der Screenshot her. Dies ist die neue Funktion, die für den zuvor verknüpften Bug 220928 entwickelt wurde .
quelle
Hierfür gibt es ein Ticket, Bug 220928 , das inzwischen für Eclipse 3.8 abgeschlossen wurde. Bitte lesen Sie diese Antwort für Details.
Wenn Sie mit Eclipse 3.7 oder niedriger nicht weiterkommen: Der Benutzer "Marc", der dieses Ticket kommentiert, hat in Kommentar 35 ein Plugin namens "warningcleaner" erstellt (oder zumindest darauf verlinkt) . Ich benutze das mit viel Erfolg, während ich darauf warte, dass diese Funktion in Eclipse integriert wird.
Es ist wirklich ganz einfach:
quelle
Ich habe dies mit dem Maven Regexp Replace Plugin gelöst - es löst nicht die Ursache, sondern heilt den Schmerz:
Beachten Sie, dass ich es nicht geschafft habe, die ** -Notation zum Laufen zu bringen, sodass Sie möglicherweise den Pfad genau angeben müssen.
Im Kommentar unten finden Sie eine Verbesserung, wie Sie keine doppelten @SupressWarnings generieren können
quelle
^(@SuppressWarnings\(.*?\)\s+)?public class
. Durch das Einfügen der Anmerkung in das Muster wird sie nicht dupliziert, wenn sie bereits vorhanden ist.${basedir}/
vorhertarget
im<include>
Tag hinzufügen . Fühlt sich ein bisschen nervös an, aber da es nur bei generierten Dateien funktioniert, nehme ich es!Ich denke, das Beste, was Sie tun können, ist, projektspezifische Einstellungen für die Anzeige von Warnungen zu aktivieren.
Oben im Formular befindet sich ein Link zum Konfigurieren projektspezifischer Einstellungen.
quelle
Benutzer @Jorn deutete auf Ant-Code, um dies zu tun. Hier ist was ich habe
Beachten Sie, dass Ants <replace> die Textersetzung und nicht die Ersetzung regulärer Ausdrücke durchführt. Daher kann das Metazeichen im Token nicht verwendet werden, um mit dem Zeilenanfang übereinzustimmen, wie dies das Maven-Regexp-Ersetzungs-Plugin tut.
Ich mache dies zur gleichen Zeit, in der ich Antlr über das Maven-Antrun-Plugin in meinem Maven-Pom ausführe, da das ANTLR-Maven-Plugin mit dem Cobertura-Maven-Plugin nicht gut funktioniert hat.
(Mir ist klar, dass dies keine Antwort auf die ursprüngliche Frage ist, aber ich kann Ant-Code nicht in einem Kommentar / einer Antwort auf eine andere Antwort formatieren, sondern nur in einer Antwort.)
quelle
Ich glaube nicht, dass Eclipse von Natur aus eine Möglichkeit bietet, dies auf Verzeichnisebene zu tun (aber ich bin mir nicht sicher).
Sie können die generierten Dateien in ein separates Java-Projekt verschieben und Warnungen für dieses bestimmte Projekt steuern.
Im Allgemeinen ziehe ich es sowieso vor, automatisch generierten Code in einem separaten Projekt zu platzieren.
quelle
Sie können Warnungen nur auf Projektebene unterdrücken. Sie können die Registerkarte "Probleme" jedoch so konfigurieren, dass Warnungen von Dateien oder Paketen unterdrückt werden. Gehen Sie in das Menü "Inhalt konfigurieren" und arbeiten Sie mit dem Bereich "On Working Set:".
quelle
Ich mache das mit ein paar ANTLR-Grammatiken, die mit Ant einen Java-Parser generieren. Das Ant-Build-Skript fügt das
@SuppressWarnings("all")
einer Java-Datei und@Override
einigen Methoden in einer anderen hinzu. Ich kann nachschlagen, wie es genau gemacht wird, wenn Sie interessiert sind.quelle
Dieses kleine Python-Skript "patcht" die von M2E generierten
.classpath
Dateien und fügt allen Quellordnern, beginnend mit, das erforderliche XML-Tag hinzutarget/generated-sources
. Sie können es einfach aus dem Stammordner Ihres Projekts ausführen. Natürlich müssen Sie es erneut ausführen, wenn die Eclipse-Projektinformationen aus M2E neu generiert werden. Und das alles natürlich auf eigenes Risiko ;-)quelle
Im Fall von ANTLR 2 ist es möglich, Warnungen im generierten Code durch Anhängen
@SuppressWarnings
vor der Klassendeklaration in der Grammatikdatei zu unterdrücken , zquelle
Dies kann erreicht werden, indem bestimmte Verzeichnisse vom Erstellungspfad ausgeschlossen werden (das folgende Beispiel wird mit Eclipse 3.5 gegeben).
[1] Rufen Sie den Java-Erstellungspfad auf
[2] Fügen Sie Verzeichnisse zum Ausschließen hinzu
quelle
Es ist schon eine Weile her, dass ich das Plugin für Warnreiniger veröffentlicht habe, und jetzt, da ich Eclipse 3.8 verwende, brauche ich es nicht mehr. Für diejenigen, die dieses Plugin noch benötigen, habe ich es auf Github mit der Update-Site auf bintray veröffentlicht. Wenn Sie Eclipse 3.7 oder früher noch verwenden, kann dies hilfreich sein. Überprüfen Sie diese Site auf Installationsdetails.
quelle
Wenn das Eclipse-Projekt mit dem
eclipse
Befehl des Eclipse-Plugins aus gradle generiert wird,Selectively ignore errors/warnings from source folders
kann die Option festgelegt werden, indem Sie dies auf der obersten Ebene Ihrerbuild.gradle
Datei hinzufügen :Dies setzt voraus, dass sich die generierten Quellen im
build/generated/parser
Ordner befinden.quelle