【问题标题】:Intellij/ Java - identify calls to annotated methodsIntellij/ Java - 识别对带注释的方法的调用
【发布时间】:2014-11-30 13:33:36
【问题描述】:

我需要能够在编译期间或通过使用静态代码分析来识别对 Intellij Idea 13 中具有特定注释的方法的调用,例如识别对 @Deprecated 方法的调用。

我已经研究过在想法中进行结构搜索,这些在静态代码分析中得到支持,并且能够从那里识别方法调用,但是我找不到将这些限制为对带有注释的方法的调用的方法。

例如

public class A {
  @Foo
  public void foo(){
    // do something... 
  }

  public void bar() {
    // do something else.... 
  }

}

public class main {
  public static void main(String... args){
    A a = new A();

    a.foo(); // <---- should be highlighted
    a.bar();
  }
}

【问题讨论】:

    标签: java intellij-idea annotations static-code-analysis


    【解决方案1】:

    您可以在 IDEA 中执行此操作(这将涉及使用 IDEA 的内部接口;我不知道哪些可以访问注释)。

    根据您的用例,另一种选择是使用外部工具,例如Checker Framework。优点是它是外部支持的,并且有很多现有的功能,所以你自己编写和维护的代码会更少。此外,其他不使用 IDEA 的人也可以运行分析。缺点是与 IDE 的集成不太紧密;您需要配置 IDEA 来运行分析,这很简单。

    【讨论】:

    • 谢谢,担心可能是这种情况,但希望有更简单的方法。
    【解决方案2】:

    您可以像这样定义自己的结构搜索模板:

    @Foo
    $ReturnType$ $Method$($ParameterType$ $Parameter$);
    

    保存它,例如作为“带有@Foo 注释的方法”

    然后进行结构搜索 $expression$ 使用过滤器reference=methods annotated with @Foo
    (将过滤器添加到$Expression$ 将鼠标悬停在其上,然后会弹出一个窗口询问您是否要编辑过滤器,然后添加参考过滤器)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-09
      • 1970-01-01
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 2013-06-04
      相关资源
      最近更新 更多