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

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

Info

Publication number
CN106406913A
CN106406913A CN201610996125.3A CN201610996125A CN106406913A CN 106406913 A CN106406913 A CN 106406913A CN 201610996125 A CN201610996125 A CN 201610996125A CN 106406913 A CN106406913 A CN 106406913A
Authority
CN
China
Prior art keywords
file
project
header
filename
importing
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.)
Granted
Application number
CN201610996125.3A
Other languages
English (en)
Other versions
CN106406913B (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

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 (10)

1.一种从项目中提取代码的方法,用于从Objective-C开发的项目中提取代码,所述项目包括目标源代码文件和工程文件,其特征在于,包括以下步骤:
S1.从所述工程文件中获取项目的所有头文件的文件名及所有头文件的原始存储路径;
S2.获取所述目标源代码文件导入的头文件的文件名,根据所述导入的头文件的文件名,从项目的所有头文件的文件名及其对应的原始存储路径中获取导入的头文件的原始存储路径;
S3.从所述导入的头文件的原始存储路径中提取所述导入的头文件的代码,并将所述代码存入目标存储路径。
2.如权利要求1所述的从项目中提取代码的方法,其特征在于:步骤S1中,从所述工程文件中获取项目的所有头文件的扩展名为.h。
3.如权利要求1所述的从项目中提取代码的方法,其特征在于:步骤S2中,所述导入的头文件为通过#import语句导入的头文件。
4.如权利要求1所述的从项目中提取代码的方法,其特征在于:步骤S2中,所述导入的头文件包括所述目标源代码文件中通过#import语句导入的头文件以及所述导入的头文件中通过#import语句导入的头文件。
5.如权利要求1所述的从项目中提取代码的方法,其特征在于:步骤S1中,创建路径列表,将项目的所有头文件的文件名及其对应的原始存储路径组成的键值对存入所述路径列表。
6.如权利要求5所述的从项目中提取代码的方法,其特征在于:
创建提取列表和待提取列表,所述提取列表用于存储所述导入的头文件的文件名及其对应的原始存储路径,所述待提取列表用于存储所述目标源代码文件及其导入的头文件的文件名;
步骤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。
7.如权利要求6所述的从项目中提取代码的方法,其特征在于:步骤S3中,遍历所述提取列表,从所述导入的头文件的原始存储路径中提取所述导入的头文件的代码,并将所述代码存入目标存储路径。
8.一种从项目中提取代码的系统,用于从Objective-C开发的项目中提取代码,其特征在于,包括:
工程文件模块,用于从所述工程文件中获取项目的所有头文件的文件名及所有头文件的原始存储路径;
源代码模块,用于获取所述目标源代码文件导入的头文件的文件名,根据所述导入的头文件的文件名,从项目的所有头文件的文件名及其对应的原始存储路径中获取导入的头文件的原始存储路径;
提取模块,用于从所述导入的头文件的原始存储路径中提取所述导入的头文件的代码,并将所述代码存入目标存储路径。
9.如权利要求8所述的从项目中提取代码的系统,其特征在于:从所述工程文件中获取项目的所有头文件的扩展名为.h。
10.如权利要求8所述的从项目中提取代码的系统,其特征在于:所述导入的头文件包括所述目标源代码文件中通过#import语句导入的头文件以及所述导入的头文件中通过#import语句导入的头文件。
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 true CN106406913A (zh) 2017-02-15
CN106406913B 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)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106990960A (zh) * 2017-03-28 2017-07-28 阿里巴巴集团控股有限公司 代码部署方法及装置
CN107122463A (zh) * 2017-04-27 2017-09-01 努比亚技术有限公司 文件保存方法及装置
CN110377276A (zh) * 2019-07-19 2019-10-25 潍柴动力股份有限公司 源代码文件管理方法及设备
CN111813749A (zh) * 2020-08-21 2020-10-23 网易(杭州)网络有限公司 文件过滤方法及装置、电子设备、存储介质
CN113553301A (zh) * 2021-06-24 2021-10-26 网易(杭州)网络有限公司 头文件的处理方法、装置、计算机可读存储介质和处理器

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050055665A1 (en) * 2003-09-04 2005-03-10 Woo Duk Kyun System and method for developing target application on target system in cross development environment
CN102567195A (zh) * 2010-12-23 2012-07-11 安凯(广州)微电子技术有限公司 一种目标文件走查方法及系统
CN104156314A (zh) * 2014-08-14 2014-11-19 北京航空航天大学 一种应用于测试系统的代码重用方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050055665A1 (en) * 2003-09-04 2005-03-10 Woo Duk Kyun System and method for developing target application on target system in cross development environment
CN102567195A (zh) * 2010-12-23 2012-07-11 安凯(广州)微电子技术有限公司 一种目标文件走查方法及系统
CN104156314A (zh) * 2014-08-14 2014-11-19 北京航空航天大学 一种应用于测试系统的代码重用方法

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106990960A (zh) * 2017-03-28 2017-07-28 阿里巴巴集团控股有限公司 代码部署方法及装置
CN107122463A (zh) * 2017-04-27 2017-09-01 努比亚技术有限公司 文件保存方法及装置
CN110377276A (zh) * 2019-07-19 2019-10-25 潍柴动力股份有限公司 源代码文件管理方法及设备
CN110377276B (zh) * 2019-07-19 2023-05-23 潍柴动力股份有限公司 源代码文件管理方法及设备
CN111813749A (zh) * 2020-08-21 2020-10-23 网易(杭州)网络有限公司 文件过滤方法及装置、电子设备、存储介质
CN113553301A (zh) * 2021-06-24 2021-10-26 网易(杭州)网络有限公司 头文件的处理方法、装置、计算机可读存储介质和处理器

Also Published As

Publication number Publication date
CN106406913B (zh) 2020-01-03

Similar Documents

Publication Publication Date Title
CN106406913A (zh) 一种从项目中提取代码的方法及系统
CN109656934B (zh) 基于日志解析的源端Oracle数据库DDL同步方法及设备
CN102693305B (zh) 一种文件信息预览方法及系统
CN104360837B (zh) 取证软件中基于自定义脚本实现电子数据取证分析的方法
CN105335246B (zh) 一种基于问答网站分析的程序崩溃缺陷自动修复方法
CN108509658A (zh) 一种xml文件的解析方法和装置
CN103530429B (zh) 一种网页正文抽取的方法
CN109522290A (zh) 一种HBase数据块恢复及数据记录提取方法
CN107797916A (zh) Ddl语句审核方法和装置
CN106469049A (zh) 一种文件扫描的方法及装置
CN112286575A (zh) 基于图匹配模型的智能合约相似度检测方法及系统
CN105488471B (zh) 一种字形识别方法及装置
CN106775824A (zh) 一种带有渠道信息的应用文件打包系统及方法
CN107169011B (zh) 基于人工智能的网页原创性识别方法、装置及存储介质
CN109918076A (zh) 代码文件处理方法、系统、计算机设备及可读存储介质
CN106407288A (zh) 一种信息同步更新的方法及系统
CN111176901B (zh) 一种hdfs删除文件恢复方法、终端设备及存储介质
CN104731946A (zh) 一种互联网信息数据挖掘方法
CN103440231A (zh) 用于比较文本的设备和方法
CN105653567A (zh) 一种文本序列数据中快速查找特征字符串的方法
CN111221967A (zh) 一种基于区块链架构的语言数据分类存储系统
CN106033338A (zh) 基于fog数据的源代码导入及解析的方法和装置
CN105302889A (zh) 数据存储结构的转换方法及装置
CN106648618B (zh) 虚拟应用的文本信息生成方法和装置
CN106155665A (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