我试图尝试月食JDT / AST下面这个文章。
这是java代码作为输入:
class Hello
{
int hello()
{
int a = 0, b = 3;
/* hello */
{
b = a * 3;
}
return a;
}
public static void main(String[] args)
{
int z = 0, i = 3;
/* hello */
{
i = z * 3;
}
}
}
使用ASTView,它显示VariableDeclarationFragment
具有相应的绑定。
但是,在此的访客代码中VariableDeclarationFragmentnode
,我总是将4个局部变量(a,b,z,i)的空值作为resolveBinding()
返回值。
这怎么了 我用日食靛蓝。
这是获取AST的代码
private static CompilationUnit createCompilationUnit(String sourceFile) {
String source = readWithStringBuilder(sourceFile);
ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setSource(source.toCharArray()); // set source
parser.setResolveBindings(true); // we need bindings later on
return (CompilationUnit) parser.createAST(null /* IProgressMonitor */); // parse
}
发生这种情况的原因是来自setResolveBindings文档的以下内容:
绑定信息是从Java模型获得的。这意味着
编译单元必须相对于Java模型位于。
当源代码来自
setSource(ICompilationUnit)或setSource(IClassFile)时,这将自动发生。当
setSource(char [])提供源时,必须
通过使用setProject(IJavaProject)或
setEnvironment(String [],String [],String [],boolean)和单元名称
setUnitName()设置环境来显式地建立位置。字符串)。请注意,影响文档注释
检查的编译器选项也可能会影响是否为
文档注释内的节点解析了任何绑定。
这意味着您可以使用类似的东西(通过链接):
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IProject project = root.getProject("someJavaProject");
project.open(null /* IProgressMonitor */);
IJavaProject javaProject = JavaCore.create(project);
and add the setProject
call:
private static CompilationUnit createCompilationUnit(String sourceFile,
IJavaProject javaProject) {
String source = readWithStringBuilder(sourceFile);
ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setSource(source.toCharArray()); // set source
parser.setProject(javaProject);
parser.setResolveBindings(true); // we need bindings later on
return (CompilationUnit) parser.createAST(null /* IProgressMonitor */); // parse
}
The second approach (without setProject
):
private static CompilationUnit createCompilationUnit(String sourceFile,
String unitName) {
String source = readWithStringBuilder(sourceFile);
ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setSource(source.toCharArray()); // set source
String[] classpathEntries = ...;
String[] sourcepathEntries = ...;
parser.setEnvironment(classpathEntries, sourcepathEntries, null, true);
parser.setUnitName(unitName);
parser.setResolveBindings(true);
// optional
// parser.setBindingsRecovery(true);
return (CompilationUnit) parser.createAST(null /* IProgressMonitor */); // parse
}
ASTParser.setSource有不同输入类型的多态方法。 但是,当我使用作为setSource方法的输入时, 我得到一个错误,说我没有使用char[]作为输入参数。 为什么会出现这个错误? 我使用日食 jdt/ast 作为独立 Java 程序的一部分。在此过程中,我不会使用日食项目/资源,而是将 java 源代码作为 setSource() 的参数加载到 char[] 中。我不确定,但ec
我可以将EclipseJava开发工具作为独立进程执行吗?我需要使用另一个程序的Eclipse JDT获取Java程序的AST结构,为此,我需要在后台将eclipse插件作为独立进程执行。 这可能吗?如果可能,怎么能做到呢?
我正在使用日食JDT AST来解析给定的Java源代码。在解析代码时,当它遇到方法调用时,我想找出该特定方法是否返回或设置实例变量的值(基本上是为了找出被调用方方法是否是同一类调用方方法的获取器/设置器)。 例如: 我使用了AST插件,也找到了一个可能的路径,可以帮助我从API中引用它,但不能。请告诉我这是否可能,如果可能,哪种方法可以帮助我获取所需的信息。
问题内容: 有什么方法可以追溯到Eclipse吗?基本上,当我按照执行流程(Ctrl +单击等)在一个大项目中跳来跳去时,有没有办法追溯步骤?如果我的代码调用一个方法,然后转到方法定义,是否有组合键可以将我带回到调用代码? 问题答案: 像在网络浏览器中一样按+ 和+ 。
我正在Android应用程序中创建一个项目。我已经在java eclipse环境中将java jdt ast作为独立应用程序实现了,并且我在控制台输出上得到了我需要的东西。现在我想把这个代码运行到我的Android应用程序项目中。但是,当我在文本中设置所有输出时,当我启动应用程序时,Android的视图,不幸的是它停止了,我不知道为什么...有人会知道为什么会发生这种情况吗?感谢您的帮助。 代码没