如何在Java编译器API中将Trees.isAccessible()用于基本数据类型/如何将TypeMirror转换为DeclaredType
我正在尝试使用java编译器API分析.java文件。我当前的问题是要找出给定的变量、方法或类是否在程序中的特定作用域中已知(使用作用域,我指的是Java编译器API本身定义的作用域,请参见此处:) Java编译器API()的Trees类有一个实用方法来实现这一点:isAccessible。此方法获取范围和目标节点及其声明的类型,如果目标节点在给定范围内已知,则返回true 不幸的是,我不知道如何创建这个DeclaredType对象(从现在起,我只能写类名,因为stackoverflows防止垃圾邮件:javax.lang.model.type.DeclaredType,所以不再发布超链接)。我可以向目标节点询问它的类型(javax.lang.model.element.element[asType()-method]),但它会返回一个TypeMirror实例,而不是DeclaredType 目前我使用以下两行代码:如何在Java编译器API中将Trees.isAccessible()用于基本数据类型/如何将TypeMirror转换为DeclaredType,java,java-compiler-api,scopes,Java,Java Compiler Api,Scopes,我正在尝试使用java编译器API分析.java文件。我当前的问题是要找出给定的变量、方法或类是否在程序中的特定作用域中已知(使用作用域,我指的是Java编译器API本身定义的作用域,请参见此处:) Java编译器API()的Trees类有一个实用方法来实现这一点:isAccessible。此方法获取范围和目标节点及其声明的类型,如果目标节点在给定范围内已知,则返回true 不幸的是,我不知道如何创建这个DeclaredType对象(从现在起,我只能写类名,因为stackoverflows防止垃
final DeclaredType nodeType = (DeclaredType) nodeTypeMirror;
isAccessible = referenceCompTree.isAccessible(referenceScope, nodeElement, nodeType);
其中“referenceCompTree”是当前程序的树实例,referenceScope是有问题的范围,nodeElement是有问题的节点,nodeType。。。嗯,这应该是所讨论节点的DeclaredType
这种直接类型转换方法适用于一种情况,即类的节点(我假设这种方法可以工作,因为节点声明自己的类型,因此其typeMirror等价于自己的类型)。但它肯定不适用于具有基元类型的变量(如标题中所述),我也不确定它是否适用于变量
有人知道吗
总结一下:我现在使用了附录(2)中提到的变通方法,到目前为止,它似乎已经足够有效了。因此,如果您有相同的问题:尝试自己重新实现范围管理。