IDEA自定義模板注釋(解決了參數與返回值為空的問題)


前言

相信很多人在設置模板注釋的時候,尤其是在設置方法模板注釋時,都遇到了各種問題(比如參數和返回值為空的情況)。也都在網上進行了很多搜索,但是你懂得,最終都無功而返,本文則將為你解決這一問題,由於設置類的模板注釋很簡單,網上搜索的方法也都可以解決生成類的模板注釋的情況,因此本文不做介紹,將只介紹如何生成方法模板注釋,此外還會詳細介紹使用到的Groovy腳本的具體含義,以便你可以寫你自己的Groovy腳本,滿足你自己的需求,在最后還會通過一個Gif動圖,來展示具體的使用方法,話不多說,開始介紹。

創建模板

首先點擊File -> Settings -> Editor -> Live Templates,會出現以下界面:

image-20201022101321942

然后我們需要點擊+,選擇Template Group...

image-20201022101455162

然后隨便取一個名字,點擊OK

image-20201022101636732

然后按照下圖,首先選中我們剛創建的Group,然后點擊+並選擇Live Template:

image-20201022101834531

然后在彈出的界面先填入圖中標注的信息:

image-20201022102035375

圖中1處的位置按照傳統(相信大多數人以前也是這么設置的)就繼續用*了,對應的Template text如下:

**
 * description
$params$
 *
$return$
 * @author zjw
 * @createTime $date$ $time$
 */
注意

這里需要特別注意,Template text的內容最開始處不可以是/**開頭,否則會出現參數和返回值為空的情況,看到這里你可能覺得你之前也這樣設置過,也是不起作用,但是請你繼續看下去,因為我之前也遇到過,此外我這里的Template text也是為了配合之后腳本的代碼,所以看起來可能不太一樣。

然后需要需要按照下圖的步驟設置一下Application Contexts,需要選擇Java,結束之后記得點擊一下Apply

image-20201022103830214

配置腳本

完成了以上步驟后,就可以開始配置對應的腳本了,按照下圖步驟,並在23處分別輸入以下兩個Groovy腳本(腳本含義稍后介紹),45處在下拉框中選擇系統默認的即可:

groovyScript("def result='';def flag=false;def params=\"${_1}\".replaceAll('[\\\\[|\\\\]|\\\\s]', '').split(',').toList(); for(i = 0; i < params.size(); i++) {if (!params[i].equals('')) {flag=true;result+='* @param ' + params[i] + ' ' + params[i] + ((i < params.size() - 1) ? '\\n\\t ':'')} else {result+=' *'}}; return flag ? ' *\\n\t ' + result : result", methodParameters())

groovyScript("def params=\"${_1}\";def index=params.lastIndexOf('.', params.indexOf('<'));if(index!=-1){params=params.substring(index+1);};index=params.indexOf('.');if(index!=-1&&params.indexOf('<')==-1){params=params.substring(index+1);};return ' * @return ' + params.replaceAll('java.lang.', '').replaceAll(',',', ');", methodReturnType())

image-20201022113313982

完成一點配置后點擊OKApply即可使用我們的模板啦。

注釋使用測試

在講解上述Groovy腳本的含義之前,先來看一下我們上述配置的注釋模板如何使用:
我們只需要在需要添加注釋的方法上輸入/*然后按下Tab即可生成,這里的*對應着上述的Abbreviation里配置的*,等於使用*去替換上述配置的Template text,並在Template text前加了一個/,即可成功添加我們的注釋模板,對應的Gif操作動圖如下:

demo

demo1

腳本含義介紹

這里以設置$return$的腳本為例,為了解釋方便,將腳本做了一些格式化,代碼及其含義直接如下,GroovyJava的語法很相似,所以不難理解:

groovyScript("
        // 將 methodReturnType() 的返回值轉化為字符串賦給 params
        // 默認的返回值格式為 pojo.User / java.lang.int 等形式
        def params = \"${_1}\";
        
        // 如果返回值有集合時,原始形式為 java.util.List<java.lang.Integer> 這種形式
        // 這里獲取 '<' 前的 '.' 下標
        def index = params.lastIndexOf('.', params.indexOf('<'));
        
        if (index != -1) {
            // 執行到這里說明返回值有泛型,為了看着更舒服
            // 這里的作用是把 java.util.List<java.lang.Integer> 變為 List<java.lang.Integer>
            params = params.substring(index + 1);
        };
        
        // 這里繼續獲取 '.' 的下標
        index = params.indexOf('.');
        
        // 如果 '.' 存在,且不存在 '<' 說明返回值沒有泛型
        if (index != -1 && params.indexOf('<') == -1) {
            // 把返回值為 pojo.User 這種變為 User
            params = params.substring(index + 1);
        };
        
        // 當返回值為基本類型時,都會有 'java.lang.' 前綴
        // 例如 java.lang.int ,這里去掉了 java.lang.
        // 此外將返回結果中的 ','替換為', '是為了處理 有多個泛型參數的情況
        // 例如原始返回值可能為 java.util.Map<java.lang.Integer,java.lang.String>
        // 這里為了讓泛型之間的 ',' 變成 ', ' 更加美觀
        // 需要注意的是,我沒有處理 java.util.List<pojo.User> 這種情況
        // 經過這些代碼只會變為 List<pojo.User>, 這個就留給大家自己做了
        return ' * @return ' + params.replaceAll('java.lang.', '').replaceAll(',', ', ');
    ",
    methodReturnType()
)

注意

我這里只展示了處理return的腳本代碼的所有含義,代碼中也顯得有些丑陋,所以還是希望各位能寫出各自的Grovvy腳本,然后分享一下,因為我的param的腳本寫的太丑了,這里就不做講解了,如果有問題,你也可以進行留言。

總結

本文講解了使用IDEA生成自定義方法模板注釋可能會遇到的一些問題,當然可能因為一些版本原因,或者操作原因,你可能仍然會遇到一些問題,也歡迎你進行留言,一起討論。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM