Eclipse Juno:Eclipse Code Recommenders 1.0简介

Code Recommenders是Eclipse Java开发工具的扩展,该工具分析现有应用程序的代码,提取其他开发人员之前使用和扩展某些API的通用模式,然后将这些知识重新整合到您的IDE中。

开发人员和CTO知道:频繁更换的团队以及对最新,最先进技术的“*”使用使您的燃尽图和项目成本估算在几周内就**了。 为了弥补人才流失并降低入口障碍,团队负责人计划在团队的相当多时间里编写软件,进行审阅并在一个屏幕前成对合作以平均分配有关如何使用API​​的知识在整个团队中-尤其是新来者。

如果做得对,从长远来看,这是团队领导才能使团队发挥最大绩效的最佳方法。 但是Code Recommenders认为团队领导可以做的更多……

利用源代码中的隐藏宝石

API设计人员通常对开发人员应如何使用他们的API有一些期望,即他们希望他们的客户在特定的时间点以特定的顺序等调用特定的方法。每个新手面临的挑战是了解这些隐式期望和API使用规则的速度足以为他们加入的团队提供帮助。

当然,API文档可能包含必要的信息。 某处。 但是在我们自己之间:您多久阅读一次JButton的381种方法的API文档,以弄清楚如何使用它? 您不是要使用Google查找所需的代码段吗? 或者,如果Google因为您正在针对内部库进行编程而无法提供帮助,您是否不想看现有的代码库来了解您的同事之前如何成功使用该API? 有时,您只是在代码完成建议弹出窗口中滚动,以查看哪种建议听起来最适合您要实现的目标,对吗?

没有什么不好的。 这是非常无效的,而且成本很高。 显然,今天的API文档仅对开发人员有用。

这就是Code Recommenders的用处。Code Recommenders是Eclipse Java开发工具的扩展,该工具分析现有应用程序的代码,提取其他开发人员以前使用和扩展某些API的通用模式,然后将这些知识重新集成到您的IDE中。 (i)智能代码完成,(ii)扩展的API文档,(iii)复杂的示例代码搜索以及甚至(iv)错误检测工具的形式-所有这些都由对编程质量的隐性知识提供支持。 如果愿意,您可以认为Code Recommenders将Web 2.0的思想带入了IDE –或我们有时称之为:Code Recommenders是关于创建IDE 2.0的。

本文的其余部分将简要概述Eclipse Juno中提供的Code Recommender的完成引擎(作为Eclipse Java开发人员软件包,Eclipse RCP软件包的一部分),或者-如果从其他软件包开始,则可以从Juno Release Train更新站点。

推荐代码补全引擎

Code Recommenders 1.0向Eclipse添加了五个新的代码完成引擎:

1.智能通话完成

2.智能代码段补全,

3.智能覆盖完成

4.通话链完成,

5.子词完成。

智能通话完成

智能呼叫完成引擎可能最好地说明了“代码推荐”的概念。 在处理Framework API时,开发人员经常不得不处理复杂的API。 为了说明起见,请考虑javax.swing.JButton的公共API,该API由381(!)公共方法组成(图1) 开发人员通常只需要了解一个很小的子集即可获得一个庞大的API。 其余的360种方法不必要地使API膨胀(从API用户的角度来看),从而增加了学习和使用此API的复杂性和负担。

Eclipse Juno:Eclipse Code Recommenders 1.0简介

图1:JButton的所有潜在完成

这是Code Recommenders的“智能呼叫完成”功能的来源。它仅建议那些与手头任务实际相关的方法,从而为开发人员提供了帮助。 例如,假设开发人员刚刚创建了一个文本小部件,那么Code Recommenders可以使开发人员接下来清楚应该使用哪种方法-即使开发人员自己并不知道(图2)。

Eclipse Juno:Eclipse Code Recommenders 1.0简介

图2:在调用new Text()之后,推荐人在SWT Text上的智能完成

在撰写本文(1.0.0.rc2)时,Code Recommenders部分支持Java Standard Library,即java。*下的主要包和javax。*下的某些包。 由于推荐模型仅从Eclipse Juno Release Train代码库生成,因此不支持java.awt或javax.swing之类的包,因为在生成时没有可用的数据。 有关支持哪些库或程序包的详细列表,请查看“代码推荐”主页上的“报告”部分。

智能代码模板(单对象,无序)

当需要代码遍历对象数组或为类的属性创建吸气剂时,代码模板会很有用。 但是,当开发人员必须使用他们不熟悉的API时,代码模板才真正发挥作用。 然后,代码模板用作附加文档,可以快速显示如何使用API​​,从而可以为开发人员节省大量时间,否则这些时间将需要阅读API文档。

Eclipse维护了70多个此类Java代码模板,从简单的循环到复杂的API使用模式(例如创建SWT Button或Composite),不一而足。 不幸的是,为API使用模式开发模板是一项非常昂贵且繁琐的工作,因此,仅存在很少的模板来使用复杂的API,例如JFace,Eclipse UI甚至Java Standard Library。

这是再次推荐代码的地方。 在上一节中,我们展示了如何推荐在对象上调用的单个方法。 推荐代码模板完成不仅推荐单个方法,而且推荐完整的方法集( 图3 ),将其提升到一个新的水平。

Eclipse Juno:Eclipse Code Recommenders 1.0简介

图3:JDT ASTParser上的智能模板完成

就像您在上面的示例中可能已经注意到的那样,可以将Recommenders的模板完成功能应用于现有变量以完成现有用法,而且还可以对类型名称进行操作, 如图4所示。 然后,应用模板后的最终结果如图5所示

Eclipse Juno:Eclipse Code Recommenders 1.0简介

图4:JFace TableViewer上的智能模板完成

Eclipse Juno:Eclipse Code Recommenders 1.0简介

图5:JFace TableViewer的结果代码片段

警告:

生成的模板建议不反映方法执行的顺序约束,即,建议的方法的顺序在插入后可能必须手动更改。

智能覆盖完成

与推荐方法调用类似,也可以建议开发人员通常应覆盖哪些方法。 这就是推荐人的智能覆盖完成(图6)所做的。 关于如何扩展类还有更多的话要说,但是我们会将其保存在有关代码推荐器的扩展文档平台的另一篇文章中,该平台可从代码中提取有价值的(扩展)模式,并利用这些模式丰富现有的API文档。

Eclipse Juno:Eclipse Code Recommenders 1.0简介

图6:推荐人在JFace对话中的智能优先完成

子词补全

另一个值得注意的扩展引擎是Code Recommenders Subwords Completion。

作为经验丰富的Eclipse用户,您可能知道JDT的CamelCaseCompletion。 这个引擎很不错,但是要求您记住要插入的完成建议的确切大写字母。

子词使此操作更加方便。 这个想法很简单:您不必从头开始输入名称即可在内容辅助弹出窗口中找到匹配项。 如果开发人员不知道是否必须“查找”或“获取”一个元素,它会有所帮助。

Eclipse Juno:Eclipse Code Recommenders 1.0简介

图7:JDT的CompilationUnit上的推荐子单词完成

而且它甚至足够复杂,足以理解粗略的速记形式,例如用于声明的dclr或诸如“ ty + dclr”之类的单词的组合,它可以找到所有包含单词“ type” +“ declarations”的提案(图8和9)

Eclipse Juno:Eclipse Code Recommenders 1.0简介

图8:JDT AST的推荐子字完成

Eclipse Juno:Eclipse Code Recommenders 1.0简介

图9:JDT的AST的推荐子字完成

注意:子 词不会属于智能完成引擎,也就是说,它不需要任何训练数据,因此可以与任何框架或API一起使用。

连锁完成

我要介绍的最后一个引擎是“推荐链完成”。

有时,您需要访问可以通过连续调用多个方法调用来访问的对象-所谓的调用链。 通常,您必须自己手动遍历API调用图,并评估每个潜在链是否可以返回所需类型的实例,才能自己找到这些调用链。

Code Recommenders的呼叫链完成自动为您完成。 它快速遍历整个API调用图,并找到通过API的所有可能路径,这些路径可能返回适当的对象(图10)

Eclipse Juno:Eclipse Code Recommenders 1.0简介

图10:ViewPart中IStatusLineManager上的推荐链完成

接下来会发生什么?

我们在本文中介绍的Code Recommenders完成引擎只是一个预告片。 即将出现更多激动人心的功能,例如个性化代码搜索引擎,可在代码中找到复杂的多对象使用模式的模板完成引擎,stacktrace搜索引擎以及更多工具。 密切注意这个项目,库存中有令人兴奋的东西。 答应了。

作者简介:

Marcel Bruch是Eclipse Code Recommenders项目的项目负责人,vogella.com的Eclipse培训师,达姆施塔特工业大学的研究员。 他旨在通过利用大数据(软件开发)来改变IDE的开发方式,从而改变软件的开发方式。

本文发表在Java Tech Journal:Eclipse Juno中。 在此处查看更多有关该问题的信息


翻译自: https://jaxenter.com/eclipse-juno-introduction-to-eclipse-code-recommenders-1-0-105194.html