如何使用Javasymbol解算器获得注释限定名称?
我正在编写一个基于JavaParser的库,使用Javasymbol solver解析源文件上的类名。我试图获得类和方法注释的限定类名,但目前无法获得它们 我目前的代码是:如何使用Javasymbol解算器获得注释限定名称?,java,javaparser,Java,Javaparser,我正在编写一个基于JavaParser的库,使用Javasymbol solver解析源文件上的类名。我试图获得类和方法注释的限定类名,但目前无法获得它们 我目前的代码是: final CombinedTypeSolver CombinedTypeSolver=new CombinedTypeSolver(); 添加(新的ReflectionTypeSolver()); 添加(新的JarTypeSolver(JUNIT_路径)); 最终的JavaParserFacade JavaParserFa
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" +
"");
你是对的,但是我已经改变了注释的位置来装饰这个方法,结果仍然是一样的。我会更新这个问题。谢谢。啊,好吧,那就更可能是图书馆本身了。让我看看能不能买到有用的东西。