JavaParser не удаляет комментарии до объявления пакета - PullRequest
0 голосов
/ 09 мая 2018

Я пишу приложение Java, которое удаляет комментарии из файлов Java.

Я написал этот код:

static void removeComments(Node node) {
        for (Comment child : node.getAllContainedComments()) {
            child.remove();
        }
    }

CompilationUnit cu = JavaParser.parse(projectDir); // projectDir is received from parameter
removeComments(cu);

Это вроде работает. Однако если перед объявлением пакета есть комментарии блока, код не удалит эти комментарии.

Например, этот код:

/*
 * Block comment
 */
// Line comment
package test;

/*
 * Block comment
 */
// comment
/**
 *
 * @author Me
 */
public class Test {

    public static void main(String[] args) {
        // TODO code application logic here
        System.out.println("print 1"); // comment in code line
        // comment 2
        System.out.println("print 2");
        /*
        block comment
         */
    }

}

Становится так:

/*
 * Block comment
 */
package test;

public class Test {

    public static void main(String[] args) {
        System.out.println("print 1");
        System.out.println("print 2");
    }
}

Это ошибка в JavaParser или я что-то упустил?

Edit:

Если я добавлю комментарий строки в начало файла, будет удален первый комментарий блока (предшествующий объявлению пакета), но не этот комментарий строки. Я думаю, что JavaParser не считает, что первая строка файла может быть комментарием.

1 Ответ

0 голосов
/ 12 мая 2018

Я поддерживаю JavaParser.

  1. Пожалуйста, откройте вопрос на GitHub для этого
  2. Самый простой способ удалить все комментарии - настроить JavaParser так, чтобы он вообще не обрабатывал комментарии:

    import com.github.javaparser.ast.CompilationUnit;
    
    public class RemoveComments {
        public static void main(String[] args) {
            JavaParser.getStaticConfiguration().setAttributeComments(false);
            CompilationUnit cu = JavaParser.parse("/**a*/package a.b.c; //\nclass X{}");
            System.out.println(cu);
        }
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...