每天讀一篇一線開發(fā)者原創(chuàng)好文
作者簡介
作者姚剛,網(wǎng)管軟件開發(fā)高級工程師,開源軟件愛好者,對性能調(diào)優(yōu)有深入研究,近年致力于TDD、重構(gòu)、DDD、DSL等研究以及在團隊中的落地。
今天他通過實戰(zhàn)方式,為我們帶來關(guān)于IDEA 插件開發(fā)全流程,希望給每個想要學(xué)習(xí)IDEA插件開發(fā)的朋友們提供些許幫助。
1.開發(fā)環(huán)境搭建
(1)擴展抽象類AnAction
Code:
(點擊查看大圖)
(2)將擴展類注冊到plugin.xml文件actions節(jié)點中,并完成相關(guān)屬性配置。屬性含義:
Id:每個action的唯一標(biāo)識,要保證整個插件定義中唯一。
Class:插件訪問入口類,必須擴展抽象類AnAction
Text:插件在界面上的顯示文本
Description:插件的描述信息
Icon:插件圖標(biāo),本例效果:
add-to-group:定義action錨點,其中g(shù)roup-id指定顯示在某個菜單欄或鼠標(biāo)右鍵。
這里以ToolsMenu為例,指定顯示在菜單欄“Tools”菜單中。
Anchor指定在菜單中相對于其他菜單項的位置,有三個取值“first”“l(fā)ast”,“before”,“after”。
keyboard-shortcut:定義插件的快捷鍵。
說明:當(dāng)通過IDEA新建Action的時候,IDEA也會自動完成Aciton在plugin.xml文件中的注冊配置,注冊內(nèi)容如下(其中部分屬性內(nèi)容可通過后期手動配置進(jìn)行修改添加)。
(1)實現(xiàn)SearchableConfigurable接口
三個關(guān)鍵方法:
getDisplayName:控制在配置面板中左側(cè)窗口的顯示名稱。
createComponent:配置界面的繪制,負(fù)責(zé)用戶輸入信息的接受。
isModified:當(dāng)用戶修改配置參數(shù)后,在點擊“OK”“Apply”按鈕前,框架會自動調(diào)用該方法,判斷是否有修改,進(jìn)而控制按鈕“OK”“Apply”的是否可用。
Apply:用戶點擊“OK”或“Apply”按鈕后會調(diào)用該方法,通常用于完成配置信息持久化。
Reset:用戶點擊“Reset”按鈕后,用戶界面配置參數(shù)重置。
Code:
(點擊查看大圖)
(2)界面繪制
可通過所見即所得的繪制工具或插件完成,當(dāng)然直接編碼繪制也可以。
(3)在plugin.xml文件中注冊配置面板
含義:
applicationConfigurable :配置
當(dāng)插件有一些用戶定制的配置參數(shù)信息時,需要插件具備記憶功能,在IDEA重啟后,任然能夠生效,這就需要用到插件配置信息持久化接口。
(1)實現(xiàn)接口PersistentStateComponent<Element>
(點擊查看大圖)
(2)配置持久化文件位置以及參數(shù)
@State(name = 'SearchJar', storages = {@com.intellij.openapi.components.Storage(id = 'other', file ='$APP_CONFIG$/searchJarPath.xml')})
含義:
name:持久化文件組件名稱可隨意指定,通常用插件名稱即可。
storages :定義配置參數(shù)的持久化位置。其中$APP_CONFIG$變量為Idea安裝后默認(rèn)的用戶路徑,例如:C:\Documents and Settings\10139682\.IdeaIC2017.3\config\options\searchJarPath.xml
上面的注解配置參數(shù),在用戶通過配置界面設(shè)置查找路徑后,會自動修改或生成(當(dāng)文件不存在)如下配置文件:
2.4開發(fā)狀態(tài)欄進(jìn)度條對于存在長耗時運算的插件,會了提升用戶體驗,常常需要增加進(jìn)度條。
擴展Task.Backgroundable抽象類,并覆蓋run方法。
Code:
3.運行效果
3.1插件管理
3.2 Setting配置界面
3.3 插件入口
通過菜單Tools>>Search Jar或執(zhí)行Ctrl+Alt+U快捷鍵。
彈出搜索jar輸入框
開始執(zhí)行搜索,任務(wù)狀態(tài)欄顯示效果如下
查找結(jié)果展示:
插件源碼:
https://10.89.168.164:8443/svn/Network_Management_Dept4/科室建設(shè)/EMS性能告警科/DEV_TEST_TOOLS/Plugin Dev/SearchJar
參考文獻(xiàn):
[1]http://blog.csdn.net/chengtt_love/article/details/53745025
[2]http://www.jetbrains.org/intellij/sdk/docs/welcome.html
聯(lián)系客服