3

我们一直在尝试在我们的项目中使用 Eclipse JDT 核心解析器来解析 Java 源文件,但是我们遇到的问题之一是我们无法从文件中获取注释列表。我们尝试在 上调用该getComments方法,CompilationUnit但它向我们显示了一个空注释列表。

这是来自一个测试项目,其Test1.java来源在这里:

public class Test1 {

public static void main(String[] args) throws IOException {
    File file = new File("src/main/java/DummyFile.java");
    FileReader fileReader = new FileReader(file);
    BufferedReader bufferedReader = new BufferedReader(fileReader);
    StringBuilder source = new StringBuilder();
    String line = "";
    while ((line = bufferedReader.readLine()) != null) {
        source.append(line + System.getProperty("line.separator"));
    }

    bufferedReader.close(); 

    ASTParser parser = ASTParser.newParser(AST.JLS3);
    parser.setKind(ASTParser.K_COMPILATION_UNIT);
    parser.setSource(source.toString().toCharArray());
    parser.setResolveBindings(true);
    Hashtable<String, String> options = JavaCore.getOptions();
    options.put(JavaCore.COMPILER_DOC_COMMENT_SUPPORT, JavaCore.ENABLED);
    parser.setCompilerOptions(options);
    CompilationUnit cu = (CompilationUnit) parser.createAST(null);

    List comments = cu.getCommentList();

    System.out.println(cu); // breakpoint is here.

    for (Object comment : comments) {
        System.out.println(comment.toString());
    }
}

DummyFile.java 如下:

public class DummyFile {
    // 1
    private String str;
    public static int number;

    public DummyFile() { // 2
        // 3
        str = "something";
        number = 2; // 4
        // 5
    }
    // 6
}

这是输出:

public class DummyFile {
    private String str;
    public static int number;
    public DummyFile(){
        str="something";
        number=2;
    }
}

//

//

//

//

//

//

这是我们在编译单元内部查看并查看注释列表时在调试器中看到的内容:

[//
, //
, //
, //
, //
, //
]

所以我们想知道这是否是正常行为,如果是,如何获取评论内容或我们做错了什么?

如果这不是正常行为,那么也许有人对出了什么问题以及要寻找什么有任何建议。

4

1 回答 1

2

通过getCommentList()CompilationUnit 方法获得的评论不会有评论正文。此外,在 AST 访问期间不会访问评论。为了访问评论,我们必须为accept评论列表中的每条评论调用 ' '。

请参阅以下有关如何从 CompilationUnit 中提取注释的问题的答案:

如何从生成的 java 编译器树 api 访问注释?

于 2012-10-19T11:11:57.943 回答