如何使用Javasymbol解算器获得注释限定名称?

如何使用Javasymbol解算器获得注释限定名称?,java,javaparser,Java,Javaparser,我正在编写一个基于JavaParser的库,使用Javasymbol solver解析源文件上的类名。我试图获得类和方法注释的限定类名,但目前无法获得它们 我目前的代码是: final CombinedTypeSolver CombinedTypeSolver=new CombinedTypeSolver(); 添加(新的ReflectionTypeSolver()); 添加(新的JarTypeSolver(JUNIT_路径)); 最终的JavaParserFacade JavaParserFa

我正在编写一个基于JavaParser的库,使用Javasymbol solver解析源文件上的类名。我试图获得类和方法注释的限定类名,但目前无法获得它们

我目前的代码是:

final CombinedTypeSolver CombinedTypeSolver=new CombinedTypeSolver();
添加(新的ReflectionTypeSolver());
添加(新的JarTypeSolver(JUNIT_路径));
最终的JavaParserFacade JavaParserFacade=JavaParserFacade.get(combinedTypeSolver);
最终编译单元cu=JavaParser.parse(“包apackage;\n”+
“\n”+
“导入org.junit.*;\n”+
“\n”+
“要分析的公共类{\n”+
“\n”+
“@Test\n”+
“公共无效测试(){\n”+
“\n”+
“}\n”+
“}\n”+
"");
final-TypeDeclaration-TypeDeclaration=cu.getTypes().get(0);
final MethodDeclaration method=typeDeclaration.getMethods().get(0);
最终注释expr annotation=method.getAnnotation(0);
最终对象solve=javaParserFacade.solve(注释);
System.out.println(solve);
但会引发一个异常:

java.lang.ClassCastException:com.github.javaparser.symbolsolver.javassistmodel.JavassistInterfaceDeclaration不能强制转换为com.github.javaparser.resolution.declarations.ResolvedAnnotationDeclaration 位于com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade.solve(JavaParserFacade.java:265) 在jlivedoc.collector.specifications.collectors.MultiProjectCollectorSpecifications.analyzeClass(MultiProjectCollectorSpecifications.java:86) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源) 在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源) 位于java.lang.reflect.Method.invoke(未知源) 位于org.junit.runners.model.FrameworkMethod$1.runReflectVeCall(FrameworkMethod.java:50) 位于org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 位于org.junit.runners.model.FrameworkMethod.invokeeexplosive(FrameworkMethod.java:47) 位于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.ParentRunner.access$000(ParentRunner.java:58) 位于org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) 位于org.junit.runners.ParentRunner.run(ParentRunner.java:363) 位于org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) 位于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) 位于org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)

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


谢谢大家

我不确定您正在使用的库,但我确实看到您尝试解析的代码存在一个问题,@Test不应该在类级别,而应该应用于测试方法,可能您可以先尝试解决这个问题

        "package apackage;\n" +
        "\n" +
        "import org.junit.*;\n" +
        "\n" +
        "public class ClassToAnalyze {\n" +
        "\n" +
        "    @Test\n" +
        "    public void test() {\n" +
        "        \n" +
        "    }\n" +
        "}\n" +
        "");

你是对的,但是我已经改变了注释的位置来装饰这个方法,结果仍然是一样的。我会更新这个问题。谢谢。啊,好吧,那就更可能是图书馆本身了。让我看看能不能买到有用的东西。