Frage

Ich versuche, Regeln zu schreiben für einige Fehler in kommentieren Multi-Threaded-Java-Programme zu erkennen. Als Spielzeug Beispiel, würde ich jede Methode mit @ThreadSafe kommentierte erkennen mögen, wenn ein Verfahren ohne eine solche Anmerkung aufruft, ohne Synchronisation. Ich bin auf der Suche nach einem Werkzeug, das mir erlauben würde, einen solchen Test zu schreiben.

Ich habe an der Quelle Analysatoren sehen, wie Checkstyle und PMD, und sie wirklich klassenübergreifende Analysefunktionen nicht haben. Bytecode-Analysatoren, wie FindBugs und jlint scheinen ziemlich schwierig zu verlängern.

würde ich für eine Lösung etwas absetzen noch einfacher, aber die gleiche Schwierigkeit aufwirft: das Schreiben eine benutzerdefinierte Regel, ob jede überschriebene Methode überprüft wird mit @Override kommentiert.

War es hilfreich?

Lösung

Haben Sie versucht, FindBugs ? Es unterstützt tatsächlich eine Reihe von Anmerkungen für Thread-Sicherheit (die gleichen wie die in Java Concurrency in Practice ). Darüber hinaus können Sie Ihre eigenen Regeln schreiben. Ich bin mir nicht sicher, ob Sie klassenübergreifende Analyse kann tun, aber ich glaube schon.

Peter Ventjeer hat eine Gleichzeitigkeit Prüfwerkzeug (das verwendet ASM) Sachen wie diese zu erkennen. Ich bin mir nicht sicher, ob er es öffentlich freigegeben hat, aber er könnte in der Lage, Ihnen zu helfen.

Und ich glaube, Coverity statische / dynamische Analyse-Tools für Thread-Sicherheit tun, wie diese zu überprüfen.

Andere Tipps

Sie können tun klassenübergreifende Analyse in PMD (obwohl ich nie haben für diesen Zweck verwendet es). Ich denke, es ist möglich, diese Besuchermuster verwenden, die sie dokumentieren, obwohl ich die Besonderheiten Ihnen überlassen werden.

Ein einfaches Werkzeug auf Anmerkungen Checkup ist apt ( http: //java.sun.com/j2se/1.5.0/docs/guide/apt/ auch Teil von Java 6 api in javax.annotation.processing) aber dies hat nur Informationen geben (dh konnte ich nicht finden ein schneller Weg in der Vererbungshierarchie erhält die javax.lang.model api verwenden, aber wenn Sie die Klasse laden können Sie diese Informationen mithilfe von Reflektion bekommen).

Versuchen javap + Regexes (z. B. Perl)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top