docs: @Override
      public void execute(@Nonnull final LifecycleStage lifecycleStage)
      {
          List<LifecycleListener> lifecycleListeners = listeners.get(lifecycleStage);
          if (lifecycleListeners == null) {
              throw illegalStage(lifecycleStage);
          }
  
          log("Stage '%s' starting...", lifecycleStage.getName());
  
          // Reverse the order for the STOP stage, so that dependencies are torn down in reverse order.
          if (lifecycleStage.equals(LifecycleStage.STOP_STAGE)) {
              lifecycleListeners = Lists.reverse(lifecycleListeners);
          }
  
          for (final LifecycleListener listener : lifecycleListeners) {
              listener.onStage(lifecycleStage);
          }
  
          log("Stage '%s' complete.", lifecycleStage.getName());
      }