显示使用自定义注释注释的方法/构造函数的警告?

时间:2016-03-10 21:41:46

标签: java intellij-idea annotations structural-search

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

我目前正在使用类似“@DoNotUse”的自定义注释对其进行注释,但我无法弄清楚如何让Intellij通过警告标记其用法。

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

我唯一的希望是插件吗?

编辑:由于某人显然没有阅读此问题,因此我并未找到import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; public class NthString { public static void main(String[] args) { // java NthString 5 // when you run this command 5 will come from args as first parameter int nth = Integer.parseInt(args[0]); // Since we get alfabetic from console input your queue must be type of String Queue<String> q = new LinkedList<>(); // This is in place of your StdIn BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in)); try { String s = ""; // '/' this is the exit String that is expected from user to give at last to stop reading furthermore // in your case it is different, ctrl -d ? while (!"/".equals((s = bufferRead.readLine()))) { q.add(s); } } catch (IOException e) { e.printStackTrace(); } String polled = ""; int count = 1; // now you have to poll from queue back and count to get the nth string // since the queue is implemented as linkedlist in my case 5th element will output e instead of b while ((polled = q.poll()) != null) { if (count == nth) { System.out.println(nth + " th string is " + polled); } count++; } } } 导致我的代码中的语句被标记为警告的原因,我正在寻找一种方法来复制这种效果与其他自定义注释。

1 个答案:

答案 0 :(得分:2)

实际上,使用结构搜索可以实现这一点。然而,它需要了解IntelliJ IDEA的内部结构,因此很难弄清楚。

使用以下模式:

new $Constructor$();

点击Edit Variables...并将Script Text的{​​{1}}设置为:

Constructor

这应该找到默认构造函数的所有调用,其中构造函数用import com.intellij.codeInsight.AnnotationUtil def method = __context__.parent.resolveMethod() AnnotationUtil.findAnnotation(method, "fully.qualified.annotation.DoNotUse") != null 注释。使其工作后,使用模式创建结构搜索检查。