CN106406913B - 一种从项目中提取代码的方法及系统 - Google Patents

一种从项目中提取代码的方法及系统 Download PDF

Info

Publication number
CN106406913B
CN106406913B CN201610996125.3A CN201610996125A CN106406913B CN 106406913 B CN106406913 B CN 106406913B CN 201610996125 A CN201610996125 A CN 201610996125A CN 106406913 B CN106406913 B CN 106406913B
Authority
CN
China
Prior art keywords
file
header
imported
project
files
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.)
Active
Application number
CN201610996125.3A
Other languages
English (en)
Other versions
CN106406913A (zh
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.)
Wuhan Douyu Network Technology Co Ltd
Original Assignee
Wuhan Douyu Network Technology Co 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 Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN201610996125.3A priority Critical patent/CN106406913B/zh
Publication of CN106406913A publication Critical patent/CN106406913A/zh
Application granted granted Critical
Publication of CN106406913B publication Critical patent/CN106406913B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/74Reverse engineering; Extracting design information from source code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种从项目中提取代码的方法及系统,涉及网络技术领域,用于从Objective‑C开发的项目中提取代码,项目包括目标源代码文件和工程文件。该方法包括以下步骤:从工程文件中获取项目的所有头文件的文件名及所有头文件的原始存储路径;获取目标源代码文件导入的头文件的文件名,根据导入的头文件的文件名,从项目的所有头文件的文件名及其对应的原始存储路径中获取导入的头文件的原始存储路径;从导入的头文件的原始存储路径中提取导入的头文件的代码,并将代码存入目标存储路径。本发明能够帮助开发者快速提取代码,节省时间和人工成本,提高项目开发效率。

Description

一种从项目中提取代码的方法及系统
本发明涉及云计算领域,具体是涉及一种从项目中提取代码的方法及系统。
背景技术
Objective-C是一种编程语言,主要用于苹果公司的移动端操作系统iOS和桌面操作系统Mac OS的程序开发。当基于Objective-C的iOS和Mac OS项目发展到一定规模,为了便于后续维护以及在其他项目中重复使用,需要提取其中的各业务模块的相关代码以构建新的组件。目前在Objective-C项目中提取相关代码的方法主要是开发人员根据自己的经验先分析目标模块可能包含的代码文件,然后手动将相关代码文件从原项目中一个个找出来,再组装成新的项目工程。如果目标模块包含的代码文件数量较多,则提取相关代码需要花费较长的时间和较高的人工成本。
发明内容
针对现有技术中存在的缺陷,本发明的主要目的在于提供一种从项目中提取代码的方法,本发明的另一目的在于提供一种从项目中提取代码的系统,能够帮助开发者快速提取代码,节省时间和人工成本,提高项目开发效率。
本发明提供一种从项目中提取代码的方法,用于从Objective-C开发的项目中提取代码,所述项目包括目标源代码文件和工程文件,包括以下步骤:
S1.从所述工程文件中获取项目的所有头文件的文件名及所有头文件的原始存储路径;
S2.获取所述目标源代码文件导入的头文件的文件名,根据所述导入的头文件的文件名,从项目的所有头文件的文件名及其对应的原始存储路径中获取导入的头文件的原始存储路径;
S3.从所述导入的头文件的原始存储路径中提取所述导入的头文件的代码,并将所述代码存入目标存储路径。
在上述技术方案的基础上,步骤S1中,从所述工程文件中获取项目的所有头文件的扩展名为.h。
在上述技术方案的基础上,步骤S2中,所述导入的头文件为通过#import语句导入的头文件。
在上述技术方案的基础上,步骤S2中,所述导入的头文件包括所述目标源代码文件中通过#import语句导入的头文件以及所述导入的头文件中通过#import语句导入的头文件。
在上述技术方案的基础上,步骤S1中,创建路径列表,将项目的所有头文件的文件名及其对应的原始存储路径组成的键值对存入所述路径列表。
在上述技术方案的基础上,创建提取列表和待提取列表,所述提取列表用于存储所述导入的头文件的文件名及其对应的原始存储路径,所述待提取列表用于存储所述目标源代码文件及其导入的头文件的文件名;
步骤S2包括:
S2.1将所述目标源代码文件的文件名存入所述待提取列表;
S2.2从所述待提取列表中读取一个文件名,将该文件名从所述待提取列表中删除;
S2.3解析读取的所述文件名对应的文件,获取对应的文件中所有通过#import语句导入的头文件,将不包含在所述提取列表或者所述待提取列表中的导入的头文件的文件名存入所述待提取列表中;
S2.4判断读取的所述文件名是否在所述提取列表中,若是,进入S2.6;若否,进入S2.5;
S2.5从所述路径列表中获取读取的所述文件名对应的原始存储路径,将读取的所述文件名及其对应的原始存储路径组成的键值对存入所述提取列表中;
S2.6若所述文件名的扩展名为.h,则将其扩展名.h修改为.m,若所述文件名的扩展名为.m,则将其扩展名.m修改为.h;
S2.7判断修改后的所述文件名是否在所述提取列表中,若是,进入S2.8;若否,进入S2.9;
S2.8判断所述待提取列表是否为空,若是,进入S3;若否,进入S2.2;
S2.9将修改后的所述文件名存入所述待提取列表,进入S2.2。
在上述技术方案的基础上,步骤S3中,遍历所述提取列表,从所述导入的头文件的原始存储路径中提取所述导入的头文件的代码,并将所述代码存入目标存储路径。
本发明还提供一种从项目中提取代码的系统,用于从Objective-C开发的项目中提取代码,包括:
工程文件模块,用于从所述工程文件中获取项目的所有头文件的文件名及所有头文件的原始存储路径;
源代码模块,用于获取所述目标源代码文件导入的头文件的文件名,根据所述导入的头文件的文件名,从项目的所有头文件的文件名及其对应的原始存储路径中获取导入的头文件的原始存储路径;
提取模块,用于从所述导入的头文件的原始存储路径中提取所述导入的头文件的代码,并将所述代码存入目标存储路径。
在上述技术方案的基础上,从所述工程文件中获取项目的所有头文件的扩展名为.h。
在上述技术方案的基础上,所述导入的头文件包括所述目标源代码文件中通过#import语句导入的头文件以及所述导入的头文件中通过#import语句导入的头文件。
与现有技术相比,本发明的优点如下:
(1)本发明可以根据指定的目标源代码文件的文件名自动提取该目标源代码文件所导入的头文件的代码,能够帮助开发者快速提取代码,节省时间和人工成本,提高项目开发效率。
(2)本发明采用在目标源代码文件中获取通过#import语句导入的头文件,然后在导入的头文件中获取通过#import语句导入的头文件,由于#import语句确保相同的文件只会被导入一次,不但提高获取导入的头文件的效率,而且不会发生遗漏。
(3)本发明将目标源代码文件导入的头文件的文件名及其对应的原始存储路径存入提取列表,遍历提取列表,提取导入的头文件的代码,并存入目标存储路径,进一步提高提取代码的效率。
附图说明
图1是本发明实施例从项目中提取代码的方法流程图;
图2是步骤S2的具体流程图;
图3是本发明实施例从项目中提取代码的系统示意图。
具体实施方式
术语说明:
组件:提供特定业务逻辑或功能的一组代码。
#import语句:Objective-C中用于导入其他依赖的语句。
.pbxproj文件:iOS或Mac OS项目中保存工程信息的文件。
.h文件:Objective-C源代码文件之一。
.m文件:Objective-C源代码文件之一。
下面结合附图及具体实施例对本发明作进一步的详细描述。
在基于Objective-C的项目中,项目包括目标源代码文件和工程文件,目标源代码文件一般为一个扩展名为“.m”的文件,此文件的开始有一系列#import语句,这些#import语句表示目标源代码文件所依赖的所有代码文件。同时,项目中会有一个扩展名为“.pbxproj”的工程文件来描述项目工程结构以及所有文件的存储路径,例如项目的所有扩展名为.h的头文件及其存储路径,项目的所有头文件包括目标源代码文件通过#import语句导入的头文件,本发明提取代码的方法主要基于这两个文件。
基于上述原理,本发明实施例提供一种从项目中提取代码的方法,用于从Objective-C开发的项目中提取代码,项目包括目标源代码文件和工程文件,参见图1所示,包括以下步骤:
S1.从工程文件中获取项目的所有头文件的文件名及所有头文件的原始存储路径。
从工程文件中获取项目的所有头文件的扩展名为.h。
创建路径列表,将项目的所有头文件的文件名及其对应的原始存储路径组成的键值对存入路径列表。
S2.获取所述目标源代码文件导入的头文件的文件名,根据所述导入的头文件的文件名,从项目的所有头文件的文件名及其对应的原始存储路径中获取导入的头文件的原始存储路径。
导入的头文件为通过#import语句导入的头文件。
具体的,导入的头文件包括目标源代码文件中通过#import语句导入的头文件以及导入的头文件中通过#import语句导入的头文件。
例如,目标源代码文件为InputFileName,首先获取InputFileName通过#import语句导入的所有头文件ImportedInputFileName1,……,ImportedInputFileNamei,……,ImportedInputFileNameN,1≤i≤N,i和N均为正整数。对于任一个导入的头文件ImportedInputFileNamei,获取ImportedInputFileNamei通过#import语句导入的所有头文件FileName1,……,FileNamej,……,FileNameM,1≤j≤M,j和M均为正整数。如果FileName1,……,FileNamej,……,FileNameM中有与ImportedInputFileName1,……,ImportedInputFileNamei,……,ImportedInputFileNameN重复的文件,例如,ImportedInputFileNamei通过#import语句导入的所有头文件FileName1,……,FileNamej,……,FileNameM以及ImportedInputFileNamei,则删除ImportedInputFileNamei通过#import语句导入的ImportedInputFileNamei文件。对于任一个导入的头文件FileNamej,继续获取FileNamej通过#import语句导入的所有头文件,以此类推,直到从导入的头文件中获取所有通过#import语句导入的头文件。
本发明采用在目标源代码文件中获取通过#import语句导入的头文件,然后在导入的头文件中获取通过#import语句导入的头文件,由于#import语句确保相同的文件只会被导入一次,不但提高获取导入的头文件的效率,而且不会发生遗漏。
创建提取列表和待提取列表,提取列表用于存储导入的头文件的文件名及其对应的原始存储路径,待提取列表用于存储目标源代码文件及其导入的头文件的文件名。
参见图2所示,步骤S2包括:
S2.1将目标源代码文件的文件名存入待提取列表。
S2.2从待提取列表中读取一个文件名,将该文件名从待提取列表中删除。
S2.3解析读取的文件名对应的文件,获取对应的文件中所有通过#import语句导入的头文件,将不包含在提取列表或者待提取列表中的导入的头文件的文件名存入待提取列表中。
S2.4判断读取的文件名是否在提取列表中,若是,进入S2.6;若否,进入S2.5。
S2.5从路径列表中获取读取的文件名对应的原始存储路径,将读取的文件名及其对应的原始存储路径组成的键值对存入提取列表中。
例如,可以将文件名FileName1及其存储路径FilePath1按“FileName1-FilePath1”的键值对的方式写入提取列表。
S2.6若文件名的扩展名为.h,则将其扩展名.h修改为.m,若文件名的扩展名为.m,则将其扩展名.m修改为.h。
S2.7判断修改后的文件名是否在提取列表中,若是,进入S2.8;若否,进入S2.9。
S2.8判断待提取列表是否为空,若是,进入S3;若否,进入S2.2。
S2.9将修改后的文件名存入待提取列表,进入S2.2。
S3.从导入的头文件的原始存储路径中提取导入的头文件的代码,并将代码存入目标存储路径。
具体的,遍历提取列表,从导入的头文件的原始存储路径中提取导入的头文件的代码,并将代码存入目标存储路径。
本发明将目标源代码文件导入的头文件的文件名及其对应的原始存储路径存入提取列表,遍历提取列表,提取导入的头文件的代码,并存入目标存储路径,进一步提高提取代码的效率。
参见图3所示,本发明实施例提供一种从项目中提取代码的系统,用于从Objective-C开发的项目中提取代码,包括工程文件模块、源代码模块和提取模块。
工程文件模块用于从工程文件中获取项目的所有头文件的文件名及所有头文件的原始存储路径。
从工程文件中获取项目的所有头文件的扩展名为.h。
源代码模块用于获取目标源代码文件导入的头文件的文件名,根据导入的头文件的文件名,从项目的所有头文件的文件名及其对应的原始存储路径中获取导入的头文件的原始存储路径。
导入的头文件包括目标源代码文件中通过#import语句导入的头文件以及导入的头文件中通过#import语句导入的头文件。
提取模块用于从导入的头文件的原始存储路径中提取导入的头文件的代码,并将代码存入目标存储路径。
本发明可以根据指定的目标源代码文件的文件名自动提取该目标源代码文件所导入的头文件的代码,能够帮助开发者快速提取代码,节省时间和人工成本,提高项目开发效率,例如将斗鱼应用中的“开启直播”功能进行组件化之后,能够很方便地复用在斗鱼直播伴侣中,实现开启直播功能。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

Claims (7)

1.一种从项目中提取代码的方法,用于从Objective-C开发的项目中提取代码,所述项目包括目标源代码文件和工程文件,其特征在于,包括以下步骤:
S1.从所述工程文件中获取项目的所有头文件的文件名及所有头文件的原始存储路径;
S2.获取所述目标源代码文件导入的头文件的文件名,根据所述导入的头文件的文件名,从项目的所有头文件的文件名及其对应的原始存储路径中获取导入的头文件的原始存储路径;
步骤S2包括:
解析目标源代码文件,获取目标源代码文件中所有通过#import语句导入的头文件;
对于目标源代码文件和导入的头文件,修改文件名的扩展名,并分别获取导入的头文件以及修改后的文件中所有通过#import语句导入的头文件;
其中,修改文件名的扩展名包括:若扩展名为.h,则将扩展名.h修改为.m;若扩展名为.m,则将扩展名.m修改为.h;
S3.从所述导入的头文件的原始存储路径中提取所述导入的头文件的代码,并将所述代码存入目标存储路径。
2.如权利要求1所述的从项目中提取代码的方法,其特征在于:步骤S1中,从所述工程文件中获取项目的所有头文件的扩展名为.h。
3.如权利要求1所述的从项目中提取代码的方法,其特征在于:步骤S1中,创建路径列表,将项目的所有头文件的文件名及其对应的原始存储路径组成的键值对存入所述路径列表。
4.如权利要求3所述的从项目中提取代码的方法,其特征在于:
创建提取列表和待提取列表,所述提取列表用于存储所述导入的头文件的文件名及其对应的原始存储路径,所述待提取列表用于存储所述目标源代码文件及其导入的头文件的文件名;
步骤S2具体包括:
S2.1将所述目标源代码文件的文件名存入所述待提取列表;
S2.2从所述待提取列表中读取一个文件名,将该文件名从所述待提取列表中删除;
S2.3解析读取的所述文件名对应的文件,获取对应的文件中所有通过#import语句导入的头文件,将不包含在所述提取列表或者所述待提取列表中的导入的头文件的文件名存入所述待提取列表中;
S2.4判断读取的所述文件名是否在所述提取列表中,若是,进入S2.6;若否,进入S2.5;
S2.5从所述路径列表中获取读取的所述文件名对应的原始存储路径,将读取的所述文件名及其对应的原始存储路径组成的键值对存入所述提取列表中;
S2.6若所述文件名的扩展名为.h,则将其扩展名.h修改为.m,若所述文件名的扩展名为.m,则将其扩展名.m修改为.h;
S2.7判断修改后的所述文件名是否在所述提取列表中,若是,进入S2.8;若否,进入S2.9;
S2.8判断所述待提取列表是否为空,若是,进入S3;若否,进入S2.2;
S2.9将修改后的所述文件名存入所述待提取列表,进入S2.2。
5.如权利要求4所述的从项目中提取代码的方法,其特征在于:步骤S3中,遍历所述提取列表,从所述导入的头文件的原始存储路径中提取所述导入的头文件的代码,并将所述代码存入目标存储路径。
6.一种从项目中提取代码的系统,用于从Objective-C开发的项目中提取代码,所述项目包括目标源代码文件和工程文件,其特征在于,包括:
工程文件模块,用于从所述工程文件中获取项目的所有头文件的文件名及所有头文件的原始存储路径;
源代码模块,用于获取所述目标源代码文件导入的头文件的文件名,其中,解析目标源代码文件,获取目标源代码文件中所有通过#import语句导入的头文件;对于目标源代码文件和导入的头文件,修改文件名的扩展名,并分别获取导入的头文件以及修改后的文件中所有通过#import语句导入的头文件;其中,修改文件名的扩展名包括:若扩展名为.h,则将扩展名.h修改为.m;若扩展名为.m,则将扩展名.m修改为.h;根据所述导入的头文件的文件名,从项目的所有头文件的文件名及其对应的原始存储路径中获取导入的头文件的原始存储路径;
提取模块,用于从所述导入的头文件的原始存储路径中提取所述导入的头文件的代码,并将所述代码存入目标存储路径。
7.如权利要求6所述的从项目中提取代码的系统,其特征在于:从所述工程文件中获取项目的所有头文件的扩展名为.h。
CN201610996125.3A 2016-10-28 2016-10-28 一种从项目中提取代码的方法及系统 Active CN106406913B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610996125.3A CN106406913B (zh) 2016-10-28 2016-10-28 一种从项目中提取代码的方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610996125.3A CN106406913B (zh) 2016-10-28 2016-10-28 一种从项目中提取代码的方法及系统

Publications (2)

Publication Number Publication Date
CN106406913A CN106406913A (zh) 2017-02-15
CN106406913B true CN106406913B (zh) 2020-01-03

Family

ID=59230271

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610996125.3A Active CN106406913B (zh) 2016-10-28 2016-10-28 一种从项目中提取代码的方法及系统

Country Status (1)

Country Link
CN (1) CN106406913B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106990960B (zh) * 2017-03-28 2020-10-30 创新先进技术有限公司 代码部署方法及装置
CN107122463B (zh) * 2017-04-27 2020-12-04 北京冠群信息技术股份有限公司 文件保存方法及装置
CN110377276B (zh) * 2019-07-19 2023-05-23 潍柴动力股份有限公司 源代码文件管理方法及设备
CN111813749B (zh) * 2020-08-21 2024-06-21 网易(杭州)网络有限公司 文件过滤方法及装置、电子设备、存储介质
CN113553301A (zh) * 2021-06-24 2021-10-26 网易(杭州)网络有限公司 头文件的处理方法、装置、计算机可读存储介质和处理器

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102567195A (zh) * 2010-12-23 2012-07-11 安凯(广州)微电子技术有限公司 一种目标文件走查方法及系统
CN104156314A (zh) * 2014-08-14 2014-11-19 北京航空航天大学 一种应用于测试系统的代码重用方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100546742B1 (ko) * 2003-09-04 2006-01-26 한국전자통신연구원 타겟 시스템 기반 소스 프로그램 개발장치 및 방법

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102567195A (zh) * 2010-12-23 2012-07-11 安凯(广州)微电子技术有限公司 一种目标文件走查方法及系统
CN104156314A (zh) * 2014-08-14 2014-11-19 北京航空航天大学 一种应用于测试系统的代码重用方法

Also Published As

Publication number Publication date
CN106406913A (zh) 2017-02-15

Similar Documents

Publication Publication Date Title
CN106406913B (zh) 一种从项目中提取代码的方法及系统
CN109656934B (zh) 基于日志解析的源端Oracle数据库DDL同步方法及设备
CN108089893B (zh) 冗余资源的确定方法、装置、终端设备与存储介质
CN108536745B (zh) 基于Shell的数据表提取方法、终端、设备及存储介质
CN109241026B (zh) 数据管理的方法、装置及系统
CN110647562B (zh) 一种数据查询方法和装置、电子设备、存储介质
CN108170752B (zh) 基于模板的元数据管理方法和系统
CN110928802A (zh) 基于自动生成用例的测试方法、装置、设备及存储介质
CN112579466B (zh) 测试用例的生成方法、装置及计算机可读存储介质
US20130339787A1 (en) Systematic failure remediation
CN107330014B (zh) 一种数据表的创建方法与设备
CN111831920A (zh) 用户需求分析方法、装置、计算机设备及存储介质
CN111435367A (zh) 知识图谱的构建方法、系统、设备及存储介质
CN109828759B (zh) 代码编译方法、装置、计算机装置及存储介质
CN110727576B (zh) 一种web页面测试方法、装置、设备及存储介质
CN109460236B (zh) 程序版本构建和检查方法及系统
JP2021002326A (ja) ソフトウェアプログラムにおける静的分析違反の修復パターンの精緻化
CN108733828B (zh) 公司名称的提取方法、装置和计算机可读介质
CN111078529A (zh) 客户端写入模块测试方法、装置、电子设备
CN113821496B (zh) 数据库迁移方法、系统、设备及计算机可读存储介质
CN110704742B (zh) 一种特征提取方法及装置
CN115705297A (zh) 代码调用检测方法、装置、计算机设备以及存储介质
CN106557564A (zh) 一种对象数据分析方法及装置
CN108614868B (zh) 一种数据库自动升级方法
CN108132971B (zh) 数据库碎片文件的分析方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant