gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:10:30 26 4
gpt4 key购买 nike

我正在编写一个从 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 注释,代码将不会删除这些注释。

例如,这段代码:

/*
* 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 的错误,还是我遗漏了什么?

编辑:

如果我在文件开头放置行注释,则第一个 block 注释(包声明之前的 block 注释)将被删除,但不会删除该行注释。我认为 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);
    }
    }

关于JavaParser 不会删除包声明之前的注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50258148/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com