结构搜索以匹配具有通用参数的方法调用

Structural Search to match method call with generic parameter

假设我有一个 class class Foo : Base 并且我想执行带有签名

的特定方法调用
public void someStuf(Iterable<? extends Base> param)

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

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

是否可以匹配特定 Base subclass 的任何 种类 Iterable 的参数(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

我已经尝试了几种组合,但都没有成功,是否可行?

目前不借助黑客手段是不可能的。诀窍是使用脚本约束:

搜索模板

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

变量

$Instance$ min/max 计数:0,1
$MethodCall text/regexp: someStuff
$Parameter$ 脚本文本:__context__.type.parameters[0].presentableText.contains("Foo"),表达式类型:List

我已经提交了a bug report