[发明专利]一种确定工程代码中的无用函数的方法和装置有效
申请号: | 201710818891.5 | 申请日: | 2017-09-12 |
公开(公告)号: | CN107729015B | 公开(公告)日: | 2020-12-11 |
发明(设计)人: | 宋竟轩;李彬;叶进 | 申请(专利权)人: | 创新先进技术有限公司 |
主分类号: | G06F8/41 | 分类号: | G06F8/41 |
代理公司: | 北京亿腾知识产权代理事务所(普通合伙) 11309 | 代理人: | 陈霁 |
地址: | 开曼群岛大开曼岛*** | 国省代码: | 暂无信息 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 确定 工程 代码 中的 无用 函数 方法 装置 | ||
1.一种确定工程代码中的无用函数的方法,包括:
遍历所述工程代码所对应的抽象语法树,从中提取与直接调用事件相关的直接调用信息;
从所述抽象语法树中推导获得与动态调用事件相关的动态调用信息;
提供调用关系图,该调用关系图包括所述直接调用信息和所述动态调用信息;
基于调用关系图,确定至少一个根节点,所述根节点对应于确定被使用的函数;
从所述至少一个根节点开始,采用染色逻辑对调用关系图中的函数进行染色;
将未被染色的函数确定为无用函数。
2.根据权利要求1所述的方法,其特征在于,所述从抽象语法树中推导获得与动态调用事件相关的动态调用信息包括:
从所述抽象语法树中声明节点的表达式推导动态调用的调用类的类型,以及
从所述声明节点的表达式推导动态调用的函数名。
3.根据权利要求2所述的方法,其特征在于,所述从抽象语法树中声明节点的表达式推导动态调用的调用类的类型包括:
响应于所述声明节点的表达式为类(class)动态构造类型的表达式,根据表达式中的字符串参数推导调用类的类型;
响应于所述声明节点的表达式为Self.Super指针,根据表达式函数声明所在的类,推导出调用类;
从所述声明节点的表达式推导动态调用的函数名包括:
响应于所述声明节点的表达式带有字符串类型的参数,推导出该字符串类型的参数的值,作为函数名;
响应于所述声明节点的表达式为Objc地址类型,找到该地址中的函数声明节点,从该节点的声明中获取函数名。
4.根据权利要求1所述的方法,其特征在于,所述提供调用关系图包括:采用数据库表格式提供所述调用关系图,所述数据库表格式包括:通过函数的调用类、函数的方法名、函数的类型定义的函数,通过调用者、被调用者定义的调用事件,以及用于定义类和接口信息的容器结构。
5.根据权利要求1所述的方法,其特征在于,所述基于调用关系图,确定至少一个根节点包括:
从所述调用关系图中确定出被使用的类;
从所述被使用的类中确定出被使用的函数作为所述至少一个根节点。
6.根据权利要求1所述的方法,其特征在于,所述染色逻辑包括:在染色某个函数之后,将该函数所调用的其他函数进行染色。
7.根据权利要求1所述的方法,其特征在于,所述染色逻辑包括:在染色某个函数之后,找到该函数对应方法的子类,将子类中覆盖该方法的函数进行染色。
8.根据权利要求1所述的方法,其特征在于,所述染色逻辑包括:在染色某个函数之后,判断该函数的调用者是否为接口;如果是接口,确定实现该接口的容器,对该容器中实现该函数对应方法的函数进行染色。
9.根据权利要求1所述的方法,其特征在于,所述染色逻辑包括:根据系统回调函数表,对第一次染色的类容器中的系统回调函数进行染色。
10.根据权利要求1所述的方法,其特征在于,所述染色逻辑包括:对预先定义的白名单中的函数进行染色。
11.一种确定工程代码中的无用函数的装置,包括:
直接提取单元,配置为,遍历所述工程代码所对应的抽象语法树,从中提取与直接调用事件相关的直接调用信息;
动态推导单元,配置为,从所述抽象语法树中推导获得与动态调用事件相关的动态调用信息;
提供单元,配置为,提供调用关系图,该调用关系图包括所述直接调用信息和所述动态调用信息;
根节点确定单元,配置为基于调用关系图,确定至少一个根节点,所述根节点对应于确定被使用的函数;
染色单元,配置为从所述至少一个根节点开始,采用染色逻辑对调用关系图中的函数进行染色;
无用函数确定单元,将未被染色的函数确定为无用函数。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于创新先进技术有限公司,未经创新先进技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710818891.5/1.html,转载请声明来源钻瓜专利网。