Compiler-Warnungen

Oneixee5

Top Contributor
Mit @SuppressWarnings kann man in bestimmten Situationen Compiler-Warnungen unterdrücken. Gibt es auch eine Variante der Annotation, bei welcher man einen Grund angeben kann. Konkret möchte ich, dass die Verwendung von @SuppressWarnings("unused") begründet wird.
 

Robert Zenz

Top Contributor
Keine die mir bekannt ist. Du kannst auch nicht SuppressWarnings erweitern, weil das mit @interfaces nicht geht.

Ich weiß gerade auch nicht ob du deine eigene Annotation schreiben kannst welche den gleichen Effekt hat, weil das wir ja in dem Fall nicht durch den Annotation-Processor gesteuert. Aber ich bilde mir ein es gaebe die Moeglichkeit in einem Annotation-Processor den Quellcode oder den AST zu veraendern, aber ich finde das Projekt welches ich dazu gesehen habe gerade nicht. Also was du machen koenntest ist die Sachen mit deiner eigenen Annotation versehen und dann im Processor die Sache umbauen so das eine SuppressWarnings an der Stelle steht.

Daneben gibt es halt nur die ueblichen Umgehungen wenn es rein umd as dokumentieren geht, Kommentar dazu schreiben, eine eigene Annotation dazu packen, oder als zusaetzliche "warning" in der Annotation aufnehmen:

Java:
@SuppressWarnings(value = { "unused", "reason:Weil es Seiteneffekte hat." })

Aber letzteres liefert eventuell auch wieder eigene Warnungen.
 

LimDul

Top Contributor
Nope, gibt es nicht. Du bist zwingend auf die Annotation angewiesen um die Warnungen abzuschalten.

Was du machen kannst:

Per Vereinbarung
Es irgendwo als Bedingung festhalten, dass der Entwickler es dokumentieren muss, wenn er es verwendet und im Code-Review soll drauf geachtet werden.

Pro:
* Minimalster Aufwand
* Bei einem guten Entwicklerteam sieht das auch jeder ein
Contra:
* Es wird trotzdem vergessen :)

Automatisch prüfen
Hier würde mir folgende Idee einfallen:
* Eine eigene Annotation definieren (SuppressWarningsDocumentation)
* Je nach eingesetzten Tools prüfen, wie man dem eine Regel beibringt, dass eine SuppressWarning-Annotation immer von einer SuppressWarningsDocumentation Annotation begleitet werden muss.

Problem ist, dass SuppressWarnings Rentention.SOURCE hat, damit für Bytecode Analysetools wie ArchUnit nicht zur Verfügung steht, sprich es bleibt nur sowas übrig wie Checkstyle oder Spotbugs. Aber da kann man mit Sicherheit sowas ergänzen. Wie genau weiß ich nicht

Pro:
* Automatische Checks
Contra:
* Initialer Aufwand
* Setzt voraus, dass man ein derartiges Tools nutzt

Edit:

Die Idee von @Robert Zenz finde ich auch charmant, da evtl. mit eigenem Annotation Processor ran zu gehen. Wobei man da sicherstellen muss, dass ein Entwickler immer die eigene Annotation verwendet und nie die originale. Sprich das müsste zwei-stufig sein, erst prüfen ob ein SuppressWarnings da ist, wenn ja => Build fail. Wenn nein, dann die eigene Annotation durch SuppressWarnings ersetzen
 

Robert Zenz

Top Contributor
Ja, das sollte gehen. Lombok macht genau so etwas wenn ich das gerade richtig verstanden habe. Also dein Annotation-Processor veraendert einfach den AST bevor der Compiler ihn zu sehen bekommt, da muesste auch das hinzufuegen und ersetzen von Annotationen dazu gehoeren.
 

Neumi5694

Top Contributor
Findbugs bietet hier so was:
@SuppressFBWarnings(value = "RV_RETURN_VALUE_IGNORED_INFERRED", justification = "passt scho")

Das verhindert aber keine Standardwarnungen, nur eben die von Findbugs/Spotbugs.
 

Oneixee5

Top Contributor
Erst mal danke für die Antworten. Die Möglichleit "den AST zu veraendern" ich muss mir das erst mal bei Gelegenheit anschauen. So etwas habe ich noch nicht gemacht.
Bei einem guten Entwicklerteam sieht das auch jeder ein
Die Entwickler sind eher nicht das Problem, es geht eher darum schneller zu Überblicken warum so gehandelt wurde und ob der Grund evtl. hinfällig sein könnte. Ich möchte auch nicht übermäßig mit Mails zu Warnungen aus dem Build-System nerven. Der Gedanke muss wohl noch etwas reifen.
 

LimDul

Top Contributor
Erst mal danke für die Antworten. Die Möglichleit "den AST zu veraendern" ich muss mir das erst mal bei Gelegenheit anschauen. So etwas habe ich noch nicht gemacht.

Die Entwickler sind eher nicht das Problem, es geht eher darum schneller zu Überblicken warum so gehandelt wurde und ob der Grund evtl. hinfällig sein könnte. Ich möchte auch nicht übermäßig mit Mails zu Warnungen aus dem Build-System nerven. Der Gedanke muss wohl noch etwas reifen.
Klar, aber es gibt auch Fälle wo man Entwickler im Team hat, die sowas nicht einsehen und dann kommt man mit freiwilligen Agreements nicht weiter und muss es technisch forcieren.

Aber halt auch bei guten Entwicklern wird es passieren, dass es vergessen wird, wenn man es nicht technisch forciert. Ich bin als Entwickler immer froh über alles, wo mir Tools (Jenkins, Checktyle, JUnit etc.) Arbeit abnehmen und mich auf Dinge hinweisen. Dann kann ich mich auf die wichtigen Sachen (Architektur etc.) konzentrieren und muss nicht immer die ganze Zeit an sämtlichen Kleinscheiss denken
 

Oneixee5

Top Contributor
Funktioniert wunderbar ...
Java:
    @SuppressWarnings("unused")
    @SuppressWarningsDocumentation("suppress warnings documentation")
In die IDE muss man es zwar etwas umständlich einbinden damit diese auch die Annotation anwendet, der Focus liegt aber bei Maven und Build-Server
Bash:
.../src$ javac -cp /.../annotations/bin -d ../bin ./*.java
./Main.java:17: error: @SuppressWarnings must be applied with @SuppressWarningsDocumentation
        public static void main(final String[] args) {
                           ^
1 error
 

Robert Zenz

Top Contributor
Wenn das in Maven als Annotation Processor eingebunden ist, sollte das doch auch in den meisten IDEs automatisch gehen?

Zumindest fuer Eclipse trifft das nicht zu, weil Eclipse eine eigene Compiler-Infrastruktur hat. Ich denke das trifft auf die meisten IDEs zu, damit stellt sich die Frage ob diese Eigenschaften aus dem Maven Build-File uebernommen werden, und ich denke nicht dass das der Fall ist.
 

mrBrown

Super-Moderator
Mitarbeiter
Zumindest fuer Eclipse trifft das nicht zu, weil Eclipse eine eigene Compiler-Infrastruktur hat. Ich denke das trifft auf die meisten IDEs zu, damit stellt sich die Frage ob diese Eigenschaften aus dem Maven Build-File uebernommen werden, und ich denke nicht dass das der Fall ist.
Ich bin das aus IntelliJ so gewohnt, dass es automatisch läuft, scheint wieder mal so eine Eclipse-Eigenheit zu sein :p
 

KonradN

Super-Moderator
Mitarbeiter
Ich bin das aus IntelliJ so gewohnt, dass es automatisch läuft, scheint wieder mal so eine Eclipse-Eigenheit zu sein :p
Ist doch in IntelliJ auch nicht anders. Es ist ja toll, wenn der Build direkt läuft, weil halt Maven dahinter steckt, aber man will ja auch die Möglichkeiten der IDE voll ausgenutzt haben. Also z.B. bei Lombok soll er wissen, was da so alles generiert wird, damit der Logger oder Getter/Setter im Editor bekannt sind und angeboten werden.

Bei Lombok fällt es nicht (mehr) auf, da IntelliJ das direkt bei der Installation mit installiert und aktiviert. Aber ich habe Lombok eine Zeit lang aus Projekten raus geschmissen, weil bei fast jeder neuen IntelliJ Version erst Tage vergehen mussten, bis auch das Lombok Plugin wieder lief.

Und der Build wird auch in Eclipse laufen, so man diesen über Maven laufen lässt und nicht irgendwas nutzt von wegen "Eclipse compiliert alles im Hintergrund mit eigenem Compiler der jetzt auch (etwas übertrieben) statt Java 1.0 auch 1.2 unterstützt")

Oder habe ich da jetzt etwas missverstanden bei der Problematik die in Eclipse und nicht in IntelliJ ist?
 

mrBrown

Super-Moderator
Mitarbeiter
Ist doch in IntelliJ auch nicht anders. Es ist ja toll, wenn der Build direkt läuft, weil halt Maven dahinter steckt, aber man will ja auch die Möglichkeiten der IDE voll ausgenutzt haben. Also z.B. bei Lombok soll er wissen, was da so alles generiert wird, damit der Logger oder Getter/Setter im Editor bekannt sind und angeboten werden.
Mit allen vernünftigen Annotation Prozessoren kann man die IDE direkt voll ausnutzen, das ist doch nur ein Problem von Lombok, weil es inoffizielle APIs auf komischen Wegen nutzt.
 

KonradN

Super-Moderator
Mitarbeiter
Mit allen vernünftigen Annotation Prozessoren kann man die IDE direkt voll ausnutzen, das ist doch nur ein Problem von Lombok, weil es inoffizielle APIs auf komischen Wegen nutzt.
Ok, dann scheine ich bei der aktuellen Thematik hier das Problem nicht richtig erfasst zu haben. Evtl. fehlt mir da einfach die (negative) Erfahrung mit Annotation Prozessoren unter Eclipse. Aber die Problematik, die euch gerade bewusst zu sein scheint, ist wohl bisher an mir vorbei gegangen.

Die APIs, die einzelne Libraries nutzen, waren bei mir aber bisher auch noch nichts, das ich vertieft habe. Danke aber auf jeden Fall für die Hinweise.
 

Oneixee5

Top Contributor
Da die IDE für manche ein Problem zu sein scheint. Die offiziellen IDE's bei uns sind Eclipse und VSCode. Das bedeutet wenn ich ein Projekt auschecke sollte es damit auch laufen. Natürlich gibt es externe Abhängigkeiten, wie Server, Datenbanken, etc. Viele JEE-Projekte sind auf den Oracle Weblogic zugeschnitten. Die Doku in den Projekten umfasst mindestens alles um mit diesen beiden IDE's so schnell wie möglich loslegen zu können. Eclipse und VSCode haben den Vorteil, dass sie zum großen Teil die gleichen Konfigurationsdateien verwenden und ohne große Lizenzprobleme schnell verfügbar sind. So ein Umfeld wird sich ganz sicher mit der Zeit verändern, im Moment ist das aber unser Stand.
Verwenden kann aber jeder was er möchte, solange die vorgenannten Bedingungen erfüllt werden. Es ist vollkommen egal ob jemand Vi oder eine selbst geschriebene IDE nutzen möchte.
Wenn aber ein Sprint ansteht darf es nicht passieren, dass plötzlich 10 Leute einen Monat brauchen um das Projekt in ihrer IDE zum Laufen zu bekommen, weil jeder andere Befindlichkeiten hat.
 

Oneixee5

Top Contributor
In die IDE muss man es zwar etwas umständlich einbinden damit diese auch die Annotation anwendet,
Damit meinte ich, man muss in Eclipse das Plugin m2e-apt installieren um Annotation-Processoren für einzelne Projekte selbst einzustellen. Ist das JAR einmal bekannt funktioniert der Annotation-Processor automatisch. Auch bei javac muss der Annotation-Processor im Classpath bekannt sein und evtl. sind auch noch weiter Parameter anzuwenden.
Ich möchte das aber lieber etwas einfacher haben, ohne viel nachzulesen und Installation in der IDE. Dabei gefällt mir der Installer von Lombok schon ganz gut.
 

KonradN

Super-Moderator
Mitarbeiter
Im Screenshot sieht man bereits den Code, der das Array mit Zufallszahlen füllt.

Und je nach notwendiger Auswertung ist kein Sortieren notwendig. Es reicht einmal durch das Array zu laufen um dann die Anzahl zu haben.

Aber unabhängig von der Bewertung der Lösung: dieses Hinklatschen einer Lösung hilft dem TE nicht, sowas in Zukunft selbst zu lösen. Ebenso eine Diskussion um eine Stream Lösung....
 

LimDul

Top Contributor
Im Screenshot sieht man bereits den Code, der das Array mit Zufallszahlen füllt.

Und je nach notwendiger Auswertung ist kein Sortieren notwendig. Es reicht einmal durch das Array zu laufen um dann die Anzahl zu haben.

Aber unabhängig von der Bewertung der Lösung: dieses Hinklatschen einer Lösung hilft dem TE nicht, sowas in Zukunft selbst zu lösen. Ebenso eine Diskussion um eine Stream Lösung....
Falscher Thread? :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Compiler-Fehler Online Compiler Probleme Allgemeine Java-Themen 4
E Hat der Compiler einen Fehler oder warumbeendet return nicht eine Methode ? Allgemeine Java-Themen 7
J Virtuelle Maschine vs Compiler Allgemeine Java-Themen 12
S CMD Compiler Error Allgemeine Java-Themen 13
J Java AOT Compiler Allgemeine Java-Themen 3
C Compiler programmieren Allgemeine Java-Themen 13
D Java Compiler code referencen Allgemeine Java-Themen 0
C System.out.print("") Compiler Fehler Allgemeine Java-Themen 2
B Java Compiler und JRE Allgemeine Java-Themen 22
M JAR Dateien nur mit Compiler Level 1.6 ausführbar Allgemeine Java-Themen 8
T Compiler Problem... Allgemeine Java-Themen 7
B Test$1.class mit dem javac compiler Allgemeine Java-Themen 7
K event dispatch thread fehler. Compiler meckert nicht aber der Interpreter? Warum?? Allgemeine Java-Themen 11
M AWT AWT "Compiler" Allgemeine Java-Themen 5
S Anschauen was der Compiler macht..? Allgemeine Java-Themen 5
A Java Compiler Allgemeine Java-Themen 4
A AspectJ Compiler nicht im CLASSPATH? Allgemeine Java-Themen 4
S [ANT] compiler wird nicht gefunden Allgemeine Java-Themen 6
V Boxing und Unboxing compiler warnings Allgemeine Java-Themen 6
J Enum Problem: compiliert nicht mit Sun's compiler. Allgemeine Java-Themen 2
O JNI Compiler Problem Allgemeine Java-Themen 2
C Java Compiler und Multiplikation konstanter Faktoren Allgemeine Java-Themen 2
F Kommunikation zw 2 Java-Programmen mit unterschiedl Compiler Allgemeine Java-Themen 13
T Java Compiler Allgemeine Java-Themen 8
K Compiler Fehler definieren/beeinflussen? Allgemeine Java-Themen 5
T Compiler für Rückschritt Java5 -> Java2 Allgemeine Java-Themen 3
F javac compiler Allgemeine Java-Themen 2
I Compiler level - ant Allgemeine Java-Themen 7
B Suche einen guten Compiler Allgemeine Java-Themen 23
S Java Compiler spinnt oder auch nicht ? Allgemeine Java-Themen 5
S Microsoft Standard Compiler Allgemeine Java-Themen 19
W Compiler findet Pakete nicht. Allgemeine Java-Themen 2
7 Applet funktioniert einzig und allein im Compiler Allgemeine Java-Themen 12
M downloadproblem Jikes compiler Allgemeine Java-Themen 2
M Probleme mit Cross-Compiler Allgemeine Java-Themen 3
D Compiler Warnung, Generics, Eclipse 3.1 Allgemeine Java-Themen 6
V String[] wird nicht als Rückgabetyp vom Compiler akzeptiert! Allgemeine Java-Themen 6
M GNU Java Compiler unter Windows? Allgemeine Java-Themen 4
G Compiler Exception auf JTextArea umleiten Allgemeine Java-Themen 4
R Wo kriege ich einen JIT-Compiler her? Allgemeine Java-Themen 6
G Java.lang.Compiler Allgemeine Java-Themen 3
R FastJavac Compiler Allgemeine Java-Themen 2
I Problem mit Compiler? Allgemeine Java-Themen 2
N Compiler (javac) funktioniert nicht... Bitte hilfe! Allgemeine Java-Themen 3
R Compiler spinnt !?!? Allgemeine Java-Themen 5
pkm Warnungen in einem Drools-Projekt unterdrücken? Allgemeine Java-Themen 1
J "unused"-Warnungen für import-Anweisungen unterdrücken Allgemeine Java-Themen 9
A Auf Java 5 umgestellt und bekomme 101 Warnungen. Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben