@Override
      List<V> matches(T src, ProcessingContext context) {
        final List<V> vs1 = first.matches(src, context);
        if (vs1 == null) return null;

        final List<V> vs2 = next.matches(src, context);
        if (vs2 == null) return null;

        final List<V> result = new ArrayList<>(vs1);
        result.retainAll(new HashSet<>(vs2));
        return result;
      }
@Override
      List<V> matches(T src, ProcessingContext context)