【发布时间】:2012-08-11 01:38:58
【问题描述】:
我已经使用 AST 玩了很长时间,并试图从 eclipse 中获取与在此插件上解析的给定节点相关联的行和列信息。根据记录的apihere我发现getStartPosition()方法可以给我解析文件的字符位置,但这不是我想要的。
我在CompilationUnit class api documentation 上找到了getLineNumber(int position) 和getColumnNumber(int position) 的方法,据我所知,它们可以解决问题。 position 参数不亚于getStartPosition() 方法通过执行node.getStartPosition() 返回的内容。
现在,问题是在源文件上获取行和列的两种方法似乎不适用于所有节点。例如,method declaration nodes 没有它们!
如何获得所有树的此类信息?我知道这不是不可能的,因为我能够使用其他语言的解析器,对于 每个 ast 节点都有与之关联的行和列。事实上,我相信javaparser 是 java 的其中之一,因为该类包含硬编码的行和列的属性。看到 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'>
谢谢。
【问题讨论】:
标签: java eclipse parsing abstract-syntax-tree eclipse-jdt