Java ASTParser:在解析绑定后查找声明节点

Java ASTParser:在解析绑定后查找声明节点,java,eclipse,eclipse-jdt,Java,Eclipse,Eclipse Jdt,我在启用绑定的情况下装箱一个AST,当我稍后解析绑定时,我会得到一个有效的ITypeBinding。 但是,当我想要获取绑定的声明节点时,它总是返回null(除非在源文件中声明了ITypeBinding) 以下是我的AST生成代码: public void解析函数(IFile sourceFile){ ICompilationUnit元素=JavaCore.createCompilationUnitFrom(源文件); ASTParser=ASTParser.newParser(AST.jls4

我在启用绑定的情况下装箱一个AST,当我稍后解析绑定时,我会得到一个有效的ITypeBinding。 但是,当我想要获取绑定的声明节点时,它总是返回null(除非在源文件中声明了ITypeBinding)

以下是我的AST生成代码:

public void解析函数(IFile sourceFile){
ICompilationUnit元素=JavaCore.createCompilationUnitFrom(源文件);
ASTParser=ASTParser.newParser(AST.jls4);
setResolveBindings(true);
setKind(ASTParser.K_编译单元);
parser.setBindingsRecovery(true);
setSource(元素);
CompilationUnit cu=(CompilationUnit)parser.createAST(null);
cu.接受(新的ASTVisitor(){
公共布尔访问(FieldDeclaration变量){
ITypeBinding=变量.getType().resolveBinding();
//绑定在这里不是空的
ASTNode DeclarationNode=cu.findDeclaringNode(绑定);
//DeclarationNode在此为空
返回false;
}
});
返回;
}
感谢您的帮助

parser.setEnvironment(classpath, sources, encodings, true);
他失踪了

否则,无法解析与声明的绑定,该声明不在已解析代码中,而是在类路径上的某个位置

他失踪了

否则,无法解析与声明的绑定,该声明不在已解析代码中,而是在类路径上的某个位置



请参见

您的
ITypeBinding
是一个
i方法绑定
,对吗?使用
ASTNode declarationnode=compilationUnit.findDeclaringNode(绑定)
您将获得
MethodDeclaration
其中
parameters()
返回参数列表,对于参数,您可以使用
getName()
获取名称。但是,这仅在声明节点位于AST中时有效,对吗?我只有一个类的AST,但需要该类中使用的所有类型的构造函数。我确切地知道我需要做什么,一旦我有了一个AstNode,我只是还没有设法到达那里。当使用
parser.setResolveBindings(true)
的解析器创建编译单元时,AFAIK
findDeclaringNode(binding)
也可能返回系统库的AST节点或依赖项的AST节点。请在上面编辑我的问题,
parser.setEnvironment(classpath,sources,encodings,true)丢失。否则,与声明的绑定不在已解析代码中,但在类路径的某个位置无法解析。因此,您的
ITypeBinding
是一个
IMethodBinding
,对吗?使用
ASTNode declarationnode=compilationUnit.findDeclaringNode(绑定)
您将获得
MethodDeclaration
其中
parameters()
返回参数列表,对于参数,您可以使用
getName()
获取名称。但是,这仅在声明节点位于AST中时有效,对吗?我只有一个类的AST,但需要该类中使用的所有类型的构造函数。我确切地知道我需要做什么,一旦我有了一个AstNode,我只是还没有设法到达那里。当使用
parser.setResolveBindings(true)
的解析器创建编译单元时,AFAIK
findDeclaringNode(binding)
也可能返回系统库的AST节点或依赖项的AST节点。请在上面编辑我的问题,
parser.setEnvironment(classpath,sources,encodings,true)丢失。否则,无法解析与声明的绑定,该声明不在已解析代码中,而是在类路径上的某个位置。只有在没有可用的IJavaProject时才需要此绑定。但是parser.setSource(ICompilationUnit)会根据给定的编译单元自动设置项目(和编译器选项)。绑定已解决,这不是问题,但我找不到声明节点。我甚至尝试了环境设置,但仍然没有返回ASTNode,即使绑定是有效的。当声明在同一个文件或不同的源文件中时,它会工作吗?我总是得到绑定,但是ASTNode是空的,除非声明在同一个文件中。如下所示:字符串将返回空值,但T将返回正确的ASTNode
公共类T{String s T;}
只有在没有项目可用时才需要此选项。但是parser.setSource(ICompilationUnit)会根据给定的编译单元自动设置项目(和编译器选项)。绑定已解决,这不是问题,但我找不到声明节点。我甚至尝试了环境设置,但仍然没有返回ASTNode,即使绑定是有效的。当声明在同一个文件或不同的源文件中时,它会工作吗?我总是得到绑定,但是ASTNode是空的,除非声明在同一个文件中。如下所示:字符串将返回空值,但T将返回正确的ASTNode
公共类T{String s T;}