我已经使用 AST 玩了很长一段时间,并试图从 eclipse 中获取与在此插件上解析的给定节点相关联的行和列信息。根据此处记录的api,我发现该方法getStartPosition()
可以为我提供已解析文件字符的位置,但这不是我想要的。
我继续阅读CompilationUnit 类 api 文档以找出方法getLineNumber(int position)
,getColumnNumber(int position)
并且根据我的理解可以做到这一点。position
参数就是getStartPosition()
方法返回的内容,通过做node.getStartPosition()
.
现在,问题是在源文件上获取行和列的两种方法似乎不适用于所有节点。例如,方法声明节点没有它们!
我怎样才能获得所有树的这些信息?我知道这不是不可能的,因为我能够使用其他语言的解析器,每个ast 节点都有与之关联的行和列。事实上,我相信javaparser是其中之一,因为该类包含硬编码的行和列的属性。看到 Eclipse JDT 对我来说似乎更加健壮并且在那里呆了很长一段时间,我会惊讶于无法获得这样的信息。
编辑:同样,问题是从仅出现在根目录上的编译单元的不同内容中获取行号:
<type 'org.eclipse.jdt.core.dom.CompilationUnit'>
1
<type 'org.eclipse.jdt.core.dom.TypeDeclaration'>
<type 'org.eclipse.jdt.core.dom.Javadoc'>
<type 'org.eclipse.jdt.core.dom.TagElement'>
<type 'org.eclipse.jdt.core.dom.TextElement'>
<type 'org.eclipse.jdt.core.dom.TextElement'>
<type 'org.eclipse.jdt.core.dom.TextElement'>
<type 'org.eclipse.jdt.core.dom.TextElement'>
<type 'org.eclipse.jdt.core.dom.TextElement'>
<type 'org.eclipse.jdt.core.dom.TextElement'>
谢谢你。