JavaParser 不会在包声明之前删除注释

JavaParser doesn't remove comments before package declaration

我正在编写一个 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 的错误,还是我遗漏了什么?

编辑:

如果我在文件开头放置一行注释,第一个块注释(包声明之前的注释)将被删除,但不会删除该行注释。我认为 JavaParser 不认为文件的第一行可能是注释。

我是 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);
        }
    }