default <C extends Collection<Shape>> C pushResultsToCollection(Context context, Shape shape, C captures) {
        push(context, shape, (c, s) -> {
            captures.add(s);
            return Response.CONTINUE;
        });
        return captures;
    }
Pushes {@code shape} through the selector and adds all results to {@code captures}.

<p>This method exists because we've messed this up multiple times. When buffering values sent to a receiver,
you have to return true to keep getting results. It's easy to make a closure that just uses
{@link Collection#add(Object)}, but that will return false if the shape was already in the collection, which
isn't the desired behavior.

@param context Context being evaluated.
@param shape Shape being pushed through the selector.
@param captures Where to buffer all results.
@param <C> Collection type that is given and returned.
@return Returns the given {@code captures} collection.
smithy-model/src/main/java/software/amazon/smithy/model/selector/InternalSelector.java