我正在编写一个基于 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
谢谢你们