2017-08-04 73 views
0

我想用Eclipse JDT的AST来解析java文件。 ASTVisitor提供了一个很好的API来遍历所有节点并使用我们想要的节点。现在我想要的是,我们可以去目标节点,比如说类型MethodDeclaration还是所有类型的节点,而不是遍历所有节点?因为如果我必须在整个包中获得特定类型的所有节点,这会减少时间。提前致谢。我们可以直接从Eclipse AST指向一个节点,而不是访问所有节点

回答

3

查找给定类型固有的所有节点遍历。 ASTVisitor适用于此确切任务。

如果您担心不必要遍历下面你感兴趣的节点,刚刚从相应visit()方法返回false,和游客不会下降到当前节点的孩子。

但是,如果遍历实际上是性能瓶颈,我会感到惊讶。首先创建AST比这更昂贵。如果您只想解决少数节点(例如通过名称模式识别),那么执行搜索(它依赖于索引)可能会更快,但这可能只有在重要文件数量可以完全跳过。

最后,正如您所提到的MethodDeclaration:或许您甚至不需要AST,但Java模型(轻量级更轻)足以满足您的任务需求?

+0

在第二段到最后一段中,您是不是指“......大量***节点可以跳过......”? –

+0

@FrankC。,不,我的意思是“文件”,因为一旦文件被解析,访问更多的节点应该不重要。只有当搜索发现整个文件是不相关的,那么不解析这个文件可能是重要的。 –

相关问题