当解析链式调用时,如:“ClassA.getClassB().methodB()”.
尽管预先在JavaParserFacade中,添加了所有必须的JarTypeSolver,包括ClassB所在的Jar包.
并且debug确认JavaParser已成功添加ClassB所在的JarTypeSolver.
解析到"ClassA.getClassB().methodB()“这样的链式调用时,还是会报"NotFoundException”,ClassB找不到.
于是debug JavaParser 和 javassist 的源码,发现CtMethod在调用getReturnType方法时,
会使用declaringClass的ClassPool来解析ClassB,这就导致了NotFoundException 的出现.
evaluate declaringClass的ClassPool发现,这里边并没有包含ClassB.
于是,修改JavaParser的源码,在getReturnType报NotFoundException时,
catch异常,并使用上下文中的typeSolver来解析ClassB,并解析成功.
已给Javaparser 提pull request: https://github.com/javaparser/javaparser/pull/2398
PR已被接受.
在JavaParser解析链式调用如ClassA.getClassB().methodB()时,即使已添加所有必要的JarTypeSolver,仍会出现NotFoundException。通过修改JavaParser源码,在getReturnType捕获NotFoundException,并使用typeSolver解析ClassB,成功解决该问题。
1896

被折叠的 条评论
为什么被折叠?



