From d5612c534e7699d3ecd14108628dd34dc1e7f301 Mon Sep 17 00:00:00 2001
From: catch <6915-catch@users.noreply.drupalcode.org>
Date: Thu, 23 Jan 2025 18:14:30 +0000
Subject: [PATCH] Issue #3495959 by nikolay shapovalov, smustgrave, larowlan:
 Move helpers in ajax_forms_test.module and delete it

---
 core/.phpstan-baseline.php                    | 174 ------------
 .../ajax_forms_test/ajax_forms_test.module    | 253 ------------------
 .../modules/ajax_forms_test/src/Callbacks.php | 252 ++++++++++++++++-
 .../Form/AjaxFormsTestAjaxElementsForm.php    |   6 +-
 .../src/Form/AjaxFormsTestCommandsForm.php    |  41 +--
 .../src/Form/AjaxFormsTestImageButtonForm.php |   3 +-
 .../src/Form/AjaxFormsTestLazyLoadForm.php    |   3 +-
 .../src/Form/AjaxFormsTestSimpleForm.php      |  10 +-
 .../src/Form/AjaxFormsTestValidationForm.php  |   5 +-
 9 files changed, 279 insertions(+), 468 deletions(-)
 delete mode 100644 core/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module

diff --git a/core/.phpstan-baseline.php b/core/.phpstan-baseline.php
index e1b70ca644a9..71c573d603a9 100644
--- a/core/.phpstan-baseline.php
+++ b/core/.phpstan-baseline.php
@@ -34909,180 +34909,6 @@
 	'count' => 1,
 	'path' => __DIR__ . '/modules/system/tests/modules/advisory_feed_test/src/AdvisoryTestClientMiddleware.php',
 ];
-$ignoreErrors[] = [
-	'message' => '#^Function ajax_forms_test_advanced_commands_add_css_callback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module',
-];
-$ignoreErrors[] = [
-	'message' => '#^Function ajax_forms_test_advanced_commands_after_callback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module',
-];
-$ignoreErrors[] = [
-	'message' => '#^Function ajax_forms_test_advanced_commands_alert_callback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module',
-];
-$ignoreErrors[] = [
-	'message' => '#^Function ajax_forms_test_advanced_commands_announce_assertive_callback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module',
-];
-$ignoreErrors[] = [
-	'message' => '#^Function ajax_forms_test_advanced_commands_announce_callback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module',
-];
-$ignoreErrors[] = [
-	'message' => '#^Function ajax_forms_test_advanced_commands_announce_polite_callback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module',
-];
-$ignoreErrors[] = [
-	'message' => '#^Function ajax_forms_test_advanced_commands_append_callback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module',
-];
-$ignoreErrors[] = [
-	'message' => '#^Function ajax_forms_test_advanced_commands_before_callback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module',
-];
-$ignoreErrors[] = [
-	'message' => '#^Function ajax_forms_test_advanced_commands_changed_asterisk_callback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module',
-];
-$ignoreErrors[] = [
-	'message' => '#^Function ajax_forms_test_advanced_commands_changed_callback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module',
-];
-$ignoreErrors[] = [
-	'message' => '#^Function ajax_forms_test_advanced_commands_css_callback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module',
-];
-$ignoreErrors[] = [
-	'message' => '#^Function ajax_forms_test_advanced_commands_data_callback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module',
-];
-$ignoreErrors[] = [
-	'message' => '#^Function ajax_forms_test_advanced_commands_double_announce_callback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module',
-];
-$ignoreErrors[] = [
-	'message' => '#^Function ajax_forms_test_advanced_commands_html_callback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module',
-];
-$ignoreErrors[] = [
-	'message' => '#^Function ajax_forms_test_advanced_commands_insert_callback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module',
-];
-$ignoreErrors[] = [
-	'message' => '#^Function ajax_forms_test_advanced_commands_invoke_callback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module',
-];
-$ignoreErrors[] = [
-	'message' => '#^Function ajax_forms_test_advanced_commands_prepend_callback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module',
-];
-$ignoreErrors[] = [
-	'message' => '#^Function ajax_forms_test_advanced_commands_remove_callback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module',
-];
-$ignoreErrors[] = [
-	'message' => '#^Function ajax_forms_test_advanced_commands_restripe_callback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module',
-];
-$ignoreErrors[] = [
-	'message' => '#^Function ajax_forms_test_advanced_commands_settings_callback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module',
-];
-$ignoreErrors[] = [
-	'message' => '#^Function ajax_forms_test_lazy_load_form_ajax\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module',
-];
-$ignoreErrors[] = [
-	'message' => '#^Function ajax_forms_test_validation_form_callback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module',
-];
-$ignoreErrors[] = [
-	'message' => '#^Function ajax_forms_test_validation_number_form_callback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module',
-];
-$ignoreErrors[] = [
-	'message' => '#^Method Drupal\\\\ajax_forms_test\\\\Callbacks\\:\\:checkboxCallback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/src/Callbacks.php',
-];
-$ignoreErrors[] = [
-	'message' => '#^Method Drupal\\\\ajax_forms_test\\\\Callbacks\\:\\:checkboxGroupCallback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/src/Callbacks.php',
-];
-$ignoreErrors[] = [
-	'message' => '#^Method Drupal\\\\ajax_forms_test\\\\Callbacks\\:\\:dateCallback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/src/Callbacks.php',
-];
-$ignoreErrors[] = [
-	'message' => '#^Method Drupal\\\\ajax_forms_test\\\\Callbacks\\:\\:datetimeCallback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/src/Callbacks.php',
-];
-$ignoreErrors[] = [
-	'message' => '#^Method Drupal\\\\ajax_forms_test\\\\Callbacks\\:\\:imageButtonCallback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/src/Callbacks.php',
-];
-$ignoreErrors[] = [
-	'message' => '#^Method Drupal\\\\ajax_forms_test\\\\Callbacks\\:\\:selectCallback\\(\\) has no return type specified\\.$#',
-	'identifier' => 'missingType.return',
-	'count' => 1,
-	'path' => __DIR__ . '/modules/system/tests/modules/ajax_forms_test/src/Callbacks.php',
-];
 $ignoreErrors[] = [
 	'message' => '#^Method Drupal\\\\ajax_forms_test\\\\Form\\\\AjaxFormsTestAjaxElementsForm\\:\\:submitForm\\(\\) has no return type specified\\.$#',
 	'identifier' => 'missingType.return',
diff --git a/core/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module b/core/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module
deleted file mode 100644
index f73c9904846b..000000000000
--- a/core/modules/system/tests/modules/ajax_forms_test/ajax_forms_test.module
+++ /dev/null
@@ -1,253 +0,0 @@
-<?php
-
-/**
- * @file
- * Mock module for Ajax forms testing.
- */
-
-declare(strict_types=1);
-
-use Drupal\Core\Ajax\AddCssCommand;
-use Drupal\Core\Ajax\AfterCommand;
-use Drupal\Core\Ajax\AjaxResponse;
-use Drupal\Core\Ajax\AlertCommand;
-use Drupal\Core\Ajax\AnnounceCommand;
-use Drupal\Core\Ajax\AppendCommand;
-use Drupal\Core\Ajax\BeforeCommand;
-use Drupal\Core\Ajax\ChangedCommand;
-use Drupal\Core\Ajax\CssCommand;
-use Drupal\Core\Ajax\DataCommand;
-use Drupal\Core\Ajax\HtmlCommand;
-use Drupal\Core\Ajax\InsertCommand;
-use Drupal\Core\Ajax\InvokeCommand;
-use Drupal\Core\Ajax\PrependCommand;
-use Drupal\Core\Ajax\RemoveCommand;
-use Drupal\Core\Ajax\RestripeCommand;
-use Drupal\Core\Ajax\SettingsCommand;
-use Drupal\Core\Form\FormStateInterface;
-
-/**
- * Ajax form callback: Selects 'after'.
- */
-function ajax_forms_test_advanced_commands_after_callback($form, FormStateInterface $form_state) {
-  $selector = '#after_div';
-
-  $response = new AjaxResponse();
-  $response->addCommand(new AfterCommand($selector, "This will be placed after"));
-  return $response;
-}
-
-/**
- * Ajax form callback: Selects 'alert'.
- */
-function ajax_forms_test_advanced_commands_alert_callback($form, FormStateInterface $form_state) {
-  $response = new AjaxResponse();
-  $response->addCommand(new AlertCommand('Alert'));
-  return $response;
-}
-
-/**
- * Ajax form callback: Selects 'announce' with no priority specified.
- */
-function ajax_forms_test_advanced_commands_announce_callback($form, FormStateInterface $form_state) {
-  return (new AjaxResponse())->addCommand(new AnnounceCommand('Default announcement.'));
-}
-
-/**
- * Ajax form callback: Selects 'announce' with 'polite' priority.
- */
-function ajax_forms_test_advanced_commands_announce_polite_callback($form, FormStateInterface $form_state) {
-  return (new AjaxResponse())->addCommand(new AnnounceCommand('Polite announcement.', 'polite'));
-}
-
-/**
- * Ajax form callback: Selects 'announce' with 'assertive' priority.
- */
-function ajax_forms_test_advanced_commands_announce_assertive_callback($form, FormStateInterface $form_state) {
-  return (new AjaxResponse())->addCommand(new AnnounceCommand('Assertive announcement.', 'assertive'));
-}
-
-/**
- * Ajax form callback: Selects 'announce' with two announce commands returned.
- */
-function ajax_forms_test_advanced_commands_double_announce_callback($form, FormStateInterface $form_state) {
-  return (new AjaxResponse())->addCommand(new AnnounceCommand('Assertive announcement.', 'assertive'))
-    ->addCommand(new AnnounceCommand('Another announcement.'));
-}
-
-/**
- * Ajax form callback: Selects 'append'.
- */
-function ajax_forms_test_advanced_commands_append_callback($form, FormStateInterface $form_state) {
-  $selector = '#append_div';
-  $response = new AjaxResponse();
-  $response->addCommand(new AppendCommand($selector, "Appended text"));
-  return $response;
-}
-
-/**
- * Ajax form callback: Selects 'before'.
- */
-function ajax_forms_test_advanced_commands_before_callback($form, FormStateInterface $form_state) {
-  $selector = '#before_div';
-  $response = new AjaxResponse();
-  $response->addCommand(new BeforeCommand($selector, "Before text"));
-  return $response;
-}
-
-/**
- * Ajax form callback: Selects 'changed'.
- */
-function ajax_forms_test_advanced_commands_changed_callback($form, FormStateInterface $form_state) {
-  $response = new AjaxResponse();
-  $response->addCommand(new ChangedCommand('#changed_div'));
-  return $response;
-}
-
-/**
- * Ajax form callback: Selects 'changed' with asterisk marking inner div.
- */
-function ajax_forms_test_advanced_commands_changed_asterisk_callback($form, FormStateInterface $form_state) {
-  $response = new AjaxResponse();
-  $response->addCommand(new ChangedCommand('#changed_div', '#changed_div_mark_this'));
-  return $response;
-}
-
-/**
- * Ajax form callback: Selects 'css'.
- */
-function ajax_forms_test_advanced_commands_css_callback($form, FormStateInterface $form_state) {
-  $selector = '#css_div';
-  $color = 'blue';
-
-  $response = new AjaxResponse();
-  $response->addCommand(new CssCommand($selector, ['background-color' => $color]));
-  return $response;
-}
-
-/**
- * Ajax form callback: Selects 'data'.
- */
-function ajax_forms_test_advanced_commands_data_callback($form, FormStateInterface $form_state) {
-  $selector = '#data_div';
-  $response = new AjaxResponse();
-  $response->addCommand(new DataCommand($selector, 'test_key', 'test_value'));
-  return $response;
-}
-
-/**
- * Ajax form callback: Selects 'invoke'.
- */
-function ajax_forms_test_advanced_commands_invoke_callback($form, FormStateInterface $form_state) {
-  $response = new AjaxResponse();
-  $response->addCommand(new InvokeCommand('#invoke_div', 'addClass', ['error']));
-  return $response;
-}
-
-/**
- * Ajax form callback: Selects 'html'.
- */
-function ajax_forms_test_advanced_commands_html_callback($form, FormStateInterface $form_state) {
-  $response = new AjaxResponse();
-  $response->addCommand(new HtmlCommand('#html_div', 'replacement text'));
-  return $response;
-}
-
-/**
- * Ajax form callback: Selects 'insert'.
- */
-function ajax_forms_test_advanced_commands_insert_callback($form, FormStateInterface $form_state) {
-  $response = new AjaxResponse();
-  $response->addCommand(new InsertCommand('#insert_div', 'insert replacement text'));
-  return $response;
-}
-
-/**
- * Ajax form callback: Selects 'prepend'.
- */
-function ajax_forms_test_advanced_commands_prepend_callback($form, FormStateInterface $form_state) {
-  $response = new AjaxResponse();
-  $response->addCommand(new PrependCommand('#prepend_div', "prepended text"));
-  return $response;
-}
-
-/**
- * Ajax form callback: Selects 'remove'.
- */
-function ajax_forms_test_advanced_commands_remove_callback($form, FormStateInterface $form_state) {
-  $response = new AjaxResponse();
-  $response->addCommand(new RemoveCommand('#remove_text'));
-  return $response;
-}
-
-/**
- * Ajax form callback: Selects 'restripe'.
- */
-function ajax_forms_test_advanced_commands_restripe_callback($form, FormStateInterface $form_state) {
-  $response = new AjaxResponse();
-  $response->addCommand(new RestripeCommand('#restripe_table'));
-  return $response;
-}
-
-/**
- * Ajax form callback: Selects 'settings'.
- */
-function ajax_forms_test_advanced_commands_settings_callback($form, FormStateInterface $form_state) {
-  $setting['ajax_forms_test']['foo'] = 42;
-  $response = new AjaxResponse();
-  $response->addCommand(new SettingsCommand($setting));
-  return $response;
-}
-
-/**
- * Ajax callback for 'add_css'.
- */
-function ajax_forms_test_advanced_commands_add_css_callback($form, FormStateInterface $form_state) {
-  $response = new AjaxResponse();
-  $response->addCommand(new AddCssCommand([
-    [
-      'href' => 'my/file.css',
-      'media' => 'all',
-    ],
-    [
-      'href' => 'https://example.com/css?family=Open+Sans',
-      'media' => 'all',
-    ],
-  ]));
-  return $response;
-}
-
-/**
- * Ajax form callback: Selects the 'driver_text' element of the validation form.
- */
-function ajax_forms_test_validation_form_callback($form, FormStateInterface $form_state) {
-  \Drupal::messenger()->addStatus("ajax_forms_test_validation_form_callback invoked");
-  \Drupal::messenger()->addStatus(t("Callback: driver_text=%driver_text, spare_required_field=%spare_required_field", ['%driver_text' => $form_state->getValue('driver_text'), '%spare_required_field' => $form_state->getValue('spare_required_field')]));
-  return ['#markup' => '<div id="message_area">ajax_forms_test_validation_form_callback at ' . date('c') . '</div>'];
-}
-
-/**
- * Ajax form callback: Selects the 'driver_number' element of the validation form.
- */
-function ajax_forms_test_validation_number_form_callback($form, FormStateInterface $form_state) {
-  \Drupal::messenger()->addStatus("ajax_forms_test_validation_number_form_callback invoked");
-  \Drupal::messenger()->addStatus(t("Callback: driver_number=%driver_number, spare_required_field=%spare_required_field", ['%driver_number' => $form_state->getValue('driver_number'), '%spare_required_field' => $form_state->getValue('spare_required_field')]));
-  return ['#markup' => '<div id="message_area_number">ajax_forms_test_validation_number_form_callback at ' . date('c') . '</div>'];
-}
-
-/**
- * AJAX form callback: Selects for the ajax_forms_test_lazy_load_form() form.
- */
-function ajax_forms_test_lazy_load_form_ajax($form, FormStateInterface $form_state) {
-  $build = [
-    '#markup' => 'new content',
-  ];
-
-  if ($form_state->getValue('add_files')) {
-    $build['#attached']['library'][] = 'system/admin';
-    $build['#attached']['library'][] = 'system/drupal.system';
-    $build['#attached']['drupalSettings']['ajax_forms_test_lazy_load_form_submit'] = 'executed';
-  }
-
-  return $build;
-}
diff --git a/core/modules/system/tests/modules/ajax_forms_test/src/Callbacks.php b/core/modules/system/tests/modules/ajax_forms_test/src/Callbacks.php
index dfbed10b4164..df777954adff 100644
--- a/core/modules/system/tests/modules/ajax_forms_test/src/Callbacks.php
+++ b/core/modules/system/tests/modules/ajax_forms_test/src/Callbacks.php
@@ -4,9 +4,23 @@
 
 namespace Drupal\ajax_forms_test;
 
+use Drupal\Core\Ajax\AddCssCommand;
+use Drupal\Core\Ajax\AfterCommand;
 use Drupal\Core\Ajax\AjaxResponse;
+use Drupal\Core\Ajax\AlertCommand;
+use Drupal\Core\Ajax\AnnounceCommand;
+use Drupal\Core\Ajax\AppendCommand;
+use Drupal\Core\Ajax\BeforeCommand;
+use Drupal\Core\Ajax\ChangedCommand;
+use Drupal\Core\Ajax\CssCommand;
 use Drupal\Core\Ajax\DataCommand;
 use Drupal\Core\Ajax\HtmlCommand;
+use Drupal\Core\Ajax\InsertCommand;
+use Drupal\Core\Ajax\InvokeCommand;
+use Drupal\Core\Ajax\PrependCommand;
+use Drupal\Core\Ajax\RemoveCommand;
+use Drupal\Core\Ajax\RestripeCommand;
+use Drupal\Core\Ajax\SettingsCommand;
 use Drupal\Core\Form\FormStateInterface;
 
 /**
@@ -17,7 +31,7 @@ class Callbacks {
   /**
    * Ajax callback triggered by select.
    */
-  public function selectCallback($form, FormStateInterface $form_state) {
+  public static function selectCallback($form, FormStateInterface $form_state): AjaxResponse {
     $response = new AjaxResponse();
     $response->addCommand(new HtmlCommand('#ajax_selected_color', $form_state->getValue('select')));
     $response->addCommand(new DataCommand('#ajax_selected_color', 'form_state_value_select', $form_state->getValue('select')));
@@ -27,7 +41,7 @@ public function selectCallback($form, FormStateInterface $form_state) {
   /**
    * Ajax callback triggered by date.
    */
-  public function dateCallback($form, FormStateInterface $form_state) {
+  public static function dateCallback($form, FormStateInterface $form_state): AjaxResponse {
     $response = new AjaxResponse();
     $date = $form_state->getValue('date');
     $response->addCommand(new HtmlCommand('#ajax_date_value', sprintf('<div>%s</div>', $date)));
@@ -38,7 +52,7 @@ public function dateCallback($form, FormStateInterface $form_state) {
   /**
    * Ajax callback triggered by datetime.
    */
-  public function datetimeCallback($form, FormStateInterface $form_state) {
+  public static function datetimeCallback($form, FormStateInterface $form_state): AjaxResponse {
     $datetime = $form_state->getValue('datetime')['date'] . ' ' . $form_state->getValue('datetime')['time'];
 
     $response = new AjaxResponse();
@@ -50,7 +64,7 @@ public function datetimeCallback($form, FormStateInterface $form_state) {
   /**
    * Ajax callback triggered by checkbox.
    */
-  public function checkboxCallback($form, FormStateInterface $form_state) {
+  public static function checkboxCallback($form, FormStateInterface $form_state): AjaxResponse {
     $response = new AjaxResponse();
     $response->addCommand(new HtmlCommand('#ajax_checkbox_value', $form_state->getValue('checkbox') ? 'checked' : 'unchecked'));
     $response->addCommand(new DataCommand('#ajax_checkbox_value', 'form_state_value_select', (int) $form_state->getValue('checkbox')));
@@ -60,7 +74,7 @@ public function checkboxCallback($form, FormStateInterface $form_state) {
   /**
    * Ajax callback to confirm image button was submitted.
    */
-  public function imageButtonCallback($form, FormStateInterface $form_state) {
+  public static function imageButtonCallback($form, FormStateInterface $form_state): AjaxResponse {
     $response = new AjaxResponse();
     $response->addCommand(new HtmlCommand('#ajax_image_button_result', "<div id='ajax-1-more-div'>Something witty!</div>"));
     return $response;
@@ -69,8 +83,234 @@ public function imageButtonCallback($form, FormStateInterface $form_state) {
   /**
    * Ajax callback triggered by the checkbox in a #group.
    */
-  public function checkboxGroupCallback($form, FormStateInterface $form_state) {
+  public static function checkboxGroupCallback($form, FormStateInterface $form_state): array {
     return $form['checkbox_in_group_wrapper'];
   }
 
+  /**
+   * Ajax form callback: Selects 'after'.
+   */
+  public static function advancedCommandsAfterCallback($form, FormStateInterface $form_state): AjaxResponse {
+    $selector = '#after_div';
+
+    $response = new AjaxResponse();
+    $response->addCommand(new AfterCommand($selector, "This will be placed after"));
+    return $response;
+  }
+
+  /**
+   * Ajax form callback: Selects 'alert'.
+   */
+  public static function advancedCommandsAlertCallback($form, FormStateInterface $form_state): AjaxResponse {
+    $response = new AjaxResponse();
+    $response->addCommand(new AlertCommand('Alert'));
+    return $response;
+  }
+
+  /**
+   * Ajax form callback: Selects 'announce' with no priority specified.
+   */
+  public static function advancedCommandsAnnounceCallback($form, FormStateInterface $form_state): AjaxResponse {
+    return (new AjaxResponse())->addCommand(new AnnounceCommand('Default announcement.'));
+  }
+
+  /**
+   * Ajax form callback: Selects 'announce' with 'polite' priority.
+   */
+  public static function advancedCommandsAnnouncePoliteCallback($form, FormStateInterface $form_state): AjaxResponse {
+    return (new AjaxResponse())->addCommand(new AnnounceCommand('Polite announcement.', 'polite'));
+  }
+
+  /**
+   * Ajax form callback: Selects 'announce' with 'assertive' priority.
+   */
+  public static function advancedCommandsAnnounceAssertiveCallback($form, FormStateInterface $form_state): AjaxResponse {
+    return (new AjaxResponse())->addCommand(new AnnounceCommand('Assertive announcement.', 'assertive'));
+  }
+
+  /**
+   * Ajax form callback: Selects 'announce' with two announce commands returned.
+   */
+  public static function advancedCommandsDoubleAnnounceCallback($form, FormStateInterface $form_state): AjaxResponse {
+    return (new AjaxResponse())->addCommand(new AnnounceCommand('Assertive announcement.', 'assertive'))
+      ->addCommand(new AnnounceCommand('Another announcement.'));
+  }
+
+  /**
+   * Ajax form callback: Selects 'append'.
+   */
+  public static function advancedCommandsAppendCallback($form, FormStateInterface $form_state): AjaxResponse {
+    $selector = '#append_div';
+    $response = new AjaxResponse();
+    $response->addCommand(new AppendCommand($selector, "Appended text"));
+    return $response;
+  }
+
+  /**
+   * Ajax form callback: Selects 'before'.
+   */
+  public static function advancedCommandsBeforeCallback($form, FormStateInterface $form_state): AjaxResponse {
+    $selector = '#before_div';
+    $response = new AjaxResponse();
+    $response->addCommand(new BeforeCommand($selector, "Before text"));
+    return $response;
+  }
+
+  /**
+   * Ajax form callback: Selects 'changed'.
+   */
+  public static function advancedCommandsChangedCallback($form, FormStateInterface $form_state): AjaxResponse {
+    $response = new AjaxResponse();
+    $response->addCommand(new ChangedCommand('#changed_div'));
+    return $response;
+  }
+
+  /**
+   * Ajax form callback: Selects 'changed' with asterisk marking inner div.
+   */
+  public static function advancedCommandsChangedAsteriskCallback($form, FormStateInterface $form_state): AjaxResponse {
+    $response = new AjaxResponse();
+    $response->addCommand(new ChangedCommand('#changed_div', '#changed_div_mark_this'));
+    return $response;
+  }
+
+  /**
+   * Ajax form callback: Selects 'css'.
+   */
+  public static function advancedCommandsCssCallback($form, FormStateInterface $form_state): AjaxResponse {
+    $selector = '#css_div';
+    $color = 'blue';
+
+    $response = new AjaxResponse();
+    $response->addCommand(new CssCommand($selector, ['background-color' => $color]));
+    return $response;
+  }
+
+  /**
+   * Ajax form callback: Selects 'data'.
+   */
+  public static function advancedCommandsDataCallback($form, FormStateInterface $form_state): AjaxResponse {
+    $selector = '#data_div';
+    $response = new AjaxResponse();
+    $response->addCommand(new DataCommand($selector, 'test_key', 'test_value'));
+    return $response;
+  }
+
+  /**
+   * Ajax form callback: Selects 'invoke'.
+   */
+  public static function advancedCommandsInvokeCallback($form, FormStateInterface $form_state): AjaxResponse {
+    $response = new AjaxResponse();
+    $response->addCommand(new InvokeCommand('#invoke_div', 'addClass', ['error']));
+    return $response;
+  }
+
+  /**
+   * Ajax form callback: Selects 'html'.
+   */
+  public static function advancedCommandsHtmlCallback($form, FormStateInterface $form_state): AjaxResponse {
+    $response = new AjaxResponse();
+    $response->addCommand(new HtmlCommand('#html_div', 'replacement text'));
+    return $response;
+  }
+
+  /**
+   * Ajax form callback: Selects 'insert'.
+   */
+  public static function advancedCommandsInsertCallback($form, FormStateInterface $form_state): AjaxResponse {
+    $response = new AjaxResponse();
+    $response->addCommand(new InsertCommand('#insert_div', 'insert replacement text'));
+    return $response;
+  }
+
+  /**
+   * Ajax form callback: Selects 'prepend'.
+   */
+  public static function advancedCommandsPrependCallback($form, FormStateInterface $form_state): AjaxResponse {
+    $response = new AjaxResponse();
+    $response->addCommand(new PrependCommand('#prepend_div', "prepended text"));
+    return $response;
+  }
+
+  /**
+   * Ajax form callback: Selects 'remove'.
+   */
+  public static function advancedCommandsRemoveCallback($form, FormStateInterface $form_state): AjaxResponse {
+    $response = new AjaxResponse();
+    $response->addCommand(new RemoveCommand('#remove_text'));
+    return $response;
+  }
+
+  /**
+   * Ajax form callback: Selects 'restripe'.
+   */
+  public static function advancedCommandsRestripeCallback($form, FormStateInterface $form_state): AjaxResponse {
+    $response = new AjaxResponse();
+    $response->addCommand(new RestripeCommand('#restripe_table'));
+    return $response;
+  }
+
+  /**
+   * Ajax form callback: Selects 'settings'.
+   */
+  public static function advancedCommandsSettingsCallback($form, FormStateInterface $form_state): AjaxResponse {
+    $setting['ajax_forms_test']['foo'] = 42;
+    $response = new AjaxResponse();
+    $response->addCommand(new SettingsCommand($setting));
+    return $response;
+  }
+
+  /**
+   * Ajax callback for 'add_css'.
+   */
+  public static function advancedCommandsAddCssCallback($form, FormStateInterface $form_state): AjaxResponse {
+    $response = new AjaxResponse();
+    $response->addCommand(new AddCssCommand([
+      [
+        'href' => 'my/file.css',
+        'media' => 'all',
+      ],
+      [
+        'href' => 'https://example.com/css?family=Open+Sans',
+        'media' => 'all',
+      ],
+    ]));
+    return $response;
+  }
+
+  /**
+   * Ajax form callback: Selects the 'driver_text' element of the validation form.
+   */
+  public static function validationFormCallback($form, FormStateInterface $form_state): array {
+    \Drupal::messenger()->addStatus("ajax_forms_test_validation_form_callback invoked");
+    \Drupal::messenger()->addStatus(t("Callback: driver_text=%driver_text, spare_required_field=%spare_required_field", ['%driver_text' => $form_state->getValue('driver_text'), '%spare_required_field' => $form_state->getValue('spare_required_field')]));
+    return ['#markup' => '<div id="message_area">ajax_forms_test_validation_form_callback at ' . date('c') . '</div>'];
+  }
+
+  /**
+   * Ajax form callback: Selects the 'driver_number' element of the validation form.
+   */
+  public static function validationNumberFormCallback($form, FormStateInterface $form_state): array {
+    \Drupal::messenger()->addStatus("ajax_forms_test_validation_number_form_callback invoked");
+    \Drupal::messenger()->addStatus(t("Callback: driver_number=%driver_number, spare_required_field=%spare_required_field", ['%driver_number' => $form_state->getValue('driver_number'), '%spare_required_field' => $form_state->getValue('spare_required_field')]));
+    return ['#markup' => '<div id="message_area_number">ajax_forms_test_validation_number_form_callback at ' . date('c') . '</div>'];
+  }
+
+  /**
+   * AJAX form callback: Selects for the ajax_forms_test_lazy_load_form() form.
+   */
+  public static function lazyLoadFormAjax($form, FormStateInterface $form_state): array {
+    $build = [
+      '#markup' => 'new content',
+    ];
+
+    if ($form_state->getValue('add_files')) {
+      $build['#attached']['library'][] = 'system/admin';
+      $build['#attached']['library'][] = 'system/drupal.system';
+      $build['#attached']['drupalSettings']['ajax_forms_test_lazy_load_form_submit'] = 'executed';
+    }
+
+    return $build;
+  }
+
 }
diff --git a/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestAjaxElementsForm.php b/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestAjaxElementsForm.php
index 41da97106d00..f7c0c9e49bae 100644
--- a/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestAjaxElementsForm.php
+++ b/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestAjaxElementsForm.php
@@ -26,12 +26,10 @@ public function getFormId() {
    * {@inheritdoc}
    */
   public function buildForm(array $form, FormStateInterface $form_state) {
-    $callback_object = new Callbacks();
-
     $form['date'] = [
       '#type' => 'date',
       '#ajax' => [
-        'callback' => [$callback_object, 'dateCallback'],
+        'callback' => [Callbacks::class, 'dateCallback'],
       ],
       '#suffix' => '<div id="ajax_date_value">No date yet selected</div>',
     ];
@@ -39,7 +37,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
     $form['datetime'] = [
       '#type' => 'datetime',
       '#ajax' => [
-        'callback' => [$callback_object, 'datetimeCallback'],
+        'callback' => [Callbacks::class, 'datetimeCallback'],
         'wrapper' => 'ajax_datetime_value',
       ],
     ];
diff --git a/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestCommandsForm.php b/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestCommandsForm.php
index 1ee090d4a05c..8b59f9f41176 100644
--- a/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestCommandsForm.php
+++ b/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestCommandsForm.php
@@ -4,6 +4,7 @@
 
 namespace Drupal\ajax_forms_test\Form;
 
+use Drupal\ajax_forms_test\Callbacks;
 use Drupal\Core\Form\FormBase;
 use Drupal\Core\Form\FormStateInterface;
 
@@ -32,7 +33,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#value' => $this->t("AJAX 'After': Click to put something after the div"),
       '#type' => 'submit',
       '#ajax' => [
-        'callback' => 'ajax_forms_test_advanced_commands_after_callback',
+        'callback' => [Callbacks::class, 'advancedCommandsAfterCallback'],
       ],
       '#suffix' => '<div id="after_div">Something can be inserted after this</div>',
     ];
@@ -42,7 +43,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#value' => $this->t("AJAX 'Alert': Click to alert"),
       '#type' => 'submit',
       '#ajax' => [
-        'callback' => 'ajax_forms_test_advanced_commands_alert_callback',
+        'callback' => [Callbacks::class, 'advancedCommandsAlertCallback'],
       ],
     ];
 
@@ -51,7 +52,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#value' => $this->t("AJAX 'Announce': Click to announce"),
       '#type' => 'submit',
       '#ajax' => [
-        'callback' => 'ajax_forms_test_advanced_commands_announce_callback',
+        'callback' => [Callbacks::class, 'advancedCommandsAnnounceCallback'],
       ],
     ];
 
@@ -60,7 +61,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#value' => $this->t("AJAX 'Announce': Click to announce with 'polite' priority"),
       '#type' => 'submit',
       '#ajax' => [
-        'callback' => 'ajax_forms_test_advanced_commands_announce_polite_callback',
+        'callback' => [Callbacks::class, 'advancedCommandsAnnouncePoliteCallback'],
       ],
     ];
 
@@ -69,7 +70,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#value' => $this->t("AJAX 'Announce': Click to announce with 'assertive' priority"),
       '#type' => 'submit',
       '#ajax' => [
-        'callback' => 'ajax_forms_test_advanced_commands_announce_assertive_callback',
+        'callback' => [Callbacks::class, 'advancedCommandsAnnounceAssertiveCallback'],
       ],
     ];
 
@@ -78,7 +79,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#value' => $this->t("AJAX 'Announce': Click to announce twice"),
       '#type' => 'submit',
       '#ajax' => [
-        'callback' => 'ajax_forms_test_advanced_commands_double_announce_callback',
+        'callback' => [Callbacks::class, 'advancedCommandsDoubleAnnounceCallback'],
       ],
     ];
 
@@ -87,7 +88,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#value' => $this->t("AJAX 'Append': Click to append something"),
       '#type' => 'submit',
       '#ajax' => [
-        'callback' => 'ajax_forms_test_advanced_commands_append_callback',
+        'callback' => [Callbacks::class, 'advancedCommandsAppendCallback'],
       ],
       '#suffix' => '<div id="append_div">Append inside this div</div>',
     ];
@@ -97,7 +98,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#value' => $this->t("AJAX 'before': Click to put something before the div"),
       '#type' => 'submit',
       '#ajax' => [
-        'callback' => 'ajax_forms_test_advanced_commands_before_callback',
+        'callback' => [Callbacks::class, 'advancedCommandsBeforeCallback'],
       ],
       '#suffix' => '<div id="before_div">Insert something before this.</div>',
     ];
@@ -107,7 +108,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#value' => $this->t("AJAX changed: Click to mark div changed."),
       '#type' => 'submit',
       '#ajax' => [
-        'callback' => 'ajax_forms_test_advanced_commands_changed_callback',
+        'callback' => [Callbacks::class, 'advancedCommandsChangedCallback'],
       ],
       '#suffix' => '<div id="changed_div"> <div id="changed_div_mark_this">This div can be marked as changed or not.</div></div>',
     ];
@@ -116,7 +117,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#value' => $this->t("AJAX changed: Click to mark div changed with asterisk."),
       '#type' => 'submit',
       '#ajax' => [
-        'callback' => 'ajax_forms_test_advanced_commands_changed_asterisk_callback',
+        'callback' => [Callbacks::class, 'advancedCommandsChangedAsteriskCallback'],
       ],
     ];
 
@@ -125,7 +126,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#value' => $this->t("Set the '#box' div to be blue."),
       '#type' => 'submit',
       '#ajax' => [
-        'callback' => 'ajax_forms_test_advanced_commands_css_callback',
+        'callback' => [Callbacks::class, 'advancedCommandsCssCallback'],
       ],
       '#suffix' => '<div id="css_div" style="height: 50px; width: 50px; border: 1px solid black"> box</div>',
     ];
@@ -136,7 +137,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#value' => $this->t("AJAX data command: Issue command."),
       '#type' => 'submit',
       '#ajax' => [
-        'callback' => 'ajax_forms_test_advanced_commands_data_callback',
+        'callback' => [Callbacks::class, 'advancedCommandsDataCallback'],
       ],
       '#suffix' => '<div id="data_div">Data attached to this div.</div>',
     ];
@@ -146,7 +147,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#value' => $this->t("AJAX invoke command: Invoke addClass() method."),
       '#type' => 'submit',
       '#ajax' => [
-        'callback' => 'ajax_forms_test_advanced_commands_invoke_callback',
+        'callback' => [Callbacks::class, 'advancedCommandsHtmlCallback'],
       ],
       '#suffix' => '<div id="invoke_div">Original contents</div>',
     ];
@@ -156,7 +157,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#value' => $this->t("AJAX html: Replace the HTML in a selector."),
       '#type' => 'submit',
       '#ajax' => [
-        'callback' => 'ajax_forms_test_advanced_commands_html_callback',
+        'callback' => [Callbacks::class, 'advancedCommandsHtmlCallback'],
       ],
       '#suffix' => '<div id="html_div">Original contents</div>',
     ];
@@ -166,7 +167,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#value' => $this->t("AJAX insert: Let client insert based on #ajax['method']."),
       '#type' => 'submit',
       '#ajax' => [
-        'callback' => 'ajax_forms_test_advanced_commands_insert_callback',
+        'callback' => [Callbacks::class, 'advancedCommandsInsertCallback'],
         'method' => 'prepend',
       ],
       '#suffix' => '<div id="insert_div">Original contents</div>',
@@ -177,7 +178,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#value' => $this->t("AJAX 'prepend': Click to prepend something"),
       '#type' => 'submit',
       '#ajax' => [
-        'callback' => 'ajax_forms_test_advanced_commands_prepend_callback',
+        'callback' => [Callbacks::class, 'advancedCommandsPrependCallback'],
       ],
       '#suffix' => '<div id="prepend_div">Something will be prepended to this div. </div>',
     ];
@@ -187,7 +188,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#value' => $this->t("AJAX 'remove': Click to remove text"),
       '#type' => 'submit',
       '#ajax' => [
-        'callback' => 'ajax_forms_test_advanced_commands_remove_callback',
+        'callback' => [Callbacks::class, 'advancedCommandsRemoveCallback'],
       ],
       '#suffix' => '<div id="remove_div"><div id="remove_text">text to be removed</div></div>',
     ];
@@ -197,7 +198,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#type' => 'submit',
       '#value' => $this->t("AJAX 'restripe' command"),
       '#ajax' => [
-        'callback' => 'ajax_forms_test_advanced_commands_restripe_callback',
+        'callback' => [Callbacks::class, 'advancedCommandsRestripeCallback'],
       ],
       '#suffix' => '<div id="restripe_div">
                     <table id="restripe_table" style="border: 1px solid black" >
@@ -213,7 +214,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#type' => 'submit',
       '#value' => $this->t("AJAX 'settings' command"),
       '#ajax' => [
-        'callback' => 'ajax_forms_test_advanced_commands_settings_callback',
+        'callback' => [Callbacks::class, 'advancedCommandsSettingsCallback'],
       ],
     ];
 
@@ -222,7 +223,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#type' => 'submit',
       '#value' => $this->t("AJAX 'add_css' command"),
       '#ajax' => [
-        'callback' => 'ajax_forms_test_advanced_commands_add_css_callback',
+        'callback' => [Callbacks::class, 'advancedCommandsAddCssCallback'],
       ],
     ];
 
diff --git a/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestImageButtonForm.php b/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestImageButtonForm.php
index a3970f711d6e..40804d11cc71 100644
--- a/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestImageButtonForm.php
+++ b/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestImageButtonForm.php
@@ -26,7 +26,6 @@ public function getFormId() {
    * {@inheritdoc}
    */
   public function buildForm(array $form, FormStateInterface $form_state) {
-    $object = new Callbacks();
     $form['image_button'] = [
       '#type' => 'image_button',
       '#name' => 'image_button',
@@ -34,7 +33,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#attributes' => ['alt' => $this->t('Edit')],
       '#op' => 'edit',
       '#ajax' => [
-        'callback' => [$object, 'imageButtonCallback'],
+        'callback' => [Callbacks::class, 'imageButtonCallback'],
       ],
       '#suffix' => '<div id="ajax_image_button_result">Image button not pressed yet.</div>',
     ];
diff --git a/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestLazyLoadForm.php b/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestLazyLoadForm.php
index eb657a3f751f..49ffba1656e0 100644
--- a/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestLazyLoadForm.php
+++ b/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestLazyLoadForm.php
@@ -4,6 +4,7 @@
 
 namespace Drupal\ajax_forms_test\Form;
 
+use Drupal\ajax_forms_test\Callbacks;
 use Drupal\Core\Form\FormBase;
 use Drupal\Core\Form\FormStateInterface;
 
@@ -40,7 +41,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#value' => $this->t('Submit'),
       '#ajax' => [
         'wrapper' => 'ajax-forms-test-lazy-load-ajax-wrapper',
-        'callback' => 'ajax_forms_test_lazy_load_form_ajax',
+        'callback' => [Callbacks::class, 'lazyLoadFormAjax'],
       ],
       '#prefix' => '<div id="ajax-forms-test-lazy-load-ajax-wrapper"></div>',
     ];
diff --git a/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestSimpleForm.php b/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestSimpleForm.php
index 346afaabc577..1cd1478d8062 100644
--- a/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestSimpleForm.php
+++ b/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestSimpleForm.php
@@ -26,8 +26,6 @@ public function getFormId() {
    * {@inheritdoc}
    */
   public function buildForm(array $form, FormStateInterface $form_state) {
-    $object = new Callbacks();
-
     $form = [];
     $form['select'] = [
       '#title' => $this->t('Color'),
@@ -38,7 +36,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
         'blue' => 'blue',
       ],
       '#ajax' => [
-        'callback' => [$object, 'selectCallback'],
+        'callback' => [Callbacks::class, 'selectCallback'],
       ],
       '#suffix' => '<div id="ajax_selected_color">No color yet selected</div>',
     ];
@@ -47,7 +45,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#type' => 'checkbox',
       '#title' => $this->t('Test checkbox'),
       '#ajax' => [
-        'callback' => [$object, 'checkboxCallback'],
+        'callback' => [Callbacks::class, 'checkboxCallback'],
       ],
       '#suffix' => '<div id="ajax_checkbox_value">No action yet</div>',
     ];
@@ -87,7 +85,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
         '#type' => 'checkbox',
         '#title' => $this->t('AJAX checkbox in a group'),
         '#ajax' => [
-          'callback' => [$object, 'checkboxGroupCallback'],
+          'callback' => [Callbacks::class, 'checkboxGroupCallback'],
           'wrapper' => 'checkbox-wrapper',
         ],
       ],
@@ -101,7 +99,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
         '#group' => 'nested_group',
         '#title' => $this->t('AJAX checkbox in a nested group'),
         '#ajax' => [
-          'callback' => [$object, 'checkboxGroupCallback'],
+          'callback' => [Callbacks::class, 'checkboxGroupCallback'],
           'wrapper' => 'checkbox-wrapper',
         ],
       ],
diff --git a/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestValidationForm.php b/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestValidationForm.php
index f9a67ecd4f06..405f18206b3f 100644
--- a/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestValidationForm.php
+++ b/core/modules/system/tests/modules/ajax_forms_test/src/Form/AjaxFormsTestValidationForm.php
@@ -4,6 +4,7 @@
 
 namespace Drupal\ajax_forms_test\Form;
 
+use Drupal\ajax_forms_test\Callbacks;
 use Drupal\Core\Form\FormBase;
 use Drupal\Core\Form\FormStateInterface;
 
@@ -31,7 +32,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#type' => 'textfield',
       '#default_value' => $form_state->getValue('driver_text', ''),
       '#ajax' => [
-        'callback' => 'ajax_forms_test_validation_form_callback',
+        'callback' => [Callbacks::class, 'validationFormCallback'],
         'wrapper' => 'message_area',
         'method' => 'replaceWith',
       ],
@@ -44,7 +45,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
       '#type' => 'number',
       '#default_value' => $form_state->getValue('driver_number', ''),
       '#ajax' => [
-        'callback' => 'ajax_forms_test_validation_number_form_callback',
+        'callback' => [Callbacks::class, 'validationNumberFormCallback'],
         'wrapper' => 'message_area_number',
         'method' => 'replaceWith',
       ],
-- 
GitLab