Das Todo Doclet

Motivation:
Ich habe so eine Angewohnheit, noch ausstehende Dinge beim Programmieren direkt im Sourcecode zu notieren. Leider muss man für eine vollständige Liste dieser Todos ständig alle Klassen durchforsten. Es wäre auch möglich, diese in einer separaten Liste aufzubewahren, nur dann hat man den Synchronisationsaufwand zwischen dem Quelltext und dieser Liste und muss außerdem beim verteilten Entwickeln die Liste mit verteilen.

Um dieser Umständlichkeit abzuhelfen, beschloss ich, mich einmal dem Thema Doclets zu widmen. Bisher hatte ich aus Respekt vor der Komplexität dieser API immer zurückgeschreckt, doch ein Blick in die Doku belehrte mich eines Besseren. Und so entstand innerhalb einer knappen Stunde (ich war wirklich gut :-)) dieses Todo-Doclet, welches ich hiermit zur freien Verwendung ins Netz stelle.

Implementation:
Eigentlich besteht das Todo-Doclet aus vier Teilen, die zusammen wirken müssen. Da wäre zunächst javadoc selbst. Dieses ist Teil des JDKs und ist überall mit diesem verfügbar. Der zweite Teil ist das Doclet, welches im Zuge eines javadoc-Laufes über die Klassen rennt und die dort vorhandenen Todos in eine XML-Datei schreibt. Der dritte Part wird von einem XSL-Stylesheet übernommen, welches aus dem XML eine HTML-Ausgabe erzeugt. Dies kann mit einem dazu fähigen Browser durchgeführt werden (z. B. dem Internet Explorer) durch einfachen Doppelklick auf die XML-Datei. Dazu müssen sich die beiden Dateien ( todo.xml und todo.xsl ) aber im gleichen Verzeichnis befinden.

Wer sich mit XSLT auskennt kann sich leicht - basierend auf dem hier vorgestellten Stylesheet - eigene Ausgaben erzeugen. CSV, RTF oder jedes andere Textformat sind möglich, deswegen habe ich die darstellungsunabhängige Form der XML-Notation gewählt.

Anwendung:
Zunächst gilt es, den Quellcode in ein Verzeichnis auf der Platte auszupacken. Bei der Durchsicht mit einem Editor werdet Ihr merken, dass die Klasse ListTodos.java bereits selber mit @todo -Tags versehen ist. Sie wird auch unser Beispiel begleiten.
Das Kompilieren der Java-Klasse funktioniert nur, wenn das Archiv tools.jar im Klassenpfad enhalten ist. Unter DOS sieht der entsprechende Aufruf zum setzen des CLASSPATH ähnlich aus wie dieser:

c:\doclet\set CLASSPATH=%CLASSPATH%;.;c:\JDK1.3.1\lib\tools.jar

Danach kann die Klasse einfach mittels:

c:\doclet\javac ListTodos.java

kompiliert werden.

Zum Test des Doclets wird jetzt javadoc aufgerufen:

c:\doclet\javadoc -private -doclet ListTodos *.java

Jetzt werden alle in diesem Verzeichnis befindlichen Java-Dateien auf Todos hin untersucht. Das Ergebnis dieser Untersuchung landet in der Datei todo.xml. Zur besseren Übersicht habe ich hier ein paar TABs eingefügt.

<?xml version="1.0" encoding="iso8859-1"?>
<?xml-stylesheet type="text/xsl" href="todo.xsl"?>
<control>
	<class name="ListTodos">
		<todo>Einbau der Kommandozeilenparameterübergabe</todo>
		<todo>Verarbeitung von HMTL Entities ermöglichen</todo>
		<method name="start">
			<todo>Verwenden eines Kommandozeilenparameters für die Ausgabedatei</todo>
			<todo>Verwenden eines Kommandozeilenparameters für das Stylesheet</todo>
		</method>
		<method name="writeContents">
			<todo>Ausgabe des Packagenamens</todo>
		</method>
	</class>
</control>

Ein einfacher Doppelklick im Windows Explorer auf diese Datei startet den Internet Explorer, der daraufhin die Datei todo.xsl sucht und öffnet, um das Layout dieser Daten zu generieren. Ergebnis ist eine HTML-Seite:

Todos

Classname Date Approved
.ListTodos
          Einbau der Kommandozeilenparameterübergabe    
          Verarbeitung von HMTL Entities ermöglichen    
     start
          Verwenden eines Kommandozeilenparameters für die Ausgabedatei    
          Verwenden eines Kommandozeilenparameters für das Stylesheet    
     writeContents
          Ausgabe des Packagenamens    

Diese Tabelle lässt sich vom Browser aus drucken und in Papierform als Checkliste verwenden. Genausogut ließe sich die XML-Datei im CVS versionieren. Es ist außerdem möglich, den ganzen Task als Target unter ANT zu verwenden und so mit jedem Build eine Übersicht über die Todos des Projekts zu bekommen.

Wenn ein Entwickler eine Aufgabe erledigt hat, so kann er sie einfach aus der Doku der Klasse oder Methode löschen und so verschwindet sie auch aus der Todo-Liste nach dem nächsten Build oder Javadoc-Lauf.

Verbesserungspotential:
Verschiedene Punkte zur Verbesserung/zum Ausbau liegen nahe:

Weitere Vorschläge nehme ich gerne in diese Liste auf.

Ich würde mich freuen, wenn Du mich benachrichtigtest , falls Du diese Dinge erledigen möchtest oder bereits erledigt hast, sodass das Doclet hier weitergepflegt werden kann.

Eine tolle Sache hat Christof Glose auf seiner Homepage zur Verfügung gestellt. Der sogenannte ToDo-Listener durchsucht alle Java-Files unterhalb eines Verzeichnisses nach @todo-Tags und stellt diese Übersichtlich dar. Hier braucht man keinen Javadoc-Lauf anzustoßen, um die neueste Version der ToDos zu bekommen, dafür kann man die Ergebnisse aber auch nicht auf einer Webseite zur Verfügung stellen. Eigentlich ist das die ideale Ergänzung zum ToDo-Doclet für den Betrieb während des Codings.


Zuletzt geändert: 07.07.2003 von Christoph Krüger