EclipseAstNode到源代码行号
在eclipse中给定一个ASTNode,有没有办法获得相应的源代码行号?ASTNode有处理字符偏移量的getStartPosition()和getLength()方法。要将字符偏移量转换为行号,应使用CompilationUnit的getLineNumber()方法。CompliationUnit是AST树的根。您可以使用下面的代码获取EclipseAstNode到源代码行号,eclipse,abstract-syntax-tree,eclipse-jdt,Eclipse,Abstract Syntax Tree,Eclipse Jdt,在eclipse中给定一个ASTNode,有没有办法获得相应的源代码行号?ASTNode有处理字符偏移量的getStartPosition()和getLength()方法。要将字符偏移量转换为行号,应使用CompilationUnit的getLineNumber()方法。CompliationUnit是AST树的根。您可以使用下面的代码获取ASTNode的行号 int lineNumber=compilationUnit.getLineNumber(node.getStartPosition()
ASTNode
的行号
int lineNumber=compilationUnit.getLineNumber(node.getStartPosition())-1;
可使用以下代码从ASTParser
获取编译单元
ASTParser=ASTParser.newParser(AST.JLS3);
//将类作为编译单元进行分析。
setKind(ASTParser.K_编译单元);
parser.setSource(source);//在这里将java源代码作为char数组提供
setResolveBindings(true);
//将已编译类作为编译单元返回
CompilationUnit CompilationUnit=parser.createAST(null);
然后,您可以使用ASTVisitor
模式,使用以下代码访问所需节点的类型(比如MethodDeclaration节点):
compilationUnit.accept(新的ASTVisitor(){
公共布尔访问(MethodDeclaration节点){
int lineNumber=compilationUnit.getLineNumber(node.getStartPosition())-1;
返回true;
}
});
除了已经描述的一般解决方案外,如果您需要ASTNode的行号,包括在ASTNode前面写入的前导空格或潜在注释,还有一种解决方案适用。然后您可以使用:
int lineNumber = compilationUnit.getLineNumber(compilationUnit.getExtendedStartPosition(astNode))
见:
返回给定节点的扩展起始位置。与ASTNode.getStartPosition()和ASTNode.getLength()不同,扩展的源范围可能包括节点正常源范围之前或之后的注释和空格