Open kandy-wang opened 1 year ago
应该是在这个方法中com.adrninistrator.jacg.runner.base.AbstractRunnerGenCallGraph#queryMethodCallFlags的950-953行,查询方法没有向上的调用方法时,默认的callFlags为0,造成com.adrninistrator.jacg.runner.RunnerGenAllGraph4Callee#recordOneCalleeMethod中360-367行判断方法是否有注解未执行。
MethodCallFlagsEnum.MCFE_EE_METHOD_ANNOTATION这里的判断是对当前指定的被调用方法处理,如果被调用方法上有注解就添加 MethodCallFlagsEnum.MCFE_ER_METHOD_ANNOTATION这里的判断是对指定的被调用方法逐层向上查找调用方法时,如果调用方法上有注解就添加 现在的处理看起来没有问题,是被调用方法上有注解没有显示出来吗,可以发一下示例代码吗
`package com.example.demo.controller.chain;
import org.springframework.web.bind.annotation.*;
@RestController public class ChainController {
@RequestMapping("/chain/get_project_id_by_evn")
public String getProjectId(@RequestParam(value = "env", required = false) String evn) {
if (Character.isLetter(evn.charAt(0))) {
return "abc";
}
return "123";
}
}` 使用com.example.demo.controller.chain.ChainController:11收集向上的调用链,
现在在处理向上的方法调用时,如果发现指定的方法没有被调用,只会生成一个空文件,方法上的注解不会显示在文件里
所以这里能否优化一下,毕竟通过代码变更获取接口入口时,经常会有接口定义的方法变更的情况,而无法获取到接口,造成精准推荐时缺少指定的接口。而且并没有生成空文件,只是生成的文件内容缺少方法上的注解
前几天通过邮件回复的看起来没有生效,现在的处理是如果发现有指定的方法不存在时会报错,是需要改成不报错并且生成空文件就可以吗
最好是如果发现指定的方法没有被调用时,检查是否有注解,有注解生成对应的文件,无注解生成空文件
看了一下现在实现的功能,如果指定的需要查找向下或向下的方法不存在或者找不到调用方法时,都是会输出空文件,不会影响其他方法的执行
如果需要知道方法上的注解信息的话,可以用com.adrninistrator.jacg.handler.annotation.AnnotationHandler
类的方法来查询,有各种查询指定类或方法的注解信息的功能
参考示例代码:https://github.com/Adrninistrator/java-all-call-graph/blob/main/java-all-call-graph/src/test/java/test/run_by_code/handler/annotation/TestAnnotationHandler.java