Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我们是否可以直接从EclipseAST指向一个节点,而不是访问所有节点_Java_Eclipse_Abstract Syntax Tree_Eclipse Jdt - Fatal编程技术网

Java 我们是否可以直接从EclipseAST指向一个节点,而不是访问所有节点

Java 我们是否可以直接从EclipseAST指向一个节点,而不是访问所有节点,java,eclipse,abstract-syntax-tree,eclipse-jdt,Java,Eclipse,Abstract Syntax Tree,Eclipse Jdt,我正在尝试使用EclipseJDT的AST解析java文件。ASTVisitor提供了一个很好的API来遍历所有节点并使用我们想要的节点。现在我想知道的是,我们可以去一个目标节点,比如说类型MethodDeclaration或者该类型的所有节点,而不是遍历所有节点吗?因为如果我必须在整个包中获取特定类型的所有节点,这会减少时间。提前感谢。查找给定类型的所有节点本身就是在遍历ASTVisitor适用于此确切任务 如果您担心在感兴趣的节点下面进行不必要的遍历,只需从相应的visit()方法返回fal

我正在尝试使用EclipseJDT的AST解析java文件。ASTVisitor提供了一个很好的API来遍历所有节点并使用我们想要的节点。现在我想知道的是,我们可以去一个目标节点,比如说类型
MethodDeclaration
或者该类型的所有节点,而不是遍历所有节点吗?因为如果我必须在整个包中获取特定类型的所有节点,这会减少时间。提前感谢。

查找给定类型的所有节点本身就是在遍历<代码>ASTVisitor适用于此确切任务

如果您担心在感兴趣的节点下面进行不必要的遍历,只需从相应的
visit()
方法返回
false
,访问者就不会下降到当前节点的子节点中

不过,如果遍历实际上是一个性能瓶颈,我会感到惊讶。首先,创建AST要比这更昂贵

如果您只想寻址少数节点(例如,通过名称模式识别),那么执行搜索(依赖于索引)可能会更快,但只有在可以完全跳过大量文件的情况下,这可能会有回报


最后,正如您提到的
MethodDeclaration
:也许您甚至不需要AST,但Java模型(重量轻得多)足以完成您的任务?

查找给定类型的所有节点本身就是在遍历<代码>ASTVisitor适用于此确切任务

如果您担心在感兴趣的节点下面进行不必要的遍历,只需从相应的
visit()
方法返回
false
,访问者就不会下降到当前节点的子节点中

不过,如果遍历实际上是一个性能瓶颈,我会感到惊讶。首先,创建AST要比这更昂贵

如果您只想寻址少数节点(例如,通过名称模式识别),那么执行搜索(依赖于索引)可能会更快,但只有在可以完全跳过大量文件的情况下,这可能会有回报


最后,正如您提到的
MethodDeclaration
:也许您甚至不需要AST,但Java模型(重量更轻)足以完成您的任务?

您的意思是“…可以跳过大量节点…”在倒数第二段中?@FrankC.,不,我的意思是“文件”,因为一旦文件被解析,多访问几个节点应该没有什么意义。只有当搜索发现一个完整的文件是无关的,那么不解析这个文件可能是重要的。@ AravdknANA:一个友好的提醒,以考虑接受答案。我认为,从技术上讲,你不会喜欢一个更好的答案:)而且你对性能问题的恐惧可能可以通过简单的测量来消除。你的意思是在倒数第二段中“…可以跳过大量节点…”吗?@FrankC.,不,我的意思是“文件”,因为一旦文件被解析,多访问几个节点应该没有什么意义。只有当搜索发现一个完整的文件是无关的,那么不解析这个文件可能是重要的。@ AravdknANA:一个友好的提醒,以考虑接受答案。我认为,从技术上讲,没有一个您会更喜欢的答案:)而且您对性能问题的恐惧可能可以通过简单的测量来消除。