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的複雜性和負擔。

圖1:JButton的所有潛在完成

這是Code Recommenders的「智能呼叫完成」功能的來源。它僅建議那些與手頭任務實際相關的方法,從而爲開發人員提供了幫助。 例如,假設開發人員剛剛創建了一個文本小部件,那麼Code Recommenders可以使開發人員接下來清楚應該使用哪種方法-即使開發人員自己並不知道(圖2)。


圖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 ),將其提升到一個新的水平。

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

就像您在上面的示例中可能已經注意到的那樣,可以將Recommenders的模板完成功能應用於現有變量以完成現有用法,而且還可以對類型名稱進行操作, 如圖4所示。 然後,應用模板後的最終結果如圖5所示

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

圖5:JFace TableViewer的結果代碼片段

警告:

生成的模板建議不反映方法執行的順序約束,即,建議的方法的順序在插入後可能必須手動更改。

智能覆蓋完成

與推薦方法調用類似,也可以建議開發人員通常應覆蓋哪些方法。 這就是推薦人的智能覆蓋完成(圖6)所做的。 關於如何擴展類還有更多的話要說,但是我們會將其保存在有關代碼推薦器的擴展文檔平臺的另一篇文章中,該平臺可從代碼中提取有價值的(擴展)模式,並利用這些模式豐富現有的API文檔。

圖6:推薦人在JFace對話中的智能優先完成

子詞補全

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

作爲經驗豐富的Eclipse用戶,您可能知道JDT的CamelCaseCompletion。 這個引擎很不錯,但是要求您記住要插入的完成建議的確切大寫字母。

子詞使此操作更加方便。 這個想法很簡單:您不必從頭開始輸入名稱即可在內容輔助彈出窗口中找到匹配項。 如果開發人員不知道是否必須「查找」或「獲取」一個元素,它會有所幫助。

圖7:JDT的CompilationUnit上的推薦子單詞完成

而且它甚至足夠複雜,足以理解粗略的速記形式,例如用於聲明的dclr或諸如「 ty + dclr」之類的單詞的組合,它可以找到所有包含單詞「 type」 +「 declarations」的提案(圖8和9)

圖8:JDT AST的推薦子字完成

圖9:JDT的AST的推薦子字完成

注意:子 詞不會屬於智能完成引擎,也就是說,它不需要任何訓練數據,因此可以與任何框架或API一起使用。

連鎖完成

我要介紹的最後一個引擎是「推薦鏈完成」。

有時,您需要訪問可以通過連續調用多個方法調用來訪問的對象-所謂的調用鏈。 通常,您必須自己手動遍歷API調用圖,並評估每個潛在鏈是否可以返回所需類型的實例,才能自己找到這些調用鏈。

Code Recommenders的呼叫鏈完成自動爲您完成。 它快速遍歷整個API調用圖,並找到通過API的所有可能路徑,這些路徑可能返回適當的對象(圖10)

圖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