Как закомментировать вызовы определенного API в исходном коде Java - PullRequest
3 голосов
/ 21 апреля 2009

Я хочу закомментировать все вызовы API (в моем случае java.util.Logging) в моей кодовой базе Есть ли хорошая библиотека для этого? Я попробовал Eclipse ASTParser, но это связано с Eclipse. Я сейчас борюсь с парсером PMD. Я еще не посмотрел на это, но может ли Джекпот сделать это? Любые другие предложения?

Ответы [ 6 ]

4 голосов
/ 21 апреля 2009

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

2 голосов
/ 21 апреля 2009

Если вы хотите закомментировать это:

Log.doLog("Here is a" /* With a block comment to make it hard */
    + " multiline log statement"
    ); doSomethingEssential();

тогда у вас будет более хитрое время, потому что вам нужно будет немного разобрать код, чтобы знать, где разместить комментарии. То есть Вы хотите быть в состоянии сделать это:

// Log.doLog("Here is a" /* With a block comment to make it hard */
//     + " multiline log statement"
//     ); // Line break inserted here
doSomethingEssential();

Вместо этого гораздо проще:

if (false) Log.doLog("Here is a" /* With a block comment to make it hard */
    + " multiline log statement"
    );

Компонент 'if false' в конечном итоге оптимизируется компилятором, и оператор Log не попадает в окончательный файл .class.

Таким образом, все, что вам нужно - это шаг поиска / замены в вашем скрипте сборки, который заменяет все вхождения

"Log.doLog("

с любым

"if (false) Log.doLog(" or
"if (true) Log.doLog("

не прибегая к хитрому разбору кода.

0 голосов
/ 21 апреля 2009

Если вы хотите избежать оценки аргументов, как вы говорите в своих комментариях, тогда я предполагаю, что у вас есть такие звонки:

logger.log("Expensive toString() operation on " + this);

которую вы хотите отключить?

Если дело обстоит именно так, и оно разбросано по вашему коду, я бы использовал что-то вроде AspectJ , чтобы окружить все вхождения выше:

if (loggingEnabled) {
   ...
}

и установите для флага loggingEnabled значение false.

0 голосов
/ 21 апреля 2009

Использование инструмента для комментирования или удаления всего кода регистрации может быть плохой идеей.

Возможно, вы не заметили код побочного эффекта:

while ( x > 5)
{
    // some code here
    Logger.global.finest( "X is now bigger: " + (x++) );
}

это действительно очевидный пример, но он может быть очень тонким при вызове метода или чем-то в вызове логгера.

Возможно, безопаснее отключить вывод журнала или выполнить все вручную ...

0 голосов
/ 21 апреля 2009

Вы можете использовать модуль slf4j's jul-to-slf4j для перенаправления всех вызовов java.util.logging в slf4j, а затем вы можете выбрать модуль slf4j-nop, чтобы игнорировать все операторы ведения журнала.

Будет ли это делать, или вам ДЕЙСТВИТЕЛЬНО нужно избавиться от этих строк исходного текста?

0 голосов
/ 21 апреля 2009

СЭД ? Просто замените его комментарием. Вам нужно подумать о регулярном выражении матча, чтобы перехватывать многострочные вызовы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...