2012-03-28 4 views
1

Ich schreibe ein Werkzeug, um Javadoc von bereits vorhandenen Java-Quelldateien zu scraphen und es über ein benutzerdefiniertes Doclet vorzuverarbeiten (die Besonderheiten der Verarbeitung sind nicht relevant). Ich habe das Doclet geschrieben, und ich kann das Doclet von meinem Code über die programmatische API aufrufen, wie in der Java documentation angegeben.Wie kann ich die Ausgabe eines programmgesteuert aufgerufenen Javadoc-Doclets vom Aufrufer abrufen?

Es scheint, dass dieser Mechanismus "schreibgeschützt" in dem Sinne ist, dass die Ergebnisse der Ausführung des Doclets, falls vorhanden, nicht über ein erstklassiges Java-Objekt an den Aufrufer der execute() -Methode zurückübertragen werden können. Stattdessen muss ich auf einen Fehler zurückgreifen, indem ich beispielsweise eine Zwischenausgabe in eine Datei aus dem Doclet schreibe und diese dann von meinem Aufrufer wieder einlese.

Also meine Frage: Gibt es eine Möglichkeit, sagen Sie, eine Zeichenfolge von meinem benutzerdefinierten Doclet direkt beim Aufrufer generiert? Zum Beispiel:

public void foo() { 
    // Invoke my custom doclet via Javadoc programmatically 
    com.sun.tools.javadoc.Main.execute(new String[] {"-d", "docs", "- sourcepath", "/home/usr/src", "p1", "p2"}); 

    // Access the String output of my doclet here 
    String processedJavadoc = getTheOutputOfMyDoclet(); 
} 

Vielen Dank im Voraus!

Antwort

0

Ok, also die eleganteste Art, wie ich tun konnte, dies zu tun ist, um die doclet Klasse ein statisches Member-Variable zu machen, die auf die RootDoc Instanz übergab in dem Javadoc Baum gesetzt wird, wenn es das start() Methode des doclet ruft , und ermöglichen Sie dann Zugriff auf den Aufrufer für dieses statische Mitglied über einen Getter. Dies führt zu den offensichtlichen Thread-Sicherheitsproblemen beim Verwenden eines statischen Elements, aber es hat für meine Zwecke in Ordnung funktioniert.