@Override
    protected Traverser.Admin<E> processNextStart() throws NoSuchElementException {
        final Traverser.Admin<S> traverser = this.starts.next();

        try {
            final S o = getScopeValue(pop, selectKey, traverser);
            if (null == o) return traverser.split(null, this);

            final TraversalProduct product = TraversalUtil.produce(o, this.selectTraversal);
            if (!product.isProductive()) return EmptyTraverser.instance();

            final Traverser.Admin<E> outTraverser = traverser.split((E) product.get(), this);
            if (!(this.getTraversal().getParent() instanceof MatchStep))
                PathProcessor.processTraverserPathLabels(outTraverser, this.keepLabels);
            return outTraverser;
        } catch (KeyNotFoundException nfe) {
            return EmptyTraverser.instance();
        }
    }
@author Marko A. Rodriguez (http://markorodriguez.com)
gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStep.java