将IDE检查应用于自定义Java批注
J2SE 5中注釋的引入改變了我們編寫和處理Java的方式。 除了Java SE的預定義注釋外 ,框架,IDE和工具包還引入了自己的自定義注釋 。 Checker框架提供了一些示例,說明如何使用自定義注釋在Java中增加類型安全性 。 在本文中,我著眼于編寫一個簡單的自定義批注并將其在NetBeans ( 8.0.2 )和IntelliJ IDEA ( 14.0.3 )中使用,以幫助開發人員確定其代碼中需要進一步注意的問題。
在文章充分利用Java的元數據,第2部分:自定義注釋中 , Jason Hunter演示了@Unfinished注釋,作為編寫自定義Java注釋的示例。 我將在本文中演示@Unfinished注釋的其他實現。 這就是自定義注釋的美:可以編寫一個最適合自己需求的注釋。 我的@Unfinished批注的代碼顯示在下一個代碼清單中。
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"; }下一個代碼清單在一個簡單的類中顯示了@Unfinished應用程序,還有很多工作要做。
WorkInProgress.java:應用@未完成的自定義批注
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(){} }默認情況下,不完整類將注釋的“ value”元素用于一種方法,然后將“ finishedBy”元素用于第二種方法。 從最后兩個代碼清單的定義或@Unfinished使用可以@Unfinished :
自定義批注的使用可以為其他開發人員和工具提供一種標準化的機制,以構建“可執行的”和更受控制的描述。 與留下帶有評論的消息相比,此方法通常是有利的,因為評論的標準化程度較低,并且容易出現拼寫錯誤和區分大小寫,拼寫和其他差異的情況。 與解析任意文本相比,注釋可以更好地執行約定,并允許工具更有效地利用它們傳達的內容。 獲得自定義注釋相對于任意注釋的某些好處的最明顯的方法可能是使用注釋處理器。 多個IDE和框架(例如Checker Framework)處理注釋。 關于編寫自定義批注處理器的在線參考文獻也很多,可與Jav編譯器一起使用以提供警告。 在本文的其余部分中,我將重點介紹如何應用兩個較流行的Java IDE( NetBeans和IntelliJ IDEA )來將這些注釋報告為提示/檢查。 在這篇文章中,我并不是在將注解處理器集成到IDE的編譯過程中,也不是在將自定義處理器與命令行Java編譯器集成。
在NetBeans中檢查@未完成的注釋
我之前曾寫過有關創建NetBeans 7.1自定義提示的博文,該過程與NetBeans 8幾乎相同。第一步是使用Refactor-> Inspect and Transform…選項,如下面的屏幕快照所示。
當選擇Refactor-> Inspect and Transform…時 ,將顯示如下所示的彈出窗口。
我將把這個新檢查應用于所有打開的項目,如上一個屏幕快照的“檢查”字段所示。 單擊“ 瀏覽 ”按鈕,將彈出“ 管理檢查 ”窗口,如下一個屏幕快照所示。
點擊“ New… ”按鈕,允許開發人員在Custom-> Inspection下創建自定義檢查。
您可以單擊“編輯腳本”按鈕來創建自定義檢查,其中包括重命名檢查的功能。 我已將檢查重命名為“未完成的代碼”。 下一個屏幕快照顯示了我添加到“未完成代碼”檢查中的代碼。
在此“未完成代碼”檢查的腳本代碼中(也顯示在下面)中,說明指定為“未完成代碼”。 源模式指定為@dustin.examples.annotations.Unfinished($parameters$) (定義自定義注釋的@interface的整個包名稱,其中$parameters$表示一個或多個參數)。 =>符號指向目標模式。 在這種情況下,目標模式為空,表示建議的轉換將刪除@Unfinished批注。 有關NetBeans檢查編輯器語法的更多詳細信息,請參見Geertjan Wielenga的NetBeans IDE 7.1中的Custom Declarative Hints 。
<!description="Unfinished Code"> @dustin.examples.annotations.Unfinished($parameters$) => ;;創建NetBeans檢查后,就該嘗試一下了。 接下來的兩個屏幕快照演示了如何選擇要運行的檢查以及運行結果。
運行檢查的結果是一個示例,說明了我們如何結合使用NetBeans和自定義注釋來快速標識帶注釋的代碼并對其進行適當處理。
在IntelliJ IDEA中檢查@未完成的注釋
在IntelliJ IDEA中開始創建自定義批注的一種方法是打開“ 分析->檢查代碼…” ,然后單擊“ 指定檢查范圍 ”彈出窗口中的“…”按鈕,如以下兩個屏幕快照所示。
下一個屏幕快照顯示“ 檢查 ”對話框。
剛剛顯示的屏幕快照表明未選中“ 結構搜索檢查 ”。 選中該復選框(名稱“ Structural Search Inspection”右側的復選框)將導致“ Severity”級別可以選擇,并允許添加特定的檢查(加號從灰色變為綠色)。
單擊綠色加號( + ),有兩個選擇:“添加搜索模板…”或“添加替換模板…”。 這里的區別類似于NetBeans在Source-> Inspect and Refactor-> Inspect and Transform…之間的區別。在這里,我將重點介紹“ Replace template ”。
選擇“添加替換模板…”時,將顯示“ 結構替換 ”對話框。
在這里創建自定義檢查的最簡單方法是適應現有模板。 單擊“ 復制現有模板... ”按鈕即可完成此操作。 對于為此博客文章創建的兩次檢查,我分別復制了現有模板的“帶注釋的類 ”和“帶注釋的方法 ”,以創建自己的自定義模板“未完成的類”和“未完成的方法”。
上面的屏幕快照顯示了我復制的“現有模板”,下面的屏幕快照顯示了我從中為“未完成的類”和“未完成的方法”創建的自定義模板。
對于每個自定義模板(“未完成的類”和“未完成的方法”),我需要單擊“ 編輯變量... ”按鈕,并為每個變量(正反兩面標有$的標識符)指定正則表達式。搜索。 對于大多數變量(例如類名,方法名等),我使用“所有字符”正則表達式( 。* ),但是對于每個模板中的$Annotation$ ,我均使用dustin.examples.annotations.Unfinished 。 下一個屏幕快照是該快照的代表性示例,其中顯示了“未定義方法”模板的注釋變量設置。
我可以使用分析->按名稱運行檢查...來運行我的任何新檢查。 接下來的三個屏幕快照演示了如何運行新的“未完成的方法”檢查。
運行檢查的結果是一個示例,說明了如何結合使用IntelliJ IDEA和自定義批注來快速識別已批注的代碼并對其進行適當處理。
結論
這篇文章演示了使用NetBeans和IntelliJ IDEA的功能來創建自定義檢查,以創建檢查來警告開發人員其代碼中存在自定義注釋。 該帖子演示了一個簡單的@Unfinished批注,以及如何在NetBeans和IntelliJ IDEA中應用自定義檢查以幫助識別使用這些批注的代碼。
翻譯自: https://www.javacodegeeks.com/2015/11/applying-ide-inspections-to-custom-java-annotations.html
總結
以上是生活随笔為你收集整理的将IDE检查应用于自定义Java批注的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 可执行文件(linux 可执
- 下一篇: Java EE 8 MVC:控制器的详细