diff --git a/core/lib/Drupal/Core/Cache/UnchangingCacheableDependencyTrait.php b/core/lib/Drupal/Core/Cache/UnchangingCacheableDependencyTrait.php new file mode 100644 index 00000000000..437c7cb9dc6 --- /dev/null +++ b/core/lib/Drupal/Core/Cache/UnchangingCacheableDependencyTrait.php @@ -0,0 +1,38 @@ +getFieldDefinition($name); - if ($field_definition instanceof CacheableDependencyInterface) { - $this->renderer->addDependency($form[$name], $field_definition); - } - $field_storage_definition = $field_definition->getFieldStorageDefinition(); - if ($field_storage_definition instanceof CacheableDependencyInterface) { - $this->renderer->addDependency($form[$name], $field_storage_definition); - } + $this->renderer->addDependency($form[$name], $field_definition); + $this->renderer->addDependency($form[$name], $field_definition->getFieldStorageDefinition()); } } diff --git a/core/lib/Drupal/Core/Field/BaseFieldDefinition.php b/core/lib/Drupal/Core/Field/BaseFieldDefinition.php index 244f25b670e..3d72b6ffa74 100644 --- a/core/lib/Drupal/Core/Field/BaseFieldDefinition.php +++ b/core/lib/Drupal/Core/Field/BaseFieldDefinition.php @@ -7,6 +7,7 @@ namespace Drupal\Core\Field; +use Drupal\Core\Cache\UnchangingCacheableDependencyTrait; use Drupal\Core\Entity\FieldableEntityInterface; use Drupal\Core\Field\Entity\BaseFieldOverride; use Drupal\Core\Field\TypedData\FieldItemDataDefinition; @@ -18,6 +19,8 @@ use Drupal\Core\TypedData\OptionsProviderInterface; */ class BaseFieldDefinition extends ListDataDefinition implements FieldDefinitionInterface, FieldStorageDefinitionInterface { + use UnchangingCacheableDependencyTrait; + /** * The field type. * diff --git a/core/lib/Drupal/Core/Field/FieldDefinitionInterface.php b/core/lib/Drupal/Core/Field/FieldDefinitionInterface.php index 1698b773957..e4f47b22518 100644 --- a/core/lib/Drupal/Core/Field/FieldDefinitionInterface.php +++ b/core/lib/Drupal/Core/Field/FieldDefinitionInterface.php @@ -7,6 +7,7 @@ namespace Drupal\Core\Field; +use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Entity\FieldableEntityInterface; use Drupal\Core\TypedData\ListDataDefinitionInterface; @@ -52,7 +53,7 @@ use Drupal\Core\TypedData\ListDataDefinitionInterface; * based on that abstract definition, even though that abstract definition can * differ from the concrete definition of any particular node's body field. */ -interface FieldDefinitionInterface extends ListDataDefinitionInterface { +interface FieldDefinitionInterface extends ListDataDefinitionInterface, CacheableDependencyInterface { /** * Returns the machine name of the field. diff --git a/core/lib/Drupal/Core/Field/FieldStorageDefinitionInterface.php b/core/lib/Drupal/Core/Field/FieldStorageDefinitionInterface.php index 396e70dbc6b..3d15bca53ac 100644 --- a/core/lib/Drupal/Core/Field/FieldStorageDefinitionInterface.php +++ b/core/lib/Drupal/Core/Field/FieldStorageDefinitionInterface.php @@ -7,6 +7,7 @@ namespace Drupal\Core\Field; +use Drupal\Core\Cache\CacheableDependencyInterface; use Drupal\Core\Entity\FieldableEntityInterface; /** @@ -27,7 +28,7 @@ use Drupal\Core\Entity\FieldableEntityInterface; * * @see hook_entity_field_storage_info() */ -interface FieldStorageDefinitionInterface { +interface FieldStorageDefinitionInterface extends CacheableDependencyInterface { /** * Value indicating a field accepts an unlimited number of values.