JavaSymbolSolver: получить полное имя поля - PullRequest
0 голосов
/ 29 ноября 2018

Я использую 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 как значение, и, конечно, не удается.

Как получить полное имя поля?

1 Ответ

0 голосов
/ 01 декабря 2018

После обновление до 3.8.0 , работает следующее:

ResolvedType resolvedType = n.getScope().calculateResolvedType();
System.out.println(resolvedType.describe());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...