0

我在用

javaparser ( https://github.com/javaparser/javaparser ) 和 javasymbolsolver ( https://github.com/javaparser/javasymbolsolver )。

解析java源代码。我希望从 .java 文件创建一个基本报告以列出方法签名,如果它们包含完整的 java 类型会很好。

javaparser 'visit' 演示和 javasymbolsolver 演示的基本合并也是如此,但我正在碰壁。

炸毁'getType'调用,与

Exception in thread "main" java.lang.UnsupportedOperationException: com.github.javaparser.ast.type.ClassOrInterfaceType
    at me.tomassetti.symbolsolver.javaparsermodel.JavaParserFacade.getTypeConcrete(JavaParserFacade.java:392)

这是(非工作)代码,

static CombinedTypeSolver combinedTypeSolver;

public static void main(String[] args) throws Exception {
    combinedTypeSolver = new CombinedTypeSolver();
    combinedTypeSolver.add(new JreTypeSolver());
    combinedTypeSolver.add(new JarTypeSolver("C:/source.jar"));
    combinedTypeSolver.add(new JavaParserTypeSolver(new File("C:/src")));

    FileInputStream in = new FileInputStream("C:/src/source.java");
    CompilationUnit cu = JavaParser.parse(in);
    new MethodVisitor().visit(cu, null);
}

private static class MethodVisitor extends VoidVisitorAdapter<Void> {
    public void visit(MethodDeclaration n, Void arg) {

        Node node = n.getType();
        System.out.println(node);
        TypeUsage typeOfTheNode = JavaParserFacade.get(combinedTypeSolver).getType(node);

        super.visit(n, arg);
    }


}
4

1 回答 1

2

我建议ReflectionTypeSolver在您的CombinedTypeSolver. 然后,要获取所有 MethodDeclaration 的列表,我会使用

List<MethodDeclaration> l = Navigator.findAllNodesOfGivenClass(cu, MethodDeclaration.class);

然后我会像这样将每个 MethodDeclaration (JavaParser) 包装在 JavaParserMethodDeclaration 中

for(MethodDeclaration md : l){
     System.out.println(new JavaParserMethodDeclaration(mdec, facade.getTypeSolver()).getQualifiedSignature());
}
于 2017-07-17T14:24:04.180 回答