public void setFilter(@Nullable Predicate<? super ExecutionNode> filter) {
    assert myIsCorrectThread.get();
    myFilter = filter;
    for (ExecutionNode node : myChildrenList) {
      node.setFilter(myFilter);
    }
    if (filter == null) {
      myVisibleChildrenList = null;
    }
    else {
      if (myVisibleChildrenList == null) {
        myVisibleChildrenList = Collections.synchronizedList(new ArrayList<>());
      }
      maybeReapplyFilter();
    }
  }
public void setFilter(@Nullable Predicate<? super ExecutionNode> filter)