可以自定义模板的ide

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应用程序, @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

  1. 注释元素包括“默认”意味着不需要使用注释的人为该元素提供值。
  2. 如果仅向注释提供一个值,并且未提供明确的元素名称,则假定为“值”元素。
  3. 如果仅指定了一个注释元素,则不需要提供名称“值”,而如果指定了多个注释元素,则必须提供名称。
  4. 之所以在这里使用CLASS的保留级别,是因为我认为使用Java类的编译版本的工具将能够使用此信息,并且我预计该信息不会在运行时使用。
  5. 最好仔细选择哪些注释元素应具有“默认”值,因为不具有“默认”值需要指定一个元素,这在某些情况下可能是所需的行为。

自定义注释的使用可以为其他开发人员和工具提供一种标准化的机制,以构建“可执行的”和受更多控制的描述。 与留下带有评论的消息相比,这种方法通常是有利的,因为评论的标准化程度较低,并且容易出现拼写错误和区分大小写,拼写和其他差异的情况。 与解析任意文本相比,注释可以更好地执行约定,并允许工具更有效地使用它们传达的内容。 获得自定义注释相对于任意注释的某些好处的最明显的方法可能是使用注释处理器。 多个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

可以自定义模板的ide_将IDE检查应用于自定义Java批注相关推荐

  1. 将IDE检查应用于自定义Java批注

    J2SE 5中注释的引入改变了我们编写和处理Java的方式. 除了Java SE的预定义注释外 ,框架,IDE和工具包还引入了自己的自定义注释 . Checker框架提供了一些示例,说明如何使用自定义 ...

  2. 阿里云OCR通用文字识别和自定义模板OCR识别Python代码及一站式教程

    阿里云OCR 一.通用文字识别 1.开通 2.PY3代码 3.测试结果 二.自定义模板识别 1.开通 2.进行自定义模板 3.代码 三.最后 一.通用文字识别 1.开通 开通链接:https://ma ...

  3. 计算机教案word格式模板,用自定义模板编辑教案

    随着信息时代的到来以及个人计算机的飞速普及,各个中小学校都相继配置了办公用计算机.许多学校装备了微机室.微机备课室,甚至条件较好的学校为每一位教师都配备了一台个人计算机.也正是这样,许多教师的备课教案 ...

  4. Android Studio自定义模板 做开发竟然可以如此轻松 后篇

    ###1.概述 最近有很多人反馈,有些哥们不喜欢看文字性的东西,还有一些哥们根本就不知道我在搞啥子,那么以后我就采用博客加视频的方式,我们可以选择看视频讲解:http://pan.baidu.com/ ...

  5. vs未指定启动文件_高效开发利器之自定义模板文件

    简介 越来越多的设计模式, 最佳实践, 优化了软件开发方式, 提高了软件质量, 但是也带来了大量的类似的文件. 比如说: 现在都使用三层模式来开发Web程序, 都会有服务层(Service), DI的 ...

  6. zabbix 5.4 自定义模板

    如果你是使用zabbix的新手的话,并不建议去自定义一套模板,因为zabbix自带的模板就已经能够实现80%多的应用场景了.如果你对zabbix已经有了比较深刻的理解,感觉系统自带的一些模板里有太多你 ...

  7. Zabbix监控自定义模板,自定义监控项以及图标显示

    [Zabbix监控部署安装]https://blog.csdn.net/ck784101777/article/details/102925367 一.何为模板 模板(template):可以应用到主 ...

  8. excel自定义模板解析

    解析excel是一个比较常见的功能,多数情况下我们会使用如下两种方式进行处理 写一个excel解析工具类,将数据解析到一个List<Object[]>集合中,但这种方式需要我们对数据进行二 ...

  9. VS Code 安装插件、自定义模板、自定义配置参数、自定义主题、配置参数说明、常用的扩展插件

    1. 下载和官网教程 下载地址:https://code.visualstudio.com/ 官方教程:https://code.visualstudio.com/docs 2. 安装插件 安装扩展插 ...

最新文章

  1. AndroidStudio_ListView
  2. 王高利:TCP Wrappers访问控制(hosts.allow,hosts.deny)
  3. 华为鸿蒙os什么时候应用上线,华为 HarmonyOS :即日起,全新上线鸿蒙 100 问
  4. 查询方法android的CursorLoader用法小结
  5. GHOST装双系统图文教程
  6. 1123. Is It a Complete AVL Tree (30)
  7. python人工智能github的一些跑程序技巧(持续更新~)
  8. SQL Server 2017 AlwaysOn AG 自动初始化(七)
  9. Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyExce
  10. matlab 局部特征检测与提取(问题与特征)
  11. easyswoole验证码的使用
  12. linux下qt程序以管理员运行,如何让QT程序以管理员权限运行(UAC)
  13. AD13转oRCAD原理图的操作方式
  14. flutter floor数据库框架使用
  15. 【css】表格单元格td元素设置最大高度
  16. 红米NOTE3解账户锁刷机包(2015617)双网通
  17. 【面试】 CVTE 视源股份 C++ 软件开发 二面
  18. 美国加州大学数据安全保护措施TOP10借鉴与启发
  19. 7、osg中响应键盘鼠标事件以及鼠标和键盘编码表
  20. Linux驱动——mmc sd card初始化流程(十一)

热门文章

  1. 二分:路标设置(洛谷)
  2. AT2339-[AGC011C]Squared Graph【黑白染色】
  3. P7443-加边【博弈论】
  4. jzoj1013-GCD与LCM【数论】
  5. 【2018.4.14】模拟赛之二-ssl2392 蚂蚁【图论】
  6. ssl2295-暗黑破坏神【dp练习】
  7. Spark入门(八)之WordCount
  8. Git使用教程:最详细、最傻瓜、最浅显、真正手把手教
  9. 如何设计一个高可用的运营系统
  10. JavaScript学习总结(九)——Javascript面向(基于)对象编程