From bdda93df63343773a59b95fd3d869c0187978a61 Mon Sep 17 00:00:00 2001
From: Joachim Noreiko <joachim@107701.no-reply.drupal.org>
Date: Sat, 8 Feb 2025 10:51:13 +0000
Subject: [PATCH 1/9] Patch 23.

---
 .../DependencyInjection/YamlFileLoader.php    |  2 +-
 core/lib/Drupal/Core/DrupalKernel.php         | 25 ++++++++++++++-
 core/modules/file/file.services.yml           |  3 ++
 .../inline_form_errors.services.yml           |  3 ++
 core/modules/language/language.services.yml   |  3 ++
 .../layout_builder.services.yml               |  3 ++
 .../media_test_oembed.services.yml            |  2 ++
 .../migrate_drupal.services.yml               |  3 ++
 core/modules/node/node.services.yml           |  3 ++
 core/modules/rest/rest.services.yml           |  3 ++
 .../serialization/serialization.services.yml  |  3 ++
 .../accept_header_routing_test.services.yml   |  3 ++
 ...alkernel_module_service_providers.info.yml |  6 ++++
 ...rnel_module_service_providers.services.yml |  2 ++
 ...lModuleServiceProvidersServiceProvider.php | 17 ++++++++++
 ...ModuleServiceProvidersServiceProvider2.php | 17 ++++++++++
 .../src/TestService.php                       |  7 +++++
 .../error_service_test.services.yml           |  3 ++
 .../router_test.services.yml                  |  2 ++
 .../service_provider_test.services.yml        |  3 ++
 core/modules/user/user.services.yml           |  3 ++
 .../workspaces/workspaces.services.yml        |  3 ++
 ...mplicitServiceProvidersDeprecationTest.php | 31 +++++++++++++++++++
 .../YamlFileLoaderTest.php                    |  2 ++
 24 files changed, 150 insertions(+), 2 deletions(-)
 create mode 100644 core/modules/media/tests/modules/media_test_oembed/media_test_oembed.services.yml
 create mode 100644 core/modules/system/tests/modules/drupalkernel_module_service_providers/drupalkernel_module_service_providers.info.yml
 create mode 100644 core/modules/system/tests/modules/drupalkernel_module_service_providers/drupalkernel_module_service_providers.services.yml
 create mode 100644 core/modules/system/tests/modules/drupalkernel_module_service_providers/src/DrupalkernelModuleServiceProvidersServiceProvider.php
 create mode 100644 core/modules/system/tests/modules/drupalkernel_module_service_providers/src/DrupalkernelModuleServiceProvidersServiceProvider2.php
 create mode 100644 core/modules/system/tests/modules/drupalkernel_module_service_providers/src/TestService.php
 create mode 100644 core/modules/system/tests/modules/router_test_directory/router_test.services.yml
 create mode 100644 core/tests/Drupal/KernelTests/Core/DrupalKernel/ImplicitServiceProvidersDeprecationTest.php

diff --git a/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php b/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php
index 77ac5cfdcec7..bc52d2371a4e 100644
--- a/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php
+++ b/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php
@@ -476,7 +476,7 @@ private function validate($content, $file)
             throw new InvalidArgumentException(sprintf('The service file "%s" is not valid. It should contain an array. Check your YAML syntax.', $file));
         }
 
-        if ($invalid_keys = array_keys(array_diff_key($content, ['parameters' => 1, 'services' => 1]))) {
+        if ($invalid_keys = array_keys(array_diff_key($content, array('parameters' => 1, 'services' => 1, 'service_providers' => 1)))) {
             throw new InvalidArgumentException(sprintf('The service file "%s" is not valid: it contains invalid root key(s) "%s". Services have to be added under "services" and Parameters under "parameters".', $file, implode('", "', $invalid_keys)));
         }
 
diff --git a/core/lib/Drupal/Core/DrupalKernel.php b/core/lib/Drupal/Core/DrupalKernel.php
index b475adb53fdd..394e00d63d02 100644
--- a/core/lib/Drupal/Core/DrupalKernel.php
+++ b/core/lib/Drupal/Core/DrupalKernel.php
@@ -23,6 +23,7 @@
 use Drupal\Core\Installer\InstallerRedirectTrait;
 use Drupal\Core\Language\Language;
 use Drupal\Core\Security\RequestSanitizer;
+use Drupal\Core\Serialization\Yaml;
 use Drupal\Core\Site\Settings;
 use Drupal\Core\Test\TestDatabase;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -619,6 +620,7 @@ public function discoverServiceProviders() {
     $this->serviceProviderClasses['app']['core'] = 'Drupal\Core\CoreServiceProvider';
 
     // Retrieve enabled modules and register their namespaces.
+    $file_cache = FileCacheFactory::get('container_yaml_loader');
     if (!isset($this->moduleList)) {
       $extensions = $this->getConfigStorage()->read('core.extension');
       // If core.extension configuration does not exist and we're not in the
@@ -640,7 +642,7 @@ public function discoverServiceProviders() {
     $module_filenames = $this->getModuleFileNames();
     $this->classLoaderAddMultiplePsr4($this->getModuleNamespacesPsr4($module_filenames));
 
-    // Load each module's serviceProvider class.
+    // Load each module's service provider classes.
     foreach ($module_filenames as $module => $filename) {
       $camelized = ContainerBuilder::camelize($module);
       $name = "{$camelized}ServiceProvider";
@@ -648,9 +650,30 @@ public function discoverServiceProviders() {
       if (class_exists($class)) {
         $this->serviceProviderClasses['app'][$module] = $class;
       }
+
       $filename = dirname($filename) . "/$module.services.yml";
       if (is_file($filename)) {
         $this->serviceYamls['app'][$module] = $filename;
+
+        // Load service providers from the $module.services.yml file.
+        if (!$content = $file_cache->get($filename)) {
+          $content = Yaml::decode(file_get_contents($filename));
+        }
+        if (is_array($content) && isset($content['service_providers']) && is_array($content['service_providers'])) {
+          foreach ($content['service_providers'] as $index => $service_provider_class) {
+            $service_provider_class = trim($service_provider_class, '\\');
+            $this->serviceProviderClasses['app']["$module:$index"] = $service_provider_class;
+            if ($service_provider_class === $class) {
+              // The deprecated implicit class name (*ServiceProvider) is listed
+              // explicitly under 'service_providers', in $module.services.yml.
+              unset($this->serviceProviderClasses['app'][$module]);
+            }
+          }
+        }
+      }
+
+      if (!empty($this->serviceProviderClasses['app'][$module])) {
+        @trigger_error("Implicit service providers are deprecated in Drupal 8.7.x and will be removed before Drupal 9.0.0. Instead declare your $module module service provider class $class in $module.services.yml file. See https://www.drupal.org/node/2974194.", E_USER_DEPRECATED);
       }
     }
 
diff --git a/core/modules/file/file.services.yml b/core/modules/file/file.services.yml
index 1812c5f0911d..78ec0944b991 100644
--- a/core/modules/file/file.services.yml
+++ b/core/modules/file/file.services.yml
@@ -36,3 +36,6 @@ services:
     class: Drupal\file\Upload\InputStreamFileWriter
     arguments: ['@file_system']
   Drupal\file\Upload\InputStreamFileWriterInterface: '@file.input_stream_file_writer'
+
+service_providers:
+  - Drupal\file\FileServiceProvider
diff --git a/core/modules/inline_form_errors/inline_form_errors.services.yml b/core/modules/inline_form_errors/inline_form_errors.services.yml
index 0358ee160271..9c6e678b2f9f 100644
--- a/core/modules/inline_form_errors/inline_form_errors.services.yml
+++ b/core/modules/inline_form_errors/inline_form_errors.services.yml
@@ -1,2 +1,5 @@
 parameters:
   inline_form_errors.hooks_converted: true
+
+service_providers:
+  - Drupal\inline_form_errors\InlineFormErrorsServiceProvider
diff --git a/core/modules/language/language.services.yml b/core/modules/language/language.services.yml
index 2fc8f9ada778..e3158b5c435e 100644
--- a/core/modules/language/language.services.yml
+++ b/core/modules/language/language.services.yml
@@ -29,3 +29,6 @@ services:
     tags:
       - { name: paramconverter }
     lazy: true
+
+service_providers:
+  - Drupal\language\LanguageServiceProvider
diff --git a/core/modules/layout_builder/layout_builder.services.yml b/core/modules/layout_builder/layout_builder.services.yml
index 65c93652209b..4dc6b79084e9 100644
--- a/core/modules/layout_builder/layout_builder.services.yml
+++ b/core/modules/layout_builder/layout_builder.services.yml
@@ -68,3 +68,6 @@ services:
   layout_builder.element.prepare_layout:
     class: Drupal\layout_builder\EventSubscriber\PrepareLayout
     arguments: ['@layout_builder.tempstore_repository', '@messenger']
+
+service_providers:
+  - Drupal\layout_builder\LayoutBuilderServiceProvider
diff --git a/core/modules/media/tests/modules/media_test_oembed/media_test_oembed.services.yml b/core/modules/media/tests/modules/media_test_oembed/media_test_oembed.services.yml
new file mode 100644
index 000000000000..f95ca641119d
--- /dev/null
+++ b/core/modules/media/tests/modules/media_test_oembed/media_test_oembed.services.yml
@@ -0,0 +1,2 @@
+service_providers:
+  - Drupal\media_test_oembed\MediaTestOembedServiceProvider
diff --git a/core/modules/migrate_drupal/migrate_drupal.services.yml b/core/modules/migrate_drupal/migrate_drupal.services.yml
index e0d16a99459d..40293d538323 100644
--- a/core/modules/migrate_drupal/migrate_drupal.services.yml
+++ b/core/modules/migrate_drupal/migrate_drupal.services.yml
@@ -28,3 +28,6 @@ services:
     class: Drupal\migrate_drupal\MigrationState
     arguments: ['@plugin.manager.migrate.field', '@module_handler', '@messenger', '@string_translation']
   Drupal\migrate_drupal\MigrationState: '@migrate_drupal.migration_state'
+
+service_providers:
+  - Drupal\migrate_drupal\MigrateDrupalServiceProvider
diff --git a/core/modules/node/node.services.yml b/core/modules/node/node.services.yml
index e5daad354296..e63fef914bed 100644
--- a/core/modules/node/node.services.yml
+++ b/core/modules/node/node.services.yml
@@ -40,3 +40,6 @@ services:
     arguments: ['@current_route_match']
     tags:
       - { name: 'context_provider' }
+
+service_providers:
+  - Drupal\node\NodeServiceProvider
diff --git a/core/modules/rest/rest.services.yml b/core/modules/rest/rest.services.yml
index aa249ed37825..3a74a0a1464e 100644
--- a/core/modules/rest/rest.services.yml
+++ b/core/modules/rest/rest.services.yml
@@ -27,3 +27,6 @@ services:
   rest.resource.entity.post_route.subscriber:
     class: \Drupal\rest\EventSubscriber\EntityResourcePostRouteSubscriber
     arguments: ['@entity_type.manager']
+
+service_providers:
+  - Drupal\rest\RestServiceProvider
diff --git a/core/modules/serialization/serialization.services.yml b/core/modules/serialization/serialization.services.yml
index 9dc3a849ce9a..33d6a5c76bc6 100644
--- a/core/modules/serialization/serialization.services.yml
+++ b/core/modules/serialization/serialization.services.yml
@@ -114,3 +114,6 @@ services:
   serialization.user_route_alter_subscriber:
     class: Drupal\serialization\EventSubscriber\UserRouteAlterSubscriber
     arguments: ['%serializer.formats%']
+
+service_providers:
+  - Drupal\serialization\SerializationServiceProvider
diff --git a/core/modules/system/tests/modules/accept_header_routing_test/accept_header_routing_test.services.yml b/core/modules/system/tests/modules/accept_header_routing_test/accept_header_routing_test.services.yml
index dc0ce1087ebd..95537a41b666 100644
--- a/core/modules/system/tests/modules/accept_header_routing_test/accept_header_routing_test.services.yml
+++ b/core/modules/system/tests/modules/accept_header_routing_test/accept_header_routing_test.services.yml
@@ -3,3 +3,6 @@ services:
     class: Drupal\accept_header_routing_test\Routing\AcceptHeaderMatcher
     tags:
       - { name: route_filter }
+
+service_providers:
+  - Drupal\accept_header_routing_test\AcceptHeaderRoutingTestServiceProvider
diff --git a/core/modules/system/tests/modules/drupalkernel_module_service_providers/drupalkernel_module_service_providers.info.yml b/core/modules/system/tests/modules/drupalkernel_module_service_providers/drupalkernel_module_service_providers.info.yml
new file mode 100644
index 000000000000..d89ae7804f17
--- /dev/null
+++ b/core/modules/system/tests/modules/drupalkernel_module_service_providers/drupalkernel_module_service_providers.info.yml
@@ -0,0 +1,6 @@
+name: 'Drupal kernel module service providers'
+type: module
+description: ''
+package: Testing
+version: VERSION
+core: 8.x
diff --git a/core/modules/system/tests/modules/drupalkernel_module_service_providers/drupalkernel_module_service_providers.services.yml b/core/modules/system/tests/modules/drupalkernel_module_service_providers/drupalkernel_module_service_providers.services.yml
new file mode 100644
index 000000000000..e7754728c1a5
--- /dev/null
+++ b/core/modules/system/tests/modules/drupalkernel_module_service_providers/drupalkernel_module_service_providers.services.yml
@@ -0,0 +1,2 @@
+service_providers:
+  - Drupal\drupalkernel_module_service_providers\DrupalkernelModuleServiceProvidersServiceProvider2
diff --git a/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/DrupalkernelModuleServiceProvidersServiceProvider.php b/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/DrupalkernelModuleServiceProvidersServiceProvider.php
new file mode 100644
index 000000000000..1768732677dd
--- /dev/null
+++ b/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/DrupalkernelModuleServiceProvidersServiceProvider.php
@@ -0,0 +1,17 @@
+<?php
+
+namespace Drupal\drupalkernel_module_service_providers;
+
+use Drupal\Core\DependencyInjection\ContainerBuilder;
+use Drupal\Core\DependencyInjection\ServiceProviderInterface;
+
+class DrupalkernelModuleServiceProvidersServiceProvider implements ServiceProviderInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function register(ContainerBuilder $container) {
+    $container->register('drupalkernel_module_service_providers.test_0', TestService::class);
+  }
+
+}
diff --git a/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/DrupalkernelModuleServiceProvidersServiceProvider2.php b/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/DrupalkernelModuleServiceProvidersServiceProvider2.php
new file mode 100644
index 000000000000..37f6f27ff595
--- /dev/null
+++ b/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/DrupalkernelModuleServiceProvidersServiceProvider2.php
@@ -0,0 +1,17 @@
+<?php
+
+namespace Drupal\drupalkernel_module_service_providers;
+
+use Drupal\Core\DependencyInjection\ContainerBuilder;
+use Drupal\Core\DependencyInjection\ServiceProviderInterface;
+
+class DrupalkernelModuleServiceProvidersServiceProvider2 implements ServiceProviderInterface {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function register(ContainerBuilder $container) {
+    $container->register('drupalkernel_module_service_providers.test_1', TestService::class);
+  }
+
+}
diff --git a/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/TestService.php b/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/TestService.php
new file mode 100644
index 000000000000..03401d2e5890
--- /dev/null
+++ b/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/TestService.php
@@ -0,0 +1,7 @@
+<?php
+
+namespace Drupal\drupalkernel_module_service_providers;
+
+class TestService {
+
+}
diff --git a/core/modules/system/tests/modules/error_service_test/error_service_test.services.yml b/core/modules/system/tests/modules/error_service_test/error_service_test.services.yml
index c2a56334caf5..dae7f30181e5 100644
--- a/core/modules/system/tests/modules/error_service_test/error_service_test.services.yml
+++ b/core/modules/system/tests/modules/error_service_test/error_service_test.services.yml
@@ -12,3 +12,6 @@ services:
     tags:
       - { name: logger }
       - { name: backend_overridable }
+
+service_providers:
+  - Drupal\error_service_test\ErrorServiceTestServiceProvider
diff --git a/core/modules/system/tests/modules/router_test_directory/router_test.services.yml b/core/modules/system/tests/modules/router_test_directory/router_test.services.yml
new file mode 100644
index 000000000000..c1eecba9be68
--- /dev/null
+++ b/core/modules/system/tests/modules/router_test_directory/router_test.services.yml
@@ -0,0 +1,2 @@
+service_providers:
+  - Drupal\router_test\RouterTestServiceProvider
diff --git a/core/modules/system/tests/modules/service_provider_test/service_provider_test.services.yml b/core/modules/system/tests/modules/service_provider_test/service_provider_test.services.yml
index 6cefdedb3b53..3910e97ad90a 100644
--- a/core/modules/system/tests/modules/service_provider_test/service_provider_test.services.yml
+++ b/core/modules/system/tests/modules/service_provider_test/service_provider_test.services.yml
@@ -31,3 +31,6 @@ services:
     parent: service_provider_test_class
     tags:
       - { name: needs_destruction, priority: -50 }
+
+service_providers:
+  - Drupal\service_provider_test\ServiceProviderTestServiceProvider
diff --git a/core/modules/user/user.services.yml b/core/modules/user/user.services.yml
index d7ad70852f6e..5100a2225042 100644
--- a/core/modules/user/user.services.yml
+++ b/core/modules/user/user.services.yml
@@ -77,3 +77,6 @@ services:
     class: Drupal\user\UserNameValidator
     arguments: ['@validation.basic_recursive_validator_factory', '@validation.constraint']
   Drupal\user\UserNameValidator: '@user.name_validator'
+
+service_providers:
+  - Drupal\user\UserServiceProvider
diff --git a/core/modules/workspaces/workspaces.services.yml b/core/modules/workspaces/workspaces.services.yml
index f124d5e376c3..de3c967d2784 100644
--- a/core/modules/workspaces/workspaces.services.yml
+++ b/core/modules/workspaces/workspaces.services.yml
@@ -96,3 +96,6 @@ services:
     public: false
     arguments: ['@.inner', '@workspaces.manager', '@workspaces.information', '@typed_data_manager']
   Drupal\workspaces\Controller\WorkspacesHtmlEntityFormController: '@workspaces.controller.entity_form'
+
+service_providers:
+  - Drupal\workspaces\WorkspacesServiceProvider
diff --git a/core/tests/Drupal/KernelTests/Core/DrupalKernel/ImplicitServiceProvidersDeprecationTest.php b/core/tests/Drupal/KernelTests/Core/DrupalKernel/ImplicitServiceProvidersDeprecationTest.php
new file mode 100644
index 000000000000..46347a5a1bfd
--- /dev/null
+++ b/core/tests/Drupal/KernelTests/Core/DrupalKernel/ImplicitServiceProvidersDeprecationTest.php
@@ -0,0 +1,31 @@
+<?php
+
+namespace Drupal\KernelTests\Core\DrupalKernel;
+
+use Drupal\drupalkernel_module_service_providers\TestService;
+use Drupal\KernelTests\KernelTestBase;
+
+/**
+ * Tests the deprecation of implicit service providers.
+ *
+ * @group DrupalKernel
+ * @group legacy
+ */
+class ImplicitServiceProvidersDeprecationTest extends KernelTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = ['drupalkernel_module_service_providers'];
+
+  /**
+   * Tests the deprecation of implicit service providers.
+   *
+   * @expectedDeprecation Implicit service providers are deprecated in Drupal 8.7.x and will be removed before Drupal 9.0.0. Instead declare your drupalkernel_module_service_providers module service provider class Drupal\drupalkernel_module_service_providers\DrupalkernelModuleServiceProvidersServiceProvider in drupalkernel_module_service_providers.services.yml file. See https://www.drupal.org/node/2974194.
+   */
+  public function testDeprecation() {
+    $this->assertInstanceOf(TestService::class, $this->container->get('drupalkernel_module_service_providers.test_0'));
+    $this->assertInstanceOf(TestService::class, $this->container->get('drupalkernel_module_service_providers.test_1'));
+  }
+
+}
diff --git a/core/tests/Drupal/Tests/Core/DependencyInjection/YamlFileLoaderTest.php b/core/tests/Drupal/Tests/Core/DependencyInjection/YamlFileLoaderTest.php
index 717026fe3f46..5c717ba40fd7 100644
--- a/core/tests/Drupal/Tests/Core/DependencyInjection/YamlFileLoaderTest.php
+++ b/core/tests/Drupal/Tests/Core/DependencyInjection/YamlFileLoaderTest.php
@@ -44,6 +44,8 @@ class: \Drupal\Core\ExampleClass
   example_service_closure:
     class: \Drupal\Core\ExampleClass
     arguments: [!service_closure '@example_service_1']"
+service_providers:
+  - \Drupal\Core\CoreServiceProvider
 YAML;
 
     vfsStream::setup('drupal', NULL, [
-- 
GitLab


From 9950f5d325b0527473b858926a26393b53e8d0b4 Mon Sep 17 00:00:00 2001
From: Joachim Noreiko <20313-joachim@users.noreply.drupalcode.org>
Date: Sun, 9 Feb 2025 10:10:12 +0000
Subject: [PATCH 2/9] Apply 1 suggestion(s) to 1 file(s)

Co-authored-by: nicxvan <29861-nicxvan@users.noreply.drupalcode.org>
---
 core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php b/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php
index bc52d2371a4e..a4003e23723f 100644
--- a/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php
+++ b/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php
@@ -476,7 +476,7 @@ private function validate($content, $file)
             throw new InvalidArgumentException(sprintf('The service file "%s" is not valid. It should contain an array. Check your YAML syntax.', $file));
         }
 
-        if ($invalid_keys = array_keys(array_diff_key($content, array('parameters' => 1, 'services' => 1, 'service_providers' => 1)))) {
+        if ($invalid_keys = array_keys(array_diff_key($content, ['parameters' => 1, 'services' => 1, 'service_providers' => 1]))) {
             throw new InvalidArgumentException(sprintf('The service file "%s" is not valid: it contains invalid root key(s) "%s". Services have to be added under "services" and Parameters under "parameters".', $file, implode('", "', $invalid_keys)));
         }
 
-- 
GitLab


From f2d9319f6812b5d02e1cbd5e14a7627af195ed25 Mon Sep 17 00:00:00 2001
From: Joachim Noreiko <joachim@107701.no-reply.drupal.org>
Date: Sun, 9 Feb 2025 10:11:08 +0000
Subject: [PATCH 3/9] Updated wording of exception message.

---
 core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php b/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php
index a4003e23723f..b370d8639adc 100644
--- a/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php
+++ b/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.php
@@ -477,7 +477,7 @@ private function validate($content, $file)
         }
 
         if ($invalid_keys = array_keys(array_diff_key($content, ['parameters' => 1, 'services' => 1, 'service_providers' => 1]))) {
-            throw new InvalidArgumentException(sprintf('The service file "%s" is not valid: it contains invalid root key(s) "%s". Services have to be added under "services" and Parameters under "parameters".', $file, implode('", "', $invalid_keys)));
+            throw new InvalidArgumentException(sprintf('The service file "%s" is not valid: it contains invalid root key(s) "%s". Services have to be added under "services", Parameters under "parameters", and service providers under "service_providers".', $file, implode('", "', $invalid_keys)));
         }
 
         return $content;
-- 
GitLab


From c015e9f5e3034f8e66cae47cccc65a39478abe15 Mon Sep 17 00:00:00 2001
From: nicxvan <29861-nicxvan@users.noreply.drupalcode.org>
Date: Tue, 11 Feb 2025 04:02:42 +0000
Subject: [PATCH 4/9] Stan

---
 .../src/DrupalkernelModuleServiceProvidersServiceProvider.php | 4 +++-
 .../DrupalkernelModuleServiceProvidersServiceProvider2.php    | 4 +++-
 .../drupalkernel_module_service_providers/src/TestService.php | 2 ++
 .../DrupalKernel/ImplicitServiceProvidersDeprecationTest.php  | 4 +++-
 4 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/DrupalkernelModuleServiceProvidersServiceProvider.php b/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/DrupalkernelModuleServiceProvidersServiceProvider.php
index 1768732677dd..81741de9c30b 100644
--- a/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/DrupalkernelModuleServiceProvidersServiceProvider.php
+++ b/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/DrupalkernelModuleServiceProvidersServiceProvider.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\drupalkernel_module_service_providers;
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
@@ -10,7 +12,7 @@ class DrupalkernelModuleServiceProvidersServiceProvider implements ServiceProvid
   /**
    * {@inheritdoc}
    */
-  public function register(ContainerBuilder $container) {
+  public function register(ContainerBuilder $container): void {
     $container->register('drupalkernel_module_service_providers.test_0', TestService::class);
   }
 
diff --git a/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/DrupalkernelModuleServiceProvidersServiceProvider2.php b/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/DrupalkernelModuleServiceProvidersServiceProvider2.php
index 37f6f27ff595..8c2c68882aa5 100644
--- a/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/DrupalkernelModuleServiceProvidersServiceProvider2.php
+++ b/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/DrupalkernelModuleServiceProvidersServiceProvider2.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\drupalkernel_module_service_providers;
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
@@ -10,7 +12,7 @@ class DrupalkernelModuleServiceProvidersServiceProvider2 implements ServiceProvi
   /**
    * {@inheritdoc}
    */
-  public function register(ContainerBuilder $container) {
+  public function register(ContainerBuilder $container): void {
     $container->register('drupalkernel_module_service_providers.test_1', TestService::class);
   }
 
diff --git a/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/TestService.php b/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/TestService.php
index 03401d2e5890..a24dfd0201e1 100644
--- a/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/TestService.php
+++ b/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/TestService.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\drupalkernel_module_service_providers;
 
 class TestService {
diff --git a/core/tests/Drupal/KernelTests/Core/DrupalKernel/ImplicitServiceProvidersDeprecationTest.php b/core/tests/Drupal/KernelTests/Core/DrupalKernel/ImplicitServiceProvidersDeprecationTest.php
index 46347a5a1bfd..e3d5f2734a2e 100644
--- a/core/tests/Drupal/KernelTests/Core/DrupalKernel/ImplicitServiceProvidersDeprecationTest.php
+++ b/core/tests/Drupal/KernelTests/Core/DrupalKernel/ImplicitServiceProvidersDeprecationTest.php
@@ -1,5 +1,7 @@
 <?php
 
+declare(strict_types=1);
+
 namespace Drupal\KernelTests\Core\DrupalKernel;
 
 use Drupal\drupalkernel_module_service_providers\TestService;
@@ -23,7 +25,7 @@ class ImplicitServiceProvidersDeprecationTest extends KernelTestBase {
    *
    * @expectedDeprecation Implicit service providers are deprecated in Drupal 8.7.x and will be removed before Drupal 9.0.0. Instead declare your drupalkernel_module_service_providers module service provider class Drupal\drupalkernel_module_service_providers\DrupalkernelModuleServiceProvidersServiceProvider in drupalkernel_module_service_providers.services.yml file. See https://www.drupal.org/node/2974194.
    */
-  public function testDeprecation() {
+  public function testDeprecation():void {
     $this->assertInstanceOf(TestService::class, $this->container->get('drupalkernel_module_service_providers.test_0'));
     $this->assertInstanceOf(TestService::class, $this->container->get('drupalkernel_module_service_providers.test_1'));
   }
-- 
GitLab


From 1169b3a2aa651024fad64d9514e7427a66d258d0 Mon Sep 17 00:00:00 2001
From: nicxvan <nic@nlightened.net>
Date: Mon, 10 Feb 2025 23:15:50 -0500
Subject: [PATCH 5/9] Rename and update deprecation

---
 core/lib/Drupal/Core/DrupalKernel.php                  |  2 +-
 .../drupal_kernel_module_service_providers.info.yml}   |  0
 ...drupal_kernel_module_service_providers.services.yml |  2 ++
 ...palKernelModuleServiceProvidersServiceProvider.php} |  6 +++---
 ...alKernelModuleServiceProvidersServiceProvider2.php} |  6 +++---
 .../src/TestService.php                                |  2 +-
 .../drupalkernel_module_service_providers.services.yml |  2 --
 .../ImplicitServiceProvidersDeprecationTest.php        | 10 +++++-----
 8 files changed, 15 insertions(+), 15 deletions(-)
 rename core/modules/system/tests/modules/{drupalkernel_module_service_providers/drupalkernel_module_service_providers.info.yml => drupal_kernel_module_service_providers/drupal_kernel_module_service_providers.info.yml} (100%)
 create mode 100644 core/modules/system/tests/modules/drupal_kernel_module_service_providers/drupal_kernel_module_service_providers.services.yml
 rename core/modules/system/tests/modules/{drupalkernel_module_service_providers/src/DrupalkernelModuleServiceProvidersServiceProvider.php => drupal_kernel_module_service_providers/src/DrupalKernelModuleServiceProvidersServiceProvider.php} (56%)
 rename core/modules/system/tests/modules/{drupalkernel_module_service_providers/src/DrupalkernelModuleServiceProvidersServiceProvider2.php => drupal_kernel_module_service_providers/src/DrupalKernelModuleServiceProvidersServiceProvider2.php} (56%)
 rename core/modules/system/tests/modules/{drupalkernel_module_service_providers => drupal_kernel_module_service_providers}/src/TestService.php (50%)
 delete mode 100644 core/modules/system/tests/modules/drupalkernel_module_service_providers/drupalkernel_module_service_providers.services.yml

diff --git a/core/lib/Drupal/Core/DrupalKernel.php b/core/lib/Drupal/Core/DrupalKernel.php
index 394e00d63d02..fd065b77b11c 100644
--- a/core/lib/Drupal/Core/DrupalKernel.php
+++ b/core/lib/Drupal/Core/DrupalKernel.php
@@ -673,7 +673,7 @@ public function discoverServiceProviders() {
       }
 
       if (!empty($this->serviceProviderClasses['app'][$module])) {
-        @trigger_error("Implicit service providers are deprecated in Drupal 8.7.x and will be removed before Drupal 9.0.0. Instead declare your $module module service provider class $class in $module.services.yml file. See https://www.drupal.org/node/2974194.", E_USER_DEPRECATED);
+        @trigger_error("Implicit service providers are deprecated in Drupal 11.2.x and will be removed in Drupal 12.0.0. Instead declare your $module module's service provider class $class in $module.services.yml file. See https://www.drupal.org/node/2974194.", E_USER_DEPRECATED);
       }
     }
 
diff --git a/core/modules/system/tests/modules/drupalkernel_module_service_providers/drupalkernel_module_service_providers.info.yml b/core/modules/system/tests/modules/drupal_kernel_module_service_providers/drupal_kernel_module_service_providers.info.yml
similarity index 100%
rename from core/modules/system/tests/modules/drupalkernel_module_service_providers/drupalkernel_module_service_providers.info.yml
rename to core/modules/system/tests/modules/drupal_kernel_module_service_providers/drupal_kernel_module_service_providers.info.yml
diff --git a/core/modules/system/tests/modules/drupal_kernel_module_service_providers/drupal_kernel_module_service_providers.services.yml b/core/modules/system/tests/modules/drupal_kernel_module_service_providers/drupal_kernel_module_service_providers.services.yml
new file mode 100644
index 000000000000..15ce7b0022cd
--- /dev/null
+++ b/core/modules/system/tests/modules/drupal_kernel_module_service_providers/drupal_kernel_module_service_providers.services.yml
@@ -0,0 +1,2 @@
+service_providers:
+  - Drupal\drupal_kernel_module_service_providers\DrupalKernelModuleServiceProvidersServiceProvider2
diff --git a/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/DrupalkernelModuleServiceProvidersServiceProvider.php b/core/modules/system/tests/modules/drupal_kernel_module_service_providers/src/DrupalKernelModuleServiceProvidersServiceProvider.php
similarity index 56%
rename from core/modules/system/tests/modules/drupalkernel_module_service_providers/src/DrupalkernelModuleServiceProvidersServiceProvider.php
rename to core/modules/system/tests/modules/drupal_kernel_module_service_providers/src/DrupalKernelModuleServiceProvidersServiceProvider.php
index 81741de9c30b..cf6c62e15be1 100644
--- a/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/DrupalkernelModuleServiceProvidersServiceProvider.php
+++ b/core/modules/system/tests/modules/drupal_kernel_module_service_providers/src/DrupalKernelModuleServiceProvidersServiceProvider.php
@@ -2,18 +2,18 @@
 
 declare(strict_types=1);
 
-namespace Drupal\drupalkernel_module_service_providers;
+namespace Drupal\drupal_kernel_module_service_providers;
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
 use Drupal\Core\DependencyInjection\ServiceProviderInterface;
 
-class DrupalkernelModuleServiceProvidersServiceProvider implements ServiceProviderInterface {
+class DrupalKernelModuleServiceProvidersServiceProvider implements ServiceProviderInterface {
 
   /**
    * {@inheritdoc}
    */
   public function register(ContainerBuilder $container): void {
-    $container->register('drupalkernel_module_service_providers.test_0', TestService::class);
+    $container->register('drupal_kernel_module_service_providers.test_0', TestService::class);
   }
 
 }
diff --git a/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/DrupalkernelModuleServiceProvidersServiceProvider2.php b/core/modules/system/tests/modules/drupal_kernel_module_service_providers/src/DrupalKernelModuleServiceProvidersServiceProvider2.php
similarity index 56%
rename from core/modules/system/tests/modules/drupalkernel_module_service_providers/src/DrupalkernelModuleServiceProvidersServiceProvider2.php
rename to core/modules/system/tests/modules/drupal_kernel_module_service_providers/src/DrupalKernelModuleServiceProvidersServiceProvider2.php
index 8c2c68882aa5..cd52764c66bf 100644
--- a/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/DrupalkernelModuleServiceProvidersServiceProvider2.php
+++ b/core/modules/system/tests/modules/drupal_kernel_module_service_providers/src/DrupalKernelModuleServiceProvidersServiceProvider2.php
@@ -2,18 +2,18 @@
 
 declare(strict_types=1);
 
-namespace Drupal\drupalkernel_module_service_providers;
+namespace Drupal\drupal_kernel_module_service_providers;
 
 use Drupal\Core\DependencyInjection\ContainerBuilder;
 use Drupal\Core\DependencyInjection\ServiceProviderInterface;
 
-class DrupalkernelModuleServiceProvidersServiceProvider2 implements ServiceProviderInterface {
+class DrupalKernelModuleServiceProvidersServiceProvider2 implements ServiceProviderInterface {
 
   /**
    * {@inheritdoc}
    */
   public function register(ContainerBuilder $container): void {
-    $container->register('drupalkernel_module_service_providers.test_1', TestService::class);
+    $container->register('drupal_kernel_module_service_providers.test_1', TestService::class);
   }
 
 }
diff --git a/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/TestService.php b/core/modules/system/tests/modules/drupal_kernel_module_service_providers/src/TestService.php
similarity index 50%
rename from core/modules/system/tests/modules/drupalkernel_module_service_providers/src/TestService.php
rename to core/modules/system/tests/modules/drupal_kernel_module_service_providers/src/TestService.php
index a24dfd0201e1..8a445535ad88 100644
--- a/core/modules/system/tests/modules/drupalkernel_module_service_providers/src/TestService.php
+++ b/core/modules/system/tests/modules/drupal_kernel_module_service_providers/src/TestService.php
@@ -2,7 +2,7 @@
 
 declare(strict_types=1);
 
-namespace Drupal\drupalkernel_module_service_providers;
+namespace Drupal\drupal_kernel_module_service_providers;
 
 class TestService {
 
diff --git a/core/modules/system/tests/modules/drupalkernel_module_service_providers/drupalkernel_module_service_providers.services.yml b/core/modules/system/tests/modules/drupalkernel_module_service_providers/drupalkernel_module_service_providers.services.yml
deleted file mode 100644
index e7754728c1a5..000000000000
--- a/core/modules/system/tests/modules/drupalkernel_module_service_providers/drupalkernel_module_service_providers.services.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-service_providers:
-  - Drupal\drupalkernel_module_service_providers\DrupalkernelModuleServiceProvidersServiceProvider2
diff --git a/core/tests/Drupal/KernelTests/Core/DrupalKernel/ImplicitServiceProvidersDeprecationTest.php b/core/tests/Drupal/KernelTests/Core/DrupalKernel/ImplicitServiceProvidersDeprecationTest.php
index e3d5f2734a2e..d5bfe25235cc 100644
--- a/core/tests/Drupal/KernelTests/Core/DrupalKernel/ImplicitServiceProvidersDeprecationTest.php
+++ b/core/tests/Drupal/KernelTests/Core/DrupalKernel/ImplicitServiceProvidersDeprecationTest.php
@@ -4,7 +4,7 @@
 
 namespace Drupal\KernelTests\Core\DrupalKernel;
 
-use Drupal\drupalkernel_module_service_providers\TestService;
+use Drupal\drupal_kernel_module_service_providers\TestService;
 use Drupal\KernelTests\KernelTestBase;
 
 /**
@@ -18,16 +18,16 @@ class ImplicitServiceProvidersDeprecationTest extends KernelTestBase {
   /**
    * {@inheritdoc}
    */
-  protected static $modules = ['drupalkernel_module_service_providers'];
+  protected static $modules = ['drupal_kernel_module_service_providers'];
 
   /**
    * Tests the deprecation of implicit service providers.
    *
-   * @expectedDeprecation Implicit service providers are deprecated in Drupal 8.7.x and will be removed before Drupal 9.0.0. Instead declare your drupalkernel_module_service_providers module service provider class Drupal\drupalkernel_module_service_providers\DrupalkernelModuleServiceProvidersServiceProvider in drupalkernel_module_service_providers.services.yml file. See https://www.drupal.org/node/2974194.
+   * @expectedDeprecation Implicit service providers are deprecated in Drupal 11.2.x and will be removed in Drupal 12.0.0. Instead declare your drupal_kernel_module_service_providers module's service provider class Drupal\drupal_kernel_module_service_providers\DrupalKernelModuleServiceProvidersServiceProvider in drupal_kernel_module_service_providers.services.yml file. See https://www.drupal.org/node/2974194.
    */
   public function testDeprecation():void {
-    $this->assertInstanceOf(TestService::class, $this->container->get('drupalkernel_module_service_providers.test_0'));
-    $this->assertInstanceOf(TestService::class, $this->container->get('drupalkernel_module_service_providers.test_1'));
+    $this->assertInstanceOf(TestService::class, $this->container->get('drupal_kernel_module_service_providers.test_0'));
+    $this->assertInstanceOf(TestService::class, $this->container->get('drupal_kernel_module_service_providers.test_1'));
   }
 
 }
-- 
GitLab


From ae5b8a860cc27ad7d6a837b617abce6ca492d002 Mon Sep 17 00:00:00 2001
From: nicxvan <nic@nlightened.net>
Date: Mon, 10 Feb 2025 23:29:51 -0500
Subject: [PATCH 6/9] Fix deprecation message

---
 core/lib/Drupal/Core/DrupalKernel.php                           | 2 +-
 .../DrupalKernel/ImplicitServiceProvidersDeprecationTest.php    | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/core/lib/Drupal/Core/DrupalKernel.php b/core/lib/Drupal/Core/DrupalKernel.php
index fd065b77b11c..65a277045b88 100644
--- a/core/lib/Drupal/Core/DrupalKernel.php
+++ b/core/lib/Drupal/Core/DrupalKernel.php
@@ -673,7 +673,7 @@ public function discoverServiceProviders() {
       }
 
       if (!empty($this->serviceProviderClasses['app'][$module])) {
-        @trigger_error("Implicit service providers are deprecated in Drupal 11.2.x and will be removed in Drupal 12.0.0. Instead declare your $module module's service provider class $class in $module.services.yml file. See https://www.drupal.org/node/2974194.", E_USER_DEPRECATED);
+        @trigger_error('Using implicit service providers is deprecated in drupal:11.2.0 and will be removed in drupal:12.0.0. Instead declare your $module module service provider class $class in $module.services.yml file. See https://www.drupal.org/node/2974194', E_USER_DEPRECATED);
       }
     }
 
diff --git a/core/tests/Drupal/KernelTests/Core/DrupalKernel/ImplicitServiceProvidersDeprecationTest.php b/core/tests/Drupal/KernelTests/Core/DrupalKernel/ImplicitServiceProvidersDeprecationTest.php
index d5bfe25235cc..8964317da64e 100644
--- a/core/tests/Drupal/KernelTests/Core/DrupalKernel/ImplicitServiceProvidersDeprecationTest.php
+++ b/core/tests/Drupal/KernelTests/Core/DrupalKernel/ImplicitServiceProvidersDeprecationTest.php
@@ -23,7 +23,7 @@ class ImplicitServiceProvidersDeprecationTest extends KernelTestBase {
   /**
    * Tests the deprecation of implicit service providers.
    *
-   * @expectedDeprecation Implicit service providers are deprecated in Drupal 11.2.x and will be removed in Drupal 12.0.0. Instead declare your drupal_kernel_module_service_providers module's service provider class Drupal\drupal_kernel_module_service_providers\DrupalKernelModuleServiceProvidersServiceProvider in drupal_kernel_module_service_providers.services.yml file. See https://www.drupal.org/node/2974194.
+   * @expectedDeprecation Using implicit service providers is deprecated in drupal:11.2.0 and will be removed in drupal:12.0.0. Instead declare your drupal_kernel_module_service_providers module service provider class Drupal\drupal_kernel_module_service_providers\DrupalKernelModuleServiceProvidersServiceProvider in drupal_kernel_module_service_providers.services.yml file. See https://www.drupal.org/node/2974194
    */
   public function testDeprecation():void {
     $this->assertInstanceOf(TestService::class, $this->container->get('drupal_kernel_module_service_providers.test_0'));
-- 
GitLab


From 1d9df2c1033259b150b67c6df07f7a9742bb164b Mon Sep 17 00:00:00 2001
From: nicxvan <nic@nlightened.net>
Date: Mon, 10 Feb 2025 23:44:31 -0500
Subject: [PATCH 7/9] Remove user service provider declaration

---
 core/modules/user/user.services.yml | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/core/modules/user/user.services.yml b/core/modules/user/user.services.yml
index 5100a2225042..d7ad70852f6e 100644
--- a/core/modules/user/user.services.yml
+++ b/core/modules/user/user.services.yml
@@ -77,6 +77,3 @@ services:
     class: Drupal\user\UserNameValidator
     arguments: ['@validation.basic_recursive_validator_factory', '@validation.constraint']
   Drupal\user\UserNameValidator: '@user.name_validator'
-
-service_providers:
-  - Drupal\user\UserServiceProvider
-- 
GitLab


From bc092d5fba0b7b4ddf887aca302dfef70bf8c10d Mon Sep 17 00:00:00 2001
From: nicxvan <nic@nlightened.net>
Date: Thu, 13 Feb 2025 00:07:46 -0500
Subject: [PATCH 8/9] Add missing service providers and move to top

---
 core/modules/file/file.services.yml                         | 6 +++---
 core/modules/language/language.services.yml                 | 6 +++---
 core/modules/layout_builder/layout_builder.services.yml     | 6 +++---
 core/modules/media_library/media_library.services.yml       | 3 +++
 core/modules/migrate_drupal/migrate_drupal.services.yml     | 6 +++---
 core/modules/mysql/mysql.services.yml                       | 2 ++
 core/modules/navigation/navigation.services.yml             | 3 +++
 core/modules/node/node.services.yml                         | 6 +++---
 .../package_manager_bypass.services.yml                     | 3 +++
 .../package_manager_test_validation.services.yml            | 3 +++
 core/modules/rest/rest.services.yml                         | 6 +++---
 core/modules/serialization/serialization.services.yml       | 6 +++---
 .../accept_header_routing_test.services.yml                 | 6 +++---
 .../container_rebuild_test.services.yml                     | 2 ++
 .../error_service_test/error_service_test.services.yml      | 6 +++---
 .../system/tests/modules/menu_test/menu_test.services.yml   | 3 +++
 .../tests/modules/module_test/module_test.services.yml      | 3 +++
 .../service_provider_test.services.yml                      | 6 +++---
 core/modules/workspaces/workspaces.services.yml             | 6 +++---
 19 files changed, 55 insertions(+), 33 deletions(-)
 create mode 100644 core/modules/mysql/mysql.services.yml
 create mode 100644 core/modules/system/tests/modules/container_rebuild_test/container_rebuild_test.services.yml

diff --git a/core/modules/file/file.services.yml b/core/modules/file/file.services.yml
index 78ec0944b991..ffa46bbe4e4c 100644
--- a/core/modules/file/file.services.yml
+++ b/core/modules/file/file.services.yml
@@ -1,3 +1,6 @@
+service_providers:
+  - Drupal\file\FileServiceProvider
+
 services:
   _defaults:
     autoconfigure: true
@@ -36,6 +39,3 @@ services:
     class: Drupal\file\Upload\InputStreamFileWriter
     arguments: ['@file_system']
   Drupal\file\Upload\InputStreamFileWriterInterface: '@file.input_stream_file_writer'
-
-service_providers:
-  - Drupal\file\FileServiceProvider
diff --git a/core/modules/language/language.services.yml b/core/modules/language/language.services.yml
index e3158b5c435e..0ff499ba59b5 100644
--- a/core/modules/language/language.services.yml
+++ b/core/modules/language/language.services.yml
@@ -1,6 +1,9 @@
 parameters:
   language.hooks_converted: true
 
+service_providers:
+  - Drupal\language\LanguageServiceProvider
+
 services:
   _defaults:
     autoconfigure: true
@@ -29,6 +32,3 @@ services:
     tags:
       - { name: paramconverter }
     lazy: true
-
-service_providers:
-  - Drupal\language\LanguageServiceProvider
diff --git a/core/modules/layout_builder/layout_builder.services.yml b/core/modules/layout_builder/layout_builder.services.yml
index 4dc6b79084e9..808660721de8 100644
--- a/core/modules/layout_builder/layout_builder.services.yml
+++ b/core/modules/layout_builder/layout_builder.services.yml
@@ -1,3 +1,6 @@
+service_providers:
+  - Drupal\layout_builder\LayoutBuilderServiceProvider
+
 services:
   _defaults:
     autoconfigure: true
@@ -68,6 +71,3 @@ services:
   layout_builder.element.prepare_layout:
     class: Drupal\layout_builder\EventSubscriber\PrepareLayout
     arguments: ['@layout_builder.tempstore_repository', '@messenger']
-
-service_providers:
-  - Drupal\layout_builder\LayoutBuilderServiceProvider
diff --git a/core/modules/media_library/media_library.services.yml b/core/modules/media_library/media_library.services.yml
index 510769de9d6d..0ca588b934ba 100644
--- a/core/modules/media_library/media_library.services.yml
+++ b/core/modules/media_library/media_library.services.yml
@@ -1,6 +1,9 @@
 parameters:
   media_library.hooks_converted: true
 
+service_providers:
+  - Drupal\media_library\MediaLibraryServiceProvider
+
 services:
   _defaults:
     autoconfigure: true
diff --git a/core/modules/migrate_drupal/migrate_drupal.services.yml b/core/modules/migrate_drupal/migrate_drupal.services.yml
index 40293d538323..be20d4ce1e00 100644
--- a/core/modules/migrate_drupal/migrate_drupal.services.yml
+++ b/core/modules/migrate_drupal/migrate_drupal.services.yml
@@ -1,6 +1,9 @@
 parameters:
   migrate_drupal.hooks_converted: true
 
+service_providers:
+  - Drupal\migrate_drupal\MigrateDrupalServiceProvider
+
 services:
   _defaults:
     autoconfigure: true
@@ -28,6 +31,3 @@ services:
     class: Drupal\migrate_drupal\MigrationState
     arguments: ['@plugin.manager.migrate.field', '@module_handler', '@messenger', '@string_translation']
   Drupal\migrate_drupal\MigrationState: '@migrate_drupal.migration_state'
-
-service_providers:
-  - Drupal\migrate_drupal\MigrateDrupalServiceProvider
diff --git a/core/modules/mysql/mysql.services.yml b/core/modules/mysql/mysql.services.yml
new file mode 100644
index 000000000000..1b3cdd7903c8
--- /dev/null
+++ b/core/modules/mysql/mysql.services.yml
@@ -0,0 +1,2 @@
+service_providers:
+  - Drupal\mysql\MysqlServiceProvider
diff --git a/core/modules/navigation/navigation.services.yml b/core/modules/navigation/navigation.services.yml
index 5393be82b14e..d06ae2ffd361 100644
--- a/core/modules/navigation/navigation.services.yml
+++ b/core/modules/navigation/navigation.services.yml
@@ -1,3 +1,6 @@
+service_providers:
+  - Drupal\navigation\NavigationServiceProvider
+
 services:
   _defaults:
     autoconfigure: true
diff --git a/core/modules/node/node.services.yml b/core/modules/node/node.services.yml
index e63fef914bed..d6c6bf1b6372 100644
--- a/core/modules/node/node.services.yml
+++ b/core/modules/node/node.services.yml
@@ -1,3 +1,6 @@
+service_providers:
+  - Drupal\node\NodeServiceProvider
+
 services:
   _defaults:
     autoconfigure: true
@@ -40,6 +43,3 @@ services:
     arguments: ['@current_route_match']
     tags:
       - { name: 'context_provider' }
-
-service_providers:
-  - Drupal\node\NodeServiceProvider
diff --git a/core/modules/package_manager/tests/modules/package_manager_bypass/package_manager_bypass.services.yml b/core/modules/package_manager/tests/modules/package_manager_bypass/package_manager_bypass.services.yml
index b5fea63ec720..6e2624f40e11 100644
--- a/core/modules/package_manager/tests/modules/package_manager_bypass/package_manager_bypass.services.yml
+++ b/core/modules/package_manager/tests/modules/package_manager_bypass/package_manager_bypass.services.yml
@@ -1,3 +1,6 @@
+service_providers:
+  - Drupal\package_manager_bypass\PackageManagerBypassServiceProvider
+
 services:
   _defaults:
     autowire: true
diff --git a/core/modules/package_manager/tests/modules/package_manager_test_validation/package_manager_test_validation.services.yml b/core/modules/package_manager/tests/modules/package_manager_test_validation/package_manager_test_validation.services.yml
index bd41327d3159..2972ee744b9d 100644
--- a/core/modules/package_manager/tests/modules/package_manager_test_validation/package_manager_test_validation.services.yml
+++ b/core/modules/package_manager/tests/modules/package_manager_test_validation/package_manager_test_validation.services.yml
@@ -1,3 +1,6 @@
+service_providers:
+  - Drupal\package_manager_test_validation\PackageManagerTestValidationServiceProvider
+
 services:
   package_manager_test_validation.subscriber:
     class: Drupal\package_manager_test_validation\EventSubscriber\TestSubscriber
diff --git a/core/modules/rest/rest.services.yml b/core/modules/rest/rest.services.yml
index 3a74a0a1464e..a0137c0cbfd9 100644
--- a/core/modules/rest/rest.services.yml
+++ b/core/modules/rest/rest.services.yml
@@ -1,6 +1,9 @@
 parameters:
   rest.hooks_converted: true
 
+service_providers:
+  - Drupal\rest\RestServiceProvider
+
 services:
   _defaults:
     autoconfigure: true
@@ -27,6 +30,3 @@ services:
   rest.resource.entity.post_route.subscriber:
     class: \Drupal\rest\EventSubscriber\EntityResourcePostRouteSubscriber
     arguments: ['@entity_type.manager']
-
-service_providers:
-  - Drupal\rest\RestServiceProvider
diff --git a/core/modules/serialization/serialization.services.yml b/core/modules/serialization/serialization.services.yml
index 33d6a5c76bc6..df0cc7b83b3e 100644
--- a/core/modules/serialization/serialization.services.yml
+++ b/core/modules/serialization/serialization.services.yml
@@ -1,6 +1,9 @@
 parameters:
   serialization.hooks_converted: true
 
+service_providers:
+  - Drupal\serialization\SerializationServiceProvider
+
 services:
   _defaults:
     autoconfigure: true
@@ -114,6 +117,3 @@ services:
   serialization.user_route_alter_subscriber:
     class: Drupal\serialization\EventSubscriber\UserRouteAlterSubscriber
     arguments: ['%serializer.formats%']
-
-service_providers:
-  - Drupal\serialization\SerializationServiceProvider
diff --git a/core/modules/system/tests/modules/accept_header_routing_test/accept_header_routing_test.services.yml b/core/modules/system/tests/modules/accept_header_routing_test/accept_header_routing_test.services.yml
index 95537a41b666..062a98062ab2 100644
--- a/core/modules/system/tests/modules/accept_header_routing_test/accept_header_routing_test.services.yml
+++ b/core/modules/system/tests/modules/accept_header_routing_test/accept_header_routing_test.services.yml
@@ -1,8 +1,8 @@
+service_providers:
+  - Drupal\accept_header_routing_test\AcceptHeaderRoutingTestServiceProvider
+
 services:
   accept_header_matcher:
     class: Drupal\accept_header_routing_test\Routing\AcceptHeaderMatcher
     tags:
       - { name: route_filter }
-
-service_providers:
-  - Drupal\accept_header_routing_test\AcceptHeaderRoutingTestServiceProvider
diff --git a/core/modules/system/tests/modules/container_rebuild_test/container_rebuild_test.services.yml b/core/modules/system/tests/modules/container_rebuild_test/container_rebuild_test.services.yml
new file mode 100644
index 000000000000..a945e142b092
--- /dev/null
+++ b/core/modules/system/tests/modules/container_rebuild_test/container_rebuild_test.services.yml
@@ -0,0 +1,2 @@
+service_providers:
+  - Drupal\container_rebuild_test\ContainerRebuildTestServiceProvider
diff --git a/core/modules/system/tests/modules/error_service_test/error_service_test.services.yml b/core/modules/system/tests/modules/error_service_test/error_service_test.services.yml
index dae7f30181e5..d83c35bd4dd5 100644
--- a/core/modules/system/tests/modules/error_service_test/error_service_test.services.yml
+++ b/core/modules/system/tests/modules/error_service_test/error_service_test.services.yml
@@ -1,3 +1,6 @@
+service_providers:
+  - Drupal\error_service_test\ErrorServiceTestServiceProvider
+
 services:
   http_middleware.monkeys:
     class: Drupal\error_service_test\MonkeysInTheControlRoom
@@ -12,6 +15,3 @@ services:
     tags:
       - { name: logger }
       - { name: backend_overridable }
-
-service_providers:
-  - Drupal\error_service_test\ErrorServiceTestServiceProvider
diff --git a/core/modules/system/tests/modules/menu_test/menu_test.services.yml b/core/modules/system/tests/modules/menu_test/menu_test.services.yml
index e1a0aa059bce..5c35e8c03338 100644
--- a/core/modules/system/tests/modules/menu_test/menu_test.services.yml
+++ b/core/modules/system/tests/modules/menu_test/menu_test.services.yml
@@ -1,3 +1,6 @@
+service_providers:
+  - Drupal\menu_test\MenuTestServiceProvider
+
 services:
   theme.negotiator.test_theme:
     class: Drupal\menu_test\Theme\TestThemeNegotiator
diff --git a/core/modules/system/tests/modules/module_test/module_test.services.yml b/core/modules/system/tests/modules/module_test/module_test.services.yml
index 58fe6bf765c6..f7285602e921 100644
--- a/core/modules/system/tests/modules/module_test/module_test.services.yml
+++ b/core/modules/system/tests/modules/module_test/module_test.services.yml
@@ -1,3 +1,6 @@
+service_providers:
+  - Drupal\module_test\ModuleTestServiceProvider
+
 services:
   # Tests module uninstall
   plugin.manager.module_test.cache_clear_test:
diff --git a/core/modules/system/tests/modules/service_provider_test/service_provider_test.services.yml b/core/modules/system/tests/modules/service_provider_test/service_provider_test.services.yml
index 3910e97ad90a..2b93c9456ee0 100644
--- a/core/modules/system/tests/modules/service_provider_test/service_provider_test.services.yml
+++ b/core/modules/system/tests/modules/service_provider_test/service_provider_test.services.yml
@@ -1,3 +1,6 @@
+service_providers:
+  - Drupal\service_provider_test\ServiceProviderTestServiceProvider
+
 services:
   _defaults:
     autoconfigure: true
@@ -31,6 +34,3 @@ services:
     parent: service_provider_test_class
     tags:
       - { name: needs_destruction, priority: -50 }
-
-service_providers:
-  - Drupal\service_provider_test\ServiceProviderTestServiceProvider
diff --git a/core/modules/workspaces/workspaces.services.yml b/core/modules/workspaces/workspaces.services.yml
index de3c967d2784..55196000f6d9 100644
--- a/core/modules/workspaces/workspaces.services.yml
+++ b/core/modules/workspaces/workspaces.services.yml
@@ -1,3 +1,6 @@
+service_providers:
+  - Drupal\workspaces\WorkspacesServiceProvider
+
 services:
   _defaults:
     autoconfigure: true
@@ -96,6 +99,3 @@ services:
     public: false
     arguments: ['@.inner', '@workspaces.manager', '@workspaces.information', '@typed_data_manager']
   Drupal\workspaces\Controller\WorkspacesHtmlEntityFormController: '@workspaces.controller.entity_form'
-
-service_providers:
-  - Drupal\workspaces\WorkspacesServiceProvider
-- 
GitLab


From 4d7a11a9508eebee5fee487f9b63a1f3b330112c Mon Sep 17 00:00:00 2001
From: nicxvan <29861-nicxvan@users.noreply.drupalcode.org>
Date: Thu, 13 Feb 2025 05:23:34 +0000
Subject: [PATCH 9/9] Message

---
 core/lib/Drupal/Core/DrupalKernel.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/core/lib/Drupal/Core/DrupalKernel.php b/core/lib/Drupal/Core/DrupalKernel.php
index 65a277045b88..d684893b5d1b 100644
--- a/core/lib/Drupal/Core/DrupalKernel.php
+++ b/core/lib/Drupal/Core/DrupalKernel.php
@@ -673,7 +673,7 @@ public function discoverServiceProviders() {
       }
 
       if (!empty($this->serviceProviderClasses['app'][$module])) {
-        @trigger_error('Using implicit service providers is deprecated in drupal:11.2.0 and will be removed in drupal:12.0.0. Instead declare your $module module service provider class $class in $module.services.yml file. See https://www.drupal.org/node/2974194', E_USER_DEPRECATED);
+        @trigger_error("Using implicit service providers is deprecated in drupal:11.2.0 and will be removed in drupal:12.0.0. Instead declare your $module module service provider class $class in $module.services.yml file. See https://www.drupal.org/node/2974194", E_USER_DEPRECATED);
       }
     }
 
-- 
GitLab