Основной синтаксический анализатор Eclipse JDT не анализирует комментарии

Мы пытались использовать базовый синтаксический анализатор 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;
    }
}

//

//

//

//

//

//

Вот что мы видим в отладчике, когда заглядываем внутрь compileUnit и смотрим на список комментариев:

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

Поэтому нам было интересно, нормально ли это, и если да, то что делать, чтобы получить содержание комментариев или что мы делаем неправильно?

Если это не нормальное поведение, то, возможно, у кого-то есть какие-либо предложения относительно того, что происходит не так и что искать.


person jwf    schedule 19.10.2012    source источник


Ответы (1)


Комментарии, полученные с помощью метода getCommentList() CompilationUnit, не будут иметь тела комментария. Также комментарии не будут посещаться во время посещения AST. Чтобы посетить комментарии, мы должны вызывать 'accept' для каждого комментария в списке комментариев.

См. ответ на приведенный ниже вопрос о том, как извлечь комментарии из CompilationUnit:

Как получить доступ к комментариям из API-интерфейса дерева компилятора Java, сгенерированного ast?

person Unni Kris    schedule 19.10.2012