可以自定义模板的ide_将IDE检查应用于自定义Java批注
可以自定義模板的ide
J2SE 5中注釋的引入改變了我們編寫(xiě)和處理Java的方式。 除了Java SE的預(yù)定義注釋外 ,框架,IDE和工具包還引入了自己的自定義注釋 。 Checker框架提供了一些示例,說(shuō)明如何使用自定義批注在Java中增加類型安全性 。 在本文中,我著眼于編寫(xiě)一個(gè)簡(jiǎn)單的自定義批注并將其在NetBeans ( 8.0.2 )和IntelliJ IDEA ( 14.0.3 )中使用,以幫助開(kāi)發(fā)人員確定代碼中需要進(jìn)一步注意的問(wèn)題。
在文章充分利用Java的元數(shù)據(jù),第2部分:自定義注釋中 , Jason Hunter演示了@Unfinished注釋,作為編寫(xiě)自定義Java注釋的示例。 我將在本文中演示@Unfinished批注的其他實(shí)現(xiàn)。 這就是自定義批注的妙處:可以編寫(xiě)最適合自己需要的批注。 我的@Unfinished批注的代碼顯示在下一個(gè)代碼清單中。
Unfinished.java:定義自定義@Unfinished批注
package dustin.examples.annotations;import static java.lang.annotation.ElementType.*;import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/*** Example of a custom annotation that marks Java code constructs* that are not yet completed.** Notes about custom annotations specific to this example:* - @Documented indicates available for public documentation* - CLASS retention policy means that compiler places annotation* information in compiled .class files, but JVM is NOT aware* of the annotation at runtime.* - @Target parameters (statically imported) indicate that this* annotation can be applied to constructors, fields,* local variables, methods, packages, parameters, and* classes/interfaces.* - Methods defined for this @interface without 'default' are* required settings for application of this annotation. In* this case, the "finishBy" element is NOT required (but* recommended!) but the "value" element is required.* - "value" element has special significance in custom Java* annotations: it is the assumed annotation element if* a String is provided to the annotation without explicit* element name called out.*/ @Documented @Retention(RetentionPolicy.CLASS) @Target({CONSTRUCTOR,FIELD,LOCAL_VARIABLE,METHOD,PACKAGE,PARAMETER,TYPE}) public @interface Unfinished {/** Description of the unfinished construct. */String value();/*** Date, build, or event by which the annotated construct* is anticipated to be finished.*/String finishBy() default "Unknown"; }下一個(gè)代碼清單在一個(gè)簡(jiǎn)單的類中顯示了@Unfinished應(yīng)用程序, @Unfinished完成許多工作。
WorkInProgress.java:應(yīng)用@未完成的自定義注釋
package dustin.examples.annotations.demo;import dustin.examples.annotations.Unfinished;/*** Demonstrates custom Java annotation @Unfinished.*/ public class WorkInProgress {@Unfinished("This will do something good by Revision 2.")public void doSomethingGood(){}@Unfinished(value = "Do something good here.", finishBy = "Revision 2")public void doSomethingElseGood(){} }默認(rèn)情況下,不完整類將注釋的“ value”元素用于一種方法,然后將“ finishedBy”元素用于第二種方法。 從最后兩個(gè)代碼清單的定義或@Unfinished使用可以@Unfinished :
自定義注釋的使用可以為其他開(kāi)發(fā)人員和工具提供一種標(biāo)準(zhǔn)化的機(jī)制,以構(gòu)建“可執(zhí)行的”和受更多控制的描述。 與留下帶有評(píng)論的消息相比,這種方法通常是有利的,因?yàn)樵u(píng)論的標(biāo)準(zhǔn)化程度較低,并且容易出現(xiàn)拼寫(xiě)錯(cuò)誤和區(qū)分大小寫(xiě),拼寫(xiě)和其他差異的情況。 與解析任意文本相比,注釋可以更好地執(zhí)行約定,并允許工具更有效地使用它們傳達(dá)的內(nèi)容。 獲得自定義注釋相對(duì)于任意注釋的某些好處的最明顯的方法可能是使用注釋處理器。 多個(gè)IDE和框架(例如Checker Framework)處理注釋。 關(guān)于編寫(xiě)自定義批注處理器的在線參考文獻(xiàn)也很多,可與Jav編譯器一起使用以提供警告。 在本文的其余部分中,我將重點(diǎn)介紹如何應(yīng)用兩個(gè)較流行的Java IDE( NetBeans和IntelliJ IDEA )來(lái)將這些注釋報(bào)告為提示/檢查。 我在這篇文章中不是在將注釋處理器集成到IDE的編譯過(guò)程中,也不是在將自定義處理器與命令行Java編譯器集成。
在NetBeans中檢查@未完成的注釋
我之前曾寫(xiě)過(guò)有關(guān)創(chuàng)建NetBeans 7.1自定義提示的博文,該過(guò)程與NetBeans 8幾乎相同。第一步是使用Refactor-> Inspect and Transform…選項(xiàng),如下面的屏幕快照所示。
當(dāng)選擇Refactor-> Inspect and Transform…時(shí) ,將顯示如下所示的彈出窗口。
我將把這個(gè)新檢查應(yīng)用于所有打開(kāi)的項(xiàng)目,如上一個(gè)屏幕快照的“檢查”字段所示。 單擊“ 瀏覽 ”按鈕,將彈出“ 管理檢查 ”窗口,如下一個(gè)屏幕快照所示。
點(diǎn)擊“ New… ”按鈕,允許開(kāi)發(fā)人員在Custom-> Inspection下創(chuàng)建自定義檢查。
您可以單擊“編輯腳本”按鈕來(lái)創(chuàng)建自定義檢查,其中包括重命名檢查的功能。 我已將檢查重命名為“未完成的代碼”。 下一個(gè)屏幕快照顯示了我添加到“未完成代碼”檢查中的代碼。
在此“未完成代碼”檢查的腳本代碼中(也顯示在下面)中,說(shuō)明指定為“未完成代碼”。 源模式指定為@dustin.examples.annotations.Unfinished($parameters$) (定義自定義注釋的@interface的整個(gè)包名稱,其中$parameters$表示一個(gè)或多個(gè)參數(shù))。 =>符號(hào)指向目標(biāo)模式。 在這種情況下,目標(biāo)模式為空,表示建議的轉(zhuǎn)換將刪除@Unfinished批注。 有關(guān)NetBeans檢查編輯器語(yǔ)法的更多詳細(xì)信息,請(qǐng)參見(jiàn)Geertjan Wielenga的NetBeans IDE 7.1中的Custom Declarative Hints 。
<!description="Unfinished Code"> @dustin.examples.annotations.Unfinished($parameters$) => ;;創(chuàng)建NetBeans檢查后,就該嘗試一下了。 接下來(lái)的兩個(gè)屏幕快照演示了如何選擇要運(yùn)行的檢查以及運(yùn)行結(jié)果。
運(yùn)行檢查的結(jié)果是一個(gè)示例,說(shuō)明了如何將NetBeans與自定義批注結(jié)合使用,以快速識(shí)別已批注的代碼并對(duì)其進(jìn)行適當(dāng)處理。
在IntelliJ IDEA中檢查@未完成的注釋
在IntelliJ IDEA中開(kāi)始創(chuàng)建自定義批注的一種方法是打開(kāi)“ 分析->檢查代碼…” ,然后單擊“ 指定檢查范圍 ”彈出窗口中的“…”按鈕,如以下兩個(gè)屏幕快照所示。
下一個(gè)屏幕快照顯示“ 檢查 ”對(duì)話框。
剛剛顯示的屏幕快照表明未選中“ 結(jié)構(gòu)搜索檢查 ”。 選中它(名稱“ Structural Search Inspection”右邊的復(fù)選框)將導(dǎo)致“ Severity”級(jí)別是可選的,并允許添加特定的檢查(加號(hào)從灰色變?yōu)榫G色)。
單擊綠色加號(hào)( + ),有兩個(gè)選擇:“添加搜索模板…”或“添加替換模板…”。 這里的區(qū)別類似于NetBeans在Source-> Inspect and Refactor-> Inspect and Transform…之間的區(qū)別。在這里,我將重點(diǎn)介紹“ Replace template ”。
選擇“添加替換模板...”時(shí),將顯示“ 結(jié)構(gòu)替換 ”對(duì)話框。
在這里創(chuàng)建自定義檢查的最簡(jiǎn)單方法是調(diào)整現(xiàn)有模板。 單擊“ 復(fù)制現(xiàn)有模板... ”按鈕即可完成此操作。 對(duì)于為此博客文章創(chuàng)建的兩次檢查,我分別復(fù)制了現(xiàn)有模板的“帶注釋的類 ”和“帶注釋的方法 ”,以創(chuàng)建自己的自定義模板“未完成的類”和“未完成的方法”。
上面的屏幕快照顯示了我復(fù)制的“現(xiàn)有模板”,下面的屏幕快照顯示了我從中為“未完成的類”和“未完成的方法”創(chuàng)建的自定義模板。
對(duì)于每個(gè)自定義模板(“未完成的類”和“未完成的方法”),我需要單擊“ 編輯變量... ”按鈕,并為每個(gè)變量(正反兩面標(biāo)有$的標(biāo)識(shí)符)指定正則表達(dá)式。搜索。 對(duì)于大多數(shù)變量(例如類名,方法名等),我使用“所有字符”正則表示法( 。* ),但是對(duì)于每個(gè)模板中的$Annotation$ ,我均使用dustin.examples.annotations.Unfinished 。 下一個(gè)屏幕快照是該快照的代表性示例,其中顯示了“未定義方法”模板的注釋變量設(shè)置。
我可以使用分析->按名稱運(yùn)行檢查...來(lái)運(yùn)行我的任何新檢查。 接下來(lái)的三個(gè)屏幕快照演示了如何運(yùn)行新的“未完成的方法”檢查。
運(yùn)行檢查的結(jié)果是一個(gè)示例,說(shuō)明了我們?nèi)绾谓Y(jié)合使用IntelliJ IDEA和自定義注釋來(lái)快速識(shí)別帶注釋的代碼并對(duì)其進(jìn)行適當(dāng)處理。
結(jié)論
這篇文章演示了如何使用NetBeans和IntelliJ IDEA的功能來(lái)創(chuàng)建自定義檢查,以創(chuàng)建檢查來(lái)提醒開(kāi)發(fā)人員代碼中存在自定義批注。 該帖子演示了一個(gè)簡(jiǎn)單的@Unfinished批注以及如何在NetBeans和IntelliJ IDEA中應(yīng)用自定義檢查,以幫助識(shí)別使用這些批注的代碼。
翻譯自: https://www.javacodegeeks.com/2015/11/applying-ide-inspections-to-custom-java-annotations.html
可以自定義模板的ide
總結(jié)
以上是生活随笔為你收集整理的可以自定义模板的ide_将IDE检查应用于自定义Java批注的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 看春晚神器!没有65吋都不好意思叫大屏电
- 下一篇: 宫本用系统推荐铭文(宫本的铭文和出装)