0

我正在编写一个基于 JavaParser 的库,使用 Javasymbol 求解器来解析源文件上的类名。我正在尝试获取类和方法注释的合格类名,但目前我无法获取它们。

我目前的代码是:

    final CombinedTypeSolver combinedTypeSolver = new CombinedTypeSolver();
    combinedTypeSolver.add(new ReflectionTypeSolver());
    combinedTypeSolver.add(new JarTypeSolver(JUNIT_PATH));
    final JavaParserFacade javaParserFacade = JavaParserFacade.get(combinedTypeSolver);
    final CompilationUnit cu = JavaParser.parse("package apackage;\n" +
            "\n" +
            "import org.junit.*;\n" +
            "\n" +
            "public class ClassToAnalyze {\n" +
            "\n" +
            "@Test\n" +
            "    public void test() {\n" +
            "        \n" +
            "    }\n" +
            "}\n" +
            "");
    final TypeDeclaration<?> typeDeclaration = cu.getTypes().get(0);
    final MethodDeclaration method = typeDeclaration.getMethods().get(0);
    final AnnotationExpr annotation = method.getAnnotation(0);
    final Object solve = javaParserFacade.solve(annotation);
    System.out.println(solve);

但抛出异常:

java.lang.ClassCastException:com.github.javaparser.symbolsolver.javassistmodel.JavassistInterfaceDeclaration 无法在 com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.solve(JavaParserFacade.java :265) 在 jlivedoc.collector.specifications.collectors.MultiProjectCollectorSpecifications.analyzeClass(MultiProjectCollectorSpecifications.java:86) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 在 sun.reflect .DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners 。模型。ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)在 org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57 ) 在 org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) 在 org.junit.runners.ParentRunner.runChildren(ParentRunner. java:288) 在 org.junit.runners.access$000(ParentRunner.java:58) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 在 org.junit.runners。ParentRunner.run(ParentRunner.java:363) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) at org.eclipse.jdt.internal.junit.runner.TestExecution.run( TestExecution.java:38) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java: 760) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460) 处junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760) 在 org.eclipse.jdt.internal.junit.runner。 RemoteTestRunner.run(RemoteTestRunner.java:460) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760) 在 org.eclipse.jdt.internal.junit.runner。 RemoteTestRunner.run(RemoteTestRunner.java:460) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)

知道我做错了什么吗?我正在使用 javaparser 3.6.5 和 javasymbol 求解器 0.6.3

谢谢你们

4

1 回答 1

0

我不确定您正在使用的库,但我确实看到您尝试解析的代码存在@Test 不应该在类级别但应该应用于测试方法的问题,也许您可​​以尝试先修复它。

        "package apackage;\n" +
        "\n" +
        "import org.junit.*;\n" +
        "\n" +
        "public class ClassToAnalyze {\n" +
        "\n" +
        "    @Test\n" +
        "    public void test() {\n" +
        "        \n" +
        "    }\n" +
        "}\n" +
        "");
于 2018-05-28T21:41:25.010 回答