2013-03-08 12 views
9

Als Teil der regulären statischen Analyse meines Programms möchte ich überprüfen, ob Klassen wahrscheinlich sinnvolle toString() Methoden haben. Wahrscheinlich nicht, dass jede Klasse sie implementiert, sondern vielleicht, dass keine instanziierbare konkrete Klasse Objects Implementierung von toString() verwendet.Vergewissern Sie sich, dass Java-Klassen toString() implementieren

Gibt es ein Lint-Toolkit, das dies überprüft? Die aktuell verwendeten sind FindBugs und CheckStyle; Ich habe keinen offensichtlichen Weg gefunden, das zu überprüfen. Ich bin auch dabei PMD zu meiner Flusen-Suite hinzuzufügen und wäre auch in Sonar offen für etwas. Also würde ich es lieber mit einem Werkzeug machen, das bereits in meiner Werkzeugkiste ist, aber wenn ich noch ein weiteres Werkzeug hinzufügen muss, werde ich es berücksichtigen.

+1

Ich würde CheckStyle verwenden und eine benutzerdefinierte Regel erstellen. Klingt wie eine gute Regel - Sie sollten es zur Open-Source-Code-Basis beitragen. – Bohemian

+3

Ah, mehr Regeln! Es ist wie ein Stripclub. – irreputable

Antwort

4

Sie können dies die Check Regexp Prüfung mit tun:

<module name="Regexp"> 
    <property name="format" value="public\s+String\s+toString\s*()"/> 
    <property name="message" value="All classes must implement toString()"/> 
    <property name="ignoreComments" value="true"/> 
</module> 

erkennt dies auch kommentiert-out toString() Methoden als nicht vorhanden. Ich habe es mit Checkstyle 5.6 und Eclipse-cs versucht, aber es sollte auch mit früheren Versionen funktionieren.

+0

Das ist ziemlich nah, danke. Es deckt nicht den Fall ab, in dem eine Klasse ein perfekt zu wartendes 'toString()' erbt (z.B. von 'AbstractList'), aber es kann durchaus sein, was ich brauche. –