歡迎光臨
每天分享高質量文章

程式碼生成利器:IDEA 強大的 Live Templates

(點選上方公眾號,可快速關註)


來源:肖漢松 ,

blog.xiaohansong.com/2017/03/17/idea-live-templates/

前言

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

基本使用

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

for (int i = 0; i < ; i++) {

 

}

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

自定義 Template

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

簡單用法

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

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

==========

———-

System.out.println($END$)

==========

———-

private final static String $varName$  = “$var$”;`

==========

———-

/**

 * $COMMENT$

 */

@Getter

@Setter

private $TYPE$ $NAME$;

==========

———-

public static void main(String[] args) {

     $END$

}

==========

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

高階用法

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

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

快速宣告變數

宣告變數是一個常用的操作,特別是需要宣告變數需要加註解,註釋的時候,這些程式碼寫起來就很枯燥。下麵是我定義的模板:


———-

/**

 * $END$

 */

@OsgiReference

@Setter

private $TYPE$ $NAME$;

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

  1. clipboard():傳回當前貼上板的字串

  2. decapitalize():將輸入的字串首字母變為小寫

下麵我們演示一下,我們先複製當前類名,然後輸入osgiRef

快速宣告 logger

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

———-

/** logger */

private static final Logger LOGGER = LoggerFactory.getLogger($CLASS$.class);

最強大的 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。

快速列印當前背景關係資訊

列印錯誤日誌的時候需要列印當前背景關係資訊的,例如說入參,有時候入參很多的時候,寫起來很痛苦,好在有模板函式methodParameters(),傳回當前函式引數的串列,當然這個串列我們不能直接使用,需要結合groovyScript對它進行轉化。

—————

LogUtil.$TYPE$(LOGGER, “$MSG$ ” + $params$);

將params系結到groovyScript(“‘\”‘ + _1.collect { it + ‘ = [\” + ‘ + it + ‘ + \”]‘}.join(‘, ‘) + ‘\”‘”, methodParameters()),就能夠自動將當前函式的引數格式化後輸出。

總結

上面我們簡單介紹了常用的模板函式,其實 IDEA 還有很多其它模板函式,具體參考Creating and Editing Template Variables。IDEA 是一個很強大的工具,善用工具能夠極大的提高工作效率,將精力投入到關鍵的事情上,而不是將時間浪費在編寫重覆程式碼上面。一些更高階的用法還有待大家去發掘。最後推廣一波我寫的程式碼生成外掛CodeMaker,好好利用也能節省很多重覆編寫程式碼的時間。

看完本文有收穫?請轉發分享給更多人

關註「ImportNew」,看技術乾貨

贊(0)

分享創造快樂