Подтвердить что ты не робот

Инструмент для удаления комментариев JavaDoc?

Есть ли какой-нибудь инструмент/плагин Eclipse, который может удалить все комментарии JavaDoc в файле?

После запуска инструмента нормальные (не-JavaDoc) комментарии должны быть целыми.

4b9b3361

Ответ 1

Попробуйте это регулярное выражение для поиска, замените либо в eclipse/sed/вашем любимом редакторе, поддерживающем регулярное выражение.

/\*\*(?s:(?!\*/).)*\*/
  • ?s обрабатывать ввод как одну строку
  • начальная строка \**
  • ноль или более
    • отрицательный lookahead для */
    • пробел или пробел char
  • конечная строка */

Edit

Чтобы разрешить случаи, когда строки, содержащие javadoc, используйте это регулярное выражение

((?<!\\)"([^"]|(?<=\\)")*")|(/\*\*(?s:(?!\*/).)*\*/)

и замените его на первую группу захвата

/1

Затем, если вы говорите, что это не должно совпадать с

///** */

или более сложные случаи

Я предлагаю использовать инструмент парсера, такой как antlr, для анализа с помощью java-грамматики для токенов, таких как комментарии и строки, и удалить элементы, которые вы не хотите


Когда-то я нахожу, что мои собственные регулярные выражения отвечают загадочным!

Итак, вот какая визуальная обратная связь

((?!\\)"([^"]|(?=\\)")*")|(/\*\*(?:(?!\*/).)*\*/)

Regular expression visualization

Демоверсия Debuggex


/\*\*(?:(?!\*/).)*\*/

Regular expression visualization

Демоверсия Debuggex

Ответ 2

Я создал открытую исходную библиотеку для этой цели, ее названный CommentRemover вы можете удалить однострочные и несколько строк Java-комментариев.

Он поддерживает удаление или удаление TODO.
Также он поддерживает JavaScript, HTML, CSS, Свойства, JSP и комментарии XML.

Маленький фрагмент кода, как его использовать (используется 2 типа):

Первый способ InternalPath

 public static void main(String[] args) throws CommentRemoverException {

 // root dir is: /Users/user/Projects/MyProject
 // example for startInternalPath

 CommentRemover commentRemover = new CommentRemover.CommentRemoverBuilder()
        .removeJava(true) // Remove Java file Comments....
        .removeJavaScript(true) // Remove JavaScript file Comments....
        .removeJSP(true) // etc.. goes like that
        .removeTodos(false) //  Do Not Touch Todos (leave them alone)
        .removeSingleLines(true) // Remove single line type comments
        .removeMultiLines(true) // Remove multiple type comments
        .startInternalPath("src.main.app") // Starts from {rootDir}/src/main/app , leave it empty string when you want to start from root dir
        .setExcludePackages(new String[]{"src.main.java.app.pattern"}) // Refers to {rootDir}/src/main/java/app/pattern and skips this directory
        .build();

 CommentProcessor commentProcessor = new CommentProcessor(commentRemover);
                  commentProcessor.start();        
  }

Второй способ ExternalPath

 public static void main(String[] args) throws CommentRemoverException {

 // example for externalInternalPath

 CommentRemover commentRemover = new CommentRemover.CommentRemoverBuilder()
        .removeJava(true) // Remove Java file Comments....
        .removeJavaScript(true) // Remove JavaScript file Comments....
        .removeJSP(true) // etc..
        .removeTodos(true) // Remove todos
        .removeSingleLines(false) // Do not remove single line type comments
        .removeMultiLines(true) // Remove multiple type comments
        .startExternalPath("/Users/user/Projects/MyOtherProject")// Give it full path for external directories
        .setExcludePackages(new String[]{"src.main.java.model"}) // Refers to /Users/user/Projects/MyOtherProject/src/main/java/model and skips this directory.
        .build();

 CommentProcessor commentProcessor = new CommentProcessor(commentRemover);
                  commentProcessor.start();        
  }

Ответ 3

Для меня в vim работает следующее:

/\/\*\*\_.\{-}\*\/

Шаблон \_.\{-} соответствует любому символу (.), включая новую строку (\_), как можно меньше (\{-}).

Это соответствует многострочным комментариям Javadoc, таким как:

/**
 * My Javadoc comment here
 */

Но не будет соответствовать комментариям, например:

// My non-Javadoc comment

Ответ 4

Ответ Прашанта Бхате не помог мне в затмении:

/\*\*(?s:(?!\*/).)*\*/

Мне пришлось использовать

/\*/*(?s:(?!\*/).)*\*/

вместо.