/**
  * Register the service provider for an addon.
  *
  * @param Addon $addon
  */
 public function register(Addon $addon)
 {
     if ($addon instanceof Module && !$addon->isEnabled() && $addon->getSlug() !== 'installer') {
         return;
     }
     if ($addon instanceof Extension && !$addon->isEnabled()) {
         return;
     }
     $provider = $addon->getServiceProvider();
     if (!class_exists($provider)) {
         return;
     }
     $this->providers[] = $provider = $addon->newServiceProvider();
     $this->bindAliases($provider);
     $this->bindClasses($provider);
     $this->bindSingletons($provider);
     $this->registerRoutes($provider, $addon);
     $this->registerOverrides($provider, $addon);
     $this->registerEvents($provider);
     $this->registerPlugins($provider);
     $this->registerCommands($provider);
     $this->registerSchedules($provider);
     $this->registerProviders($provider);
     $this->registerMiddleware($provider);
     $this->registerRouteMiddleware($provider);
     if (method_exists($provider, 'register')) {
         $this->application->call([$provider, 'register']);
     }
 }