Chris@0: getPluginDefinition(); Chris@18: Chris@18: $provider = NULL; Chris@18: $config_dependencies = []; Chris@17: if ($definition instanceof PluginDefinitionInterface) { Chris@18: $provider = $definition->getProvider(); Chris@18: Chris@18: if ($definition instanceof DependentPluginDefinitionInterface) { Chris@18: $config_dependencies = $definition->getConfigDependencies(); Chris@17: } Chris@17: } Chris@17: elseif (is_array($definition)) { Chris@18: $provider = $definition['provider']; Chris@18: Chris@17: if (isset($definition['config_dependencies'])) { Chris@18: $config_dependencies = $definition['config_dependencies']; Chris@17: } Chris@17: } Chris@17: Chris@18: // Add the provider as a dependency, taking into account if it's a module or Chris@18: // a theme. Chris@18: if ($provider) { Chris@18: if ($provider === 'core' || $this->moduleHandler()->moduleExists($provider)) { Chris@18: $dependencies['module'][] = $provider; Chris@18: } Chris@18: elseif ($this->themeHandler()->themeExists($provider)) { Chris@18: $dependencies['theme'][] = $provider; Chris@18: } Chris@18: else { Chris@18: @trigger_error('Declaring a dependency on an uninstalled module is deprecated in Drupal 8.7.0 and will not be supported in Drupal 9.0.0.', E_USER_DEPRECATED); Chris@18: $dependencies['module'][] = $provider; Chris@18: } Chris@18: } Chris@18: Chris@18: // Add the config dependencies. Chris@18: if ($config_dependencies) { Chris@18: $dependencies = NestedArray::mergeDeep($dependencies, $config_dependencies); Chris@18: } Chris@18: Chris@17: // If a plugin is dependent, calculate its dependencies. Chris@17: if ($instance instanceof DependentPluginInterface && $plugin_dependencies = $instance->calculateDependencies()) { Chris@17: $dependencies = NestedArray::mergeDeep($dependencies, $plugin_dependencies); Chris@17: } Chris@17: return $dependencies; Chris@17: } Chris@17: Chris@17: /** Chris@0: * Calculates and adds dependencies of a specific plugin instance. Chris@0: * Chris@0: * Dependencies are added for the module that provides the plugin, as well Chris@0: * as any dependencies declared by the instance's calculateDependencies() Chris@0: * method, if it implements Chris@0: * \Drupal\Component\Plugin\DependentPluginInterface. Chris@0: * Chris@0: * @param \Drupal\Component\Plugin\PluginInspectionInterface $instance Chris@0: * The plugin instance. Chris@0: */ Chris@0: protected function calculatePluginDependencies(PluginInspectionInterface $instance) { Chris@17: $this->addDependencies($this->getPluginDependencies($instance)); Chris@0: } Chris@0: Chris@18: /** Chris@18: * Wraps the module handler. Chris@18: * Chris@18: * @return \Drupal\Core\Extension\ModuleHandlerInterface Chris@18: * The module handler. Chris@18: */ Chris@18: protected function moduleHandler() { Chris@18: return \Drupal::moduleHandler(); Chris@18: } Chris@18: Chris@18: /** Chris@18: * Wraps the theme handler. Chris@18: * Chris@18: * @return \Drupal\Core\Extension\ThemeHandlerInterface Chris@18: * The theme handler. Chris@18: */ Chris@18: protected function themeHandler() { Chris@18: return \Drupal::service('theme_handler'); Chris@18: } Chris@18: Chris@0: }