From a50411ad1de80f5845b5af4525faf00c5311c25d Mon Sep 17 00:00:00 2001
From: catch <catch@35733.no-reply.drupal.org>
Date: Thu, 18 May 2023 11:39:01 +0100
Subject: [PATCH] Issue #3360124 by andypost, elber: Deprecate
 ::supportedInterfaceOrClass property on normalizer/denormalizers

---
 .../Normalizer/ConfigEntityDenormalizer.php   |  5 ----
 .../Normalizer/ContentEntityDenormalizer.php  |  5 ----
 .../jsonapi/src/Normalizer/DataNormalizer.php |  5 ----
 ...ityAccessDeniedHttpExceptionNormalizer.php |  5 ----
 .../EntityReferenceFieldNormalizer.php        |  5 ----
 .../src/Normalizer/FieldItemNormalizer.php    |  7 ------
 .../src/Normalizer/FieldNormalizer.php        |  7 ------
 .../Normalizer/HttpExceptionNormalizer.php    |  7 ------
 .../JsonApiDocumentTopLevelNormalizer.php     |  5 ----
 .../Normalizer/LinkCollectionNormalizer.php   |  5 ----
 .../src/Normalizer/RelationshipNormalizer.php |  5 ----
 .../ResourceIdentifierNormalizer.php          |  5 ----
 .../Normalizer/ResourceObjectNormalizer.php   |  5 ----
 ...ocessableHttpEntityExceptionNormalizer.php |  7 ------
 .../src/Normalizer/StringNormalizer.php       |  9 ++------
 .../TraversableObjectNormalizer.php           |  9 ++------
 .../src/Normalizer/StringNormalizer.php       | 12 ++++++----
 .../LayoutEntityDisplayNormalizer.php         | 11 ++++-----
 .../src/Normalizer/ComplexDataNormalizer.php  |  5 ----
 .../src/Normalizer/ConfigEntityNormalizer.php |  5 ----
 .../Normalizer/ContentEntityNormalizer.php    |  5 ----
 .../Normalizer/DateTimeIso8601Normalizer.php  |  5 ----
 .../src/Normalizer/DateTimeNormalizer.php     |  5 ----
 .../src/Normalizer/EntityNormalizer.php       |  5 ----
 .../EntityReferenceFieldItemNormalizer.php    |  5 ----
 .../src/Normalizer/FieldItemNormalizer.php    |  5 ----
 .../src/Normalizer/FieldNormalizer.php        |  5 ----
 .../src/Normalizer/ListNormalizer.php         | 11 ++++-----
 .../src/Normalizer/MarkupNormalizer.php       |  5 ----
 .../src/Normalizer/NormalizerBase.php         | 23 +++++++++++--------
 .../src/Normalizer/NullNormalizer.php         | 16 ++++++++++++-
 .../Normalizer/PrimitiveDataNormalizer.php    |  5 ----
 .../Normalizer/TimestampItemNormalizer.php    |  5 ----
 .../src/Normalizer/TimestampNormalizer.php    |  5 ----
 .../src/Normalizer/TypedDataNormalizer.php    |  5 ----
 .../Normalization/TextItemSillyNormalizer.php | 12 ++++++----
 .../src/Normalizer/BooleanNormalizer.php      |  9 ++------
 .../src/Normalizer/BooleanItemNormalizer.php  | 12 ++++++----
 .../Unit/Normalizer/NormalizerBaseTest.php    | 16 ++++++++++++-
 39 files changed, 79 insertions(+), 209 deletions(-)

diff --git a/core/modules/jsonapi/src/Normalizer/ConfigEntityDenormalizer.php b/core/modules/jsonapi/src/Normalizer/ConfigEntityDenormalizer.php
index 95a6f30469bc..d803f6e3008b 100644
--- a/core/modules/jsonapi/src/Normalizer/ConfigEntityDenormalizer.php
+++ b/core/modules/jsonapi/src/Normalizer/ConfigEntityDenormalizer.php
@@ -16,11 +16,6 @@
  */
 final class ConfigEntityDenormalizer extends EntityDenormalizerBase {
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = ConfigEntityInterface::class;
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/jsonapi/src/Normalizer/ContentEntityDenormalizer.php b/core/modules/jsonapi/src/Normalizer/ContentEntityDenormalizer.php
index f513e787bf0b..112c02212a41 100644
--- a/core/modules/jsonapi/src/Normalizer/ContentEntityDenormalizer.php
+++ b/core/modules/jsonapi/src/Normalizer/ContentEntityDenormalizer.php
@@ -17,11 +17,6 @@
  */
 final class ContentEntityDenormalizer extends EntityDenormalizerBase {
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = ContentEntityInterface::class;
-
   /**
    * Prepares the input data to create the entity.
    *
diff --git a/core/modules/jsonapi/src/Normalizer/DataNormalizer.php b/core/modules/jsonapi/src/Normalizer/DataNormalizer.php
index 67217fceb2a7..7c3a039552e2 100644
--- a/core/modules/jsonapi/src/Normalizer/DataNormalizer.php
+++ b/core/modules/jsonapi/src/Normalizer/DataNormalizer.php
@@ -12,11 +12,6 @@
  */
 class DataNormalizer extends NormalizerBase {
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = Data::class;
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/jsonapi/src/Normalizer/EntityAccessDeniedHttpExceptionNormalizer.php b/core/modules/jsonapi/src/Normalizer/EntityAccessDeniedHttpExceptionNormalizer.php
index beedcc24be02..0b608f48b22a 100644
--- a/core/modules/jsonapi/src/Normalizer/EntityAccessDeniedHttpExceptionNormalizer.php
+++ b/core/modules/jsonapi/src/Normalizer/EntityAccessDeniedHttpExceptionNormalizer.php
@@ -23,11 +23,6 @@
  */
 class EntityAccessDeniedHttpExceptionNormalizer extends HttpExceptionNormalizer {
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = EntityAccessDeniedHttpException::class;
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/jsonapi/src/Normalizer/EntityReferenceFieldNormalizer.php b/core/modules/jsonapi/src/Normalizer/EntityReferenceFieldNormalizer.php
index 79561f22c74e..0c379138f251 100644
--- a/core/modules/jsonapi/src/Normalizer/EntityReferenceFieldNormalizer.php
+++ b/core/modules/jsonapi/src/Normalizer/EntityReferenceFieldNormalizer.php
@@ -24,11 +24,6 @@
  */
 class EntityReferenceFieldNormalizer extends FieldNormalizer {
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = EntityReferenceFieldItemListInterface::class;
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/jsonapi/src/Normalizer/FieldItemNormalizer.php b/core/modules/jsonapi/src/Normalizer/FieldItemNormalizer.php
index 0dcca6bff3ce..82fbd0ecde28 100644
--- a/core/modules/jsonapi/src/Normalizer/FieldItemNormalizer.php
+++ b/core/modules/jsonapi/src/Normalizer/FieldItemNormalizer.php
@@ -29,13 +29,6 @@ class FieldItemNormalizer extends NormalizerBase implements DenormalizerInterfac
 
   use SerializedColumnNormalizerTrait;
 
-  /**
-   * The interface or class that this Normalizer supports.
-   *
-   * @var string
-   */
-  protected $supportedInterfaceOrClass = FieldItemInterface::class;
-
   /**
    * The entity type manager.
    *
diff --git a/core/modules/jsonapi/src/Normalizer/FieldNormalizer.php b/core/modules/jsonapi/src/Normalizer/FieldNormalizer.php
index 159f7eb38123..fd1fd1bb6019 100644
--- a/core/modules/jsonapi/src/Normalizer/FieldNormalizer.php
+++ b/core/modules/jsonapi/src/Normalizer/FieldNormalizer.php
@@ -20,13 +20,6 @@
  */
 class FieldNormalizer extends NormalizerBase implements DenormalizerInterface {
 
-  /**
-   * The interface or class that this Normalizer supports.
-   *
-   * @var string
-   */
-  protected $supportedInterfaceOrClass = FieldItemListInterface::class;
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/jsonapi/src/Normalizer/HttpExceptionNormalizer.php b/core/modules/jsonapi/src/Normalizer/HttpExceptionNormalizer.php
index 3ba7ea111d0c..73700aa0fd2a 100644
--- a/core/modules/jsonapi/src/Normalizer/HttpExceptionNormalizer.php
+++ b/core/modules/jsonapi/src/Normalizer/HttpExceptionNormalizer.php
@@ -21,13 +21,6 @@
  */
 class HttpExceptionNormalizer extends NormalizerBase {
 
-  /**
-   * The interface or class that this Normalizer supports.
-   *
-   * @var string
-   */
-  protected $supportedInterfaceOrClass = HttpException::class;
-
   /**
    * The current user making the request.
    *
diff --git a/core/modules/jsonapi/src/Normalizer/JsonApiDocumentTopLevelNormalizer.php b/core/modules/jsonapi/src/Normalizer/JsonApiDocumentTopLevelNormalizer.php
index 5df231f449d9..d12ec670f41e 100644
--- a/core/modules/jsonapi/src/Normalizer/JsonApiDocumentTopLevelNormalizer.php
+++ b/core/modules/jsonapi/src/Normalizer/JsonApiDocumentTopLevelNormalizer.php
@@ -35,11 +35,6 @@
  */
 class JsonApiDocumentTopLevelNormalizer extends NormalizerBase implements DenormalizerInterface, NormalizerInterface {
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = JsonApiDocumentTopLevel::class;
-
   /**
    * The entity type manager.
    *
diff --git a/core/modules/jsonapi/src/Normalizer/LinkCollectionNormalizer.php b/core/modules/jsonapi/src/Normalizer/LinkCollectionNormalizer.php
index acd299766a9b..96a50bc3e446 100644
--- a/core/modules/jsonapi/src/Normalizer/LinkCollectionNormalizer.php
+++ b/core/modules/jsonapi/src/Normalizer/LinkCollectionNormalizer.php
@@ -47,11 +47,6 @@ class LinkCollectionNormalizer extends NormalizerBase {
    */
   const LINK_CONTEXT = 'jsonapi_links_object_context';
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = LinkCollection::class;
-
   /**
    * A random string to use when hashing links.
    *
diff --git a/core/modules/jsonapi/src/Normalizer/RelationshipNormalizer.php b/core/modules/jsonapi/src/Normalizer/RelationshipNormalizer.php
index 09fd83168f5a..90e2d79cb689 100644
--- a/core/modules/jsonapi/src/Normalizer/RelationshipNormalizer.php
+++ b/core/modules/jsonapi/src/Normalizer/RelationshipNormalizer.php
@@ -12,11 +12,6 @@
  */
 class RelationshipNormalizer extends NormalizerBase {
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = Relationship::class;
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/jsonapi/src/Normalizer/ResourceIdentifierNormalizer.php b/core/modules/jsonapi/src/Normalizer/ResourceIdentifierNormalizer.php
index a7d66623f0c2..87454df8d750 100644
--- a/core/modules/jsonapi/src/Normalizer/ResourceIdentifierNormalizer.php
+++ b/core/modules/jsonapi/src/Normalizer/ResourceIdentifierNormalizer.php
@@ -23,11 +23,6 @@
  */
 class ResourceIdentifierNormalizer extends NormalizerBase implements DenormalizerInterface {
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = ResourceIdentifier::class;
-
   /**
    * The entity field manager.
    *
diff --git a/core/modules/jsonapi/src/Normalizer/ResourceObjectNormalizer.php b/core/modules/jsonapi/src/Normalizer/ResourceObjectNormalizer.php
index 53671cd2b930..dfcbc3ca9b2e 100644
--- a/core/modules/jsonapi/src/Normalizer/ResourceObjectNormalizer.php
+++ b/core/modules/jsonapi/src/Normalizer/ResourceObjectNormalizer.php
@@ -22,11 +22,6 @@
  */
 class ResourceObjectNormalizer extends NormalizerBase {
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = ResourceObject::class;
-
   /**
    * The entity normalization cacher.
    *
diff --git a/core/modules/jsonapi/src/Normalizer/UnprocessableHttpEntityExceptionNormalizer.php b/core/modules/jsonapi/src/Normalizer/UnprocessableHttpEntityExceptionNormalizer.php
index 9a155296d8de..5635c24fe6fb 100644
--- a/core/modules/jsonapi/src/Normalizer/UnprocessableHttpEntityExceptionNormalizer.php
+++ b/core/modules/jsonapi/src/Normalizer/UnprocessableHttpEntityExceptionNormalizer.php
@@ -23,13 +23,6 @@
  */
 class UnprocessableHttpEntityExceptionNormalizer extends HttpExceptionNormalizer {
 
-  /**
-   * The interface or class that this Normalizer supports.
-   *
-   * @var string
-   */
-  protected $supportedInterfaceOrClass = UnprocessableHttpEntityException::class;
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/jsonapi/tests/modules/jsonapi_test_data_type/src/Normalizer/StringNormalizer.php b/core/modules/jsonapi/tests/modules/jsonapi_test_data_type/src/Normalizer/StringNormalizer.php
index 90cf00e2e9b0..5694d161a543 100644
--- a/core/modules/jsonapi/tests/modules/jsonapi_test_data_type/src/Normalizer/StringNormalizer.php
+++ b/core/modules/jsonapi/tests/modules/jsonapi_test_data_type/src/Normalizer/StringNormalizer.php
@@ -11,11 +11,6 @@
  */
 class StringNormalizer extends NormalizerBase implements DenormalizerInterface {
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = StringData::class;
-
   /**
    * {@inheritdoc}
    */
@@ -33,8 +28,8 @@ public function denormalize($data, $class, $format = NULL, array $context = []):
   /**
    * {@inheritdoc}
    */
-  public function hasCacheableSupportsMethod(): bool {
-    return TRUE;
+  public function getSupportedTypes(?string $format): array {
+    return [StringData::class => TRUE];
   }
 
 }
diff --git a/core/modules/jsonapi/tests/modules/jsonapi_test_data_type/src/Normalizer/TraversableObjectNormalizer.php b/core/modules/jsonapi/tests/modules/jsonapi_test_data_type/src/Normalizer/TraversableObjectNormalizer.php
index daca730a4b32..b2b493cb4caf 100644
--- a/core/modules/jsonapi/tests/modules/jsonapi_test_data_type/src/Normalizer/TraversableObjectNormalizer.php
+++ b/core/modules/jsonapi/tests/modules/jsonapi_test_data_type/src/Normalizer/TraversableObjectNormalizer.php
@@ -10,11 +10,6 @@
  */
 class TraversableObjectNormalizer extends NormalizerBase {
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = TraversableObject::class;
-
   /**
    * {@inheritdoc}
    */
@@ -25,8 +20,8 @@ public function normalize($object, $format = NULL, array $context = []): array|s
   /**
    * {@inheritdoc}
    */
-  public function hasCacheableSupportsMethod(): bool {
-    return TRUE;
+  public function getSupportedTypes(?string $format): array {
+    return [TraversableObject::class => TRUE];
   }
 
 }
diff --git a/core/modules/jsonapi/tests/modules/jsonapi_test_field_type/src/Normalizer/StringNormalizer.php b/core/modules/jsonapi/tests/modules/jsonapi_test_field_type/src/Normalizer/StringNormalizer.php
index 1c6f306a4e5d..20d901e11bbb 100644
--- a/core/modules/jsonapi/tests/modules/jsonapi_test_field_type/src/Normalizer/StringNormalizer.php
+++ b/core/modules/jsonapi/tests/modules/jsonapi_test_field_type/src/Normalizer/StringNormalizer.php
@@ -11,11 +11,6 @@
  */
 class StringNormalizer extends FieldItemNormalizer implements DenormalizerInterface {
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = StringItem::class;
-
   /**
    * {@inheritdoc}
    */
@@ -34,4 +29,11 @@ protected function constructValue($data, $context) {
     return $data;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getSupportedTypes(?string $format): array {
+    return [StringItem::class => TRUE];
+  }
+
 }
diff --git a/core/modules/layout_builder/src/Normalizer/LayoutEntityDisplayNormalizer.php b/core/modules/layout_builder/src/Normalizer/LayoutEntityDisplayNormalizer.php
index 21fafe0f64ee..a992b46ecd4b 100644
--- a/core/modules/layout_builder/src/Normalizer/LayoutEntityDisplayNormalizer.php
+++ b/core/modules/layout_builder/src/Normalizer/LayoutEntityDisplayNormalizer.php
@@ -13,11 +13,6 @@
  */
 class LayoutEntityDisplayNormalizer extends ConfigEntityNormalizer {
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = LayoutEntityDisplayInterface::class;
-
   /**
    * {@inheritdoc}
    */
@@ -33,8 +28,10 @@ protected static function getDataWithoutInternals(array $data) {
   /**
    * {@inheritdoc}
    */
-  public function hasCacheableSupportsMethod(): bool {
-    return TRUE;
+  public function getSupportedTypes(?string $format): array {
+    return [
+      LayoutEntityDisplayInterface::class => TRUE,
+    ];
   }
 
 }
diff --git a/core/modules/serialization/src/Normalizer/ComplexDataNormalizer.php b/core/modules/serialization/src/Normalizer/ComplexDataNormalizer.php
index 3c950308c719..008216b60f62 100644
--- a/core/modules/serialization/src/Normalizer/ComplexDataNormalizer.php
+++ b/core/modules/serialization/src/Normalizer/ComplexDataNormalizer.php
@@ -17,11 +17,6 @@
  */
 class ComplexDataNormalizer extends NormalizerBase {
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = ComplexDataInterface::class;
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/serialization/src/Normalizer/ConfigEntityNormalizer.php b/core/modules/serialization/src/Normalizer/ConfigEntityNormalizer.php
index 6c24a270f67f..589e92dcd3ce 100644
--- a/core/modules/serialization/src/Normalizer/ConfigEntityNormalizer.php
+++ b/core/modules/serialization/src/Normalizer/ConfigEntityNormalizer.php
@@ -9,11 +9,6 @@
  */
 class ConfigEntityNormalizer extends EntityNormalizer {
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = ConfigEntityInterface::class;
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/serialization/src/Normalizer/ContentEntityNormalizer.php b/core/modules/serialization/src/Normalizer/ContentEntityNormalizer.php
index 7f8055eef90c..94ecc50a8ba5 100644
--- a/core/modules/serialization/src/Normalizer/ContentEntityNormalizer.php
+++ b/core/modules/serialization/src/Normalizer/ContentEntityNormalizer.php
@@ -10,11 +10,6 @@
  */
 class ContentEntityNormalizer extends EntityNormalizer {
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = ContentEntityInterface::class;
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/serialization/src/Normalizer/DateTimeIso8601Normalizer.php b/core/modules/serialization/src/Normalizer/DateTimeIso8601Normalizer.php
index 9139853b4460..12e79be415b5 100644
--- a/core/modules/serialization/src/Normalizer/DateTimeIso8601Normalizer.php
+++ b/core/modules/serialization/src/Normalizer/DateTimeIso8601Normalizer.php
@@ -29,11 +29,6 @@ class DateTimeIso8601Normalizer extends DateTimeNormalizer {
     'date-only' => 'Y-m-d',
   ];
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = DateTimeIso8601::class;
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/serialization/src/Normalizer/DateTimeNormalizer.php b/core/modules/serialization/src/Normalizer/DateTimeNormalizer.php
index 85e256641725..c1fdf1fb1834 100644
--- a/core/modules/serialization/src/Normalizer/DateTimeNormalizer.php
+++ b/core/modules/serialization/src/Normalizer/DateTimeNormalizer.php
@@ -29,11 +29,6 @@ class DateTimeNormalizer extends NormalizerBase implements DenormalizerInterface
     'ISO 8601' => \DateTime::ISO8601,
   ];
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = DateTimeInterface::class;
-
   /**
    * The system's date configuration.
    *
diff --git a/core/modules/serialization/src/Normalizer/EntityNormalizer.php b/core/modules/serialization/src/Normalizer/EntityNormalizer.php
index 25557776622d..d20e3b68a63f 100644
--- a/core/modules/serialization/src/Normalizer/EntityNormalizer.php
+++ b/core/modules/serialization/src/Normalizer/EntityNormalizer.php
@@ -16,11 +16,6 @@ class EntityNormalizer extends ComplexDataNormalizer implements DenormalizerInte
 
   use FieldableEntityNormalizerTrait;
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = EntityInterface::class;
-
   /**
    * Constructs an EntityNormalizer object.
    *
diff --git a/core/modules/serialization/src/Normalizer/EntityReferenceFieldItemNormalizer.php b/core/modules/serialization/src/Normalizer/EntityReferenceFieldItemNormalizer.php
index 8a0277f39a52..086f772e4802 100644
--- a/core/modules/serialization/src/Normalizer/EntityReferenceFieldItemNormalizer.php
+++ b/core/modules/serialization/src/Normalizer/EntityReferenceFieldItemNormalizer.php
@@ -15,11 +15,6 @@ class EntityReferenceFieldItemNormalizer extends FieldItemNormalizer {
 
   use EntityReferenceFieldItemNormalizerTrait;
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = EntityReferenceItem::class;
-
   /**
    * The entity repository.
    *
diff --git a/core/modules/serialization/src/Normalizer/FieldItemNormalizer.php b/core/modules/serialization/src/Normalizer/FieldItemNormalizer.php
index a12ebddc5726..90efb55bc5dc 100644
--- a/core/modules/serialization/src/Normalizer/FieldItemNormalizer.php
+++ b/core/modules/serialization/src/Normalizer/FieldItemNormalizer.php
@@ -14,11 +14,6 @@ class FieldItemNormalizer extends ComplexDataNormalizer implements DenormalizerI
   use FieldableEntityNormalizerTrait;
   use SerializedColumnNormalizerTrait;
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = FieldItemInterface::class;
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/serialization/src/Normalizer/FieldNormalizer.php b/core/modules/serialization/src/Normalizer/FieldNormalizer.php
index e1067f7bcec5..06b545982696 100644
--- a/core/modules/serialization/src/Normalizer/FieldNormalizer.php
+++ b/core/modules/serialization/src/Normalizer/FieldNormalizer.php
@@ -18,11 +18,6 @@
  */
 class FieldNormalizer extends ListNormalizer implements DenormalizerInterface {
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = FieldItemListInterface::class;
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/serialization/src/Normalizer/ListNormalizer.php b/core/modules/serialization/src/Normalizer/ListNormalizer.php
index f333944cbcb2..44a2ef742ec8 100644
--- a/core/modules/serialization/src/Normalizer/ListNormalizer.php
+++ b/core/modules/serialization/src/Normalizer/ListNormalizer.php
@@ -15,11 +15,6 @@
  */
 class ListNormalizer extends NormalizerBase {
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = ListInterface::class;
-
   /**
    * {@inheritdoc}
    */
@@ -34,8 +29,10 @@ public function normalize($object, $format = NULL, array $context = []): array|s
   /**
    * {@inheritdoc}
    */
-  public function hasCacheableSupportsMethod(): bool {
-    return TRUE;
+  public function getSupportedTypes(?string $format): array {
+    return [
+      ListInterface::class => TRUE,
+    ];
   }
 
 }
diff --git a/core/modules/serialization/src/Normalizer/MarkupNormalizer.php b/core/modules/serialization/src/Normalizer/MarkupNormalizer.php
index 167fbd6f0e32..f7ba6bb1e58d 100644
--- a/core/modules/serialization/src/Normalizer/MarkupNormalizer.php
+++ b/core/modules/serialization/src/Normalizer/MarkupNormalizer.php
@@ -9,11 +9,6 @@
  */
 class MarkupNormalizer extends NormalizerBase {
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = MarkupInterface::class;
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/serialization/src/Normalizer/NormalizerBase.php b/core/modules/serialization/src/Normalizer/NormalizerBase.php
index c3c344b5ca3c..ff0a13fc1c79 100644
--- a/core/modules/serialization/src/Normalizer/NormalizerBase.php
+++ b/core/modules/serialization/src/Normalizer/NormalizerBase.php
@@ -13,13 +13,6 @@ abstract class NormalizerBase implements SerializerAwareInterface, CacheableNorm
 
   use SerializerAwareTrait;
 
-  /**
-   * The interface or class that this Normalizer supports.
-   *
-   * @var string|array
-   */
-  protected $supportedInterfaceOrClass;
-
   /**
    * List of formats which supports (de-)normalization.
    *
@@ -37,7 +30,13 @@ public function supportsNormalization($data, string $format = NULL, array $conte
       return FALSE;
     }
 
-    $supported = (array) $this->supportedInterfaceOrClass;
+    if (property_exists($this, 'supportedInterfaceOrClass')) {
+      @trigger_error('Defining ' . static::class . '::supportedInterfaceOrClass property is deprecated in drupal:10.2.0 and is removed from drupal:11.0.0. Use getSupportedTypes() instead. See https://www.drupal.org/node/3359695', E_USER_DEPRECATED);
+      $supported = (array) $this->supportedInterfaceOrClass;
+    }
+    else {
+      $supported = array_keys($this->getSupportedTypes($format));
+    }
 
     return (bool) array_filter($supported, function ($name) use ($data) {
       return $data instanceof $name;
@@ -57,7 +56,13 @@ public function supportsDenormalization($data, string $type, string $format = NU
       return FALSE;
     }
 
-    $supported = (array) $this->supportedInterfaceOrClass;
+    if (property_exists($this, 'supportedInterfaceOrClass')) {
+      @trigger_error('Defining ' . static::class . '::supportedInterfaceOrClass property is deprecated in drupal:10.2.0 and is removed from drupal:11.0.0. Use getSupportedTypes() instead. See https://www.drupal.org/node/3359695', E_USER_DEPRECATED);
+      $supported = (array) $this->supportedInterfaceOrClass;
+    }
+    else {
+      $supported = array_keys($this->getSupportedTypes($format));
+    }
 
     $subclass_check = function ($name) use ($type) {
       return (class_exists($name) || interface_exists($name)) && is_subclass_of($type, $name, TRUE);
diff --git a/core/modules/serialization/src/Normalizer/NullNormalizer.php b/core/modules/serialization/src/Normalizer/NullNormalizer.php
index 2479711b4bb8..63d7c24e7283 100644
--- a/core/modules/serialization/src/Normalizer/NullNormalizer.php
+++ b/core/modules/serialization/src/Normalizer/NullNormalizer.php
@@ -7,6 +7,13 @@
  */
 class NullNormalizer extends NormalizerBase {
 
+  /**
+   * The interface or class that this Normalizer supports.
+   *
+   * @var string[]
+   */
+  protected array $supportedTypes = ['*' => FALSE];
+
   /**
    * Constructs a NullNormalizer object.
    *
@@ -14,7 +21,7 @@ class NullNormalizer extends NormalizerBase {
    *   The supported interface(s) or class(es).
    */
   public function __construct($supported_interface_of_class) {
-    $this->supportedInterfaceOrClass = $supported_interface_of_class;
+    $this->supportedTypes = [$supported_interface_of_class => TRUE];
   }
 
   /**
@@ -24,4 +31,11 @@ public function normalize($object, $format = NULL, array $context = []): array|s
     return NULL;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getSupportedTypes(?string $format): array {
+    return $this->supportedTypes;
+  }
+
 }
diff --git a/core/modules/serialization/src/Normalizer/PrimitiveDataNormalizer.php b/core/modules/serialization/src/Normalizer/PrimitiveDataNormalizer.php
index 78ec3e187559..785104ef1404 100644
--- a/core/modules/serialization/src/Normalizer/PrimitiveDataNormalizer.php
+++ b/core/modules/serialization/src/Normalizer/PrimitiveDataNormalizer.php
@@ -12,11 +12,6 @@ class PrimitiveDataNormalizer extends NormalizerBase {
 
   use SerializedColumnNormalizerTrait;
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = PrimitiveInterface::class;
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/serialization/src/Normalizer/TimestampItemNormalizer.php b/core/modules/serialization/src/Normalizer/TimestampItemNormalizer.php
index d0cda8ceec67..2cfdd63ee025 100644
--- a/core/modules/serialization/src/Normalizer/TimestampItemNormalizer.php
+++ b/core/modules/serialization/src/Normalizer/TimestampItemNormalizer.php
@@ -16,11 +16,6 @@
  */
 class TimestampItemNormalizer extends FieldItemNormalizer {
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = TimestampItem::class;
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/serialization/src/Normalizer/TimestampNormalizer.php b/core/modules/serialization/src/Normalizer/TimestampNormalizer.php
index 77c95469f491..abc9f2ba8079 100644
--- a/core/modules/serialization/src/Normalizer/TimestampNormalizer.php
+++ b/core/modules/serialization/src/Normalizer/TimestampNormalizer.php
@@ -24,11 +24,6 @@ class TimestampNormalizer extends DateTimeNormalizer {
     'RFC 3339' => \DateTime::RFC3339,
   ];
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = Timestamp::class;
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/serialization/src/Normalizer/TypedDataNormalizer.php b/core/modules/serialization/src/Normalizer/TypedDataNormalizer.php
index 41ac788da7f5..f0572bb1bf36 100644
--- a/core/modules/serialization/src/Normalizer/TypedDataNormalizer.php
+++ b/core/modules/serialization/src/Normalizer/TypedDataNormalizer.php
@@ -9,11 +9,6 @@
  */
 class TypedDataNormalizer extends NormalizerBase {
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = TypedDataInterface::class;
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/serialization/tests/modules/field_normalization_test/src/Normalization/TextItemSillyNormalizer.php b/core/modules/serialization/tests/modules/field_normalization_test/src/Normalization/TextItemSillyNormalizer.php
index 620693bd6572..855b70d753cd 100644
--- a/core/modules/serialization/tests/modules/field_normalization_test/src/Normalization/TextItemSillyNormalizer.php
+++ b/core/modules/serialization/tests/modules/field_normalization_test/src/Normalization/TextItemSillyNormalizer.php
@@ -10,11 +10,6 @@
  */
 class TextItemSillyNormalizer extends FieldItemNormalizer {
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = TextItemBase::class;
-
   /**
    * {@inheritdoc}
    */
@@ -33,4 +28,11 @@ protected function constructValue($data, $context) {
     return $value;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getSupportedTypes(?string $format): array {
+    return [TextItemBase::class => TRUE];
+  }
+
 }
diff --git a/core/modules/serialization/tests/modules/test_datatype_boolean_emoji_normalizer/src/Normalizer/BooleanNormalizer.php b/core/modules/serialization/tests/modules/test_datatype_boolean_emoji_normalizer/src/Normalizer/BooleanNormalizer.php
index 7b132e47a913..7cbda9aef2aa 100644
--- a/core/modules/serialization/tests/modules/test_datatype_boolean_emoji_normalizer/src/Normalizer/BooleanNormalizer.php
+++ b/core/modules/serialization/tests/modules/test_datatype_boolean_emoji_normalizer/src/Normalizer/BooleanNormalizer.php
@@ -11,11 +11,6 @@
  */
 class BooleanNormalizer extends NormalizerBase implements DenormalizerInterface {
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = BooleanData::class;
-
   /**
    * {@inheritdoc}
    */
@@ -36,8 +31,8 @@ public function denormalize($data, $class, $format = NULL, array $context = []):
   /**
    * {@inheritdoc}
    */
-  public function hasCacheableSupportsMethod(): bool {
-    return TRUE;
+  public function getSupportedTypes(?string $format): array {
+    return [BooleanData::class => TRUE];
   }
 
 }
diff --git a/core/modules/serialization/tests/modules/test_fieldtype_boolean_emoji_normalizer/src/Normalizer/BooleanItemNormalizer.php b/core/modules/serialization/tests/modules/test_fieldtype_boolean_emoji_normalizer/src/Normalizer/BooleanItemNormalizer.php
index b06e062263bd..067e7129a41a 100644
--- a/core/modules/serialization/tests/modules/test_fieldtype_boolean_emoji_normalizer/src/Normalizer/BooleanItemNormalizer.php
+++ b/core/modules/serialization/tests/modules/test_fieldtype_boolean_emoji_normalizer/src/Normalizer/BooleanItemNormalizer.php
@@ -11,11 +11,6 @@
  */
 class BooleanItemNormalizer extends FieldItemNormalizer implements DenormalizerInterface {
 
-  /**
-   * {@inheritdoc}
-   */
-  protected $supportedInterfaceOrClass = BooleanItem::class;
-
   /**
    * {@inheritdoc}
    */
@@ -43,4 +38,11 @@ protected function constructValue($data, $context) {
     return $data;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getSupportedTypes(?string $format): array {
+    return [BooleanItem::class => TRUE];
+  }
+
 }
diff --git a/core/modules/serialization/tests/src/Unit/Normalizer/NormalizerBaseTest.php b/core/modules/serialization/tests/src/Unit/Normalizer/NormalizerBaseTest.php
index 63b9bf714d33..0a568093ba5b 100644
--- a/core/modules/serialization/tests/src/Unit/Normalizer/NormalizerBaseTest.php
+++ b/core/modules/serialization/tests/src/Unit/Normalizer/NormalizerBaseTest.php
@@ -68,6 +68,13 @@ public function providerTestSupportsNormalization() {
  */
 abstract class TestNormalizerBase extends NormalizerBase {
 
+  /**
+   * The interface or class that this Normalizer supports.
+   *
+   * @var string[]
+   */
+  protected array $supportedTypes = ['*' => FALSE];
+
   /**
    * Sets the protected supportedInterfaceOrClass property.
    *
@@ -75,7 +82,14 @@ abstract class TestNormalizerBase extends NormalizerBase {
    *   The class name to set.
    */
   public function setSupportedInterfaceOrClass($supported_interface_or_class) {
-    $this->supportedInterfaceOrClass = $supported_interface_or_class;
+    $this->supportedTypes = [$supported_interface_or_class => FALSE];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getSupportedTypes(?string $format): array {
+    return $this->supportedTypes;
   }
 
 }
-- 
GitLab