class HugeGraphStepStrategy
        extends AbstractTraversalStrategy<ProviderOptimizationStrategy>
        implements ProviderOptimizationStrategy {

    private static final long serialVersionUID = -2952498905649139719L;

    private static final HugeGraphStepStrategy INSTANCE;

    static {
        INSTANCE = new HugeGraphStepStrategy();
    }

    private HugeGraphStepStrategy() {
        // pass
    }

    @Override
    @SuppressWarnings({"rawtypes", "unchecked"})
    public void apply(Traversal.Admin<?, ?> traversal) {<FILL_FUNCTION_BODY>}

    @Override
    public Set<Class<? extends ProviderOptimizationStrategy>> applyPost() {
        return Collections.singleton(HugeCountStepStrategy.class);
    }

    public static HugeGraphStepStrategy instance() {
        return INSTANCE;
    }
}

        TraversalUtil.convAllHasSteps(traversal);

        // Extract conditions in GraphStep
        List<GraphStep> steps = TraversalHelper.getStepsOfClass(
                GraphStep.class, traversal);
        for (GraphStep originStep : steps) {
            TraversalUtil.trySetGraph(originStep,
                                      TraversalUtil.tryGetGraph(steps.get(0)));

            HugeGraphStep<?, ?> newStep = new HugeGraphStep<>(originStep);
            TraversalHelper.replaceStep(originStep, newStep, traversal);

            TraversalUtil.extractHasContainer(newStep, traversal);

            // TODO: support order-by optimize
            // TraversalUtil.extractOrder(newStep, traversal);

            TraversalUtil.extractRange(newStep, traversal, false);

            TraversalUtil.extractCount(newStep, traversal);
        }
    
<no_super_class>