IntelliJ IDEA自帶超實用的代碼生成器,但是大多數人還是不會用

前言

Java 開發過程經常需要編寫有固定格式的代碼,例如說聲明一個私有變量,logger或者bean等等。對於這種小範圍的代碼生成,我們可以利用 IDEA 提供的 Live Templates功能。剛開始覺得它只是一個簡單的Code Snippet,後來發現它支持變量函數配置,可以支持很複雜的代碼生成。下面我來介紹一下Live Templates的用法。

基本使用

IDEA 自帶很多常用的動態模板,在 Java 代碼中輸入fori,回車就會出現

for(inti=0;i
IntelliJ IDEA自帶超實用的代碼生成器,但是大多數人還是不會用


按Tab可以在各個空白處跳轉,手動填值。

自定義 Template

官方自帶模板畢竟不能滿足我們個人編碼風格的需要,Live Templates提供了變量函數的方式供我們自定義。

簡單用法

新增自定義模板,首先需要填寫觸發單詞(即 Abbreviation),描述是可選的,然後定義模板的上下文,點擊define選擇Java,這樣在編輯 Java 的時候就會觸發當前模板,定義完上下文之後,就可以填寫模板了。

IntelliJ IDEA自帶超實用的代碼生成器,但是大多數人還是不會用

下面列舉幾個我常用的簡單模板

==========----------System.out.println($END$)==========----------privatefinalstaticString$varName$="$var$";`==========----------/***$COMMENT$*/@Getter@Setterprivate$TYPE$$NAME$;==========
----------publicstaticvoidmain(String[]args){$END$}==========

模板支持變量的定義,使用$$包圍的字符表示一個變量。$END$是一個特殊的預定義變量,表示光標最後跳轉的位置。每個變量的位置都可以跳轉過去。

高級用法

如果你用過 vim 的Code Sinppet插件,你會發現模板裡面是可以執行函數的,強大的 Live Templates當然也支持,而且 IDEA 能夠感知代碼的語義,例如說當前編輯的函數的參數。但這一點就能夠讓我們玩出花來。我們從易到難來研究模板函數的功能。


IntelliJ IDEA自帶超實用的代碼生成器,但是大多數人還是不會用

前面我們提到的變量可以綁定函數,配置方式如上圖所示。

聲明變量是一個常用的操作,特別是需要聲明變量需要加註解,註釋的時候,這些代碼寫起來就很枯燥。下面是我定義的模板:

----------/***$END$*/@OsgiReference@Setterprivate$TYPE$$NAME$;

乍一看這個模板跟我上面定義的privateField差不多,唯一的不同在於我給這些變量綁定了函數。

  1. clipboard():返回當前粘貼板的字符串
  2. decapitalize():將輸入的字符串首字母變為小寫

下面我們演示一下,我們先拷貝當前類名,然後輸入osgiRef

IntelliJ IDEA自帶超實用的代碼生成器,但是大多數人還是不會用

聲明 logger 也是一個常用的操作,上面我們是利用了粘貼函數來快速聲明變量,現在我們來利用另一個函數className(),顧名思義,它的作用就是返回當前類名。

----------/***$END$*/@OsgiReference@Setter
IntelliJ IDEA自帶超實用的代碼生成器,但是大多數人還是不會用

最強大的 groovyScript()

如果說上面用到的函數提供的能力有限,不夠靈活,那麼groovyScript()提供了一切你想要的能力,它支持執行 Groovy 腳本處理輸入,然後輸出處理後的字符串。

groovyScript("code",...)|code|一段Groovy代碼或者Groovy腳本代碼絕對路徑||...|可選入參,這些參數會綁定到`_1, _2, _3, ..._n`, 在 Groovy 代碼中使用。|

下面我們來看一下它的實際應用。

快速 bean 配置

新增一個服務都要在 Spring 中註冊一個 bean,一般這個配置無非就是將指明id和class,由於我們是在 xml 中配置,所以不能利用className()函數,但是我們可以利用clipboard()函數獲取到類的全引用,在 IDEA 中我們直接右鍵類名,點擊Copy Reference就行。然後執行 groovy 腳本獲取類名。

----------

id綁定decapitalize(groovyScript("_1.tokenize('.')[-1]", clipboard())),首

先取clipboard()的值得到類的全引用,然後執行 groovy 代碼_1.tokenize('.')[-1](按.分割為字符串數組,然後取最後一個即可得到類名,然後用decapitalize()將首字母小寫即可得到id。

IntelliJ IDEA自帶超實用的代碼生成器,但是大多數人還是不會用

快速打印當前上下文信息

打印錯誤日誌的時候需要打印當前上下文信息的,例如說入參,有時候入參很多的時候,寫起來很痛苦,好在有模板函數methodParameters(),返回當前函數參數的列表,當然這個列表我們不能直接使用,需要結合groovyScript對它進行轉化。

---------------LogUtil.$TYPE$(LOGGER,"$MSG$"+$params$); 

將params綁定到

groovyScript("'\"'+_1.collect{it+'=[\"+'+it+'+\"]'}.join(',')+'\"'",methodParameters()),

就能夠自動將當前函數的參數格式化後輸出。

IntelliJ IDEA自帶超實用的代碼生成器,但是大多數人還是不會用


分享到:


相關文章: