JavaSymbolSolver:获取字段的完全限定名称

标签 java javaparser javasymbolsolver

我使用 JavaParser(来自 javaparser.org)和 javasymbolsolver 来解析 Java。

我有一个简单的Java源代码,可以访问File.separator(请参阅源代码中的多行字符串);我希望我的程序打印java.io.File.fileseparator。相反,它打印 File.separator 并得到 UnsolvedSymbolException{context='File', name='Solving File'};然后它打印 System.out 并得到 UnsolvedSymbolException{context='System', name='Solving System'}

@Test
public void parserTest() {
    CombinedTypeSolver combinedTypeSolver = new CombinedTypeSolver();
    combinedTypeSolver.add(new ReflectionTypeSolver());
    JavaSymbolSolver symbolSolver = new JavaSymbolSolver(combinedTypeSolver);
    JavaParser.getStaticConfiguration().setSymbolResolver(symbolSolver);

    CompilationUnit compilationUnit = JavaParser.parse(
            "import java.io.File;\n" +
            "\n" +
            "public class Main {\n" +
            "    static String s = File.separator;\n" +
            "    public static void main(String args[]) {\n" +
            "        System.out.println(s);\n" +
            "    }\n" +
            "}\n");
    compilationUnit.accept(
            new ModifierVisitor<Void>() {
                @Override
                public Visitable visit(final FieldAccessExpr n, final Void arg) {
                    System.out.println(n);
                    try { // this does not work!!!
                        System.out.println(n.getScope().calculateResolvedType());
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                    return super.visit(n, arg);
                }
            },
            null
    );
}

据我了解,在 Java Symbol Solver 深处的某个地方,它尝试将 File 解析为值,当然会失败。

如何获取字段的完全限定名称?

最佳答案

更新到 3.8.0 后,可以进行以下操作:

ResolvedType resolvedType = n.getScope().calculateResolvedType();
System.out.println(resolvedType.describe());

关于JavaSymbolSolver:获取字段的完全限定名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53539011/

相关文章:

java - 如何从JAVA文件中解析静态级别变量?

java - 如何使用JavaParser遍历一些Java源代码的AST(抽象语法树)的所有节点?

java - 为什么在 IE 中应该更喜欢使用 CSS 而不是 XPath?

java - Restful webservices....放置或发布更新

java - 是否有任何实时用例使用 new 运算符创建字符串对象

Java 字符串解析和评估

java - 如何将 java 源代码构造映射到导入?

java - 使用 JavaParser 使用 getExtendedType 查找继承

java - 如何通过javaparser获取方法参数的包名?

用于 Eclipse Scout 的 JavaParser 和 SymbolSolver