IDEA外掛實現根據欄位註釋生成getter/setter方法Javadoc註釋
效果
註釋前程式碼示例:
public class ContactDto {
/** id */
private Long id;
/** 聯絡人姓名 */
private String contactName;
public ContactDto() {}
public ContactDto(Long id, String contactName) {
this.id = id;
this.contactName = contactName;
}
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getContactName() { return contactName; }
public void setContactName(String contactName) { this.contactName = contactName; }
}
自動生成後:
package com.ssp.middle.demo.dto;
public class ContactDto {
/** id */
private Long id;
/** 聯絡人姓名 */
private String contactName;
/**
* 例項化一個新的ContactDto。
*/
public ContactDto() {}
/**
* 例項化一個新的ContactDto。
*
* @param id id
* @param contactName 聯絡人姓名
*/
public ContactDto(Long id, String contactName) {
this.id = id;
this.contactName = contactName;
}
/**
* 獲取id。
*
* @return id
*/
public Long getId() { return id; }
/**
* 設定id。
*
* @param id id
*/
public void setId(Long id) { this.id = id; }
/**
* 獲取聯絡人姓名。
*
* @return 聯絡人姓名
*/
public String getContactName() { return contactName; }
/**
* 設定聯絡人姓名。
*
* @param contactName 聯絡人姓名
*/
public void setContactName(String contactName) { this.contactName = contactName; }
}
方法
步驟
- 下載安裝IDEA的JavaDoc外掛。
- 開啟選項:File - Settings - Tools - JavaDoc
- General選項卡:
- 我不想讓自動生成的註釋覆蓋手動新增的註釋,因此把Mode改成Update old javadoc。
- 我的目的是給欄位和方法加註釋,因此勾選Level中的Method(方法)和Field(欄位),取消勾選Type(類/介面/列舉)。
- 我想給所有元素(包括私有)加註釋,所以勾選Visibility中的全部4個。
- Other裡面我是全勾選的,不過應該沒有影響。
- Templates選項卡設定模板,見下文。
模板
Class Level
這裡可以設定類/介面/列舉的註釋模板,我這裡沒有使用(而且之前也取消勾選了)。
Constructor Level
這裡設定的是類和列舉的建構函式註釋模板。預設的模板我不用,因此我刪掉了,寫了一個對所有建構函式生效的模板:
匹配正規表示式:.+
/**\n
* <#if element.parent.isEnum()>定義<#else>例項化</#if>一個新的${element.name}。\n
<#if element.parameterList.parameters?has_content> *\n
</#if><#list element.parameterList.parameters as parameter> * @param ${parameter.name} <#if element.getParent().findFieldByName(parameter.name,true)??
& element.getParent().findFieldByName(parameter.name,true).getDocComment()??
>${element.getParent().findFieldByName(parameter.name,true).getDocComment().getDescriptionElements()[1].getText()?trim}<#else>${parameter.name}</#if>\n
</#list><#if element.throwsList.referenceElements?has_content> *\n
</#if><#list element.throwsList.referenceElements as exception> * @throws ${exception.referenceName} the ${exceptionNames[exception.referenceName]}\n
</#list> */
Method Level
這裡設定方法的註釋模板。自帶的四個模板分別是:getter,setter,main方法和所有方法。我這裡不用後兩個,因此直接刪了;getter和setter方法做了修改。
Getter方法
我只想給不帶引數的getXxx方法加註釋,因此修改了正規表示式最後的\(.*\).+
,改為了\(\s*\).+
。即:
匹配正規表示式:^.*(public|protected|private)*\s*.*(\w(\s*<.+>)*)+\s+get\w+\s*\(\s*\).+
模板:
/**\n
* 獲取<#if element.getParent().findFieldByName(fieldName,true)??
& element.getParent().findFieldByName(fieldName,true).getDocComment()??
>${element.getParent().findFieldByName(fieldName,true).getDocComment().getDescriptionElements()[1].getText()?trim}<#else>${fieldName}</#if>。\n
<#if element.typeParameters?has_content> * \n
</#if><#list element.typeParameters as typeParameter> * @param <${typeParameter.name}> \n
</#list><#if element.parameterList.parameters?has_content> *\n
</#if><#list element.parameterList.parameters as parameter> * @param ${parameter.name} <#if element.getParent().findFieldByName(parameter.name,true)??
& element.getParent().findFieldByName(parameter.name,true).getDocComment()??
>${element.getParent().findFieldByName(parameter.name,true).getDocComment().getDescriptionElements()[1].getText()?trim}<#else>${parameter.name}</#if>\n
</#list><#if isNotVoid> *\n
* @return <#if element.getParent().findFieldByName(fieldName,true)??
& element.getParent().findFieldByName(fieldName,true).getDocComment()??
>${element.getParent().findFieldByName(fieldName,true).getDocComment().getDescriptionElements()[1].getText()?trim}<#else>${fieldName}</#if>\n
</#if><#if element.throwsList.referenceElements?has_content> *\n
</#if><#list element.throwsList.referenceElements as exception> * @throws ${exception.referenceName}\n
</#list> */
這個模板和Setter保持了一致(除了“獲取”和“設定”兩個字)。
Setter方法
與Getter類似,我修改了一下正規表示式,限定了引數個數為一個:
匹配正規表示式:^.*(public|protected|private)*\s*.*(void|\w(\s*<.+>)*)+\s+set\w+\s*\(\S+\s+\S+\).+
模板和Getter一樣,除了“獲取”二字改成“設定”。
toString方法
另外我還單獨新增領toString方法的模板。
匹配正規表示式:^.*public\s+String\s+toString\s*\(\s*\).*
/** \n
* 轉為字串。\n
* \n
* @return 字串\n
*/
Field Level
預設的欄位註釋模板是把欄位名的每個單詞拆開。我直接把所有欄位註釋模板改成了欄位名:
/** ${element.getName()} */
原理
簡單來說,就是${element}
就是IDEA的外掛開發SDK中的PsiElement物件,可以從這裡開始順著文件樹,通過欄位名找到欄位的JavaDoc註釋。
相關文章
- IDEA自定義類註釋和方法註釋(自定義groovyScript方法實現多行引數註釋)Idea
- IDEA 利用groovy指令碼生成註釋Idea指令碼
- IDEA外掛:快速刪除Java程式碼中的註釋IdeaJava
- IDEA新增註釋Idea
- @NoArgsConstructor、@Getter、@Setter註解及Lombok的使用StructLombok
- Maven外掛mybatis-generator,如何讓生成的PO類的field上有對應表欄位的註釋MavenMyBatis
- Intellij idea 不能識別 @Slf4j,@Getter ,@Setter註解,安裝LombokIntelliJIdeaLombok
- IDEA中如何設定檔案頭註釋和方法註釋(詳解)Idea
- 建議beego的ORM,可以實現表欄位註釋的新增GoORM
- IDEA自定義註釋Idea
- vscode自動註釋外掛的使用VSCode
- idea 方法註釋的快捷鍵設定Idea
- MySQL欄位新增註釋,但不改變欄位的型別MySql型別
- SQL Server 查詢表註釋和欄位SQLServer
- IDEA自定義註釋模板Idea
- 新增一列並增加列欄位註釋
- Oracle 增加修改刪除欄位與新增註釋Oracle
- idea java 類開發中註釋@Author @Description 註釋報警告IdeaJava
- idea在類和介面上面自動生成註釋Idea
- IDEA中給原始碼新增自己註釋——private-notes外掛安裝使用Idea原始碼
- golang自動生成setter和getterGolang
- eclipse、IDEA配置文件註釋EclipseIdea
- Rust 註釋生成文件Rust
- generatorConfig自動生成實體類以及自定義生成註釋的方法
- 根據欄位查表名
- IntelliJ IDEA 設定註釋模板 (Mac)IntelliJIdeaMac
- Python註釋之TODO註釋Python
- iOS 註釋方法大全 程式碼塊加快捷鍵註釋iOS
- JavaScript註釋:單行註釋和多行註釋詳解JavaScript
- VScode外掛Mintlify Doc智慧生成程式碼註釋,非常離譜!強烈推薦!VSCode
- IDEA解決java註釋頂格、xml註釋右對齊+無空格問題IdeaJavaXML
- intellij IDEA建立檔案新增註釋模板IntelliJIdea
- Laravel-ide-helper 生成模型註釋的兩種方法LaravelIDE模型
- 註釋
- VSCode中Lombok註釋支援外掛VSCodeLombok
- 小技巧 EntityFrameworkCore 實現 CodeFirst 透過模型生成資料庫表時自動攜帶模型及欄位註釋資訊Framework模型資料庫
- Java實現連結串列帶註釋Java
- java快速實現匯出生成csv檔案(含註釋程式碼)Java