1

假设我有以下Class Ainpkg1Class Binpkg2和函数calculate()定义pkg2 class B如下:

B.calculate(A a1, A a2);

我想确定参数的类型a1a2. 例如,在这里它将是pkg1.A并且属于。pkg1.Aclass Apkg1

我主要关心的是,我不想构建项目,我想做静态分析(我有所有的源文件)。

我知道一种使用 Eclipse JDT 推断参数类型的方法,但是我如何使用 javaparser(https://github.com/javaparser/javaparser)和 javasymbolsolver(https://github.com/javaparser/javasymbolsolver)来推断参数类型。

在 Eclipse JDT 中,我刚刚在解析器环境中设置了源文件的路径,它就可以工作了。但是在javasymbolsolver中,即使我在typesolver中添加了源文件,它也不起作用。

CombinedTypeSolver combinedTypeSolver = new CombinedTypeSolver();
combinedTypeSolver.add(new JavaParserTypeSolver("path to the sourcefiles"));
JavaParserFacade j=JavaParserFacade.get(combinedTypeSolver);
SymbolReference<MethodDeclaration> ref = j.solve((MethodCallExpr) n);
4

1 回答 1

1

您还需要指定依赖项的路径。CombinedTypeSolver 不仅应该知道在哪里可以找到源文件,还应该知道在哪里可以找到所有 jar。

像这样的东西应该工作:

combineTypeSolver.add(new JarTypeSolver(new File("libs/mylib.jar")));

来源:我是 JavaSymbolSolver 的管理员

于 2017-01-08T17:21:46.377 回答