CN109669942A - 一种java代码结构化检索方法 - Google Patents

一种java代码结构化检索方法 Download PDF

Info

Publication number
CN109669942A
CN109669942A CN201811447656.2A CN201811447656A CN109669942A CN 109669942 A CN109669942 A CN 109669942A CN 201811447656 A CN201811447656 A CN 201811447656A CN 109669942 A CN109669942 A CN 109669942A
Authority
CN
China
Prior art keywords
match
methodname
classname
content
search method
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
Application number
CN201811447656.2A
Other languages
English (en)
Inventor
宓建栋
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou Qian Jinding Mdt Infotech Ltd
Original Assignee
Hangzhou Qian Jinding Mdt Infotech Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hangzhou Qian Jinding Mdt Infotech Ltd filed Critical Hangzhou Qian Jinding Mdt Infotech Ltd
Priority to CN201811447656.2A priority Critical patent/CN109669942A/zh
Publication of CN109669942A publication Critical patent/CN109669942A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse

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

本发明公开了一种java代码结构化检索方法,包括以下步骤:步骤S01:对程序代码做结构化分析,整理出对应的若干className、methodName及methodBody,将结果保存为索引集合;步骤S02:输入需要寻找的文件的className及methodName中至少一项的部分或全部内容以及methodBody的部分或全部内容,对索引集合中对应内容进行结构化匹配,如匹配失败则进入步骤S03,如匹配成功则跳转至步骤S04;步骤S03:显示错误信息并重新跳转至步骤S02;步骤S04:显示结果报告并弹出包括检索内容的对应文件。本发明以结构化的形式建立数据库,并通过结构化的匹配完成检索,具有更快的检索速度,更高检索精度以及检索效率。

Description

一种java代码结构化检索方法
技术领域
本发明涉及一种检索方法,特别涉及一种java代码结构化检索方法。
背景技术
代码检索作为再开发中代码复用的必要环节变得越来越重要。代码检索是在指定的代码库中搜索某代码片段。有效的代码检索能够很大程度上节约研发人员的研发时间,有效提高工作效率。然而随着开源项目数量的与日俱增,代码片段数量呈指数级增长,为研发人员获取相关代码片段带来巨大困难,如何快速高效地查询指定代码片段,得到了信息检索相关研究人员的广泛关注。代码检索任务与通用领域信息检索任务的区别主要体现在检索对象的不同,代码检索所涉及的对象是代码片段,而代码片段许多独有的特点,直接将现有检索技术应用于代码检索并不能得到很好的效果,如果能利用代码自身的特点来优化检索方法,将会大大提高检索效率。
公开号 CN102254026A的发明申请提供了一种程序函数的检索方法。该方法包括以下步骤:确定检索范围;输入目标程序函数的名称,并触发检索事件,则显示所述检索范围内包含目标程序函数的所有文件的绝对路径;选择要查看的包含目标程序函数的文件的绝对路径,则显示该文件的全部内容及其文件信息;触发查看目标程序函数事件,则在所述文件内容中突出显示目标程序函数的程序代码。
该对比文件所提到的检索方法其本质上还是传统的检索形式,初步检索的范围过大,无法快速、精确地检索到目标代码,检索效率较低。
发明内容
针对现有技术检索范围过大,检索效率低的问题,本发明提供了一种java代码结构化检索方法,以结构化分析及结构化匹配的形式提高了检索精确度及效率。
以下是本发明的技术方案。
一种java代码结构化检索方法,包括以下步骤:
步骤S01:对程序代码做结构化分析,整理出对应的若干className、methodName及methodBody,将结果保存为索引集合;
步骤S02:输入需要寻找的文件的className及methodName中至少一项的部分或全部内容以及methodBody的部分或全部内容,对索引集合中对应内容进行结构化匹配,如匹配失败则进入步骤S03,如匹配成功则跳转至步骤S04;
步骤S03:显示错误信息并重新跳转至步骤S02;
步骤S04:显示结果报告并弹出包括检索内容的对应文件。
进一步的,所述步骤S01中,结构化分析的过程为:步骤A1:取源代码集合S的一个元素s,利用java反射技术分析元素s得到若干个className,以及每个className对应的若干个methodName,将每个methodName及其对应的className保存为元素m,若干元素m组成集合M;
步骤A2:从集合M中取出一个元素m,与源代码集合S中对应元素s进行多次匹配,将每次结果标记为mb,汇总结果保存到索引集合MB,所述每个元素mb包括一组className、methodName及methodBody;
步骤A3:重复执行步骤A1及A2,直到源代码集合S中所有元素均完成分析及匹配。
进一步的,所述步骤A2中,匹配过程为:在代码元素s中找到元素m中methodName对应的字符串,将该字符串之后的第一个“{”标记为methodBodyBegin,再将最后一个“}”标记为methodBodyEnd,然后根据methodBodyBegin及methodBodyEnd对源代码文件进行子字符串截取,得到mb。
进一步的,所述最后一个“}”的寻找方法为:创建一个初始值为零的变量i,然后在第一个“{”后依次向下寻找,每寻找到一个“{”便使变量i加一,每寻找到一个“}”便使变量i减一,当变量i的值为零时,寻找到的“}”就是最后一个“}”。
进一步的,所述步骤S02中,结构化匹配过程为:根据输入内容对索引集合中元素的className及methodName进行匹配,筛选出包含对应内容的元素,对包含对应内容的元素的methodBody进行匹配,寻找到具体结果所在的位置,其中该过程任意一次匹配没有成功则认定为匹配失败。
进一步的,所述步骤S03中,错误信息包括:匹配失败时所在的匹配类型。
进一步的,所述步骤S04中,结果报告包括:匹配所用时间及目标文件的目录。
本发明以结构化的形式建立数据库,并通过结构化的匹配完成检索,具有更快的检索速度,更高检索精度以及检索效率。
附图说明
如图1所示为本发明的整体流程图。
具体实施方式
以下结合说明书附图对本技术方案作进一步阐述。
实施例:如图1所示为一种java代码结构化检索方法,包括以下步骤:
步骤S01:对程序代码做结构化分析,整理出对应的若干className、methodName及methodBody,将结果保存为索引集合;
步骤S02:输入需要寻找的文件的className及methodName中至少一项的部分或全部内容以及methodBody的部分或全部内容,对索引集合中对应内容进行结构化匹配,如匹配失败则进入步骤S03,如匹配成功则跳转至步骤S04;
步骤S03:显示错误信息并重新跳转至步骤S02;
步骤S04:显示结果报告并弹出包括检索内容的对应文件。
本实施例中,所述步骤S01中,结构化分析的过程为:步骤A1:取源代码集合S的一个元素s,利用java反射技术分析元素s得到若干个className,以及每个className对应的若干个methodName,将每个methodName及其对应的className保存为元素m,若干元素m组成集合M;
步骤A2:从集合M中取出一个元素m,与源代码集合S中对应元素s进行多次匹配,将每次结果标记为mb,汇总结果保存到索引集合MB,所述每个元素mb包括一组className、methodName及methodBody;
步骤A3:重复执行步骤A1及A2,直到源代码集合S中所有元素均完成分析及匹配。
本实施例中,所述步骤A2中,匹配过程为:在代码元素s中找到元素m中methodName对应的字符串,将该字符串之后的第一个“{”标记为methodBodyBegin,再将最后一个“}”标记为methodBodyEnd,然后根据methodBodyBegin及methodBodyEnd对源代码文件进行子字符串截取,得到mb。
本实施例中,所述最后一个“}”的寻找方法为:创建一个初始值为零的变量i,然后在第一个“{”后依次向下寻找,每寻找到一个“{”便使变量i加一,每寻找到一个“}”便使变量i减一,当变量i的值为零时,寻找到的“}”就是最后一个“}”。
本实施例中,所述步骤S02中,结构化匹配过程为:根据输入内容对索引集合中元素的className及methodName进行匹配,筛选出包含对应内容的元素,对包含对应内容的元素的methodBody进行匹配,寻找到具体结果所在的位置,其中该过程任意一次匹配没有成功则认定为匹配失败。
本实施例中,所述步骤S03中,错误信息包括:匹配失败时所在的匹配类型。
本实施例中,所述步骤S04中,结果报告包括:匹配所用时间及目标文件的目录。
本实施例以结构化的形式建立数据库,并通过结构化的匹配完成检索,具有更快的检索速度,更高检索精度以及检索效率。
应当说明的是,该具体实施例仅用于对技术方案的进一步阐述,不用于限定该技术方案的范围,任何基于此技术方案的修改、等同替换和改进等都应视为在本发明的保护范围内。

Claims (7)

1.一种java代码结构化检索方法,其特征在于,包括以下步骤:
步骤S01:对程序代码做结构化分析,整理出对应的若干className、methodName及methodBody,将结果保存为索引集合;
步骤S02:输入需要寻找的文件的className及methodName中至少一项的部分或全部内容以及methodBody的部分或全部内容,对索引集合中对应内容进行结构化匹配,如匹配失败则进入步骤S03,如匹配成功则跳转至步骤S04;
步骤S03:显示错误信息并重新跳转至步骤S02;
步骤S04:显示结果报告并弹出包括检索内容的对应文件。
2.根据权利要求1所述的一种java代码结构化检索方法,其特征在于,所述步骤S01中,结构化分析的过程为:
步骤A1:取源代码集合S的一个元素s,利用java反射技术分析元素s得到若干个className,以及每个className对应的若干个methodName,将每个methodName及其对应的className保存为元素m,若干元素m组成集合M;
步骤A2:从集合M中取出一个元素m,与源代码集合S中对应元素s进行多次匹配,将每次结果标记为mb,汇总结果保存到索引集合MB,所述每个元素mb包括一组className、methodName及methodBody;
步骤A3:重复执行步骤A1及A2,直到源代码集合S中所有元素均完成分析及匹配。
3.根据权利要求2所述的一种java代码结构化检索方法,其特征在于,所述步骤A2中,匹配过程为:
在代码元素s中找到元素m中methodName对应的字符串,将该字符串之后的第一个“{”标记为methodBodyBegin,再将最后一个“}”标记为methodBodyEnd,然后根据methodBodyBegin及methodBodyEnd对源代码文件进行子字符串截取,得到mb。
4.根据权利要求3所述的一种java代码结构化检索方法,其特征在于,所述最后一个“}”的寻找方法为:创建一个初始值为零的变量i,然后在第一个“{”后依次向下寻找,每寻找到一个“{”便使变量i加一,每寻找到一个“}”便使变量i减一,当变量i的值为零时,寻找到的“}”就是最后一个“}”。
5.根据权利要求1所述的一种java代码结构化检索方法,其特征在于,所述步骤S02中,结构化匹配过程为:根据输入内容对索引集合中元素的className及methodName进行匹配,筛选出包含对应内容的元素,对包含对应内容的元素的methodBody进行匹配,寻找到具体结果所在的位置,其中该过程任意一次匹配没有成功则认定为匹配失败。
6.根据权利要求5所述的一种java代码结构化检索方法,其特征在于,所述步骤S03中,错误信息包括:匹配失败时所在的匹配类型。
7.根据权利要求5所述的一种java代码结构化检索方法,其特征在于,所述步骤S04中,结果报告包括:匹配所用时间及目标文件的目录。
CN201811447656.2A 2018-11-29 2018-11-29 一种java代码结构化检索方法 Pending CN109669942A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811447656.2A CN109669942A (zh) 2018-11-29 2018-11-29 一种java代码结构化检索方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811447656.2A CN109669942A (zh) 2018-11-29 2018-11-29 一种java代码结构化检索方法

Publications (1)

Publication Number Publication Date
CN109669942A true CN109669942A (zh) 2019-04-23

Family

ID=66143456

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811447656.2A Pending CN109669942A (zh) 2018-11-29 2018-11-29 一种java代码结构化检索方法

Country Status (1)

Country Link
CN (1) CN109669942A (zh)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008117280A (ja) * 2006-11-07 2008-05-22 Matsushita Electric Ind Co Ltd ソフトウェアソースコードの検索方法及びシステム
US20120254835A1 (en) * 2011-03-31 2012-10-04 Infosys Technologies Ltd. Structural search of source code
CN107562919A (zh) * 2017-09-13 2018-01-09 云南大学 一种基于信息检索的多索引集成软件构件检索方法及系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008117280A (ja) * 2006-11-07 2008-05-22 Matsushita Electric Ind Co Ltd ソフトウェアソースコードの検索方法及びシステム
US20120254835A1 (en) * 2011-03-31 2012-10-04 Infosys Technologies Ltd. Structural search of source code
CN107562919A (zh) * 2017-09-13 2018-01-09 云南大学 一种基于信息检索的多索引集成软件构件检索方法及系统

Similar Documents

Publication Publication Date Title
CN111241241B (zh) 基于知识图谱的案件检索方法、装置、设备及存储介质
CA3033173C (en) Systems, methods, and data structures for high-speed searching or filtering of large datasets
CN110019616B (zh) 一种poi现势状态获取方法及其设备、存储介质、服务器
US20130226940A1 (en) Generating Composite Key Relationships Between Database Objects Based on Sampling
CN112925995B (zh) 获取poi状态信息的方法及装置
CN110851738A (zh) 获取poi状态信息的方法、装置、设备和计算机存储介质
CN107844414A (zh) 一种基于缺陷报告分析的跨项目、并行化缺陷定位方法
AU2002229734A1 (en) Database system and query optimiser
CN107016018B (zh) 数据库索引创建方法及装置
CN105740477B (zh) 针对大规模嵌入式设备固件的函数搜索方法和搜索引擎
CN103559185B (zh) 试验数据文档解析入库方法
US11568018B2 (en) Utilizing machine-learning models to generate identifier embeddings and determine digital connections between digital content items
EP3679473B1 (en) A system and method for stream processing
CN110188165A (zh) 合同模板获取方法、装置、存储介质和计算机设备
CN110837568A (zh) 实体对齐方法及装置、电子设备、存储介质
CN105825356A (zh) 一种生物样本数据信息管理方法和装置
CN109753517A (zh) 一种信息查询的方法、装置、计算机存储介质及终端
Bagheri et al. A comparison of different source code representation methods for vulnerability prediction in python
Lo Giudice Cappelli et al. Size matters: Analyses of benthic foraminiferal assemblages across differing size fractions
US9984065B2 (en) Optimizing generation of a regular expression
US9298694B2 (en) Generating a regular expression for entity extraction
CN109669942A (zh) 一种java代码结构化检索方法
CN113138906A (zh) 一种调用链数据采集方法、装置、设备及存储介质
CN112016636A (zh) 一种基于Hadoop框架的作物光谱聚类分析处理方法
Lin et al. K 2 and K 2*: efficient alignment-free sequence similarity measurement based on Kendall statistics

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
RJ01 Rejection of invention patent application after publication

Application publication date: 20190423

RJ01 Rejection of invention patent application after publication