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

时间:2018-05-09 16:33:38

标签: java parsing javaparser

我正在编写一个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并不认为文件的第一行可能是注释。

1 个答案:

答案 0 :(得分:1)

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