diff --git a/core/modules/ckeditor5/src/Plugin/CKEditor5PluginDefinition.php b/core/modules/ckeditor5/src/Plugin/CKEditor5PluginDefinition.php
index 7c84ff59b0bd73c72ba0cf495f8801fa807c73a7..1f6e96e64e89bd3576cf557f02e7594bfcb2c2e6 100644
--- a/core/modules/ckeditor5/src/Plugin/CKEditor5PluginDefinition.php
+++ b/core/modules/ckeditor5/src/Plugin/CKEditor5PluginDefinition.php
@@ -444,13 +444,18 @@ public function hasAdminLibrary(): bool {
   /**
    * Gets the list of elements and attributes this plugin allows to create/edit.
    *
-   * @return string[]|false
-   *   FALSE if this plugin does not create/edit any elements or attributes.
-   *   Otherwise a list.
+   * @return string[]
+   *   A list of elements and attributes.
    *
    * @see \Drupal\ckeditor5\Annotation\DrupalAspectsOfCKEditor5Plugin::$elements
+   *
+   * @throws \LogicException
+   *   When called on a plugin definition that has no elements.
    */
-  public function getElements() {
+  public function getElements(): array {
+    if (!$this->hasElements()) {
+      throw new \LogicException('::getElements() should only be called if ::hasElements() returns TRUE.');
+    }
     return $this->drupal['elements'];
   }
 
@@ -498,7 +503,7 @@ public static function isCreatableElement(string $element): bool {
    * @see \Drupal\ckeditor5\Annotation\DrupalAspectsOfCKEditor5Plugin::$elements
    */
   public function hasElements(): bool {
-    return $this->getElements() !== FALSE;
+    return $this->drupal['elements'] !== FALSE;
   }
 
   /**