结构搜索将方法调用与通用参数

时间:2017-08-25 13:31:00

标签: structural-search

我们说我有一个班级class Foo : Base,我想用签名执行某个方法调用

public void someStuf(Iterable<? extends Base> param)

对于搜索模板,我只是将预先存在的一个

作为起点
$Instance$.$MethodCall$($Parameter$)

是否可以匹配特定Iterable子类(此示例中为Base)的任何 Foo的参数???

List<Foo> fooList = new ArrayList<>();
fooList.add(new Foo("A"));
List<Bar> barList = new ArrayList<>();
barList.add(new Bar(1));

someStuff(fooList); // find this!
someStuff(barList); // don't find this one
someStuff(Collections.singletonList(new Foo("B"))); // also match this one

我尝试了几种没有运气的组合,甚至可以做到吗?

1 个答案:

答案 0 :(得分:1)

如果不诉诸黑客,目前这是不可能的。诀窍是使用脚本约束:

搜索模板

$Instance$.$MethodCall$($Parameter$)

变量

$Instance$分钟/最大点数:0,1
$MethodCall text / regexp:someStuff
$Parameter$脚本文字:__context__.type.parameters[0].presentableText.contains("Foo"),表达类型:List

我已提交a bug report