2012-03-28 3 views
1

Я пишу инструмент, чтобы очистить Javadoc от уже существующих исходных файлов Java и предварительно обработать его через пользовательский doclet (особенности обработки не актуальны). Я написал doclet, и я могу вызвать doclet из своего кода через программный API, как указано в Java documentation.Как я могу получить результат выведенного из программы Javadoc doclet от вызывающего?

Похоже, что этот механизм является «только для записи» в том смысле, что результаты запуска doclet, если таковые имеются, не могут быть переданы обратно вызывающему методу execute() через объект Java класса первого класса. Вместо этого мне приходится прибегать к kludge, например, писать промежуточный вывод в файл из doclet, а затем читать его обратно от моего вызывающего.

Так что мой вопрос: есть ли способ получить, скажем, строку, созданную моим пользовательским doclet непосредственно у вызывающего? Например, для:

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(); 
} 

Заранее благодарен!

ответ

0

Итак, самый изящный способ, которым я мог придумать, чтобы сделать это, чтобы сделать класс доклет использовать статическую переменную-член, который устанавливается в RootDoc инстанции передаваемая жгуте Javadoc, когда он вызывает start() метода, Doclet в , а затем разрешить доступ к вызывающему абоненту к этому статическому элементу через приемник. Это связано с очевидными проблемами безопасности потоков при использовании статического члена, но он отлично работает для моих целей.