2012-06-15 2 views
10

Zwischen Java 5 und Java 6 wurden die Regeln für @Override Annotationen für Methoden, die von Schnittstellen (im Gegensatz zu Superklassen) stammen, geändert - bevor sie nicht erlaubt waren, aber danach. Sie sind jedoch nicht erforderlich von javac.Wie kann ich fehlende @Override-Annotationen statisch erkennen?

Einige IDEs, wie Eclipse, können Fehler oder Warnungen für solche fehlenden Außerkraftsetzungen generieren. Ich suche nach einem statischen Analyse-Tool, das fehlende Überschreibungen erkennen kann, sodass ich sie programmgesteuert melden/blockieren kann.

Es scheint nicht irgendeine der großen, die ich kenne wie Findbugs, und so kann es tun - wahrscheinlich, weil @Override nur Quell-Retention-Ebene hat, so ist nicht in .Class-Dateien, auf denen diese Werkzeuge Operate und Source-Level-Tools wie Checkstyle verstehen die gesamte Klassenhierarchie nicht.

+0

Wenn ich Checkstyle aufrufen, gibt es keinen Platz für einen Klassenpfad. Das ist gut für checkstyle checks, aber wie würde checkstyle wissen, dass 'void doStuff()' die 'void doStuff()' Methode überschreibt, ohne Ihre Klassen zu haben (entweder im Quell- oder Klassenpfad). – emory

+0

Ja genau, also abgesehen von dem Problem der Laufzeitspeicherung, checkstyle macht nur "lokale" Überprüfungen einer Datei und kann das wahrscheinlich nicht erfassen. – BeeOnRope

+0

Ich verstehe nicht, warum die Aufbewahrung ein Problem ist. Der Prüfer benötigt Zugriff auf Ihren Quellcode und die Klassendateien Ihrer Abhängigkeiten. Es benötigt keinen Zugriff auf den Quellcode Ihrer Abhängigkeiten. (Wenn Sie im Quellcode ein fehlendes '@ Override 'gefunden haben, das Sie nicht über Schreibrechte verfügen, was würden Sie tun?) – emory

Antwort

3

Sie können eine Speicheraktion in Eclipse einfach aktivieren, um die fehlende @Override-Annotation automatisch hinzuzufügen - siehe Fenster> Voreinstellungen> Java> Editor> Aktionen speichern> Fehlender Code> Fehlende Annotationen hinzufügen.

+0

Yup, aber das Problem ist in einer Umgebung mit vielen verschiedenen IDEs und Nicht-IDE-Entwicklungsumgebungen, Sie können nicht garantieren, dass jeder das tut. Mein Ziel ist es, Fälle zu erkennen, in denen sie fehlen, und die vorhandenen Entwicklungstools nicht zu ändern, um sicherzustellen, dass sie weniger fehlen. – BeeOnRope

+0

Nun, in der Frage sagst du "um zu verhindern, dass sie überhaupt in unsere Code-Basis eindringen". Also ich bin mir nicht sicher was du willst. –

+0

Eine solche Überprüfung könnte in einem "Pre-Checkin" -System durchgeführt werden, das die Quelle validiert, bevor sie in das Hauptquellen-Repository eintritt. In jedem Fall ist dieser Teil nicht wirklich relevant, also werde ich ihn entfernen/klären. Ich brauche nur ein automatisiertes Tool, das diese Probleme erkennen kann. – BeeOnRope

1

Sie benötigen offensichtlich etwas, das Java-Quellcode verarbeitet und Ihnen Zugriff auf die Codestrukturen und die Attribute gewährt.

Ich verstehe Eclipse hat einige Parsing-Maschinen in JDT, und Sie könnten in der Lage sein, das zu verwenden.

Unser DMS Software Reengineering Toolkit verfügt über einen vollständigen Java-Source-Parser (einschließlich Attribut-Capture), volle Namens- und Typauflösung und die Möglichkeit, viele Quelldateien gleichzeitig zu lesen. Mit DMS können Sie Ihr eigenes benutzerdefiniertes Analysetool erstellen, sodass Sie die Bedingungen definieren können, unter denen Sie darauf bestehen, dass die Attribute vorhanden sind oder nicht.

Da DMS auch Programmumwandlungsfunktionen bietet, können Sie sogar Anpassungsregeln definieren, die den Quellcode ändern, wenn klar ist, welche Attribute vorhanden sein sollen.

DMS und die Java-Sprachen Regeln sind nicht trivial zu lernen; Dies erfordert einige Konfigurationsaufwand. Aber wenn Sie wirklich Tausende von Entwicklern haben, werden diese Kosten durch die Unfähigkeit zu kontrollieren, was sie tun, überschwemmt, so dass die Investition sinnvoll ist.

0

JArchitect Könnte Ihr Problem lösen, indem CQLinq und exceute Anfrage wie diese

von t in Typen mit denen! T.HasAnnotation ("Override") wählen t

Und natürlich können Sie Passen Sie Ihre Abfrage so an, wie Sie andere Kriterien hinzufügen möchten.

Verwandte Themen