使用AST查找Java程序中的所有布尔表达式

使用AST查找Java程序中的所有布尔表达式,java,eclipse,abstract-syntax-tree,eclipse-jdt,typing,Java,Eclipse,Abstract Syntax Tree,Eclipse Jdt,Typing,我正在Java符号探路器之上为Java程序构建一个符号评估测试生成器工具。作为这项工作的一部分,我需要识别Java源文件中的所有布尔表达式,并记录有关它们的信息。我希望能够使用像EclipseJDT或Sun的com.Sun.source.tree类这样的AST框架,在那里我可以访问表达式并让AST告诉我表达式的类型 EclipseJDT似乎支持这一点,但只有在从Eclipse内部运行时才支持。关于在Eclipse外部运行JDT的文章很有帮助: ,及 . 然而,这些并不是我想要的;可能非常接近,

我正在Java符号探路器之上为Java程序构建一个符号评估测试生成器工具。作为这项工作的一部分,我需要识别Java源文件中的所有布尔表达式,并记录有关它们的信息。我希望能够使用像EclipseJDT或Sun的com.Sun.source.tree类这样的AST框架,在那里我可以访问表达式并让AST告诉我表达式的类型

EclipseJDT似乎支持这一点,但只有在从Eclipse内部运行时才支持。关于在Eclipse外部运行JDT的文章很有帮助: ,及 . 然而,这些并不是我想要的;可能非常接近,但我不想从命令行使用JDT,我想将它的一部分合并到Java库中,该库将在Java符号Pathfinder中运行

如果我在Ant构建脚本中包括以下Eclipse库:

<pathelement path="${eclipse-plugin-loc}\org.eclipse.core.contenttype_3.4.200.v20120523-2004.jar"/>
<pathelement path="${eclipse-plugin-loc}\org.eclipse.core.jobs_3.5.200.v20120521-2346.jar"/>
<pathelement path="${eclipse-plugin-loc}\org.eclipse.core.resources_3.8.0.v20120522-2034.jar"/>
<pathelement path="${eclipse-plugin-loc}\org.eclipse.core.runtime_3.8.0.v20120521-2346.jar"/>
<pathelement path="${eclipse-plugin-loc}\org.eclipse.equinox.common_3.6.100.v20120522-1841.jar"/>
<pathelement path="${eclipse-plugin-loc}\org.eclipse.equinox.preferences_3.5.0.v20120522-1841.jar"/>
<pathelement path="${eclipse-plugin-loc}\org.eclipse.jdt.compiler.apt_1.0.500.v20120522-1651.jar"/>
<pathelement path="${eclipse-plugin-loc}\org.eclipse.jdt.compiler.tool_1.0.101.v20120522-1651.jar"/>
<pathelement path="${eclipse-plugin-loc}\org.eclipse.jdt.core_3.8.1.v20120531-0637.jar"/>
<pathelement path="${eclipse-plugin-loc}\org.eclipse.jdt_3.8.0.v201206081400.jar"/>
<pathelement path="${eclipse-plugin-loc}\org.eclipse.text_3.5.200.v20120523-1310.jar"/>
<pathelement path="${eclipse-plugin-loc}\org.eclipse.text_3.5.200.v20120523-1310.jar"/>
<pathelement path="${eclipse-plugin-loc}\org.eclipse.osgi.util_3.2.300.v20120522-1822.jar"/>
<pathelement path="${eclipse-plugin-loc}\org.eclipse.osgi_3.8.0.v20120529-1548.jar"/>
但是它没有合适的上下文供解析器解析类型绑定;在查阅Eclipse文档时,我必须将解析器用于IJavaProject:


那么,让IJavaProject在另一个可执行文件中作为库运行JDT有什么想法吗?或者,是否有任何其他具有类型信息的Java AST?提前感谢您的帮助。

尝试添加以下内容:

parser.setEnvironment(null, null, null, true);
parser.setUnitName(toVisit.getName())
此外,您还可以摆脱
文档
,只需使用

 parser.setSource(source.toCharArray());

另请参见:和

尝试添加以下内容:

parser.setEnvironment(null, null, null, true);
parser.setUnitName(toVisit.getName())
此外,您还可以摆脱
文档
,只需使用

 parser.setSource(source.toCharArray());

另请参见:和

您可以在OpenJDK编译器及其内部AST(具有完整类型信息)的顶部插入。您可以在OpenJDK编译器及其内部AST(具有完整类型信息)的顶部插入。