Как я могу получить выходные данные программно вызванного Javadoc doclet от вызывающей стороны? - PullRequest
1 голос
/ 28 марта 2012

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

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

Итак, мой вопрос: есть ли способ получить, скажем, строку, сгенерированную моим пользовательским доклетом, непосредственно в invoker? Например:

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

Заранее спасибо!

1 Ответ

0 голосов
/ 04 апреля 2012

Хорошо, поэтому самый элегантный способ, которым я мог бы придумать, - это заставить класс doclet использовать статическую переменную-член, которая установлена ​​в экземпляр RootDoc, передаваемый жгутом Javadoc, когда он вызывает доклет1002 * метод, а затем разрешить доступ вызывающей стороны к этому статическому члену через геттер.Это связано с очевидными проблемами безопасности потоков при использовании статического члена, но для моих целей это работает нормально.

...