一种识别代码的依赖关系的方法、装置、设备及介质制造方法及图纸

技术编号:38548531 阅读:15 留言:0更新日期:2023-08-22 20:56
本说明书实施例公开了一种识别代码的依赖关系的方法、装置、设备及介质。方案包括:在编译模块的期间基于模块的源代码,利用Clang编译器生成所述源代码对应的AST语法树;利用改进的LibTooling工具抽取所述AST语法树中的关键信息;基于所述关键信息,将所述AST语法树进行扁平化处理并结构化建模,生成所述源代码对应的元数据文件;基于模块

【技术实现步骤摘要】
一种识别代码的依赖关系的方法、装置、设备及介质


[0001]本申请涉及计算机
,尤其涉及一种识别代码的依赖关系的方法、装置、设备及介质。

技术介绍

[0002]随着计算机技术的发展,目前客户端采用的大多是多模块的开发方式,随着模块量和代码量的不断增加,代码之前的依赖关系也日趋复杂,因此,如何准确的分析代码之间的依赖是亟待解决的技术问题。

技术实现思路

[0003]本说明书实施例提供一种识别代码的依赖关系的方法、装置、设备及介质,以解决现有的依赖关系分析方法存在的不准确的问题。
[0004]为解决上述技术问题,本说明书实施例是这样实现的:
[0005]本说明书实施例提供的一种识别代码的依赖关系的方法,包括:
[0006]在编译模块的期间基于所述模块的源代码,利用Clang编译器生成所述源代码对应的AST语法树;
[0007]利用改进的LibTooling工具抽取所述AST语法树中的关键信息;
[0008]基于所述关键信息,将所述AST语法树进行扁平化处理并结构化建模,生成所述源代码对应本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种识别代码的依赖关系的方法,包括:在编译模块的期间基于模块的源代码,利用Clang编译器生成所述源代码对应的AST语法树;利用改进的LibTooling工具抽取所述AST语法树中的关键信息;基于所述关键信息,将所述AST语法树进行扁平化处理并结构化建模,生成所述源代码对应的元数据文件;基于模块



函数的方式,生成所述源代码中每一个函数的函数全局唯一签名;基于所述函数全局唯一签名,将各个元数据文件进行关联,得到用于表示所述源代码的依赖关系的关联数据文件。2.根据权利要求1所述的方法,所述利用改进的LibTooling工具抽取所述AST语法树中的关键信息,具体包括:利用改进的RecursiveASTVisitor遍历所述AST语法树,以深度优先的方式遍历所述AST语法树的AST节点,得到所述关键信息。3.根据权利要求2所述的方法,所述改进的RecursiveASTVisitor包括:InterfaceVisitor,用于遍历所有的类,并记录类的相关信息,包括类所属模块、类名、类所在代码路径信息中至少一种;ProtocolVisitor,用于遍历所有的协议,并记录协议的相关信息,包括协议所属的模块、协议名称、协议所在代码路径中至少一种;FunctionVisitor,用于遍历所有的C函数,并记录C函数的相关信息,包括函数名、函数的入参和出参、函数所在的文件名和行数中至少一种;PropertyVisitor,用于遍历所有类属性,并记录类属性相关信息,包括类名、属性名、属性类名、文件名、行数中至少一种;MethodVisitor,用于遍历类的所有方法,并记录类中函数相关信息,包括类名、函数名、函数的入参和出参、函数所在文件名和行数中至少一种;BlockVisitor,用于遍历类中的Block代码块,并记录Block代码块中包含的代码;MessageExprVisitor,用于遍历函数中的ObjC语句,同时记录方法之间的调用关系;CallExprVisitor,用于遍历函数中的C语句,同时记录方法之间的调用关系;ObjcPropertyRefVisitor,用于遍历函数中的ObjC属性调用,同时记录方法之间的调用关系;ObjclvarRefVisitor,用于遍历函数中的C++属性调用,同时记录方法之间的调用关系。4.根据权利要求1所述的方法,所述方法还包括:获取包包含的各个模块对应的所述关联数据文件;所述关联数据文件表示所述模块内的代码依赖关系;基于所述函数全局唯一签名,将各个所述关联数据文件合并,得到所述包对应的依赖关系图谱;所述依赖关系图谱包括所述各个模块之间的依赖关系信息。5.根据权利要求4所述的方法,各个所述关...

【专利技术属性】
技术研发人员:李圣龙张宁
申请(专利权)人:支付宝杭州信息技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1