diff --git a/core/core.services.yml b/core/core.services.yml index bffe0aa..6dba7ff 100644 --- a/core/core.services.yml +++ b/core/core.services.yml @@ -182,27 +182,45 @@ services: plugin.manager.field.field_type: class: Drupal\Core\Field\FieldTypePluginManager arguments: ['@container.namespaces', '@cache.field', '@language_manager', '@module_handler'] + tags: + - { name: plugin_manager_cache_reset } plugin.manager.field.widget: class: Drupal\Core\Field\WidgetPluginManager arguments: ['@container.namespaces', '@cache.field', '@module_handler', '@language_manager', '@plugin.manager.field.field_type'] + tags: + - { name: plugin_manager_cache_reset } plugin.manager.field.formatter: class: Drupal\Core\Field\FormatterPluginManager arguments: ['@container.namespaces', '@cache.field', '@module_handler', '@language_manager', '@plugin.manager.field.field_type'] + tags: + - { name: plugin_manager_cache_reset } plugin.manager.archiver: class: Drupal\Core\Archiver\ArchiverManager parent: default_plugin_manager + tags: + - { name: plugin_manager_cache_reset } plugin.manager.action: class: Drupal\Core\Action\ActionManager arguments: ['@container.namespaces'] + tags: + - { name: plugin_manager_cache_reset } plugin.manager.menu.local_action: class: Drupal\Core\Menu\LocalActionManager arguments: ['@controller_resolver', '@request', '@router.route_provider', '@module_handler', '@cache.cache', '@language_manager', '@access_manager', '@current_user'] + tags: + - { name: plugin_manager_cache_reset } plugin.manager.menu.local_task: class: Drupal\Core\Menu\LocalTaskManager arguments: ['@controller_resolver', '@request', '@router.route_provider', '@module_handler', '@cache.cache', '@language_manager', '@access_manager', '@current_user'] + tags: + - { name: plugin_manager_cache_reset } plugin.manager.menu.contextual_link: class: Drupal\Core\Menu\ContextualLinkManager arguments: ['@controller_resolver', '@module_handler', '@cache.cache', '@language_manager', '@access_manager', '@current_user'] + tags: + - { name: plugin_manager_cache_reset } + plugin.cache_clearer: + class: Drupal\Core\Plugin\PluginCacheClearer request: class: Symfony\Component\HttpFoundation\Request synthetic: true diff --git a/core/lib/Drupal/Core/CoreServiceProvider.php b/core/lib/Drupal/Core/CoreServiceProvider.php index 8a525c9..50bb325 100644 --- a/core/lib/Drupal/Core/CoreServiceProvider.php +++ b/core/lib/Drupal/Core/CoreServiceProvider.php @@ -23,6 +23,7 @@ use Drupal\Core\DependencyInjection\Compiler\RegisterBreadcrumbBuilderPass; use Drupal\Core\DependencyInjection\Compiler\RegisterAuthenticationPass; use Drupal\Core\DependencyInjection\Compiler\RegisterTwigExtensionsPass; +use Drupal\Core\Plugin\PluginManagerPass; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\DependencyInjection\Reference; use Symfony\Component\DependencyInjection\Definition; @@ -78,6 +79,8 @@ public function register(ContainerBuilder $container) { $container->addCompilerPass(new RegisterAuthenticationPass()); // Register Twig extensions. $container->addCompilerPass(new RegisterTwigExtensionsPass()); + // Register plugin managers. + $container->addCompilerPass(new PluginManagerPass()); } /** diff --git a/core/lib/Drupal/Core/Plugin/PluginCacheClearer.php b/core/lib/Drupal/Core/Plugin/PluginCacheClearer.php new file mode 100644 index 0000000..c5ffae3 --- /dev/null +++ b/core/lib/Drupal/Core/Plugin/PluginCacheClearer.php @@ -0,0 +1,51 @@ +pluginManagers[] = $plugin_manager; + } + + /** + * Clear the cache on all plugin managers. + */ + public function clearCachedDefinitions() { + foreach ($this->pluginManagers as $plugin_manager) { + $plugin_manager->clearCachedDefinitions(); + } + } + +} diff --git a/core/lib/Drupal/Core/Plugin/PluginManagerPass.php b/core/lib/Drupal/Core/Plugin/PluginManagerPass.php new file mode 100644 index 0000000..f5f6621 --- /dev/null +++ b/core/lib/Drupal/Core/Plugin/PluginManagerPass.php @@ -0,0 +1,29 @@ +getDefinition('plugin.cache_clearer'); + foreach ($container->findTaggedServiceIds('plugin_manager_cache_reset') as $service_id => $tags) { + $cache_clearer_definition->addMethodCall('addPluginManager', array(new Reference($service_id))); + } + } + +} diff --git a/core/modules/system/system.module b/core/modules/system/system.module index 9500adf..71ea464 100644 --- a/core/modules/system/system.module +++ b/core/modules/system/system.module @@ -2894,3 +2894,10 @@ function system_admin_paths() { ); return $paths; } + +/** + * Implements hook_module_preinstall(). + */ +function system_module_preinstall(array $modules) { + \Drupal::getContainer()->get('plugin.cache_clearer')->clearCachedDefinitions(); +} diff --git a/core/modules/views/views.services.yml b/core/modules/views/views.services.yml index 201780b..95a55b7 100644 --- a/core/modules/views/views.services.yml +++ b/core/modules/views/views.services.yml @@ -2,60 +2,98 @@ services: plugin.manager.views.access: class: Drupal\views\Plugin\ViewsPluginManager arguments: [access, '@container.namespaces', '@cache.views_info', '@language_manager', '@module_handler'] + tags: + - { name: plugin_manager_cache_reset } plugin.manager.views.area: class: Drupal\views\Plugin\ViewsHandlerManager arguments: [area, '@container.namespaces', '@views.views_data'] + tags: + - { name: plugin_manager_cache_reset } plugin.manager.views.argument: class: Drupal\views\Plugin\ViewsHandlerManager arguments: [argument, '@container.namespaces', '@views.views_data'] + tags: + - { name: plugin_manager_cache_reset } plugin.manager.views.argument_default: class: Drupal\views\Plugin\ViewsPluginManager arguments: [argument_default, '@container.namespaces', '@cache.views_info', '@language_manager', '@module_handler'] + tags: + - { name: plugin_manager_cache_reset } plugin.manager.views.argument_validator: class: Drupal\views\Plugin\ViewsPluginManager arguments: [argument_validator, '@container.namespaces', '@cache.views_info', '@language_manager', '@module_handler'] + tags: + - { name: plugin_manager_cache_reset } plugin.manager.views.cache: class: Drupal\views\Plugin\ViewsPluginManager arguments: [cache, '@container.namespaces', '@cache.views_info', '@language_manager', '@module_handler'] + tags: + - { name: plugin_manager_cache_reset } plugin.manager.views.display_extender: class: Drupal\views\Plugin\ViewsPluginManager arguments: [display_extender, '@container.namespaces', '@cache.views_info', '@language_manager', '@module_handler'] + tags: + - { name: plugin_manager_cache_reset } plugin.manager.views.display: class: Drupal\views\Plugin\ViewsPluginManager arguments: [display, '@container.namespaces', '@cache.views_info', '@language_manager', '@module_handler'] + tags: + - { name: plugin_manager_cache_reset } plugin.manager.views.exposed_form: class: Drupal\views\Plugin\ViewsPluginManager arguments: [exposed_form, '@container.namespaces', '@cache.views_info', '@language_manager', '@module_handler'] + tags: + - { name: plugin_manager_cache_reset } plugin.manager.views.field: class: Drupal\views\Plugin\ViewsHandlerManager arguments: [field, '@container.namespaces', '@views.views_data'] + tags: + - { name: plugin_manager_cache_reset } plugin.manager.views.filter: class: Drupal\views\Plugin\ViewsHandlerManager arguments: [filter, '@container.namespaces', '@views.views_data'] + tags: + - { name: plugin_manager_cache_reset } plugin.manager.views.join: class: Drupal\views\Plugin\ViewsHandlerManager arguments: [join, '@container.namespaces', '@views.views_data'] + tags: + - { name: plugin_manager_cache_reset } plugin.manager.views.pager: class: Drupal\views\Plugin\ViewsPluginManager arguments: [pager, '@container.namespaces', '@cache.views_info', '@language_manager', '@module_handler'] + tags: + - { name: plugin_manager_cache_reset } plugin.manager.views.query: class: Drupal\views\Plugin\ViewsPluginManager arguments: [query, '@container.namespaces', '@cache.views_info', '@language_manager', '@module_handler'] + tags: + - { name: plugin_manager_cache_reset } plugin.manager.views.relationship: class: Drupal\views\Plugin\ViewsHandlerManager arguments: [relationship, '@container.namespaces', '@views.views_data'] + tags: + - { name: plugin_manager_cache_reset } plugin.manager.views.row: class: Drupal\views\Plugin\ViewsPluginManager arguments: [row, '@container.namespaces', '@cache.views_info', '@language_manager', '@module_handler'] + tags: + - { name: plugin_manager_cache_reset } plugin.manager.views.sort: class: Drupal\views\Plugin\ViewsHandlerManager arguments: [sort, '@container.namespaces', '@views.views_data'] + tags: + - { name: plugin_manager_cache_reset } plugin.manager.views.style: class: Drupal\views\Plugin\ViewsPluginManager arguments: [style, '@container.namespaces', '@cache.views_info', '@language_manager', '@module_handler'] + tags: + - { name: plugin_manager_cache_reset } plugin.manager.views.wizard: class: Drupal\views\Plugin\ViewsPluginManager arguments: [wizard, '@container.namespaces', '@cache.views_info', '@language_manager', '@module_handler'] + tags: + - { name: plugin_manager_cache_reset } views.views_data: class: Drupal\views\ViewsData arguments: ['@cache.views_info', '@config.factory', '@module_handler', '@language_manager']