6

我有这个相当大的代码库(+/- 500k 行)。我正在查看它以查找使用单个参数并且该参数是特定类型的所有方法调用。

这意味着,我希望能够找到如下方法调用:

public class Foo { }
public class Bar { }

public class Doer{
  public void doSomethingFoo(Foo foo) {  }
  public void doSomethingObject(Object object) {  }
}

public class Usage {
  Doer doer = new Doer();
  public doSomething() {
    Foo anObject = new Foo();
    Bar bar = new Bar();

    doer.doSomethingFoo(anObject);
    doer.doSomethingObject(anObject);

    doer.doSomethingObject(bar);
  }
}

由于两者doer.doSomethingFoo(anObject)doer.doSomethingObject(anObject)被调用,因此搜索应该返回这两个语句。同样,doer.doSomethingObject(bar)不返回。当然,我不知道它doer存在。

我正在尝试使用 IntelliJ 的结构搜索来做到这一点。我使用了以下模板$Instance$.$Method$($Parameter$),并带有以下参数:

$Instance$  -> Text/regexp   = .*
$Method$    -> Text/regexp   = .*
$Parameter$ -> Text/regexp   = Foo
               Minimum count = 1     // Minimum one Foo parameter
               Maximum count = 1     // Maximum one Foo parameter

这将返回具有名为foo(显然不区分大小写)的参数的所有内容。所以我可能在这里做错了什么。但是什么?如何获得对唯一参数类型为任何方法的所有调用Foo

4

1 回答 1

2

你快到了。您现在需要做的就是将Expression type (regexp)$Parameter$ 设置为FooText/regexp留空。此外,您可能还想启用该Apply constraint within type hierarchy复选框,以查找 Foo 的子类。

请注意,您可以将Text/regexp所有变量的 留空。这相当于.*

于 2016-06-23T18:09:11.267 回答