diff -u b/core/modules/inline_form_errors/inline_form_errors.module b/core/modules/inline_form_errors/inline_form_errors.module --- b/core/modules/inline_form_errors/inline_form_errors.module +++ b/core/modules/inline_form_errors/inline_form_errors.module @@ -6,7 +6,6 @@ */ use Drupal\Core\Form\FormStateInterface; -use Drupal\Core\Render\Element\FormElementInterface; use Drupal\Core\Routing\RouteMatchInterface; /** @@ -55,9 +54,9 @@ */ function inline_form_errors_element_info_alter(array &$info) { // Add a processor for form elements and pseudo form elements. - $determiner = \Drupal::service('inline_form_errors.form_element_determiner'); + $supported_render_element_helper = \Drupal::service('inline_form_errors.supported_render_element_helper'); foreach ($info as $element_type => $element_info) { - if ($determiner->isFormElement($element_type)) { + if ($supported_render_element_helper->supportsInlineFormErrors($element_type)) { $info[$element_type]['#process'][] = 'inline_form_errors_process_form_element'; } } diff -u b/core/modules/inline_form_errors/inline_form_errors.services.yml b/core/modules/inline_form_errors/inline_form_errors.services.yml --- b/core/modules/inline_form_errors/inline_form_errors.services.yml +++ b/core/modules/inline_form_errors/inline_form_errors.services.yml @@ -1,4 +1,4 @@ services: - inline_form_errors.form_element_determiner: - class: Drupal\inline_form_errors\FormElementDeterminer + inline_form_errors.supported_render_element_helper: + class: Drupal\inline_form_errors\SupportedRenderElementHelper arguments: ['@plugin.manager.element_info'] reverted: --- b/core/modules/inline_form_errors/src/FormElementDeterminer.php +++ /dev/null @@ -1,78 +0,0 @@ -elementInfoManager = $element_info_manager; - } - - /** - * Determine if a render element type also is a form element. - * - * @param string $element_type - * The element type. - * - * @return bool - * TRUE if the given element type is a form element or FALSE otherwise. - */ - public function isFormElement($element_type) { - return in_array($element_type, $this->pseudoFormElements) || $this->elementInstanceOfFormElementInterface($element_type); - } - - /** - * Determine if a render element type implements FormElementInterface. - * - * @param string $element_type - * The element type. - * - * @return bool - * TRUE if the given element type implements FormElementInterface or FALSE - * otherwise. - */ - protected function elementInstanceOfFormElementInterface($element_type) { - $element_definitions = $this->elementInfoManager->getDefinitions(); - - if (!empty($element_definitions[$element_type])) { - $interfaces = class_implements($element_definitions[$element_type]['class']); - return isset($interfaces['Drupal\Core\Render\Element\FormElementInterface']); - } - - return FALSE; - } - -} reverted: --- b/core/modules/inline_form_errors/tests/src/Unit/FormElementDeterminerTest.php +++ /dev/null @@ -1,58 +0,0 @@ -getMockBuilder(ElementInfoManager::class) - ->setConstructorArgs([ - $this->getMock(\Traversable::class), - $this->getMock(CacheBackendInterface::class), - $this->getMock(CacheTagsInvalidatorInterface::class), - $this->getMock(ModuleHandlerInterface::class), - $this->getMock(ThemeManagerInterface::class), - ]) - ->setMethods(['getDefinitions', 'createInstance']) - ->getMock(); - - $element_info_manager->expects($this->any()) - ->method('getDefinitions') - ->willReturn([ - 'form_element_type' => ['class' => '\Drupal\Core\Render\Element\FormElement'], - 'element_type' => ['class' => '\Drupal\Core\Render\Element\RenderElement'], - ]); - - $form_element_determiner = new FormElementDeterminer($element_info_manager); - - // Test that an element implementing FormElementInterface is detected. - $this->assertTrue($form_element_determiner->isFormElement('form_element_type')); - - // Test that an element implementing only ElementInterface returns FALSE. - $this->assertFalse($form_element_determiner->isFormElement('element_type')); - - // Test that any element marked as supported by inline form errors is - // detected. The 'details' element is one of the types specified in - // \Drupal\inline_form_errors\FormElementDeterminer::$pseudoFormElements. - $this->assertTrue($form_element_determiner->isFormElement('details')); - } - -} only in patch2: unchanged: --- /dev/null +++ b/core/modules/inline_form_errors/src/SupportedRenderElementHelper.php @@ -0,0 +1,79 @@ +elementInfoManager = $element_info_manager; + } + + /** + * Determine if a render element type supports inline form errors. + * + * @param string $element_type + * The element type. + * + * @return bool + * TRUE if the given element type is a form element or a render element + * which supports inline form errors, or FALSE otherwise. + */ + public function supportsInlineFormErrors($element_type) { + return in_array($element_type, $this->pseudoFormElements) || $this->elementInstanceOfFormElementInterface($element_type); + } + + /** + * Determine if a render element type implements FormElementInterface. + * + * @param string $element_type + * The element type. + * + * @return bool + * TRUE if the given element type implements FormElementInterface or FALSE + * otherwise. + */ + protected function elementInstanceOfFormElementInterface($element_type) { + $element_definitions = $this->elementInfoManager->getDefinitions(); + + if (!empty($element_definitions[$element_type])) { + $interfaces = class_implements($element_definitions[$element_type]['class']); + return isset($interfaces['Drupal\Core\Render\Element\FormElementInterface']); + } + + return FALSE; + } + +} only in patch2: unchanged: --- /dev/null +++ b/core/modules/inline_form_errors/tests/src/Unit/SupportedRenderElementHelperTest.php @@ -0,0 +1,56 @@ +getMockBuilder(ElementInfoManager::class) + ->setConstructorArgs([ + $this->getMock(\Traversable::class), + $this->getMock(CacheBackendInterface::class), + $this->getMock(CacheTagsInvalidatorInterface::class), + $this->getMock(ModuleHandlerInterface::class), + $this->getMock(ThemeManagerInterface::class), + ]) + ->setMethods(['getDefinitions', 'createInstance']) + ->getMock(); + + $element_info_manager->expects($this->any()) + ->method('getDefinitions') + ->willReturn([ + 'form_element_type' => ['class' => '\Drupal\Core\Render\Element\FormElement'], + 'render_element_type' => ['class' => '\Drupal\Core\Render\Element\RenderElement'], + ]); + + $supported_render_element_helper = new SupportedRenderElementHelper($element_info_manager); + + // Test that an element implementing FormElementInterface is detected. + $this->assertTrue($supported_render_element_helper->supportsInlineFormErrors('form_element_type')); + + // Test that an element implementing only ElementInterface returns FALSE. + $this->assertFalse($supported_render_element_helper->supportsInlineFormErrors('render_element_type')); + + // Test that any element marked as supported by inline form errors is + // detected. The 'details' element is one of the types specified in + // \Drupal\inline_form_errors\SupportedRenderElementHelper::$pseudoFormElements. + $this->assertTrue($supported_render_element_helper->supportsInlineFormErrors('details')); + } + +}