Intellij / Java - 识别对带注释方法的调用

时间:2014-10-06 09:49:28

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

我需要能够在编译期间或使用静态代码分析识别对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();
  }
}

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

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

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