我需要能够在编译期间或使用静态代码分析识别对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();
}
}
答案 0 :(得分:0)
您可以在IDEA中执行此操作(这将涉及使用IDEA的内部接口;我不知道哪些可以访问注释)。
根据您的使用情况,另一种方法是使用外部工具,例如Checker Framework。它的优点是它是外部支持的,并且具有许多现有功能,因此编写和维护的代码较少。此外,其他不使用IDEA的人也可以运行分析。缺点是与IDE的集成不太紧密;您需要配置IDEA来运行分析,这很简单。
答案 1 :(得分:0)
您可以这样定义自己的结构搜索模板:
@Foo
$ReturnType$ $Method$($ParameterType$ $Parameter$);
保存,例如作为“用@Foo注释的方法”
,然后进行结构搜索
$expression$
使用过滤器reference=methods annotated with @Foo
(要在鼠标悬停在$Expression$
上添加过滤器,然后会弹出一个对话框,询问您是否要编辑过滤器,然后添加参考过滤器)