From 8dccf4b37d6d6b7c33001719c074e018456290f7 Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Tue, 4 May 2021 09:39:52 +0100
Subject: [PATCH] Revert "Issue #3143096 by jedihe, jyotimishra123,
 shetpooja04, alexpott, mradcliffe: [DX]: throw an exception if #lazy_builder
 callback does not return a (renderable) array"

This reverts commit e9a53cb2b38fe42cdd0f68876f19dc922b13ed0e.
---
 core/lib/Drupal/Core/Render/Renderer.php      | 17 -------
 .../Core/Render/RendererPlaceholdersTest.php  | 48 -------------------
 .../Tests/Core/Render/RendererTestBase.php    | 12 +----
 3 files changed, 1 insertion(+), 76 deletions(-)

diff --git a/core/lib/Drupal/Core/Render/Renderer.php b/core/lib/Drupal/Core/Render/Renderer.php
index 37d99bd64223..02620cbf1113 100644
--- a/core/lib/Drupal/Core/Render/Renderer.php
+++ b/core/lib/Drupal/Core/Render/Renderer.php
@@ -353,23 +353,6 @@ protected function doRender(&$elements, $is_root_call = FALSE) {
     // Build the element if it is still empty.
     if (isset($elements['#lazy_builder'])) {
       $new_elements = $this->doCallback('#lazy_builder', $elements['#lazy_builder'][0], $elements['#lazy_builder'][1]);
-      // Throw an exception if #lazy_builder callback does not return an array;
-      // provide helpful details for troubleshooting.
-      if (!is_array($new_elements)) {
-        $callable = $elements['#lazy_builder'][0];
-        $callable_name = '[unknown]';
-        if ($callable instanceof \Closure) {
-          $callable_name = '[closure]';
-        }
-        elseif (is_array($callable)) {
-          $callable_name = implode('::', $callable);
-        }
-        elseif (is_string($callable)) {
-          $callable_name = $callable;
-        }
-        $wrong_type = gettype($new_elements);
-        throw new \LogicException("#lazy_builder callbacks must return a valid renderable array, got $wrong_type from $callable_name");
-      }
       // Retain the original cacheability metadata, plus cache keys.
       CacheableMetadata::createFromRenderArray($elements)
         ->merge(CacheableMetadata::createFromRenderArray($new_elements))
diff --git a/core/tests/Drupal/Tests/Core/Render/RendererPlaceholdersTest.php b/core/tests/Drupal/Tests/Core/Render/RendererPlaceholdersTest.php
index 6bb477450659..7478840c5d64 100644
--- a/core/tests/Drupal/Tests/Core/Render/RendererPlaceholdersTest.php
+++ b/core/tests/Drupal/Tests/Core/Render/RendererPlaceholdersTest.php
@@ -962,54 +962,6 @@ public function testCreatePlaceholderPropertyWithoutLazyBuilder() {
     $this->renderer->renderRoot($element);
   }
 
-  /**
-   * Tests lazy builders (string callable) that do not return a renderable.
-   *
-   * @covers ::render
-   * @covers ::doRender
-   */
-  public function testNonArrayReturnFromLazyBuilderStringCallable() {
-    $element = [];
-    $element['#lazy_builder'] = ['Drupal\Tests\Core\Render\PlaceholdersTest::callbackNonArrayReturn', []];
-
-    $this->expectException(\LogicException::class);
-    $this->expectExceptionMessage('#lazy_builder callbacks must return a valid renderable array, got boolean from Drupal\Tests\Core\Render\PlaceholdersTest::callbackNonArrayReturn');
-    $this->renderer->renderRoot($element);
-  }
-
-  /**
-   * Tests lazy builders (array callable) that do not return a renderable.
-   *
-   * @covers ::render
-   * @covers ::doRender
-   */
-  public function testNonArrayReturnFromLazyBuilderArrayCallable() {
-    $element = [];
-    $element['#lazy_builder'] = [['Drupal\Tests\Core\Render\PlaceholdersTest', 'callbackNonArrayReturn'], []];
-
-    $this->expectException(\LogicException::class);
-    $this->expectExceptionMessage('#lazy_builder callbacks must return a valid renderable array, got boolean from Drupal\Tests\Core\Render\PlaceholdersTest::callbackNonArrayReturn');
-    $this->renderer->renderRoot($element);
-  }
-
-  /**
-   * Tests lazy builders (closure) that do not return a renderable.
-   *
-   * @covers ::render
-   * @covers ::doRender
-   */
-  public function testNonArrayReturnFromLazyBuilderClosure() {
-    $element = [];
-    $closure = function () {
-      return NULL;
-    };
-    $element['#lazy_builder'] = [$closure, []];
-
-    $this->expectException(\LogicException::class);
-    $this->expectExceptionMessage('#lazy_builder callbacks must return a valid renderable array, got NULL from [closure]');
-    $this->renderer->renderRoot($element);
-  }
-
   /**
    * Create an element with a child and subchild. Each element has the same
    * #lazy_builder callback, but with different contexts. They don't modify
diff --git a/core/tests/Drupal/Tests/Core/Render/RendererTestBase.php b/core/tests/Drupal/Tests/Core/Render/RendererTestBase.php
index 49c6b361b56f..651219463181 100644
--- a/core/tests/Drupal/Tests/Core/Render/RendererTestBase.php
+++ b/core/tests/Drupal/Tests/Core/Render/RendererTestBase.php
@@ -317,21 +317,11 @@ public static function callbackTagCurrentTemperature($animal) {
     return $build;
   }
 
-  /**
-   * Returns invalid renderable to #lazy_builder callback.
-   *
-   * @return bool
-   *   TRUE.
-   */
-  public static function callbackNonArrayReturn() {
-    return TRUE;
-  }
-
   /**
    * {@inheritdoc}
    */
   public static function trustedCallbacks() {
-    return ['callbackTagCurrentTemperature', 'callbackPerUser', 'callback', 'callbackNonArrayReturn'];
+    return ['callbackTagCurrentTemperature', 'callbackPerUser', 'callback'];
   }
 
 }
-- 
GitLab