【问题标题】:Show warning for usage of methods/constructor annotated with custom annotation?显示使用自定义注释注释的方法/构造函数的警告?
【发布时间】:2016-06-25 23:16:05
【问题描述】:

我有一个使用 ORM 解决方案的应用程序,该解决方案要求将默认构造函数保留在类中。为了防止我意外使用了这个默认构造函数,我想用警告强调它的任何用法。

我目前正在使用“@DoNotUse”之类的自定义注释对其进行注释,但我不知道如何让 Intellij 使用警告标记其用法。

我不相信结构搜索检查可以解决这个问题。

我现在唯一的希望是插件吗?

编辑:由于有人显然没有阅读该问题,我不是在寻找 @Deprecated 导致我的代码中的语句被标记为警告的原因,我是正在寻找一种方法来使用其他自定义注释来复制这种效果。

【问题讨论】:

  • 将构造函数设为私有。大多数 ORM 使用反射来实例化类。
  • 是的,我现在要试试这个,但我不确定它是否会起作用。
  • 为什么不使用@Deprecated注解?
  • 实际上,是的,我过去使用过它,但它有点令人困惑,所以我希望是否存在更好的解决方案。
  • @domfarr 你只能标记目标构造函数

标签: java intellij-idea annotations structural-search


【解决方案1】:

实际上,使用结构搜索可以做到这一点。但是它需要了解 IntelliJ IDEA 的内部知识,所以很难弄清楚。

使用以下模式:

new $Constructor$();

点击Edit Variables...,将ConstructorScript Text设置为:

import com.intellij.codeInsight.AnnotationUtil
def method = __context__.parent.resolveMethod()
AnnotationUtil.findAnnotation(method, "fully.qualified.annotation.DoNotUse") != null

这应该找到默认构造函数的所有调用,其中构造函数带有fully.qualified.annotation.DoNotUse 注释。让它工作后,使用该模式创建一个结构搜索检查。

【讨论】:

  • 哇,这确实有效!马上接受!非常感谢!
  • 我无法让您的示例在 Android Studio 2.3 中运行。我想做类似的事情,但允许在方法、字段或构造函数上使用注释。此外,我试图允许在错误中指定并显示一条消息(不是必须的)所以你是说new $Constructor$(); 部分需要在 Search Template 文本框中添加时结构搜索下的新搜索模板?另外,您所说的“在您开始工作后,使用该模式创建一个结构搜索检查”是什么意思。 new $Constructor$(); 不就是这样吗?谢谢
  • @JoshuaKing:他的意思是你应该采用那个搜索配置并在jetbrains.com/help/idea/creating-custom-inspections.html中使用它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 2017-03-01
  • 1970-01-01
相关资源
最近更新 更多