大规模源代码存储库中的自动导入及依赖性制造技术

技术编号:17490813 阅读:36 留言:0更新日期:2018-03-17 13:47
本发明专利技术公开了用于找出源代码文件中的至少一个简单名的合格名的候选的系统和方法。可以接收具有需要对应合格名的至少一个简单名的源代码文件。可以解析所述源代码文件以确定所述文件中的简单名和所述文件中的合格名。针对需要对应合格名的至少一个简单名,可以搜索源代码图以找出与所述至少一个简单名相对应的潜在候选合格名。在从所述源代码图中接收到潜在候选合格名的列表后,可以向用户输出所述列表以便所述用户选择适当的合格名。针对所述合格名,还可以选择构建依赖性。

Automatic import and dependency in large source code repositories

The present invention discloses a system and method for finding a candidate for a qualified name of at least one simple name in a source code file. A source code file with at least one simple name that needs to correspond to a qualified name can be received. The source code file can be parsed to determine the simple name in the file and the qualified name in the file. For at least one simple name that needs corresponding qualified name, we can search the source code diagram to find out the potential candidate qualified name corresponding to the at least one simple name. After receiving the list of potential candidate names from the source code, the list can be output to the user, so that the user can select the appropriate qualified name. For the qualified name, you can also choose to build dependencies.

【技术实现步骤摘要】
【国外来华专利技术】大规模源代码存储库中的自动导入及依赖性
技术介绍
开发者经常构建包含外部代码或库的复杂软件应用。例如,开发者可能希望在其应用中包括人员列表。开发者可能代替定义他自己的列表对象而包括来自外部包的列表类。在如图1所示的这个示例中,开发者可以在他的代码中包括来自标准库的列表,诸如“java.util.List”。“java.util.List”是通过java.util包可公开获得的有序集合类。一旦列表被导入开发者的源代码文件中,开发者便可以简单地利用简单名“List”来引用该列表,而不必在各处实例化或使用该列表时使用完全合格名(qualifiedname)“java.util.List”。例如,在图1的行3中,代码仅涉及简单名“List”,而不涉及合格名“java.util.List”。虽然使用标准集成开发环境(IDE)能够使定义合格名的包、库或外部代码导入源代码的过程对于小规模代码库简单直接,但大规模代码库对于标准IDE而言具有过多外部依赖性而无法有效率地找出称为合格名的适当全名或者依赖性的适当构建系统构造。常规的系统通过查看整个代码库并且试图确定适当的包、库或其他外部代码来尝试实时找出合格名。这个过程非常耗时。使用这种方法根本无法在合理的时间内处理大量的源代码。正如本专利技术人所认识到,期望能够快速地找出合格名的候选以导入适当的包、库或外部代码,以用于源代码中存在的简单名引用以及提供合格名的构建系统依赖性。
技术实现思路
本说明书描述有关针对源代码文件——例如Java语言的源代码文件——中的至少一个简单名找到合格名的候选的技术。一般而言,本说明书中所述的主题的一方面能够被实施在一种用于找出源代码文件中的至少一个简单名的合格名的候选的系统中。一种示例系统可以包括一个或多个处理设备以及一个或多个存储设备,所述存储设备存储实现示例方法的指令。一种示例方法可以包括:接收具有需要对应合格名的至少一个简单名的源代码文件;解析所述源代码文件以确定所述文件中的简单名和所述文件中的合格名;针对需要对应合格名的至少一个简单名,搜索源代码图以找出与所述至少一个简单名相对应的潜在候选合格名;以及在接收到来自所述源代码图的潜在候选合格名的列表后,输出所述列表。这些及其他实施例能够可选地包括以下特征中的一个或多个:在输出所述列表之前,可以用附加信息过滤或充实所述列表;一旦合格名被选择,便可以确定特定合格名的构建依赖性以及构建目标;在输出所述列表之前,可以基于其他源代码文件已经使用特定类型的合格名的次数来过滤所述列表;可以基于源代码存储库的其他部分中已经使用特定合格名的频率来排名所述列表;如果所述列表仅包含一个潜在合格名,则无需用户交互便可以自动选择该名作为所述合格名;可以为用户提供接口以接收对潜在候选合格名的列表中的合格名的选择;过滤可以包括:确定合格名包是否从其中与所述合格名潜在相对应的简单名当前正被引用的源代码文件可见,以及响应于确定所述合格名包从所述源代码文件可见,提供所述合格名包的名称作为潜在候选合格名;以及过滤可以包括:确定合格名包能够向构建过程增添的复杂度,包括为了构建所述源代码文件所增加的时间和/或资源,以及响应于确定合格名包向所述构建过程增添的复杂度是可承受的量,将所述合格名包的名称添加到潜在候选合格名的列表。附图说明图1是包括合格名和简单名的源代码的示例。图2是图示出用于确定源代码文件中的简单名的合格名的示例系统的框图。图3是图示出示例计算设备的框图。具体实施方式根据一个示例实施例,在分布式系统中可能存在大型图,其表示某个源代码存储库或某些源代码存储库的所有源代码。可以将源代码编制索引来创建图。在一些实施例中,该图可以存在于供开发者远程访问的一个机器或几个机器上,使得并不在各开发者的机器上运行该图,并且能够供多个开发者同时访问该图。在最简单的形式中,该图可以是两个表格,第一表格将简单名映射到合格名,并且第二表格映射合格名以构建系统依赖性。通过在分布式系统或云环境中创建和访问该图,在开发者之间能够缓存和重用计算。在其他实施例中,该图可以存在于开发者自己的机器上。如图2所示,示例源代码文件(201)中有两个简单名,行3上的“Bar”以及行5上的“Foo”。“Bar”的合格名在代码中被提供为行1上的“com.sourcecode.Bar”。然而,没有提供“Foo”的合格名。在一个示例系统中,在开发者机器上运行的集成开发环境(IDE)可以具有解析器(203),其可以提供在特定源代码文件中使用的简单名的列表。解析器(203)也可以提供源代码文件中的合格名的列表。针对如图2所示的源代码文件,简单名的列表可以是:[Foo,Bar]。合格名的列表可以是:[com.sourcecode.Bar]。如图所示,可以不提供与简单名相对应的合格名。为了找到合格名以及为源代码中未提供对应合格名的简单名提供合格名的构建系统构造,可以针对简单名到合格名的可能扩展来查询源代码图(205)。在该给定的示例中,可以针对“Foo”的合格名以及与“Foo”相关联的构建依赖性来查询源代码图(205)。如果在该示例中提供合格名作为诸如“Bar”的导入,则构建系统依赖性可能存在或者可能不存在。因此,即使在源代码中提供完全合格名时,也可能针对构建系统依赖性来查询源代码图(205)。例如,当查找“Foo”时,对源代码图(205)的搜索可能匹配包含名“Foo”的类和构建系统构件。在一些实施例中,可以通过简单名在代码中的使用方式来过滤结果。例如,如果调用“Foo”的某个方法,则可以从潜在候选列表中滤除不包含该方法的补全的完全限定潜在候选。然后,查询可以返回导入和构建系统依赖性的列表。本领域普通技术人员能够领会,存在多种方式来排序和过滤该列表。可以遍历源代码图(205)以获得诸如在文件中找出的简单名的构建系统依赖性的信息。例如,源代码图可能能够为简单名“Foo”的合格名提供依赖性的目标,使得源代码能够被编译成目标文件。通过遍历源代码图(205)所获得的给定简单名的潜在合格名的列表可以用其他数据来充实并且进一步过滤(213)。充实数据可以包括:在存储库中使用合格名的次数(以允许排名);合格名是否被标记为弃用,并且如果是,则应使用何合格名作为替代;合格名包是否从当前正引用其的源代码可见(一些类可能被有意限制到某些软件包);以及该合格名可能为构建过程增添的复杂度,包括为构建源代码而增加的时间和/或资源。例如,可以基于已由其他源代码文件使用特定类型的合格名的次数来过滤列表。过滤还可以包括移除所有不可见的类或者移除在代码中的特定上下文内会不适合的所有类。例如,“Foo”可以调用源代码文件中的特定方法,因此不具有该方法的所有匹配的“Foo”库都可以从潜在候选列表中滤除。当向用户(215)返回补全(completion)和依赖性的可能候选的列表以供考虑时,示例系统可以基于已由其他开发者在源代码存储库的其他部分中使用特定合格名的频率来排名返回的结果。在一些实施例中,频繁使用的合格名是最有可能由开发者在他们的源代码文件中使用的名称。在其他排名当中,所述名也可以按照它们对它们在其中被视为使用的源代码文件是否可见、该名称表示的类是否具有在源代码文件中正使用的方法、以及这些类是否被弃用来排名。本文档来自技高网...
大规模源代码存储库中的自动导入及依赖性

【技术保护点】
一种用于找出源代码文件中的至少一个简单名的合格名的候选的计算机实现的方法,所述方法包括:接收具有需要对应合格名的至少一个简单名的源代码文件;解析所述源代码文件以确定所述文件中的简单名和所述文件中的合格名;针对需要对应合格名的至少一个简单名,搜索源代码图以找出与所述至少一个简单名相对应的潜在候选合格名;以及在接收到来自所述源代码图的潜在候选合格名的列表后,输出所述列表。

【技术特征摘要】
【国外来华专利技术】2015.07.10 US 14/796,6951.一种用于找出源代码文件中的至少一个简单名的合格名的候选的计算机实现的方法,所述方法包括:接收具有需要对应合格名的至少一个简单名的源代码文件;解析所述源代码文件以确定所述文件中的简单名和所述文件中的合格名;针对需要对应合格名的至少一个简单名,搜索源代码图以找出与所述至少一个简单名相对应的潜在候选合格名;以及在接收到来自所述源代码图的潜在候选合格名的列表后,输出所述列表。2.根据权利要求1所述的计算机实现的方法,进一步包括:一旦合格名被选择,则确定特定合格名的构建依赖性以及构建目标。3.根据权利要求1或2所述的计算机实现的方法,进一步包括:在输出所述列表之前,用附加信息过滤或充实所述列表。4.根据权利要求3所述的计算机实现的方法,其中,过滤或充实所述列表包括:在输出所述列表之前,基于其他源代码文件已经使用特定类型的合格名的次数来过滤所述列表。5.根据权利要求3或4所述的计算机实现的方法,其中,过滤或充实所述列表包括:基于源代码存储库的其他部分中已经使用特定合格名的频率来排名所述列表。6.根据权利要求3至5中的任一项所述的计算机实现的方法,其中,过滤或充实所述列表包括:确定合格名包是否从其中与所述合格名潜在相对应的简单名当前正被引用的源代码文件可见;以及响应于确定所述合格名包从所述源代码文件可见,提供所述合格名包的名称作为潜在候选合格名。7.根据权利要求3至6中的任一项所述的计算机实现的方法,其中,过滤或充实所述列表包括:确定合格名包能够向构建过程增添的复杂度,包括为了构建所述源代码文件所增加的时间或资源;以及响应于确定合格名包向所述构建过程增添的复杂度是可承受的量,将所述合格名包的名称添加到潜在候选合格名的所述列表中。8.根据任一项前述权利要求所述的计算机实现的方法,进一步包括:如果所述列表仅包含一个潜在合格名,则无需用户交互便自动选择所述合格名。9.根据权利要求1至7中的任一项所述的计算机实现的方法,进一步包括:提供接口以接收对潜在候选合格名的所述列表中的合格名的选择。10.一种用于找出源代码文件中的至少一个简单名的合格名...

【专利技术属性】
技术研发人员:卡尔米·格鲁什科
申请(专利权)人:谷歌有限责任公司
类型:发明
国别省市:美国,US

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1