CN114968350A - 一种代码方法调用链的搜索方法、装置及设备 - Google Patents
一种代码方法调用链的搜索方法、装置及设备 Download PDFInfo
- Publication number
- CN114968350A CN114968350A CN202210751684.3A CN202210751684A CN114968350A CN 114968350 A CN114968350 A CN 114968350A CN 202210751684 A CN202210751684 A CN 202210751684A CN 114968350 A CN114968350 A CN 114968350A
- Authority
- CN
- China
- Prior art keywords
- calling
- code
- target
- information
- signature
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供一种代码方法调用链的搜索方法、装置及设备,涉及软件开发技术领域。该方法根据待查询代码方法的信息,生成待查询代码方法的目标方法签名;根据目标方法签名,从预设软件应用的方法调用关系中查询目标方法签名对应的目标调用关系;其中,预设软件应用的方法调用关系包括:预设软件应用中所有代码方法的方法签名对应的调用关系;根据目标调用关系中的代码方法信息生成待查询代码方法的调用链。从而,通过预设方法签名与调用关系的对应关系,能精准地查询代码方法调用链,同时更加省时省力。
Description
技术领域
本发明涉及软件开发技术领域,具体而言,涉及一种代码方法调用链的搜索方法、装置及设备。
背景技术
在一个成熟的软件系统中,随着众多需求功能点的开发迭代,以及多次对软件系统的不断更新和拆分,原本单一的软件系统也逐渐形成了一个复杂而庞大、由众多子服务构成的微服务软件系统。伴随着系统复杂性与模块化的增加,往往修改系统中的一小段代码,就会影响众多的功能点,从而使系统接下来的迭代与维护带来了成本。所以面对复杂的系统,在进行某个功能点的编码前,需要对某段代码的影响范围进行评估,从而更加准确地确定改动点的影响范围。
尽管目前众多的集成开发工具中(如:IntelliJ IDEA、eclipse、myeclipse等)提供了根据某个方法可以搜索到直接关联的方法有哪些,但此种方法需要耗费大量的人力时间,在查找时且有可能由于人为原因导致关联方法的遗漏,同时此种方式对于当下流行的微服务代码软件结构都是由众多子项目构成的,在面对当下微服务结构的代码时就往往显得不是很适用。因为在现有的集成开发工具中,对于某个项目是由多个独立的子项目构成的情况,现有技术查看其某个方法的调用链时则需要将每个项目都加载到集成开发工具中,过多的项目也会给系统带来更多的物理内存要求。因此,亟需一种精准地搜索关联方法的方法。
发明内容
本发明的目的在于,针对上述现有技术中的不足,本申请提供了一种代码方法调用链的搜索方法、装置及设备,以解决现有技术中搜索关联方法的精度较低且费时费力等问题。
为实现上述目的,本申请实施例采用的技术方案如下:
第一方面,本申请实施例提供一种代码方法调用链的搜索方法,所述方法包括:
根据待查询代码方法的信息,生成所述待查询代码方法的目标方法签名;
根据所述目标方法签名,从预设软件应用的方法调用关系中查询所述目标方法签名对应的目标调用关系;其中,所述预设软件应用的方法调用关系包括:所述预设软件应用中所有代码方法的方法签名对应的调用关系;
根据所述目标调用关系中的代码方法信息生成所述待查询代码方法的调用链。
可选地,所述根据所述目标方法签名,从预设软件应用的方法调用关系中查询所述目标方法签名对应的目标调用关系之前,所述方法还包括:
对所述预设软件应用的源码文件进行语法解析,得到所述源码文件的抽象语法树;
从所述源码文件的抽象语法树中提取所述所有代码方法的信息,并构建所述所有代码方法的方法签名;
根据所述所有代码方法的信息,从所述源码文件中获取所述所有代码方法的方法体;
从所述所有代码方法的方法体中获取所述所有代码方法的调用关系;
存储所述所有代码方法的方法签名,和调用关系,作为所述预设软件应用的方法调用关系。
可选地,所述对所述预设软件应用的源码文件进行语法解析,得到所述源码文件的抽象语法树之前,所述方法还包括:
从所述预设软件应用的多个代码仓库中分别下载所述预设软件应用的多个所述源码文件,多个所述源码文件为所述预设软件应用中多个子应用的源代码文件;
所述对所述预设软件应用的源码文件进行语法解析,得到所述源码文件的抽象语法树,包括:
对每个所述源码文件进行语法解析,得到每个所述源码文件的抽象语法树。
可选地,所述对每个所述源码文件进行语法解析,得到每个所述源码文件的抽象语法树,包括:
采用每个所述源码文件的编码语言对应的语法解析文件,对每个所述源码文件进行语法解析,得到每个所述源码文件的抽象语法树。
可选地,所述根据待查询代码方法的信息,生成所述待查询代码方法的目标方法签名,包括:
根据所述待查询代码方法的方法信息和所述待查询代码方法所属的目标类标识,生成所述目标方法签名。
可选地,所述根据所述目标方法签名,从预设软件应用的方法调用关系中查询所述目标方法签名对应的目标调用关系,包括:
根据所述目标类标识和所述目标方法签名,从所述预设软件应用的第一索引关系中,确定与所述目标方法签名对应的第一方法信息;其中,所述第一索引关系中存储有:所述第一索引关系存储有:所述预设软件应用中至少一个类标识和方法信息的对应关系,每个类标识对应多个方法信息;
根据所述第一方法信息,从所述预设软件应用的第二索引关系中,确定与所述第一方法信息对应的调用方法信息,其中,所述第二索引关系中存储有:所述第一方法信息和方法调用信息的对应关系;
所述目标调用关系中的代码方法信息包括:所述第一方法信息,和所述第一方法信息对应的调用方法信息。
可选地,所述根据所述目标类标识和所述目标方法签名,从所述预设软件应用的第一索引关系中,确定与所述目标方法签名对应的第一方法信息,包括:
根据所述目标类标识,判断所述第一索引关系中,所述目标类标识对应的多个方法信息中是否存在所述目标方法签名,其中,所述第一索引关系中每个方法信息中包括对应的方法签名;
所述根据所述第一方法信息,从所述预设软件应用的第二索引关系中,确定与所述第一方法信息对应的方法调用信息,包括:
若所述多个方法信息中第一方法信息中存在所述目标方法签名,根据所述第一方法信息,从所述第二索引关系中,获取所述第一方法信息对应的多条调用签名,所述第二索引关系中存储有:所述第一方法信息和所述多条调用签名的对应关系,每条调用签名用于表征所述第一方法信息对应方法体中多条代码的调用方法信息;
所述第一方法信息对应的调用方法信息包括:所述第一方法信息对应的多条调用签名。
可选地,所述根据所述目标调用关系中的代码方法信息生成所述待查询代码方法的调用链,包括:
若所述第一方法信息中存在所述目标方法签名,则初始化一个方法调用链,并将所述第一方法信息作为根节点存于所述方法调用链中;
将所述多条调用签名作为分支节点添加至所述方法调用链中,生成所述待查询代码方法的调用链。
第一方面,本申请实施例提供一种代码方法调用链的搜索装置,所述装置包括:
第一生成模块,用于根据待查询代码方法的信息,生成所述待查询代码方法的目标方法签名;
查询模块,用于根据所述目标方法签名,从预设软件应用的方法调用关系中查询所述目标方法签名对应的目标调用关系;其中,所述预设软件应用的方法调用关系包括:所述预设软件应用中所有代码方法的方法签名对应的调用关系;
第二生成模块,用于根据所述目标调用关系中的代码方法信息生成所述待查询代码方法的调用链。
第一方面,本申请实施例提供一种电子设备,包括:处理器、存储介质,所述处理器与所述存储介质之间通过总线通信连接,所述存储介质存储有所述处理器可执行的程序指令,所述处理器调用所述存储介质中存储的所述程序指令,以执行如第一方面提供的任一所述的代码方法调用链的搜索方法的步骤。
相对于现有技术而言,本申请具有以下有益效果:
本申请提供一种代码方法调用链的搜索方法、装置及设备。该方法根据待查询代码方法的信息,生成待查询代码方法的目标方法签名;根据目标方法签名,从预设软件应用的方法调用关系中查询目标方法签名对应的目标调用关系;其中,预设软件应用的方法调用关系包括:预设软件应用中所有代码方法的方法签名对应的调用关系;根据目标调用关系中的代码方法信息生成待查询代码方法的调用链。从而,通过预设方法签名与调用关系的对应关系,能精准地查询代码方法调用链,同时更加省时省力。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例提供的一种代码方法调用链的搜索方法的流程示意图;
图2为本申请实施例提供的一种生成预设软件应用的方法调用关系的方法的示意图;
图3为本申请实施例提供的一种在线获取解析源码文件得到抽象语法树的方法;
图4为本申请实施例提供的一种根据目标方法签名查询目标调用关系的方法的流程示意图;
图5为本申请实施例提供的一种确定方法调用信息的方法的流程示意图;
图6为本申请实施例提供的一种生成待查询代码方法的调用链的方法;
图7为本申请实施例提供的一种代码方法调用链的搜索装置的示意图;
图8为本申请实施例提供的一种电子设备的示意图。
图标:701-第一生成模块、702-查询模块、703-第二生成模块、801-处理器、802-存储介质。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
此外,若出现术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
需要说明的是,在不冲突的情况下,本发明的实施例中的特征可以相互结合。
面对复杂的软件系统,在对某个功能点进行编码前,需要对某段代码的影响范围进行评估,确定改动点的影响范围。为了更加准确地确定改动点的影响范围,本申请提供了一种代码方法调用链的搜索方法、装置及设备。
如下通过具体示例对本申请提供的一种代码方法调用链的搜索方法进行解释说明。图1为本申请实施例提供的一种代码方法调用链的搜索方法的流程示意图,该方法的执行主体可以是电子设备,该电子设备可以为具有计算处理功能的设备,如台式电脑、笔记本电脑、平板电脑等。如图1所示,该方法包括:
S101、根据待查询代码方法的信息,生成待查询代码方法的目标方法签名。
获取代码方法的调用链时,首先需要输入待查询代码方法的信息。根据待查询代码方法的信息,生成待查询代码方法的目标方法签名。目标方法签名可作为查询待查询代码方法的标识。示例地,待查询代码方法的信息包括:待查询代码方法的名称和待查询代码方法的入参集合。需要说明的是,本申请中的代码方法可适用于多种编程语言,并不限制编程语言的种类。
S102、根据目标方法签名,从预设软件应用的方法调用关系中查询目标方法签名对应的目标调用关系。
其中,预设软件应用的方法调用关系包括:预设软件应用中所有代码方法的方法签名对应的调用关系。根据目标方法签名,在从预设软件应用的方法调用关系中可以查询到目标方法签名对应的目标调用关系。通过提前预设方法签名与调用关系的对应关系,使得根据目标方法签名查找对应的调用关系时,更加省时省力,还能精准地查询到目标方法签名对应的目标调用关系。
示例地,一个方法签名可能对应多个调用关系,多个调用关系为并行关系,在查询时,需要根据目标方法签名进行多次查询,直至将预设软件应用的方法调用关系中与目标方法签名对应的目标调用关系全部查到。
S103、根据目标调用关系中的代码方法信息生成待查询代码方法的调用链。
根据一个目标调用关系中的代码方法信息生成对应的方法调用链,根据多个目标调用关系对应的方法调用链生成待查询代码方法的调用链。示例地,可预设查询结果显示规则,根据预设查询结果显示规则对待查询代码方法的调用链在web端显示。
综上,在本申请实施例中,根据待查询代码方法的信息,生成待查询代码方法的目标方法签名;根据目标方法签名,从预设软件应用的方法调用关系中查询目标方法签名对应的目标调用关系;其中,预设软件应用的方法调用关系包括:预设软件应用中所有代码方法的方法签名对应的调用关系;根据目标调用关系中的代码方法信息生成待查询代码方法的调用链。从而,通过预设方法签名与调用关系的对应关系,能精准地查询代码方法调用链,同时更加省时省力。
图2为本申请实施例提供的一种生成预设软件应用的方法调用关系的方法的示意图。如图2所示,在S102中的根据目标方法签名,从预设软件应用的方法调用关系中查询目标方法签名对应的目标调用关系之前,方法还包括:
S201、对预设软件应用的源码文件进行语法解析,得到源码文件的抽象语法树。
获取预设软件应用的源码文件,对预设软件应用的源码文件中的源码子路径的内容进行语法解析,得到源码文件的抽象语法树。
示例地,可以采用ANTLR(开源语法分析器)对预设软件应用的源码文件进行解析,解析后从而得到一棵抽象语法树。
S202、从源码文件的抽象语法树中提取所有代码方法的信息,并构建所有代码方法的方法签名。
从源码文件的抽象语法树中提取所有代码方法的信息,根据代码方法的信息生成代码方法的方法签名,根据所有代码方法的信息对应的方法签名,构建所有代码方法的方法签名。
S203、根据所有代码方法的信息,从源码文件中获取所有代码方法的方法体。
根据代码方法的信息,从源码文件中获取代码方法的信息对应的代码方法的方法体,并依次从源码文件中获取所有代码方法的方法体。
S204、从所有代码方法的方法体中获取所有代码方法的调用关系。
对代码方法的方法体中的每一条语句进行遍历解析,得到代码方法的方法体对应的调用关系。依此,从所有代码方法的方法体中获取所有代码方法的调用关系,精准地得到所有代码方法的调用关系。
S205、存储所有代码方法的方法签名,和调用关系,作为预设软件应用的方法调用关系。
获取到所有代码方法的方法签名和调用关系之后,得到所有代码方法的方法签名和调用关系之间的对应关系,存储所有代码方法的方法签名和调用关系以及该对应关系,作为预设软件应用的方法调用关系。
综上,在本申请实施例中,对预设软件应用的源码文件进行语法解析,得到源码文件的抽象语法树;从源码文件的抽象语法树中提取所有代码方法的信息,并构建所有代码方法的方法签名;根据所有代码方法的信息,从源码文件中获取所有代码方法的方法体;从所有代码方法的方法体中获取所有代码方法的调用关系;存储所有代码方法的方法签名,和调用关系,作为预设软件应用的方法调用关系。从而,精准地得到预设软件应用的方法调用关系。
图3为本申请实施例提供的一种在线获取解析源码文件得到抽象语法树的方法。如图3所示,在S201中的对预设软件应用的源码文件进行语法解析,得到源码文件的抽象语法树之前,方法还包括:
S301、从预设软件应用的多个代码仓库中分别下载预设软件应用的多个源码文件,多个源码文件为预设软件应用中多个子应用的源代码文件。
由用户在系统中定义预设软件应用,其中,一个预设软件应用包含多个子应用,每个子应用的属性包括:应用名称、代码仓库类型、代码仓库地址、代码仓库登录凭证、待分析仓库分支名称、源码语言类型、分析源码子路径。
根据具体的应该权限访问信息录入具有可读权限的访问凭证信息,并根据用户录入的预设软件应用的信息获取出代码仓库列表,并进行后台异步下载,将预设软件应用的源码信息下载到系统中对应的临时磁盘中,不会占用用户的物理机的硬件资源,空间占用小。
进一步地,则S201中的对预设软件应用的源码文件进行语法解析,得到源码文件的抽象语法树,包括:
S302、对每个源码文件进行语法解析,得到每个源码文件的抽象语法树。
遍历已经下载好的预设软件应用的多个源码文件,采用解析路径规则对每个源码文件进行语法解析,得到每个源码文件的抽象语法树。
综上,在本申请实施例中,从预设软件应用的多个代码仓库中分别下载预设软件应用的多个源码文件,多个源码文件为预设软件应用中多个子应用的源代码文件;对每个源码文件进行语法解析,得到每个源码文件的抽象语法树。从而,通过在线下载的方式获取解析源码文件,节省了物理资源。
进一步地,继续参照图3,S302中的对每个源码文件进行语法解析,得到每个源码文件的抽象语法树,包括:
采用每个源码文件的编码语言对应的语法解析文件,对每个源码文件进行语法解析,得到每个源码文件的抽象语法树。
获取每个源码文件对应的编码语言。根据编码语言选择对应的语法解析文件,并采用对应的语法解析文件对每个源码文件中的源码子路径的内容进行语法解析,得到每个源码文件的抽象语法树。
进一步地,继续参照图1,S101中的根据待查询代码方法的信息,生成待查询代码方法的目标方法签名,包括:
根据待查询代码方法的方法信息和待查询代码方法所属的目标类标识,生成目标方法签名。
待查询代码方法所属的目标类标识可以确定待查询代码方法所属的类。根据待查询代码方法的方法信息和待查询代码方法所属的目标类标识,生成目标方法签名之后。目标方法签名中表征了待查询代码方法所属的类的信息,便于根据目标方法签名进行查询。
图4为本申请实施例提供的一种根据目标方法签名查询目标调用关系的方法的流程示意图。如图4所示,S102中的根据目标方法签名,从预设软件应用的方法调用关系中查询目标方法签名对应的目标调用关系,包括:
S401、根据目标类标识和目标方法签名,从预设软件应用的第一索引关系中,确定与目标方法签名对应的第一方法信息。
其中,第一索引关系中存储有:第一索引关系存储有:预设软件应用中至少一个类标识和方法信息的对应关系,每个类标识对应多个方法信息。
根据目标类标识,从预设软件应用的第一索引关系中,确定与目标类标识对应的类标识。根据目标方法签名,从目标类标识对应的多个方法信息中确定目标方法签名对应的方法信息。并将目标方法签名对应的方法信息作为第一方法信息。示例地,在目标类标识对应的多个代码方法中,第一方法信息对应的代码方法可能为多个,因此需要遍历目标类标识对应的所有代码方法,查询到所有的第一方法信息对应的代码方法。
S402、根据第一方法信息,从预设软件应用的第二索引关系中,确定与第一方法信息对应的调用方法信息。
其中,第二索引关系中存储有:第一方法信息和方法调用信息的对应关系。
在得到第一方法信息对应的代码方法后,逐级查询,得到调用第一方法信息对应的代码方法的调用方法。并获取直接调用第一方法信息对应的代码方法的调用方法信息,以及间接调用第一方法信息对应的代码方法的调用方法信息,即第一方法信息对应的调用方法信息。以此可以精准地得到调用方法信息。
目标调用关系中的代码方法信息包括:第一方法信息,和第一方法信息对应的调用方法信息。在得到第一方法信息和第一方法信息对应的调用方法信息之后,也就精准地得到了目标调用关系中的代码方法信息。
综上,在本申请实施例中,根据目标类标识和目标方法签名,从预设软件应用的第一索引关系中,确定与目标方法签名对应的第一方法信息;其中,第一索引关系中存储有:第一索引关系存储有:预设软件应用中至少一个类标识和方法信息的对应关系,每个类标识对应多个方法信息;根据第一方法信息,从预设软件应用的第二索引关系中,确定与第一方法信息对应的调用方法信息,其中,第二索引关系中存储有:第一方法信息和方法调用信息的对应关系;目标调用关系中的代码方法信息包括:第一方法信息,和第一方法信息对应的调用方法信息。从而,精准地得到了目标调用关系中的代码方法信息。
图5为本申请实施例提供的一种确定方法调用信息的方法的流程示意图。如图5所示,在S401中的根据目标类标识和目标方法签名,从预设软件应用的第一索引关系中,确定与目标方法签名对应的第一方法信息,包括:
S501、根据目标类标识,判断第一索引关系中,目标类标识对应的多个方法信息中是否存在目标方法签名。
其中,第一索引关系中每个方法信息中包括对应的方法签名。
根据目标类标识,第一索引关系中,是否存在与目标类标识对应的类标识。若不存在,则停止查询。若存在,则继续判断目标类标识对应的多个方法信息中是否存在目标方法签名。若不存在,则停止查询。
进一步地,在S402中的根据第一方法信息,从预设软件应用的第二索引关系中,确定与第一方法信息对应的方法调用信息,包括:
S502、若多个方法信息中第一方法信息中存在目标方法签名,根据第一方法信息,从第二索引关系中,获取第一方法信息对应的多条调用签名。
第二索引关系中存储有:第一方法信息和多条调用签名的对应关系,每条调用签名用于表征第一方法信息对应方法体中多条代码的调用方法信息。第一方法信息对应的调用方法信息包括:第一方法信息对应的多条调用签名。
若多个方法信息中第一方法信息中存在目标方法签名,则继续查询,并获取第一方法信息对应的多条调用签名,直至获取到第一方法信息对应的所有条调用签名。
综上,在本申请实施例中,根据目标类标识,判断第一索引关系中,目标类标识对应的多个方法信息中是否存在目标方法签名,其中,第一索引关系中每个方法信息中包括对应的方法签名;若多个方法信息中第一方法信息中存在目标方法签名,根据第一方法信息,从第二索引关系中,获取第一方法信息对应的多条调用签名,第二索引关系中存储有:第一方法信息和多条调用签名的对应关系,每条调用签名用于表征第一方法信息对应方法体中多条代码的调用方法信息。从而,通过先验判断,使得查询更加高效。
图6为本申请实施例提供的一种生成待查询代码方法的调用链的方法。如图6所示,S103中的根据目标调用关系中的代码方法信息生成待查询代码方法的调用链,包括:
S601、若第一方法信息中存在目标方法签名,则初始化一个方法调用链,并将第一方法信息作为根节点存于方法调用链中。
为形成方法调用链,可将存在目标方法签名的第一方法信息作为方法调用链根节点,以呈现出第一方法信息与方法调用链中其他节点之间的调用关系。需要说明的是,若第一方法信息存在于多个并行的调用关系中,则建立多条方法调用子链,并将第一方法信息作为根节点存于多条方法调用子链中,由多条方法调用子链组成方法调用链。
S602、将多条调用签名作为分支节点添加至方法调用链中,生成待查询代码方法的调用链。
确定了方法调用链中的根节点,将每条调用签名作为分支节点添加至对应的方法调用子链中,多条方法调用子链组成方法调用链。最终,生成待查询代码方法的调用链,以清楚地展示待查询代码方法的调用关系。
综上,在本申请实施例中,若第一方法信息中存在目标方法签名,则初始化一个方法调用链,并将第一方法信息作为根节点存于方法调用链中;将多条调用签名作为分支节点添加至方法调用链中,生成待查询代码方法的调用链。从而,清楚地展示待查询代码方法的调用关系。
下述对用以执行的本申请所提供的一种代码方法调用链的搜索装置、设备及存储介质等进行说明,其具体的实现过程以及技术效果参见上述,下述不再赘述。
图7为本申请实施例提供的一种代码方法调用链的搜索装置的示意图,如图7所示,该装置包括:
第一生成模块701,用于根据待查询代码方法的信息,生成待查询代码方法的目标方法签名。
查询模块702,用于根据目标方法签名,从预设软件应用的方法调用关系中查询目标方法签名对应的目标调用关系;其中,预设软件应用的方法调用关系包括:预设软件应用中所有代码方法的方法签名对应的调用关系。
第二生成模块703,用于根据目标调用关系中的代码方法信息生成待查询代码方法的调用链。
进一步地,查询模块702,具体用于对预设软件应用的源码文件进行语法解析,得到源码文件的抽象语法树;从源码文件的抽象语法树中提取所有代码方法的信息,并构建所有代码方法的方法签名;根据所有代码方法的信息,从源码文件中获取所有代码方法的方法体;从所有代码方法的方法体中获取所有代码方法的调用关系;存储所有代码方法的方法签名,和调用关系,作为预设软件应用的方法调用关系。
进一步地,查询模块702,具体还用于从预设软件应用的多个代码仓库中分别下载预设软件应用的多个源码文件,多个源码文件为预设软件应用中多个子应用的源代码文件;对预设软件应用的源码文件进行语法解析,得到源码文件的抽象语法树,包括:对每个源码文件进行语法解析,得到每个源码文件的抽象语法树。
进一步地,查询模块702,具体还用于采用每个源码文件的编码语言对应的语法解析文件,对每个源码文件进行语法解析,得到每个源码文件的抽象语法树。
进一步地,第一生成模块701,具体还用于根据待查询代码方法的方法信息和待查询代码方法所属的目标类标识,生成目标方法签名。
进一步地,查询模块702,具体还用于根据目标类标识和目标方法签名,从预设软件应用的第一索引关系中,确定与目标方法签名对应的第一方法信息;其中,第一索引关系中存储有:第一索引关系存储有:预设软件应用中至少一个类标识和方法信息的对应关系,每个类标识对应多个方法信息;根据第一方法信息,从预设软件应用的第二索引关系中,确定与第一方法信息对应的调用方法信息,其中,第二索引关系中存储有:第一方法信息和方法调用信息的对应关系;目标调用关系中的代码方法信息包括:第一方法信息,和第一方法信息对应的调用方法信息。
进一步地,查询模块702,具体还用于根据目标类标识,判断第一索引关系中,目标类标识对应的多个方法信息中是否存在目标方法签名,其中,第一索引关系中每个方法信息中包括对应的方法签名;根据第一方法信息,从预设软件应用的第二索引关系中,确定与第一方法信息对应的方法调用信息,包括:若多个方法信息中第一方法信息中存在目标方法签名,根据第一方法信息,从第二索引关系中,获取第一方法信息对应的多条调用签名,第二索引关系中存储有:第一方法信息和多条调用签名的对应关系,每条调用签名用于表征第一方法信息对应方法体中多条代码的调用方法信息;第一方法信息对应的调用方法信息包括:第一方法信息对应的多条调用签名。
进一步地,第二生成模块703,具体还用于若第一方法信息中存在目标方法签名,则初始化一个方法调用链,并将第一方法信息作为根节点存于方法调用链中;将多条调用签名作为分支节点添加至方法调用链中,生成待查询代码方法的调用链。
图8为本申请实施例提供的一种电子设备的示意图,该电子设备可以是具备计算处理功能的设备。
该电子设备包括:处理器801、存储介质802。处理器801和存储介质802通过总线连接。
存储介质802用于存储程序,处理器801调用存储介质802存储的程序,以执行上述方法实施例。具体实现方式和技术效果类似,这里不再赘述。
可选地,本发明还提供一种程序产品,例如计算机可读存储介质,包括程序,该程序在被处理器执行时用于执行上述方法实施例。
在本发明所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(英文:processor)执行本发明各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(英文:Read-Only Memory,简称:ROM)、随机存取存储器(英文:Random Access Memory,简称:RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
Claims (10)
1.一种代码方法调用链的搜索方法,其特征在于,所述方法包括:
根据待查询代码方法的信息,生成所述待查询代码方法的目标方法签名;
根据所述目标方法签名,从预设软件应用的方法调用关系中查询所述目标方法签名对应的目标调用关系;其中,所述预设软件应用的方法调用关系包括:所述预设软件应用中所有代码方法的方法签名对应的调用关系;
根据所述目标调用关系中的代码方法信息生成所述待查询代码方法的调用链。
2.根据权利要求1所述的方法,其特征在于,所述根据所述目标方法签名,从预设软件应用的方法调用关系中查询所述目标方法签名对应的目标调用关系之前,所述方法还包括:
对所述预设软件应用的源码文件进行语法解析,得到所述源码文件的抽象语法树;
从所述源码文件的抽象语法树中提取所述所有代码方法的信息,并构建所述所有代码方法的方法签名;
根据所述所有代码方法的信息,从所述源码文件中获取所述所有代码方法的方法体;
从所述所有代码方法的方法体中获取所述所有代码方法的调用关系;
存储所述所有代码方法的方法签名,和调用关系,作为所述预设软件应用的方法调用关系。
3.根据权利要求2所述的方法,其特征在于,所述对所述预设软件应用的源码文件进行语法解析,得到所述源码文件的抽象语法树之前,所述方法还包括:
从所述预设软件应用的多个代码仓库中分别下载所述预设软件应用的多个所述源码文件,多个所述源码文件为所述预设软件应用中多个子应用的源代码文件;
所述对所述预设软件应用的源码文件进行语法解析,得到所述源码文件的抽象语法树,包括:
对每个所述源码文件进行语法解析,得到每个所述源码文件的抽象语法树。
4.根据权利要求3所述的方法,其特征在于,所述对每个所述源码文件进行语法解析,得到每个所述源码文件的抽象语法树,包括:
采用每个所述源码文件的编码语言对应的语法解析文件,对每个所述源码文件进行语法解析,得到每个所述源码文件的抽象语法树。
5.根据权利要求1所述的方法,其特征在于,所述根据待查询代码方法的信息,生成所述待查询代码方法的目标方法签名,包括:
根据所述待查询代码方法的方法信息和所述待查询代码方法所属的目标类标识,生成所述目标方法签名。
6.根据权利要求5所述的方法,其特征在于,所述根据所述目标方法签名,从预设软件应用的方法调用关系中查询所述目标方法签名对应的目标调用关系,包括:
根据所述目标类标识和所述目标方法签名,从所述预设软件应用的第一索引关系中,确定与所述目标方法签名对应的第一方法信息;其中,所述第一索引关系中存储有:所述第一索引关系存储有:所述预设软件应用中至少一个类标识和方法信息的对应关系,每个类标识对应多个方法信息;
根据所述第一方法信息,从所述预设软件应用的第二索引关系中,确定与所述第一方法信息对应的调用方法信息,其中,所述第二索引关系中存储有:所述第一方法信息和方法调用信息的对应关系;
所述目标调用关系中的代码方法信息包括:所述第一方法信息,和所述第一方法信息对应的调用方法信息。
7.根据权利要求6所述的方法,其特征在于,所述根据所述目标类标识和所述目标方法签名,从所述预设软件应用的第一索引关系中,确定与所述目标方法签名对应的第一方法信息,包括:
根据所述目标类标识,判断所述第一索引关系中,所述目标类标识对应的多个方法信息中是否存在所述目标方法签名,其中,所述第一索引关系中每个方法信息中包括对应的方法签名;
所述根据所述第一方法信息,从所述预设软件应用的第二索引关系中,确定与所述第一方法信息对应的方法调用信息,包括:
若所述多个方法信息中第一方法信息中存在所述目标方法签名,根据所述第一方法信息,从所述第二索引关系中,获取所述第一方法信息对应的多条调用签名,所述第二索引关系中存储有:所述第一方法信息和所述多条调用签名的对应关系,每条调用签名用于表征所述第一方法信息对应方法体中多条代码的调用方法信息;
所述第一方法信息对应的调用方法信息包括:所述第一方法信息对应的多条调用签名。
8.根据权利要求7所述的方法,其特征在于,所述根据所述目标调用关系中的代码方法信息生成所述待查询代码方法的调用链,包括:
若所述第一方法信息中存在所述目标方法签名,则初始化一个方法调用链,并将所述第一方法信息作为根节点存于所述方法调用链中;
将所述多条调用签名作为分支节点添加至所述方法调用链中,生成所述待查询代码方法的调用链。
9.一种代码方法调用链的搜索装置,其特征在于,所述装置包括:
第一生成模块,用于根据待查询代码方法的信息,生成所述待查询代码方法的目标方法签名;
查询模块,用于根据所述目标方法签名,从预设软件应用的方法调用关系中查询所述目标方法签名对应的目标调用关系;其中,所述预设软件应用的方法调用关系包括:所述预设软件应用中所有代码方法的方法签名对应的调用关系;
第二生成模块,用于根据所述目标调用关系中的代码方法信息生成所述待查询代码方法的调用链。
10.一种电子设备,其特征在于,包括:处理器、存储介质,所述处理器与所述存储介质之间通过总线通信连接,所述存储介质存储有所述处理器可执行的程序指令,所述处理器调用所述存储介质中存储的所述程序指令,以执行如权利要求1至8任一所述的代码方法调用链的搜索方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210751684.3A CN114968350A (zh) | 2022-06-28 | 2022-06-28 | 一种代码方法调用链的搜索方法、装置及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210751684.3A CN114968350A (zh) | 2022-06-28 | 2022-06-28 | 一种代码方法调用链的搜索方法、装置及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114968350A true CN114968350A (zh) | 2022-08-30 |
Family
ID=82968186
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210751684.3A Pending CN114968350A (zh) | 2022-06-28 | 2022-06-28 | 一种代码方法调用链的搜索方法、装置及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114968350A (zh) |
-
2022
- 2022-06-28 CN CN202210751684.3A patent/CN114968350A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111507086B (zh) | 本地化应用程序中翻译文本位置的自动发现 | |
CN112015430A (zh) | JavaScript代码翻译方法、装置、计算机设备及存储介质 | |
CN110795455A (zh) | 依赖关系解析方法、电子装置、计算机设备及可读存储介质 | |
CN110543356A (zh) | 异常任务检测方法、装置、设备及计算机存储介质 | |
CN110795697A (zh) | 逻辑表达式的获取方法、装置、存储介质以及电子装置 | |
CN112148343A (zh) | 规则发布方法、装置及终端设备 | |
CN111443901A (zh) | 一种基于Java反射的业务扩展方法及装置 | |
CN115599386A (zh) | 代码生成方法、装置、设备及存储介质 | |
CN111475196A (zh) | 编译告警溯源方法、装置、电子设备及计算机可读介质 | |
CN109542942B (zh) | 函数调用的查询方法及装置、电子设备 | |
CN113885876A (zh) | 一种参数校验方法、装置、存储介质及计算机系统 | |
CN112000690B (zh) | 解析结构化操作语句的方法和装置 | |
CN115455006A (zh) | 数据处理方法、数据处理装置、电子设备及存储介质 | |
CN114968350A (zh) | 一种代码方法调用链的搜索方法、装置及设备 | |
CN116010461A (zh) | 数据血缘关系解析方法及装置、存储介质及电子设备 | |
CN114706586A (zh) | 代码编译、代码运行方法、装置、计算机设备及存储介质 | |
CN114115908A (zh) | 一种指令集生成、程序解析方法装置、设备以及存储介质 | |
CN114253595A (zh) | 代码仓库管理方法、装置、计算机设备及存储介质 | |
CN109298831B (zh) | 信息存储方法和装置 | |
CN111178025A (zh) | 核电站运行导则的编辑方法、装置、计算机设备及存储介质 | |
CN111290870A (zh) | 一种检测异常的方法和装置 | |
CN112527880B (zh) | 大数据集群元数据信息的采集方法、装置、设备及介质 | |
CN113986305B (zh) | B/s模型升级的检测方法、装置、设备和存储介质 | |
CN112579961B (zh) | Web导航页的构建方法、装置、设备和可读存储介质 | |
US20220207238A1 (en) | Methods and system for the extraction of properties of variables using automatically detected variable semantics and other resources |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |