2

假设我有一个类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

我已经尝试了几种组合但没有任何运气,甚至可以做到吗?

4

1 回答 1

2

目前,如果不求助于 hack,这是不可能的。诀窍是使用脚本约束:

搜索模板

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

变量

$Instance$最小/最大计数:0,1
$MethodCall文本/正则表达式:someStuff
$Parameter$脚本文本:__context__.type.parameters[0].presentableText.contains("Foo"),表达式类型:List

我已经提交了一个错误报告

于 2017-08-28T13:05:57.987 回答