gpt4 book ai didi

java - ASTVisitor 在 Eclipse 插件中不返回任何评论

转载 作者:行者123 更新时间:2023-11-29 08:47:52 24 4
gpt4 key购买 nike

在我的 Eclipse 插件中,我想解析 CompilationUnit 中的注释。我的其他访问者(例如 ForVisitor、VariableDeclarationVisitor 等)工作正常 - 但我的 CommentVisitor 不返回任何内容。

AST 和 ASTVisitor 创建(适用于所有其他访问者)

void createAST(ICompilationUnit unit) throws JavaModelException {
CompilationUnit parse = parse(unit);

// return all comments
CommentVisitor visitor = new CommentVisitor();
parse.accept(visitor);
System.out.println(parse.getCommentList().toString());
for(LineComment lineComment : visitor.getLineComments()) {
lineComment.accept(visitor); // a try to make it work
System.out.println("Line Comment: " + lineComment.getLength());
}
System.out.println("---------------------------------");
for(BlockComment blockComment : visitor.getBlockComments()) {
System.out.println("Block Comment: " + blockComment.getLength());
}
}

CompilationUnit parse(ICompilationUnit unit) {
ASTParser parser = ASTParser.newParser(AST.JLS4);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setSource(unit);
parser.setResolveBindings(true);
return (CompilationUnit) parser.createAST(null); // parse
}

CommentVisitor.java(通常与所有其他访问者的语法相同)

import java.util.ArrayList;
import java.util.List;

import org.eclipse.jdt.core.dom.ASTVisitor;
import org.eclipse.jdt.core.dom.BlockComment;
import org.eclipse.jdt.core.dom.LineComment;

public class CommentVisitor extends ASTVisitor {
List<LineComment> lineComments = new ArrayList<LineComment>();
List<BlockComment> blockComments = new ArrayList<BlockComment>();

@Override
public boolean visit(LineComment node) {
lineComments.add(node);
return super.visit(node);
}

@Override
public boolean visit(BlockComment node) {
blockComments.add(node);
return super.visit(node);
}

public List<LineComment> getLineComments() {
return lineComments;
}

public List<BlockComment> getBlockComments() {
return blockComments;
}
}

再次澄清我的问题:我没有从上面的代码中得到任何反应——甚至没有空字符串,这是关于 SO 的其他几个问题的主题。

最佳答案

引用这个page寻找答案。

 public boolean visit(LineComment node) {
int start = node.getStartPosition();
int end = start + node.getLength();
// source is a string representing your source code
String comment = source.substring(start, end);
System.out.println(comment);
return true;
}

关于java - ASTVisitor 在 Eclipse 插件中不返回任何评论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24230554/

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