From 24f259961c7df3425d1d497ab754632031f87619 Mon Sep 17 00:00:00 2001
From: Christian Kuhn <lolli@schwarzbu.ch>
Date: Thu, 16 Dec 2021 12:56:20 +0100
Subject: [PATCH] [!!!][TASK] Declare all ViewHelpers final
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

As anticipated in v11 with #95298, this patch
declares ViewHelper classes PHP final, third party
extensions can no longer extend core ViewHelpers.

There is one exception: The ext:fluid FormViewHelper,
which is currently extended by ext:form. This can't
be resolved easily since it's on one hand quite a bit
of code that would have to be copied, and more importantly,
the FormField* ViewHelpers refer to the "parent"
FormViewHelper class name in various places. Declaring
FormViewHelper final thus needs a different refactoring,
which may be done in v12 with further patches.

Resolves: #96368
Related: #95298
Releases: main
Change-Id: I7e8a587dadef4e411390710dd47e309cd2414e65
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/72671
Tested-by: core-ci <typo3@b13.com>
Tested-by: Stefan Bürk <stefan@buerk.tech>
Tested-by: Benni Mack <benni@typo3.org>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Stefan Bürk <stefan@buerk.tech>
Reviewed-by: Oliver Bartsch <bo@cedev.de>
Reviewed-by: Benni Mack <benni@typo3.org>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
---
 .../Classes/ViewHelpers/IsArrayViewHelper.php |   2 +-
 .../ViewHelpers/SubModuleRenderViewHelper.php |   2 +-
 .../ViewHelpers/ArrayBrowserViewHelper.php    |   2 +-
 .../Classes/ViewHelpers/AvatarViewHelper.php  |   2 +-
 .../ViewHelpers/LanguageColumnViewHelper.php  |   2 +-
 .../ViewHelpers/Link/EditRecordViewHelper.php |   2 +-
 .../ViewHelpers/Link/NewRecordViewHelper.php  |   2 +-
 .../ViewHelpers/Mfa/IfHasStateViewHelper.php  |   2 +-
 .../ViewHelpers/ModuleLinkViewHelper.php      |   2 +-
 .../ViewHelpers/ThumbnailViewHelper.php       |   2 +-
 .../ViewHelpers/Uri/EditRecordViewHelper.php  |   2 +-
 .../ViewHelpers/Uri/NewRecordViewHelper.php   |   2 +-
 .../ViewHelpers/Be/PagePathViewHelper.php     |   2 +-
 .../ViewHelpers/FormatDetailsViewHelper.php   |   2 +-
 .../ViewHelpers/UsernameViewHelper.php        |   2 +-
 .../ViewHelpers/WorkspaceTitleViewHelper.php  |   2 +-
 .../ViewHelpers/ArrayElementViewHelper.php    |   2 +-
 .../Display/TableAccessViewHelper.php         |   2 +-
 .../ViewHelpers/MfaStatusViewHelper.php       |   2 +-
 .../ViewHelpers/PermissionsViewHelper.php     |   2 +-
 .../SpriteIconForRecordViewHelper.php         |   2 +-
 .../ViewHelpers/SwitchUserViewHelper.php      |   2 +-
 .../Form/TypoScriptConstantsViewHelper.php    |   2 +-
 .../ViewHelpers/IconForRecordViewHelper.php   |   2 +-
 .../ViewHelpers/IconForResourceViewHelper.php |   2 +-
 .../Classes/ViewHelpers/IconViewHelper.php    |   2 +-
 .../ViewHelpers/NormalizedUrlViewHelper.php   |   2 +-
 ...g-96107-DeprecatedFunctionalityRemoved.rst |   3 +
 .../ViewHelpers/Widget/ButtonViewHelper.php   |   2 +-
 .../ViewHelpers/Be/TriggerViewHelper.php      |   2 +-
 .../ViewHelpers/ConstraintsViewHelper.php     |   2 +-
 .../DownloadExtensionViewHelper.php           |   2 +-
 .../InstallationStateCssClassViewHelper.php   |   2 +-
 .../ProcessAvailableActionsViewHelper.php     |   2 +-
 .../ViewHelpers/ReloadSqlDataViewHelper.php   |   2 +-
 .../ViewHelpers/RemoveExtensionViewHelper.php |   2 +-
 ...leExtensionInstallationStateViewHelper.php |   2 +-
 .../ViewHelpers/Typo3DependencyViewHelper.php |   2 +-
 .../ViewHelpers/Asset/CssViewHelper.php       |   2 +-
 .../ViewHelpers/Asset/ScriptViewHelper.php    |   2 +-
 .../ViewHelpers/Be/Buttons/CshViewHelper.php  |   2 +-
 .../ViewHelpers/Be/InfoboxViewHelper.php      |   2 +-
 .../ViewHelpers/Be/Labels/CshViewHelper.php   |   2 +-
 .../Classes/ViewHelpers/Be/LinkViewHelper.php |   2 +-
 .../Menus/ActionMenuItemGroupViewHelper.php   |  11 +-
 .../Be/Menus/ActionMenuItemViewHelper.php     |   2 +-
 .../Be/Menus/ActionMenuViewHelper.php         |   2 +-
 .../ViewHelpers/Be/PageInfoViewHelper.php     |   2 +-
 .../ViewHelpers/Be/PagePathViewHelper.php     |   2 +-
 .../ViewHelpers/Be/PageRendererViewHelper.php |   2 +-
 .../Be/Security/IfAuthenticatedViewHelper.php |   2 +-
 .../Be/Security/IfHasRoleViewHelper.php       |   2 +-
 .../ViewHelpers/Be/TableListViewHelper.php    |   2 +-
 .../Classes/ViewHelpers/Be/UriViewHelper.php  |   2 +-
 .../Classes/ViewHelpers/CObjectViewHelper.php |   2 +-
 .../ViewHelpers/Debug/RenderViewHelper.php    |   2 +-
 .../Classes/ViewHelpers/DebugViewHelper.php   |   2 +-
 .../ViewHelpers/FlashMessagesViewHelper.php   |   2 +-
 .../ViewHelpers/Form/ButtonViewHelper.php     |   2 +-
 .../ViewHelpers/Form/CheckboxViewHelper.php   |   2 +-
 .../ViewHelpers/Form/HiddenViewHelper.php     |   2 +-
 .../ViewHelpers/Form/PasswordViewHelper.php   |   2 +-
 .../ViewHelpers/Form/RadioViewHelper.php      |   2 +-
 .../Form/Select/OptgroupViewHelper.php        |   2 +-
 .../Form/Select/OptionViewHelper.php          |   2 +-
 .../ViewHelpers/Form/SelectViewHelper.php     |   2 +-
 .../ViewHelpers/Form/SubmitViewHelper.php     |   2 +-
 .../ViewHelpers/Form/TextareaViewHelper.php   |   2 +-
 .../ViewHelpers/Form/TextfieldViewHelper.php  |   2 +-
 .../ViewHelpers/Form/UploadViewHelper.php     |   2 +-
 .../Form/ValidationResultsViewHelper.php      |   2 +-
 .../ViewHelpers/Format/BytesViewHelper.php    |   2 +-
 .../ViewHelpers/Format/CaseViewHelper.php     |   2 +-
 .../ViewHelpers/Format/CropViewHelper.php     |   2 +-
 .../ViewHelpers/Format/CurrencyViewHelper.php |   2 +-
 .../ViewHelpers/Format/DateViewHelper.php     |   2 +-
 .../ViewHelpers/Format/HtmlViewHelper.php     |   2 +-
 .../Format/HtmlentitiesDecodeViewHelper.php   |   2 +-
 .../Format/HtmlentitiesViewHelper.php         |   2 +-
 .../ViewHelpers/Format/JsonViewHelper.php     |   2 +-
 .../ViewHelpers/Format/Nl2brViewHelper.php    |   2 +-
 .../ViewHelpers/Format/NumberViewHelper.php   |   2 +-
 .../ViewHelpers/Format/PaddingViewHelper.php  |   2 +-
 .../Format/StripTagsViewHelper.php            |   2 +-
 .../Format/UrlencodeViewHelper.php            |   2 +-
 .../Classes/ViewHelpers/ImageViewHelper.php   |   2 +-
 .../ViewHelpers/Link/ActionViewHelper.php     |   2 +-
 .../ViewHelpers/Link/EmailViewHelper.php      |   2 +-
 .../ViewHelpers/Link/ExternalViewHelper.php   |   2 +-
 .../ViewHelpers/Link/FileViewHelper.php       |   2 +-
 .../ViewHelpers/Link/PageViewHelper.php       |   2 +-
 .../ViewHelpers/Link/TypolinkViewHelper.php   |   2 +-
 .../Classes/ViewHelpers/MediaViewHelper.php   |   2 +-
 .../Classes/ViewHelpers/RenderViewHelper.php  |   2 +-
 .../ViewHelpers/Sanitize/HtmlViewHelper.php   |   2 +-
 .../Security/IfAuthenticatedViewHelper.php    |   2 +-
 .../Security/IfHasRoleViewHelper.php          |   2 +-
 .../ViewHelpers/Transform/HtmlViewHelper.php  |   2 +-
 .../ViewHelpers/TranslateViewHelper.php       |   2 +-
 .../ViewHelpers/Uri/ActionViewHelper.php      |   2 +-
 .../ViewHelpers/Uri/ExternalViewHelper.php    |   2 +-
 .../ViewHelpers/Uri/ImageViewHelper.php       |   2 +-
 .../ViewHelpers/Uri/PageViewHelper.php        |   2 +-
 .../ViewHelpers/Uri/ResourceViewHelper.php    |   2 +-
 .../ViewHelpers/Uri/TypolinkViewHelper.php    |   2 +-
 .../Link/TypolinkViewHelperTest.php           |  17 +-
 .../Uri/TypolinkViewHelperTest.php            |  18 +-
 .../Link/ClickEnlargeViewHelper.php           |   2 +-
 .../Be/MaximumFileSizeViewHelper.php          |   2 +-
 .../RenderContentElementPreviewViewHelper.php |   2 +-
 .../ViewHelpers/Form/DatePickerViewHelper.php |   2 +-
 .../ViewHelpers/Form/TimePickerViewHelper.php |   2 +-
 .../Form/UploadedResourceViewHelper.php       |   2 +-
 .../Classes/ViewHelpers/FormViewHelper.php    |   2 +-
 ...ColumnClassAutoConfigurationViewHelper.php |   2 +-
 .../RenderAllFormValuesViewHelper.php         |   2 +-
 .../ViewHelpers/RenderFormValueViewHelper.php |   2 +-
 .../RenderRenderableViewHelper.php            |   2 +-
 .../Classes/ViewHelpers/RenderViewHelper.php  |   2 +-
 .../TranslateElementErrorViewHelper.php       |   2 +-
 .../TranslateElementPropertyViewHelper.php    |   2 +-
 .../Form/DatePickerViewHelperTest.php         | 161 ++++++------------
 .../ViewHelpers/Format/DateTimeViewHelper.php |   2 +-
 .../Format/FlagValueViewHelper.php            |   2 +-
 .../Format/GroupListViewHelper.php            |   2 +-
 .../PageBrowsingResultsViewHelper.php         |   2 +-
 .../ViewHelpers/PageBrowsingViewHelper.php    |   2 +-
 .../ViewHelpers/Format/NoSpaceViewHelper.php  |   2 +-
 .../Format/PhpErrorCodeViewHelper.php         |   2 +-
 .../Classes/ViewHelpers/PhpInfoViewHelper.php |   2 +-
 .../ViewHelpers/Uri/ActionViewHelper.php      |   2 +-
 .../ViewHelpers/TargetPageIdViewHelper.php    |   2 +-
 132 files changed, 206 insertions(+), 258 deletions(-)

diff --git a/typo3/sysext/adminpanel/Classes/ViewHelpers/IsArrayViewHelper.php b/typo3/sysext/adminpanel/Classes/ViewHelpers/IsArrayViewHelper.php
index 9f5896a90e1b..cd857bcef591 100644
--- a/typo3/sysext/adminpanel/Classes/ViewHelpers/IsArrayViewHelper.php
+++ b/typo3/sysext/adminpanel/Classes/ViewHelpers/IsArrayViewHelper.php
@@ -25,7 +25,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
  *
  * @internal
  */
-class IsArrayViewHelper extends AbstractViewHelper
+final class IsArrayViewHelper extends AbstractViewHelper
 {
     public function initializeArguments()
     {
diff --git a/typo3/sysext/adminpanel/Classes/ViewHelpers/SubModuleRenderViewHelper.php b/typo3/sysext/adminpanel/Classes/ViewHelpers/SubModuleRenderViewHelper.php
index f3b7221c402a..57b725ed2c69 100644
--- a/typo3/sysext/adminpanel/Classes/ViewHelpers/SubModuleRenderViewHelper.php
+++ b/typo3/sysext/adminpanel/Classes/ViewHelpers/SubModuleRenderViewHelper.php
@@ -29,7 +29,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  * @internal
  */
-class SubModuleRenderViewHelper extends AbstractViewHelper
+final class SubModuleRenderViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/backend/Classes/ViewHelpers/ArrayBrowserViewHelper.php b/typo3/sysext/backend/Classes/ViewHelpers/ArrayBrowserViewHelper.php
index 534ed69b57a4..7d83c10bc7f4 100644
--- a/typo3/sysext/backend/Classes/ViewHelpers/ArrayBrowserViewHelper.php
+++ b/typo3/sysext/backend/Classes/ViewHelpers/ArrayBrowserViewHelper.php
@@ -27,7 +27,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  * Renders a given array as tree
  * @internal
  */
-class ArrayBrowserViewHelper extends AbstractViewHelper
+final class ArrayBrowserViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/backend/Classes/ViewHelpers/AvatarViewHelper.php b/typo3/sysext/backend/Classes/ViewHelpers/AvatarViewHelper.php
index a48d8949f501..f6a3cdd5cd59 100644
--- a/typo3/sysext/backend/Classes/ViewHelpers/AvatarViewHelper.php
+++ b/typo3/sysext/backend/Classes/ViewHelpers/AvatarViewHelper.php
@@ -60,7 +60,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *        </span>
  *    </span>
  */
-class AvatarViewHelper extends AbstractViewHelper
+final class AvatarViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/backend/Classes/ViewHelpers/LanguageColumnViewHelper.php b/typo3/sysext/backend/Classes/ViewHelpers/LanguageColumnViewHelper.php
index 66b811b65fd9..b38f0c6eaca6 100644
--- a/typo3/sysext/backend/Classes/ViewHelpers/LanguageColumnViewHelper.php
+++ b/typo3/sysext/backend/Classes/ViewHelpers/LanguageColumnViewHelper.php
@@ -21,7 +21,7 @@ use TYPO3\CMS\Backend\View\BackendLayout\Grid\GridColumn;
 use TYPO3\CMS\Backend\View\BackendLayout\Grid\LanguageColumn;
 use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
 
-class LanguageColumnViewHelper extends AbstractViewHelper
+final class LanguageColumnViewHelper extends AbstractViewHelper
 {
     public function initializeArguments()
     {
diff --git a/typo3/sysext/backend/Classes/ViewHelpers/Link/EditRecordViewHelper.php b/typo3/sysext/backend/Classes/ViewHelpers/Link/EditRecordViewHelper.php
index 1df6473ea2fa..2a8a1a58c87f 100644
--- a/typo3/sysext/backend/Classes/ViewHelpers/Link/EditRecordViewHelper.php
+++ b/typo3/sysext/backend/Classes/ViewHelpers/Link/EditRecordViewHelper.php
@@ -57,7 +57,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;
  *        Edit record
  *    </a>
  */
-class EditRecordViewHelper extends AbstractTagBasedViewHelper
+final class EditRecordViewHelper extends AbstractTagBasedViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/backend/Classes/ViewHelpers/Link/NewRecordViewHelper.php b/typo3/sysext/backend/Classes/ViewHelpers/Link/NewRecordViewHelper.php
index 9817edb4ac12..5325c4203432 100644
--- a/typo3/sysext/backend/Classes/ViewHelpers/Link/NewRecordViewHelper.php
+++ b/typo3/sysext/backend/Classes/ViewHelpers/Link/NewRecordViewHelper.php
@@ -93,7 +93,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;
  *        Edit record
  *    </a>
  */
-class NewRecordViewHelper extends AbstractTagBasedViewHelper
+final class NewRecordViewHelper extends AbstractTagBasedViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/backend/Classes/ViewHelpers/Mfa/IfHasStateViewHelper.php b/typo3/sysext/backend/Classes/ViewHelpers/Mfa/IfHasStateViewHelper.php
index c0d02e72780b..1def15e173b0 100644
--- a/typo3/sysext/backend/Classes/ViewHelpers/Mfa/IfHasStateViewHelper.php
+++ b/typo3/sysext/backend/Classes/ViewHelpers/Mfa/IfHasStateViewHelper.php
@@ -27,7 +27,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractConditionViewHelper;
  *
  * @internal
  */
-class IfHasStateViewHelper extends AbstractConditionViewHelper
+final class IfHasStateViewHelper extends AbstractConditionViewHelper
 {
     public function initializeArguments(): void
     {
diff --git a/typo3/sysext/backend/Classes/ViewHelpers/ModuleLinkViewHelper.php b/typo3/sysext/backend/Classes/ViewHelpers/ModuleLinkViewHelper.php
index 3f059c1582b0..6e0c1aad921f 100644
--- a/typo3/sysext/backend/Classes/ViewHelpers/ModuleLinkViewHelper.php
+++ b/typo3/sysext/backend/Classes/ViewHelpers/ModuleLinkViewHelper.php
@@ -42,7 +42,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *         <!-- form content -->
  *     </form>
  */
-class ModuleLinkViewHelper extends AbstractViewHelper
+final class ModuleLinkViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/backend/Classes/ViewHelpers/ThumbnailViewHelper.php b/typo3/sysext/backend/Classes/ViewHelpers/ThumbnailViewHelper.php
index bf44632c02d5..272d5b2a3b8f 100644
--- a/typo3/sysext/backend/Classes/ViewHelpers/ThumbnailViewHelper.php
+++ b/typo3/sysext/backend/Classes/ViewHelpers/ThumbnailViewHelper.php
@@ -59,7 +59,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Exception;
  *         alt="alt set in image record"
  *         title="title set in image record"/>
  */
-class ThumbnailViewHelper extends AbstractTagBasedViewHelper
+final class ThumbnailViewHelper extends AbstractTagBasedViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/backend/Classes/ViewHelpers/Uri/EditRecordViewHelper.php b/typo3/sysext/backend/Classes/ViewHelpers/Uri/EditRecordViewHelper.php
index d8802aa1bed8..c8e44cec5f13 100644
--- a/typo3/sysext/backend/Classes/ViewHelpers/Uri/EditRecordViewHelper.php
+++ b/typo3/sysext/backend/Classes/ViewHelpers/Uri/EditRecordViewHelper.php
@@ -46,7 +46,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  * ``<a href="/typo3/record/edit&edit[pages][42]=edit&returnUrl=foo/bar&columnsOnly=title,subtitle">``
  */
-class EditRecordViewHelper extends AbstractViewHelper
+final class EditRecordViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/backend/Classes/ViewHelpers/Uri/NewRecordViewHelper.php b/typo3/sysext/backend/Classes/ViewHelpers/Uri/NewRecordViewHelper.php
index 4bdf08ce234a..0197bf685402 100644
--- a/typo3/sysext/backend/Classes/ViewHelpers/Uri/NewRecordViewHelper.php
+++ b/typo3/sysext/backend/Classes/ViewHelpers/Uri/NewRecordViewHelper.php
@@ -69,7 +69,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  * ``/typo3/record/edit?edit[a_table][17]=new&returnUrl=foo/bar&defVals[a_table][a_field]=value``
  */
-class NewRecordViewHelper extends AbstractTagBasedViewHelper
+final class NewRecordViewHelper extends AbstractTagBasedViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/belog/Classes/ViewHelpers/Be/PagePathViewHelper.php b/typo3/sysext/belog/Classes/ViewHelpers/Be/PagePathViewHelper.php
index e0926f4ab19e..7c02562ce194 100644
--- a/typo3/sysext/belog/Classes/ViewHelpers/Be/PagePathViewHelper.php
+++ b/typo3/sysext/belog/Classes/ViewHelpers/Be/PagePathViewHelper.php
@@ -23,7 +23,7 @@ use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
  * Get page path string from page id
  * @internal
  */
-class PagePathViewHelper extends AbstractBackendViewHelper
+final class PagePathViewHelper extends AbstractBackendViewHelper
 {
     /**
      * Initializes the arguments
diff --git a/typo3/sysext/belog/Classes/ViewHelpers/FormatDetailsViewHelper.php b/typo3/sysext/belog/Classes/ViewHelpers/FormatDetailsViewHelper.php
index b01312f9610e..28bfa4c6fbbb 100644
--- a/typo3/sysext/belog/Classes/ViewHelpers/FormatDetailsViewHelper.php
+++ b/typo3/sysext/belog/Classes/ViewHelpers/FormatDetailsViewHelper.php
@@ -25,7 +25,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  * Create detail string from log entry
  * @internal
  */
-class FormatDetailsViewHelper extends AbstractViewHelper
+final class FormatDetailsViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/belog/Classes/ViewHelpers/UsernameViewHelper.php b/typo3/sysext/belog/Classes/ViewHelpers/UsernameViewHelper.php
index 8261ff4479df..c0b7e50b8a7a 100644
--- a/typo3/sysext/belog/Classes/ViewHelpers/UsernameViewHelper.php
+++ b/typo3/sysext/belog/Classes/ViewHelpers/UsernameViewHelper.php
@@ -24,7 +24,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  * Get username from backend user id
  * @internal
  */
-class UsernameViewHelper extends AbstractViewHelper
+final class UsernameViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/belog/Classes/ViewHelpers/WorkspaceTitleViewHelper.php b/typo3/sysext/belog/Classes/ViewHelpers/WorkspaceTitleViewHelper.php
index 7e158faf5b91..f4756ebae25b 100644
--- a/typo3/sysext/belog/Classes/ViewHelpers/WorkspaceTitleViewHelper.php
+++ b/typo3/sysext/belog/Classes/ViewHelpers/WorkspaceTitleViewHelper.php
@@ -27,7 +27,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  * Get workspace title from workspace id
  * @internal
  */
-class WorkspaceTitleViewHelper extends AbstractViewHelper
+final class WorkspaceTitleViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/beuser/Classes/ViewHelpers/ArrayElementViewHelper.php b/typo3/sysext/beuser/Classes/ViewHelpers/ArrayElementViewHelper.php
index 08b90c98fd2d..9de7420eab2a 100644
--- a/typo3/sysext/beuser/Classes/ViewHelpers/ArrayElementViewHelper.php
+++ b/typo3/sysext/beuser/Classes/ViewHelpers/ArrayElementViewHelper.php
@@ -24,7 +24,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  * Get a value from an array by given key.
  * @internal
  */
-class ArrayElementViewHelper extends AbstractViewHelper
+final class ArrayElementViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/beuser/Classes/ViewHelpers/Display/TableAccessViewHelper.php b/typo3/sysext/beuser/Classes/ViewHelpers/Display/TableAccessViewHelper.php
index 0d27611b8b47..c88c0477ac4e 100644
--- a/typo3/sysext/beuser/Classes/ViewHelpers/Display/TableAccessViewHelper.php
+++ b/typo3/sysext/beuser/Classes/ViewHelpers/Display/TableAccessViewHelper.php
@@ -20,7 +20,7 @@ namespace TYPO3\CMS\Beuser\ViewHelpers\Display;
 use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
 use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractConditionViewHelper;
 
-class TableAccessViewHelper extends AbstractConditionViewHelper
+final class TableAccessViewHelper extends AbstractConditionViewHelper
 {
     public function initializeArguments(): void
     {
diff --git a/typo3/sysext/beuser/Classes/ViewHelpers/MfaStatusViewHelper.php b/typo3/sysext/beuser/Classes/ViewHelpers/MfaStatusViewHelper.php
index 2a0af6a5d3aa..c13523469b4d 100644
--- a/typo3/sysext/beuser/Classes/ViewHelpers/MfaStatusViewHelper.php
+++ b/typo3/sysext/beuser/Classes/ViewHelpers/MfaStatusViewHelper.php
@@ -28,7 +28,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;
  *
  * @internal
  */
-class MfaStatusViewHelper extends AbstractTagBasedViewHelper
+final class MfaStatusViewHelper extends AbstractTagBasedViewHelper
 {
     protected $tagName = 'span';
 
diff --git a/typo3/sysext/beuser/Classes/ViewHelpers/PermissionsViewHelper.php b/typo3/sysext/beuser/Classes/ViewHelpers/PermissionsViewHelper.php
index 5ba08fcfd270..090f5e40a584 100644
--- a/typo3/sysext/beuser/Classes/ViewHelpers/PermissionsViewHelper.php
+++ b/typo3/sysext/beuser/Classes/ViewHelpers/PermissionsViewHelper.php
@@ -27,7 +27,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  * is much better performance wise.
  * @internal
  */
-class PermissionsViewHelper extends AbstractViewHelper
+final class PermissionsViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/beuser/Classes/ViewHelpers/SpriteIconForRecordViewHelper.php b/typo3/sysext/beuser/Classes/ViewHelpers/SpriteIconForRecordViewHelper.php
index 0d9b76cad0c9..55cef6b1a4aa 100644
--- a/typo3/sysext/beuser/Classes/ViewHelpers/SpriteIconForRecordViewHelper.php
+++ b/typo3/sysext/beuser/Classes/ViewHelpers/SpriteIconForRecordViewHelper.php
@@ -25,7 +25,7 @@ use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
  * Views sprite icon for a record (object)
  * @internal
  */
-class SpriteIconForRecordViewHelper extends AbstractBackendViewHelper
+final class SpriteIconForRecordViewHelper extends AbstractBackendViewHelper
 {
     /**
      * As this ViewHelper renders HTML, the output must not be escaped.
diff --git a/typo3/sysext/beuser/Classes/ViewHelpers/SwitchUserViewHelper.php b/typo3/sysext/beuser/Classes/ViewHelpers/SwitchUserViewHelper.php
index c83f197575f5..efd0afa4b6ff 100644
--- a/typo3/sysext/beuser/Classes/ViewHelpers/SwitchUserViewHelper.php
+++ b/typo3/sysext/beuser/Classes/ViewHelpers/SwitchUserViewHelper.php
@@ -29,7 +29,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  * Displays 'SwitchUser' button to change current backend user to target backend user
  * @internal
  */
-class SwitchUserViewHelper extends AbstractViewHelper
+final class SwitchUserViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/core/Classes/ViewHelpers/Form/TypoScriptConstantsViewHelper.php b/typo3/sysext/core/Classes/ViewHelpers/Form/TypoScriptConstantsViewHelper.php
index 2a2d28172025..89ea8a36356e 100644
--- a/typo3/sysext/core/Classes/ViewHelpers/Form/TypoScriptConstantsViewHelper.php
+++ b/typo3/sysext/core/Classes/ViewHelpers/Form/TypoScriptConstantsViewHelper.php
@@ -30,7 +30,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\TagBuilder;
  *
  * @internal
  */
-class TypoScriptConstantsViewHelper extends AbstractTagBasedViewHelper
+final class TypoScriptConstantsViewHelper extends AbstractTagBasedViewHelper
 {
     /**
      * @var array
diff --git a/typo3/sysext/core/Classes/ViewHelpers/IconForRecordViewHelper.php b/typo3/sysext/core/Classes/ViewHelpers/IconForRecordViewHelper.php
index 00c69df660ca..8a651df6c2b4 100644
--- a/typo3/sysext/core/Classes/ViewHelpers/IconForRecordViewHelper.php
+++ b/typo3/sysext/core/Classes/ViewHelpers/IconForRecordViewHelper.php
@@ -40,7 +40,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *         </span>
  *     </span>
  */
-class IconForRecordViewHelper extends AbstractViewHelper
+final class IconForRecordViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/core/Classes/ViewHelpers/IconForResourceViewHelper.php b/typo3/sysext/core/Classes/ViewHelpers/IconForResourceViewHelper.php
index 32cfc3694538..79d382e8d5cb 100644
--- a/typo3/sysext/core/Classes/ViewHelpers/IconForResourceViewHelper.php
+++ b/typo3/sysext/core/Classes/ViewHelpers/IconForResourceViewHelper.php
@@ -43,7 +43,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *         </span>
  *     </span>
  */
-class IconForResourceViewHelper extends AbstractViewHelper
+final class IconForResourceViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/core/Classes/ViewHelpers/IconViewHelper.php b/typo3/sysext/core/Classes/ViewHelpers/IconViewHelper.php
index 3dc06e903fe9..619a5c71e245 100644
--- a/typo3/sysext/core/Classes/ViewHelpers/IconViewHelper.php
+++ b/typo3/sysext/core/Classes/ViewHelpers/IconViewHelper.php
@@ -53,7 +53,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *         </span>
  *     </span>
  */
-class IconViewHelper extends AbstractViewHelper
+final class IconViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/core/Classes/ViewHelpers/NormalizedUrlViewHelper.php b/typo3/sysext/core/Classes/ViewHelpers/NormalizedUrlViewHelper.php
index 8b3cd1370f86..203318150e36 100644
--- a/typo3/sysext/core/Classes/ViewHelpers/NormalizedUrlViewHelper.php
+++ b/typo3/sysext/core/Classes/ViewHelpers/NormalizedUrlViewHelper.php
@@ -46,7 +46,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithContentArgumentAndRenderS
  *     /typo3/sysext/core/Resources/Public/Images/typo3_black.svg
  * @internal
  */
-class NormalizedUrlViewHelper extends AbstractViewHelper
+final class NormalizedUrlViewHelper extends AbstractViewHelper
 {
     use CompileWithContentArgumentAndRenderStatic;
 
diff --git a/typo3/sysext/core/Documentation/Changelog/12.0/Breaking-96107-DeprecatedFunctionalityRemoved.rst b/typo3/sysext/core/Documentation/Changelog/12.0/Breaking-96107-DeprecatedFunctionalityRemoved.rst
index e42cb494c32a..6b93ff9d45aa 100644
--- a/typo3/sysext/core/Documentation/Changelog/12.0/Breaking-96107-DeprecatedFunctionalityRemoved.rst
+++ b/typo3/sysext/core/Documentation/Changelog/12.0/Breaking-96107-DeprecatedFunctionalityRemoved.rst
@@ -49,6 +49,9 @@ The following PHP classes that have previously been marked as deprecated for v11
 - :php:`\TYPO3\CMS\Extbase\SignalSlot\Exception\InvalidSlotReturnException`
 - :php:`\TYPO3\CMS\Frontend\ContentObject\EditPanelContentObject`
 
+The following PHP classes have been declared final:
+- All fluid ViewHelpers
+
 The following PHP interfaces that have previously been marked as deprecated for v11 and were now removed:
 
 - :php:`\TYPO3\CMS\Backend\Toolbar\ClearCacheActionsHookInterface`
diff --git a/typo3/sysext/dashboard/Classes/ViewHelpers/Widget/ButtonViewHelper.php b/typo3/sysext/dashboard/Classes/ViewHelpers/Widget/ButtonViewHelper.php
index 0bbcca596c2b..ba29b697c9e7 100644
--- a/typo3/sysext/dashboard/Classes/ViewHelpers/Widget/ButtonViewHelper.php
+++ b/typo3/sysext/dashboard/Classes/ViewHelpers/Widget/ButtonViewHelper.php
@@ -35,7 +35,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;
  *        {f:translate(id: button.title, default: button.title)}
  *    </dashboard:widget.button button="{button}" class="widget-cta">
  */
-class ButtonViewHelper extends AbstractTagBasedViewHelper
+final class ButtonViewHelper extends AbstractTagBasedViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/extensionmanager/Classes/ViewHelpers/Be/TriggerViewHelper.php b/typo3/sysext/extensionmanager/Classes/ViewHelpers/Be/TriggerViewHelper.php
index fd5b9b8f6a58..a4fc806e8e35 100644
--- a/typo3/sysext/extensionmanager/Classes/ViewHelpers/Be/TriggerViewHelper.php
+++ b/typo3/sysext/extensionmanager/Classes/ViewHelpers/Be/TriggerViewHelper.php
@@ -33,7 +33,7 @@ use TYPO3\CMS\Fluid\ViewHelpers\Be\AbstractBackendViewHelper;
  *
  * @internal
  */
-class TriggerViewHelper extends AbstractBackendViewHelper
+final class TriggerViewHelper extends AbstractBackendViewHelper
 {
     /**
      * @var bool
diff --git a/typo3/sysext/extensionmanager/Classes/ViewHelpers/ConstraintsViewHelper.php b/typo3/sysext/extensionmanager/Classes/ViewHelpers/ConstraintsViewHelper.php
index cd4972791212..7bf131320241 100644
--- a/typo3/sysext/extensionmanager/Classes/ViewHelpers/ConstraintsViewHelper.php
+++ b/typo3/sysext/extensionmanager/Classes/ViewHelpers/ConstraintsViewHelper.php
@@ -28,7 +28,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
  *
  * @internal
  */
-class ConstraintsViewHelper extends AbstractViewHelper
+final class ConstraintsViewHelper extends AbstractViewHelper
 {
     public function initializeArguments(): void
     {
diff --git a/typo3/sysext/extensionmanager/Classes/ViewHelpers/DownloadExtensionViewHelper.php b/typo3/sysext/extensionmanager/Classes/ViewHelpers/DownloadExtensionViewHelper.php
index 24a1d8990bc9..d6d1e6a086f0 100644
--- a/typo3/sysext/extensionmanager/Classes/ViewHelpers/DownloadExtensionViewHelper.php
+++ b/typo3/sysext/extensionmanager/Classes/ViewHelpers/DownloadExtensionViewHelper.php
@@ -27,7 +27,7 @@ use TYPO3\CMS\Fluid\ViewHelpers\Form\AbstractFormViewHelper;
  * ViewHelper
  * @internal
  */
-class DownloadExtensionViewHelper extends AbstractFormViewHelper
+final class DownloadExtensionViewHelper extends AbstractFormViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/extensionmanager/Classes/ViewHelpers/InstallationStateCssClassViewHelper.php b/typo3/sysext/extensionmanager/Classes/ViewHelpers/InstallationStateCssClassViewHelper.php
index 4392845b6be1..e19bbf0184ed 100644
--- a/typo3/sysext/extensionmanager/Classes/ViewHelpers/InstallationStateCssClassViewHelper.php
+++ b/typo3/sysext/extensionmanager/Classes/ViewHelpers/InstallationStateCssClassViewHelper.php
@@ -24,7 +24,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  * available or installed
  * @internal
  */
-class InstallationStateCssClassViewHelper extends AbstractViewHelper
+final class InstallationStateCssClassViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/extensionmanager/Classes/ViewHelpers/ProcessAvailableActionsViewHelper.php b/typo3/sysext/extensionmanager/Classes/ViewHelpers/ProcessAvailableActionsViewHelper.php
index 5c8044004fc3..8f157adf68bf 100644
--- a/typo3/sysext/extensionmanager/Classes/ViewHelpers/ProcessAvailableActionsViewHelper.php
+++ b/typo3/sysext/extensionmanager/Classes/ViewHelpers/ProcessAvailableActionsViewHelper.php
@@ -24,7 +24,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;
  * actions for a given extension.
  * @internal
  */
-class ProcessAvailableActionsViewHelper extends AbstractTagBasedViewHelper
+final class ProcessAvailableActionsViewHelper extends AbstractTagBasedViewHelper
 {
     /**
      * @var EventDispatcherInterface
diff --git a/typo3/sysext/extensionmanager/Classes/ViewHelpers/ReloadSqlDataViewHelper.php b/typo3/sysext/extensionmanager/Classes/ViewHelpers/ReloadSqlDataViewHelper.php
index 7745e3a4a301..13bf760bdfd6 100644
--- a/typo3/sysext/extensionmanager/Classes/ViewHelpers/ReloadSqlDataViewHelper.php
+++ b/typo3/sysext/extensionmanager/Classes/ViewHelpers/ReloadSqlDataViewHelper.php
@@ -28,7 +28,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;
  * ViewHelper for update script link
  * @internal
  */
-class ReloadSqlDataViewHelper extends AbstractTagBasedViewHelper
+final class ReloadSqlDataViewHelper extends AbstractTagBasedViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/extensionmanager/Classes/ViewHelpers/RemoveExtensionViewHelper.php b/typo3/sysext/extensionmanager/Classes/ViewHelpers/RemoveExtensionViewHelper.php
index 2d9543f6173c..d6ce241b3541 100644
--- a/typo3/sysext/extensionmanager/Classes/ViewHelpers/RemoveExtensionViewHelper.php
+++ b/typo3/sysext/extensionmanager/Classes/ViewHelpers/RemoveExtensionViewHelper.php
@@ -28,7 +28,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;
  * ViewHelper for displaying a remove extension link
  * @internal
  */
-class RemoveExtensionViewHelper extends AbstractTagBasedViewHelper
+final class RemoveExtensionViewHelper extends AbstractTagBasedViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/extensionmanager/Classes/ViewHelpers/ToggleExtensionInstallationStateViewHelper.php b/typo3/sysext/extensionmanager/Classes/ViewHelpers/ToggleExtensionInstallationStateViewHelper.php
index dbc7921b135b..98cc6eb69b22 100644
--- a/typo3/sysext/extensionmanager/Classes/ViewHelpers/ToggleExtensionInstallationStateViewHelper.php
+++ b/typo3/sysext/extensionmanager/Classes/ViewHelpers/ToggleExtensionInstallationStateViewHelper.php
@@ -28,7 +28,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;
  * Display a deactivate / activate link
  * @internal
  */
-class ToggleExtensionInstallationStateViewHelper extends AbstractTagBasedViewHelper
+final class ToggleExtensionInstallationStateViewHelper extends AbstractTagBasedViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/extensionmanager/Classes/ViewHelpers/Typo3DependencyViewHelper.php b/typo3/sysext/extensionmanager/Classes/ViewHelpers/Typo3DependencyViewHelper.php
index fb19c454d0a1..bb01b5b81cdf 100644
--- a/typo3/sysext/extensionmanager/Classes/ViewHelpers/Typo3DependencyViewHelper.php
+++ b/typo3/sysext/extensionmanager/Classes/ViewHelpers/Typo3DependencyViewHelper.php
@@ -28,7 +28,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  * @internal
  */
-class Typo3DependencyViewHelper extends AbstractViewHelper
+final class Typo3DependencyViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Asset/CssViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Asset/CssViewHelper.php
index 2fb77122b21a..efb0082bfe42 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Asset/CssViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Asset/CssViewHelper.php
@@ -36,7 +36,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\TagBuilder;
  *
  * See also :ref:`_changelog-Feature-90522-IntroduceAssetCollector`
  */
-class CssViewHelper extends AbstractTagBasedViewHelper
+final class CssViewHelper extends AbstractTagBasedViewHelper
 {
     /**
      * This VH does not produce direct output, thus does not need to be wrapped in an escaping node
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Asset/ScriptViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Asset/ScriptViewHelper.php
index 280d84c99aa7..e5e1d0dc8dbc 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Asset/ScriptViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Asset/ScriptViewHelper.php
@@ -34,7 +34,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\TagBuilder;
  *       alert('hello world');
  *    </f:asset.script>
  */
-class ScriptViewHelper extends AbstractTagBasedViewHelper
+final class ScriptViewHelper extends AbstractTagBasedViewHelper
 {
     /**
      * This VH does not produce direct output, thus does not need to be wrapped in an escaping node
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Be/Buttons/CshViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Be/Buttons/CshViewHelper.php
index 671e1046529f..1058c0ffa1d6 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Be/Buttons/CshViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Be/Buttons/CshViewHelper.php
@@ -53,7 +53,7 @@ use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
  *
  * A link with text "some text to link" to link the help.
  */
-class CshViewHelper extends AbstractBackendViewHelper
+final class CshViewHelper extends AbstractBackendViewHelper
 {
     /**
      * As this ViewHelper renders HTML, the output must not be escaped.
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Be/InfoboxViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Be/InfoboxViewHelper.php
index ac1d445ecf04..1befafaf684d 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Be/InfoboxViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Be/InfoboxViewHelper.php
@@ -55,7 +55,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithContentArgumentAndRenderS
  *
  *    <f:be.infobox title="Message title" message="your box content" state="-2" iconName="check" disableIcon="true" />
  */
-class InfoboxViewHelper extends AbstractViewHelper
+final class InfoboxViewHelper extends AbstractViewHelper
 {
     use CompileWithContentArgumentAndRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Be/Labels/CshViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Be/Labels/CshViewHelper.php
index e06211deb7ef..24ea02a59ca4 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Be/Labels/CshViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Be/Labels/CshViewHelper.php
@@ -46,7 +46,7 @@ use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
  *
  * CSH label as known from the TYPO3 backend with some custom settings.
  */
-class CshViewHelper extends AbstractBackendViewHelper
+final class CshViewHelper extends AbstractBackendViewHelper
 {
     /**
      * As this ViewHelper renders HTML, the output must not be escaped.
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Be/LinkViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Be/LinkViewHelper.php
index 20c506326e56..e4a4b4d8ac7a 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Be/LinkViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Be/LinkViewHelper.php
@@ -31,7 +31,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;
  *
  * ``<a href="/typo3/module/web/ts?token=b6e9c9f&id=92">Go to web_ts</a>``
  */
-class LinkViewHelper extends AbstractTagBasedViewHelper
+final class LinkViewHelper extends AbstractTagBasedViewHelper
 {
 
     /**
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Be/Menus/ActionMenuItemGroupViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Be/Menus/ActionMenuItemGroupViewHelper.php
index 3ff7e23e731d..8b1047c75334 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Be/Menus/ActionMenuItemGroupViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Be/Menus/ActionMenuItemGroupViewHelper.php
@@ -16,6 +16,7 @@
 namespace TYPO3\CMS\Fluid\ViewHelpers\Be\Menus;
 
 use TYPO3Fluid\Fluid\Core\Parser\SyntaxTree\ViewHelperNode;
+use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;
 
 /**
  * ViewHelper which groups options of an option tag.
@@ -38,13 +39,20 @@ use TYPO3Fluid\Fluid\Core\Parser\SyntaxTree\ViewHelperNode;
  *      </f:be.menus.actionMenuItemGroup>
  *  </f:be.menus.actionMenu>
  */
-class ActionMenuItemGroupViewHelper extends ActionMenuViewHelper
+final class ActionMenuItemGroupViewHelper extends AbstractTagBasedViewHelper
 {
     /**
      * @var string
      */
     protected $tagName = 'optgroup';
 
+    /**
+     * An array of \TYPO3\CMS\Fluid\Core\Parser\SyntaxTree\AbstractNode
+     *
+     * @var array
+     */
+    protected $childNodes = [];
+
     /**
      * Initialize arguments.
      *
@@ -53,6 +61,7 @@ class ActionMenuItemGroupViewHelper extends ActionMenuViewHelper
     public function initializeArguments()
     {
         parent::initializeArguments();
+        $this->registerArgument('defaultController', 'string', 'The default controller to be used');
         $this->registerArgument('label', 'string', 'The label of the option group', false, '');
     }
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Be/Menus/ActionMenuItemViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Be/Menus/ActionMenuItemViewHelper.php
index d46439d732f2..40daa1b6bfd1 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Be/Menus/ActionMenuItemViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Be/Menus/ActionMenuItemViewHelper.php
@@ -49,7 +49,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;
  *
  * Localized selectbox.
  */
-class ActionMenuItemViewHelper extends AbstractTagBasedViewHelper
+final class ActionMenuItemViewHelper extends AbstractTagBasedViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Be/Menus/ActionMenuViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Be/Menus/ActionMenuViewHelper.php
index 6de1beb7dd14..270efe7396c8 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Be/Menus/ActionMenuViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Be/Menus/ActionMenuViewHelper.php
@@ -51,7 +51,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;
  *
  * Localized selectbox.
  */
-class ActionMenuViewHelper extends AbstractTagBasedViewHelper
+final class ActionMenuViewHelper extends AbstractTagBasedViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Be/PageInfoViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Be/PageInfoViewHelper.php
index d91c1db0cbea..f141859dce61 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Be/PageInfoViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Be/PageInfoViewHelper.php
@@ -37,7 +37,7 @@ use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
  *
  * Page info icon with context menu
  */
-class PageInfoViewHelper extends AbstractBackendViewHelper
+final class PageInfoViewHelper extends AbstractBackendViewHelper
 {
 
     /**
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Be/PagePathViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Be/PagePathViewHelper.php
index 581525dc3507..f8a0da5827d8 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Be/PagePathViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Be/PagePathViewHelper.php
@@ -36,7 +36,7 @@ use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
  *
  * Current page path, prefixed with "Path:" and wrapped in a span with the class ``typo3-docheader-pagePath``.
  */
-class PagePathViewHelper extends AbstractBackendViewHelper
+final class PagePathViewHelper extends AbstractBackendViewHelper
 {
 
     /**
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Be/PageRendererViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Be/PageRendererViewHelper.php
index 3c5d1977a1c8..3dbd66153905 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Be/PageRendererViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Be/PageRendererViewHelper.php
@@ -40,7 +40,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  * :file:`EXT:your_extension/Resources/Public/JavaScript/Library2.js`
  * will be loaded, plus some inline labels for usage in JS code.
  */
-class PageRendererViewHelper extends AbstractViewHelper
+final class PageRendererViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Be/Security/IfAuthenticatedViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Be/Security/IfAuthenticatedViewHelper.php
index 4936876dbe9c..44cd67206420 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Be/Security/IfAuthenticatedViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Be/Security/IfAuthenticatedViewHelper.php
@@ -47,7 +47,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractConditionViewHelper;
  * Everything inside the :html:`<f:then></f:then>` is displayed the backend user is logged in.
  * :html:`<f:else></f:else>` is displayed if no backend user is logged in.
  */
-class IfAuthenticatedViewHelper extends AbstractConditionViewHelper
+final class IfAuthenticatedViewHelper extends AbstractConditionViewHelper
 {
     /**
      * This method decides if the condition is TRUE or FALSE. It can be overridden in extending viewhelpers to adjust functionality.
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Be/Security/IfHasRoleViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Be/Security/IfHasRoleViewHelper.php
index 77a6492144d0..e6e852708695 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Be/Security/IfHasRoleViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Be/Security/IfHasRoleViewHelper.php
@@ -60,7 +60,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractConditionViewHelper;
  * logged in backend user belongs to the specified backend group.
  * Otherwise, everything inside the :html:`<f:else></f:else>` tag is displayed.
  */
-class IfHasRoleViewHelper extends AbstractConditionViewHelper
+final class IfHasRoleViewHelper extends AbstractConditionViewHelper
 {
     /**
      * Initializes the "role" argument.
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Be/TableListViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Be/TableListViewHelper.php
index 854eb937cebc..c243bf07efcf 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Be/TableListViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Be/TableListViewHelper.php
@@ -60,7 +60,7 @@ use TYPO3\CMS\Recordlist\RecordList\DatabaseRecordList;
  * List of "Website user" records with a text property of ``foo`` stored on PID ``1`` and two levels down.
  * Clicking on a username will open the TYPO3 info popup for the respective record
  */
-class TableListViewHelper extends AbstractBackendViewHelper
+final class TableListViewHelper extends AbstractBackendViewHelper
 {
     /**
      * As this ViewHelper renders HTML, the output must not be escaped.
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Be/UriViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Be/UriViewHelper.php
index 3b566e465ab7..cfbc05705c2a 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Be/UriViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Be/UriViewHelper.php
@@ -36,7 +36,7 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
  *
  * ``/typo3/module/web/ts?token=b6e9c9f&id=92``
  */
-class UriViewHelper extends AbstractBackendViewHelper
+final class UriViewHelper extends AbstractBackendViewHelper
 {
 
     /**
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/CObjectViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/CObjectViewHelper.php
index aa108c5f8dae..50e4978d0a8c 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/CObjectViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/CObjectViewHelper.php
@@ -85,7 +85,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithContentArgumentAndRenderS
  * TypoScript. If only a single value is passed or the ``currentValueKey`` is specified, :ts:`.current = 1`
  * can be used in the TypoScript.
  */
-class CObjectViewHelper extends AbstractViewHelper
+final class CObjectViewHelper extends AbstractViewHelper
 {
     use CompileWithContentArgumentAndRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Debug/RenderViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Debug/RenderViewHelper.php
index 5b3282814084..f333c4c0a5e1 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Debug/RenderViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Debug/RenderViewHelper.php
@@ -28,7 +28,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
  * :php:`ViewHelperResolver` class). Also possible to use explicitly by using
  * ``f:debug.render`` instead of the normal ``f:render`` statement.
  */
-class RenderViewHelper extends AbstractViewHelper
+final class RenderViewHelper extends AbstractViewHelper
 {
 
     /**
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/DebugViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/DebugViewHelper.php
index 9442b788393f..561ce70b535a 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/DebugViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/DebugViewHelper.php
@@ -51,7 +51,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  * [A HTML view of the var_dump]
  */
-class DebugViewHelper extends AbstractViewHelper
+final class DebugViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/FlashMessagesViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/FlashMessagesViewHelper.php
index 04a2691c5ea8..efcf1f49969d 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/FlashMessagesViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/FlashMessagesViewHelper.php
@@ -94,7 +94,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  *    <f:flashMessages queueIdentifier="myQueue" />
  */
-class FlashMessagesViewHelper extends AbstractViewHelper
+final class FlashMessagesViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Form/ButtonViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Form/ButtonViewHelper.php
index f4773f3e3653..12c1beba6fa9 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Form/ButtonViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Form/ButtonViewHelper.php
@@ -42,7 +42,7 @@ namespace TYPO3\CMS\Fluid\ViewHelpers\Form;
  *
  *    <button disabled="disabled" formmethod="post" formnovalidate="formnovalidate" type="reset" name="myForm[buttonName]" value="buttonValue">Cancel</button>
  */
-class ButtonViewHelper extends AbstractFormFieldViewHelper
+final class ButtonViewHelper extends AbstractFormFieldViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Form/CheckboxViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Form/CheckboxViewHelper.php
index 93b1096de62b..220c2799c684 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Form/CheckboxViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Form/CheckboxViewHelper.php
@@ -58,7 +58,7 @@ namespace TYPO3\CMS\Fluid\ViewHelpers\Form;
  *
  * Depending on property ``interests``.
  */
-class CheckboxViewHelper extends AbstractFormFieldViewHelper
+final class CheckboxViewHelper extends AbstractFormFieldViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Form/HiddenViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Form/HiddenViewHelper.php
index 48f156f81a24..626a3127369d 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Form/HiddenViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Form/HiddenViewHelper.php
@@ -32,7 +32,7 @@ namespace TYPO3\CMS\Fluid\ViewHelpers\Form;
  * You can also use the "property" attribute if you have bound an object to the form.
  * See :ref:`<f:form> <typo3-fluid-form>` for more documentation.
  */
-class HiddenViewHelper extends AbstractFormFieldViewHelper
+final class HiddenViewHelper extends AbstractFormFieldViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Form/PasswordViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Form/PasswordViewHelper.php
index fb7b112c3c4f..f916eadc6e2b 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Form/PasswordViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Form/PasswordViewHelper.php
@@ -29,7 +29,7 @@ namespace TYPO3\CMS\Fluid\ViewHelpers\Form;
  *
  *    <input type="password" name="myPassword" value="default value" />
  */
-class PasswordViewHelper extends AbstractFormFieldViewHelper
+final class PasswordViewHelper extends AbstractFormFieldViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Form/RadioViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Form/RadioViewHelper.php
index f3b707abf8ea..77516549a230 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Form/RadioViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Form/RadioViewHelper.php
@@ -60,7 +60,7 @@ namespace TYPO3\CMS\Fluid\ViewHelpers\Form;
  *
  * Depending on property ``newsletter``.
  */
-class RadioViewHelper extends AbstractFormFieldViewHelper
+final class RadioViewHelper extends AbstractFormFieldViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Form/Select/OptgroupViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Form/Select/OptgroupViewHelper.php
index f5193027262e..39e98639642b 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Form/Select/OptgroupViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Form/Select/OptgroupViewHelper.php
@@ -21,7 +21,7 @@ use TYPO3\CMS\Fluid\ViewHelpers\Form\AbstractFormFieldViewHelper;
  * Adds custom :html:`<optgroup>` tags inside an :ref:`<f:form.select> <typo3-fluid-form-select>`,
  * supports further child :ref:`<f:form.select.option> <typo3-fluid-form-select-option>` tags.
  */
-class OptgroupViewHelper extends AbstractFormFieldViewHelper
+final class OptgroupViewHelper extends AbstractFormFieldViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Form/Select/OptionViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Form/Select/OptionViewHelper.php
index 304eb7e32703..aa55865301e7 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Form/Select/OptionViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Form/Select/OptionViewHelper.php
@@ -21,7 +21,7 @@ use TYPO3\CMS\Fluid\ViewHelpers\Form\SelectViewHelper;
 /**
  * Adds custom :html:`<option>` tags inside an :ref:`<f:form.select> <typo3-fluid-form-select>`.
  */
-class OptionViewHelper extends AbstractFormFieldViewHelper
+final class OptionViewHelper extends AbstractFormFieldViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Form/SelectViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Form/SelectViewHelper.php
index f596201c0c30..ea96081ae10a 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Form/SelectViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Form/SelectViewHelper.php
@@ -91,7 +91,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Exception;
  *
  * The ``value`` property now expects a domain object, and tests for object equivalence.
  */
-class SelectViewHelper extends AbstractFormFieldViewHelper
+final class SelectViewHelper extends AbstractFormFieldViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Form/SubmitViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Form/SubmitViewHelper.php
index dd08a4955db6..3bb1e1f1f0c9 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Form/SubmitViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Form/SubmitViewHelper.php
@@ -43,7 +43,7 @@ namespace TYPO3\CMS\Fluid\ViewHelpers\Form;
  *
  *    <input type="submit" name="mySubmit" value="Send Mail" />
  */
-class SubmitViewHelper extends AbstractFormFieldViewHelper
+final class SubmitViewHelper extends AbstractFormFieldViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Form/TextareaViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Form/TextareaViewHelper.php
index 304ba2f1767b..872cbfbd2193 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Form/TextareaViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Form/TextareaViewHelper.php
@@ -31,7 +31,7 @@ namespace TYPO3\CMS\Fluid\ViewHelpers\Form;
  *
  *    <textarea name="myTextArea">This is shown inside the textarea</textarea>
  */
-class TextareaViewHelper extends AbstractFormFieldViewHelper
+final class TextareaViewHelper extends AbstractFormFieldViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Form/TextfieldViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Form/TextfieldViewHelper.php
index 8dfa12295fa9..396dd1628b34 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Form/TextfieldViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Form/TextfieldViewHelper.php
@@ -29,7 +29,7 @@ namespace TYPO3\CMS\Fluid\ViewHelpers\Form;
  *
  *    <input type="text" name="myTextBox" value="default value" />
  */
-class TextfieldViewHelper extends AbstractFormFieldViewHelper
+final class TextfieldViewHelper extends AbstractFormFieldViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Form/UploadViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Form/UploadViewHelper.php
index e34e2a7589f1..966d7dfcbaaa 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Form/UploadViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Form/UploadViewHelper.php
@@ -30,7 +30,7 @@ namespace TYPO3\CMS\Fluid\ViewHelpers\Form;
  *
  *    <input type="file" name="file" />
  */
-class UploadViewHelper extends AbstractFormFieldViewHelper
+final class UploadViewHelper extends AbstractFormFieldViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Form/ValidationResultsViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Form/ValidationResultsViewHelper.php
index 1cb7e98580c4..0e1187b9906f 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Form/ValidationResultsViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Form/ValidationResultsViewHelper.php
@@ -67,7 +67,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *      <li>1234567890: Some error message</li>
  *    </ul>
  */
-class ValidationResultsViewHelper extends AbstractViewHelper
+final class ValidationResultsViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Format/BytesViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Format/BytesViewHelper.php
index c77eb165cd0e..cf466f071caf 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Format/BytesViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Format/BytesViewHelper.php
@@ -59,7 +59,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithContentArgumentAndRenderS
  * ``123 KB``
  * Depending on the value of ``{fileSize}``.
  */
-class BytesViewHelper extends AbstractViewHelper
+final class BytesViewHelper extends AbstractViewHelper
 {
     use CompileWithContentArgumentAndRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Format/CaseViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Format/CaseViewHelper.php
index a491c51d7bdb..3fb358a2e1da 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Format/CaseViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Format/CaseViewHelper.php
@@ -71,7 +71,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  *    SomeString
  */
-class CaseViewHelper extends AbstractViewHelper
+final class CaseViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Format/CropViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Format/CropViewHelper.php
index e3eda42b693e..308d1015f19c 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Format/CropViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Format/CropViewHelper.php
@@ -86,7 +86,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  * ``someLongText cropped after 10 characters…``
  * Depending on the value of ``{someLongText}``.
  */
-class CropViewHelper extends AbstractViewHelper
+final class CropViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Format/CurrencyViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Format/CurrencyViewHelper.php
index 0e28a10b7df3..b7b77e7afbd3 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Format/CurrencyViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Format/CurrencyViewHelper.php
@@ -75,7 +75,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  *     123,-
  */
-class CurrencyViewHelper extends AbstractViewHelper
+final class CurrencyViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Format/DateViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Format/DateViewHelper.php
index 548ea82d7550..1c6f64e661db 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Format/DateViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Format/DateViewHelper.php
@@ -99,7 +99,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithContentArgumentAndRenderS
  * ``1980-12-13``
  * Depending on the value of ``{dateObject}``.
  */
-class DateViewHelper extends AbstractViewHelper
+final class DateViewHelper extends AbstractViewHelper
 {
     use CompileWithContentArgumentAndRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Format/HtmlViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Format/HtmlViewHelper.php
index 55af0abea149..72e7e231f73a 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Format/HtmlViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Format/HtmlViewHelper.php
@@ -68,7 +68,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  * .. _parseFunc: https://docs.typo3.org/m/typo3/reference-typoscript/master/en-us/Functions/Parsefunc.html
  */
-class HtmlViewHelper extends AbstractViewHelper
+final class HtmlViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Format/HtmlentitiesDecodeViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Format/HtmlentitiesDecodeViewHelper.php
index 7aef16804ab2..f58d36f05227 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Format/HtmlentitiesDecodeViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Format/HtmlentitiesDecodeViewHelper.php
@@ -47,7 +47,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithContentArgumentAndRenderS
  *
  * But encoded as ISO-8859-1.
  */
-class HtmlentitiesDecodeViewHelper extends AbstractEncodingViewHelper
+final class HtmlentitiesDecodeViewHelper extends AbstractEncodingViewHelper
 {
     use CompileWithContentArgumentAndRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Format/HtmlentitiesViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Format/HtmlentitiesViewHelper.php
index bd2a72776536..98ba5e8a123b 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Format/HtmlentitiesViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Format/HtmlentitiesViewHelper.php
@@ -47,7 +47,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithContentArgumentAndRenderS
  *
  * But encoded as ISO-8859-1.
  */
-class HtmlentitiesViewHelper extends AbstractEncodingViewHelper
+final class HtmlentitiesViewHelper extends AbstractEncodingViewHelper
 {
     use CompileWithContentArgumentAndRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Format/JsonViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Format/JsonViewHelper.php
index f602d3edc54c..a1127e76e096 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Format/JsonViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Format/JsonViewHelper.php
@@ -58,7 +58,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithContentArgumentAndRenderS
  *
  * ``{"0":"bar","1":"baz"}``
  */
-class JsonViewHelper extends AbstractViewHelper
+final class JsonViewHelper extends AbstractViewHelper
 {
     use CompileWithContentArgumentAndRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Format/Nl2brViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Format/Nl2brViewHelper.php
index 5fa52c6435ac..c1041b3acbbd 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Format/Nl2brViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Format/Nl2brViewHelper.php
@@ -44,7 +44,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithContentArgumentAndRenderS
  *
  * Text with line breaks replaced by ``<br />``
  */
-class Nl2brViewHelper extends AbstractViewHelper
+final class Nl2brViewHelper extends AbstractViewHelper
 {
     use CompileWithContentArgumentAndRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Format/NumberViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Format/NumberViewHelper.php
index 2e1512eb6a9f..9c2d3151aa8c 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Format/NumberViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Format/NumberViewHelper.php
@@ -46,7 +46,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  * ``423.423,2``
  */
-class NumberViewHelper extends AbstractViewHelper
+final class NumberViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Format/PaddingViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Format/PaddingViewHelper.php
index c2b68781c4ef..ec5d3f8daa7e 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Format/PaddingViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Format/PaddingViewHelper.php
@@ -58,7 +58,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithContentArgumentAndRenderS
  *
  * ``--TYPO3---``
  */
-class PaddingViewHelper extends AbstractViewHelper
+final class PaddingViewHelper extends AbstractViewHelper
 {
     use CompileWithContentArgumentAndRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Format/StripTagsViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Format/StripTagsViewHelper.php
index 736f22bee33b..0db2ad841351 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Format/StripTagsViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Format/StripTagsViewHelper.php
@@ -69,7 +69,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithContentArgumentAndRenderS
  *
  * Text with p, span, div and script Tags inside, all other tags are removed.
  */
-class StripTagsViewHelper extends AbstractViewHelper
+final class StripTagsViewHelper extends AbstractViewHelper
 {
     use CompileWithContentArgumentAndRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Format/UrlencodeViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Format/UrlencodeViewHelper.php
index 11e7f36cecb1..746922ec7a5c 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Format/UrlencodeViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Format/UrlencodeViewHelper.php
@@ -49,7 +49,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithContentArgumentAndRenderS
  *
  * Url encoded text :php:`rawurlencode()` applied.
  */
-class UrlencodeViewHelper extends AbstractViewHelper
+final class UrlencodeViewHelper extends AbstractViewHelper
 {
     use CompileWithContentArgumentAndRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/ImageViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/ImageViewHelper.php
index 3e952da407ad..81aa186d9d22 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/ImageViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/ImageViewHelper.php
@@ -88,7 +88,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Exception;
  *
  * ``Could not get image resource for "NonExistingImage.png".``
  */
-class ImageViewHelper extends AbstractTagBasedViewHelper
+final class ImageViewHelper extends AbstractTagBasedViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Link/ActionViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Link/ActionViewHelper.php
index dd6658958dd0..6da72b5f6ea4 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Link/ActionViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Link/ActionViewHelper.php
@@ -35,7 +35,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;
  *
  * Depending on the current page and your TypoScript configuration.
  */
-class ActionViewHelper extends AbstractTagBasedViewHelper
+final class ActionViewHelper extends AbstractTagBasedViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Link/EmailViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Link/EmailViewHelper.php
index fa841d4561c9..0745342b3d15 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Link/EmailViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Link/EmailViewHelper.php
@@ -54,7 +54,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;
  *
  * Depending on `spamProtectEmailAddresses`_ setting.
  */
-class EmailViewHelper extends AbstractTagBasedViewHelper
+final class EmailViewHelper extends AbstractTagBasedViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Link/ExternalViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Link/ExternalViewHelper.php
index 04caa291d7ad..26f89726c374 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Link/ExternalViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Link/ExternalViewHelper.php
@@ -45,7 +45,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;
  *
  *    <a href="ftp://typo3.org">external ftp link</a>
  */
-class ExternalViewHelper extends AbstractTagBasedViewHelper
+final class ExternalViewHelper extends AbstractTagBasedViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Link/FileViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Link/FileViewHelper.php
index 1dfa62576ec1..810704d2fd7e 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Link/FileViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Link/FileViewHelper.php
@@ -63,7 +63,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Exception;
  *
  *    <a href="https://example.com/index.php?eID=dumpFile&t=f&f=123&dl=1&fn=alternative-name.jpg&token=79bce812">Download file</a>
  */
-class FileViewHelper extends AbstractTagBasedViewHelper
+final class FileViewHelper extends AbstractTagBasedViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Link/PageViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Link/PageViewHelper.php
index ba4989260000..ae38b6405f8b 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Link/PageViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Link/PageViewHelper.php
@@ -64,7 +64,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;
  *
  * Depending on current page, routing and page path configuration.
  */
-class PageViewHelper extends AbstractTagBasedViewHelper
+final class PageViewHelper extends AbstractTagBasedViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Link/TypolinkViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Link/TypolinkViewHelper.php
index e1c8f3ebf2cf..f021b9de2b07 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Link/TypolinkViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Link/TypolinkViewHelper.php
@@ -87,7 +87,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  * Depending on routing and page path configuration.
  */
-class TypolinkViewHelper extends AbstractViewHelper
+final class TypolinkViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/MediaViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/MediaViewHelper.php
index 0604676af1c6..ba266003c967 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/MediaViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/MediaViewHelper.php
@@ -66,7 +66,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Exception;
  *
  *    <video width="400" height="375" controls loop><source src="fileadmin/user_upload/my-video.mp4" type="video/mp4"></video>
  */
-class MediaViewHelper extends AbstractTagBasedViewHelper
+final class MediaViewHelper extends AbstractTagBasedViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/RenderViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/RenderViewHelper.php
index 048d322c2060..fd3a961a126f 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/RenderViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/RenderViewHelper.php
@@ -15,7 +15,7 @@
 
 namespace TYPO3\CMS\Fluid\ViewHelpers;
 
-class RenderViewHelper extends \TYPO3Fluid\Fluid\ViewHelpers\RenderViewHelper
+final class RenderViewHelper extends \TYPO3Fluid\Fluid\ViewHelpers\RenderViewHelper
 {
     public function initializeArguments()
     {
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Sanitize/HtmlViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Sanitize/HtmlViewHelper.php
index 03c91b398103..91b8314f01b1 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Sanitize/HtmlViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Sanitize/HtmlViewHelper.php
@@ -55,7 +55,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  *    {richTextFieldContent -> f:sanitize.html(build: 'default')}
  */
-class HtmlViewHelper extends AbstractViewHelper
+final class HtmlViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Security/IfAuthenticatedViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Security/IfAuthenticatedViewHelper.php
index 6a0afa7a02ac..6ad365a662ab 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Security/IfAuthenticatedViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Security/IfAuthenticatedViewHelper.php
@@ -54,7 +54,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractConditionViewHelper;
  * Everything inside the :html:`<f:then></f:then>` tag is displayed if frontend user is authenticated.
  * Otherwise, everything inside the :html:`<f:else></f:else>` tag is displayed.
  */
-class IfAuthenticatedViewHelper extends AbstractConditionViewHelper
+final class IfAuthenticatedViewHelper extends AbstractConditionViewHelper
 {
     /**
      * This method decides if the condition is TRUE or FALSE. It can be overridden in extending viewhelpers to adjust functionality.
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Security/IfHasRoleViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Security/IfHasRoleViewHelper.php
index 4e90f2be7278..5e5c43cddaf3 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Security/IfHasRoleViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Security/IfHasRoleViewHelper.php
@@ -69,7 +69,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractConditionViewHelper;
  * Everything inside the :html:`<f:then></f:then>` tag is displayed if the logged in FE user belongs to the specified role.
  * Otherwise, everything inside the :html:`<f:else></f:else>` tag is displayed.
  */
-class IfHasRoleViewHelper extends AbstractConditionViewHelper
+final class IfHasRoleViewHelper extends AbstractConditionViewHelper
 {
     /**
      * Initializes the "role" argument.
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Transform/HtmlViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Transform/HtmlViewHelper.php
index e67d833e00ac..beecc0896a3e 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Transform/HtmlViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Transform/HtmlViewHelper.php
@@ -50,7 +50,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  *    {content -> f:transform.html(selector:'a.href', onFailure:'removeEnclosure')}
  */
-class HtmlViewHelper extends AbstractViewHelper
+final class HtmlViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/TranslateViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/TranslateViewHelper.php
index e3ed558feaea..d7011963f626 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/TranslateViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/TranslateViewHelper.php
@@ -95,7 +95,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  * Value of key ``someKey`` in the current website language.
  * The locallang file of extension "some_extension_name" will be used.
  */
-class TranslateViewHelper extends AbstractViewHelper
+final class TranslateViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Uri/ActionViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Uri/ActionViewHelper.php
index bafee576fd2a..7ee727f76c4c 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Uri/ActionViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Uri/ActionViewHelper.php
@@ -33,7 +33,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  * Depending on current page, routing and page path configuration.
  */
-class ActionViewHelper extends AbstractViewHelper
+final class ActionViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Uri/ExternalViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Uri/ExternalViewHelper.php
index e34ad689b6ac..56cf2d2fc965 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Uri/ExternalViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Uri/ExternalViewHelper.php
@@ -44,7 +44,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  * ``ftp://typo3.org``
  */
-class ExternalViewHelper extends AbstractViewHelper
+final class ExternalViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Uri/ImageViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Uri/ImageViewHelper.php
index 0f047122a711..9c3ad975b1b4 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Uri/ImageViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Uri/ImageViewHelper.php
@@ -82,7 +82,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  * ``Could not get image resource for "NonExistingImage.png".``
  */
-class ImageViewHelper extends AbstractViewHelper
+final class ImageViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Uri/PageViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Uri/PageViewHelper.php
index 202bdb8bc9d7..9aea8c02bba1 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Uri/PageViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Uri/PageViewHelper.php
@@ -59,7 +59,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  * Depending on current page, routing and page path configuration.
  */
-class PageViewHelper extends AbstractViewHelper
+final class PageViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Uri/ResourceViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Uri/ResourceViewHelper.php
index 2140012a9602..bef5da513cd4 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Uri/ResourceViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Uri/ResourceViewHelper.php
@@ -51,7 +51,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  *    <link href="typo3conf/ext/another_extension/Resources/Public/css/stylesheet.css" rel="stylesheet" />
  */
-class ResourceViewHelper extends AbstractViewHelper
+final class ResourceViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/fluid/Classes/ViewHelpers/Uri/TypolinkViewHelper.php b/typo3/sysext/fluid/Classes/ViewHelpers/Uri/TypolinkViewHelper.php
index a9d500b4e548..f682348a0558 100644
--- a/typo3/sysext/fluid/Classes/ViewHelpers/Uri/TypolinkViewHelper.php
+++ b/typo3/sysext/fluid/Classes/ViewHelpers/Uri/TypolinkViewHelper.php
@@ -56,7 +56,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  * Depending on routing and page path configuration.
  */
-class TypolinkViewHelper extends AbstractViewHelper
+final class TypolinkViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/fluid/Tests/Unit/ViewHelpers/Link/TypolinkViewHelperTest.php b/typo3/sysext/fluid/Tests/Unit/ViewHelpers/Link/TypolinkViewHelperTest.php
index ea68b2d883d0..2d7c2e0a7d85 100644
--- a/typo3/sysext/fluid/Tests/Unit/ViewHelpers/Link/TypolinkViewHelperTest.php
+++ b/typo3/sysext/fluid/Tests/Unit/ViewHelpers/Link/TypolinkViewHelperTest.php
@@ -218,17 +218,12 @@ class TypolinkViewHelperTest extends UnitTestCase
      * @test
      * @dataProvider decodedConfigurationAndFluidArgumentDataProvider
      */
-    public function mergeTypoLinkConfigurationMergesData(
-        array $decodedConfiguration,
-        array $viewHelperArguments,
-        array $expectation
-    ): void {
-        $subject = $this->getAccessibleMock(TypolinkViewHelper::class, ['renderChildren']);
-        $result = $subject->_call(
-            'mergeTypoLinkConfiguration',
-            $decodedConfiguration,
-            $viewHelperArguments
-        );
+    public function mergeTypoLinkConfigurationMergesData(array $decodedConfiguration, array $viewHelperArguments, array $expectation): void
+    {
+        $mock = \Closure::bind(static function (TypolinkViewHelper $typolinkViewHelper) use ($decodedConfiguration, $viewHelperArguments, &$result) {
+            $result = $typolinkViewHelper->mergeTypoLinkConfiguration($decodedConfiguration, $viewHelperArguments);
+        }, null, TypolinkViewHelper::class);
+        $mock(new TypolinkViewHelper());
         self::assertSame($expectation, $result);
     }
 }
diff --git a/typo3/sysext/fluid/Tests/Unit/ViewHelpers/Uri/TypolinkViewHelperTest.php b/typo3/sysext/fluid/Tests/Unit/ViewHelpers/Uri/TypolinkViewHelperTest.php
index c7e098934715..7401bfeaea57 100644
--- a/typo3/sysext/fluid/Tests/Unit/ViewHelpers/Uri/TypolinkViewHelperTest.php
+++ b/typo3/sysext/fluid/Tests/Unit/ViewHelpers/Uri/TypolinkViewHelperTest.php
@@ -82,9 +82,10 @@ class TypolinkViewHelperTest extends UnitTestCase
      */
     public function mergeTypoLinkConfigurationDoesNotModifyData(array $decodedConfiguration): void
     {
-        /** @var \TYPO3\TestingFramework\Core\AccessibleObjectInterface $subject */
-        $subject = $this->getAccessibleMock(TypolinkViewHelper::class, ['dummy']);
-        $result = $subject->_call('mergeTypoLinkConfiguration', $decodedConfiguration, []);
+        $mock = \Closure::bind(static function (TypolinkViewHelper $typolinkViewHelper) use ($decodedConfiguration, &$result) {
+            $result = $typolinkViewHelper->mergeTypoLinkConfiguration($decodedConfiguration, []);
+        }, null, TypolinkViewHelper::class);
+        $mock(new TypolinkViewHelper());
         self::assertSame($decodedConfiguration, $result);
     }
 
@@ -179,11 +180,12 @@ class TypolinkViewHelperTest extends UnitTestCase
      * @test
      * @dataProvider decodedConfigurationAndFluidArgumentDataProvider
      */
-    public function mergeTypoLinkConfigurationMergesData(array $decodedConfiguration, array $viewHelperArguments, array $expected): void
+    public function mergeTypoLinkConfigurationMergesData(array $decodedConfiguration, array $viewHelperArguments, array $expectation): void
     {
-        /** @var \TYPO3\TestingFramework\Core\AccessibleObjectInterface $subject */
-        $subject = $this->getAccessibleMock(TypolinkViewHelper::class, ['dummy']);
-        $result = $subject->_call('mergeTypoLinkConfiguration', $decodedConfiguration, $viewHelperArguments);
-        self::assertSame($expected, $result);
+        $mock = \Closure::bind(static function (TypolinkViewHelper $typolinkViewHelper) use ($decodedConfiguration, $viewHelperArguments, &$result) {
+            $result = $typolinkViewHelper->mergeTypoLinkConfiguration($decodedConfiguration, $viewHelperArguments);
+        }, null, TypolinkViewHelper::class);
+        $mock(new TypolinkViewHelper());
+        self::assertSame($expectation, $result);
     }
 }
diff --git a/typo3/sysext/fluid_styled_content/Classes/ViewHelpers/Link/ClickEnlargeViewHelper.php b/typo3/sysext/fluid_styled_content/Classes/ViewHelpers/Link/ClickEnlargeViewHelper.php
index 950a9b11b333..0424077021a7 100644
--- a/typo3/sysext/fluid_styled_content/Classes/ViewHelpers/Link/ClickEnlargeViewHelper.php
+++ b/typo3/sysext/fluid_styled_content/Classes/ViewHelpers/Link/ClickEnlargeViewHelper.php
@@ -38,7 +38,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  * @internal this is not part of TYPO3 Core API.
  */
-class ClickEnlargeViewHelper extends AbstractViewHelper
+final class ClickEnlargeViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/form/Classes/ViewHelpers/Be/MaximumFileSizeViewHelper.php b/typo3/sysext/form/Classes/ViewHelpers/Be/MaximumFileSizeViewHelper.php
index 194b795fb16c..80466e965375 100644
--- a/typo3/sysext/form/Classes/ViewHelpers/Be/MaximumFileSizeViewHelper.php
+++ b/typo3/sysext/form/Classes/ViewHelpers/Be/MaximumFileSizeViewHelper.php
@@ -28,7 +28,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  * Scope: backend
  * @internal
  */
-class MaximumFileSizeViewHelper extends AbstractViewHelper
+final class MaximumFileSizeViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/form/Classes/ViewHelpers/Be/RenderContentElementPreviewViewHelper.php b/typo3/sysext/form/Classes/ViewHelpers/Be/RenderContentElementPreviewViewHelper.php
index 00f2b0f7a606..ded11e93d7c0 100644
--- a/typo3/sysext/form/Classes/ViewHelpers/Be/RenderContentElementPreviewViewHelper.php
+++ b/typo3/sysext/form/Classes/ViewHelpers/Be/RenderContentElementPreviewViewHelper.php
@@ -34,7 +34,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  * Scope: backend
  * @internal
  */
-class RenderContentElementPreviewViewHelper extends AbstractViewHelper
+final class RenderContentElementPreviewViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/form/Classes/ViewHelpers/Form/DatePickerViewHelper.php b/typo3/sysext/form/Classes/ViewHelpers/Form/DatePickerViewHelper.php
index c4734488fab0..5abc4a5c13c0 100644
--- a/typo3/sysext/form/Classes/ViewHelpers/Form/DatePickerViewHelper.php
+++ b/typo3/sysext/form/Classes/ViewHelpers/Form/DatePickerViewHelper.php
@@ -36,7 +36,7 @@ use TYPO3\CMS\Form\ViewHelpers\RenderRenderableViewHelper;
  *
  * Scope: frontend
  */
-class DatePickerViewHelper extends AbstractFormFieldViewHelper
+final class DatePickerViewHelper extends AbstractFormFieldViewHelper
 {
 
     /**
diff --git a/typo3/sysext/form/Classes/ViewHelpers/Form/TimePickerViewHelper.php b/typo3/sysext/form/Classes/ViewHelpers/Form/TimePickerViewHelper.php
index 95916457da39..0e1a571518fe 100644
--- a/typo3/sysext/form/Classes/ViewHelpers/Form/TimePickerViewHelper.php
+++ b/typo3/sysext/form/Classes/ViewHelpers/Form/TimePickerViewHelper.php
@@ -31,7 +31,7 @@ use TYPO3\CMS\Form\ViewHelpers\RenderRenderableViewHelper;
  *
  * Scope: frontend
  */
-class TimePickerViewHelper extends AbstractFormFieldViewHelper
+final class TimePickerViewHelper extends AbstractFormFieldViewHelper
 {
 
     /**
diff --git a/typo3/sysext/form/Classes/ViewHelpers/Form/UploadedResourceViewHelper.php b/typo3/sysext/form/Classes/ViewHelpers/Form/UploadedResourceViewHelper.php
index ca1c5d67a860..ac0b2e39374e 100644
--- a/typo3/sysext/form/Classes/ViewHelpers/Form/UploadedResourceViewHelper.php
+++ b/typo3/sysext/form/Classes/ViewHelpers/Form/UploadedResourceViewHelper.php
@@ -30,7 +30,7 @@ use TYPO3\CMS\Fluid\ViewHelpers\Form\AbstractFormFieldViewHelper;
  *
  * Scope: frontend
  */
-class UploadedResourceViewHelper extends AbstractFormFieldViewHelper
+final class UploadedResourceViewHelper extends AbstractFormFieldViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/form/Classes/ViewHelpers/FormViewHelper.php b/typo3/sysext/form/Classes/ViewHelpers/FormViewHelper.php
index b92488c419d6..79951adbcad0 100644
--- a/typo3/sysext/form/Classes/ViewHelpers/FormViewHelper.php
+++ b/typo3/sysext/form/Classes/ViewHelpers/FormViewHelper.php
@@ -31,7 +31,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\TagBuilder;
  *
  * Scope: frontend
  */
-class FormViewHelper extends FluidFormViewHelper
+final class FormViewHelper extends FluidFormViewHelper
 {
 
     /**
diff --git a/typo3/sysext/form/Classes/ViewHelpers/GridColumnClassAutoConfigurationViewHelper.php b/typo3/sysext/form/Classes/ViewHelpers/GridColumnClassAutoConfigurationViewHelper.php
index c75592acd7e2..7d7431dfbd31 100644
--- a/typo3/sysext/form/Classes/ViewHelpers/GridColumnClassAutoConfigurationViewHelper.php
+++ b/typo3/sysext/form/Classes/ViewHelpers/GridColumnClassAutoConfigurationViewHelper.php
@@ -25,7 +25,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
 /**
  * Scope: frontend
  */
-class GridColumnClassAutoConfigurationViewHelper extends AbstractViewHelper
+final class GridColumnClassAutoConfigurationViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/form/Classes/ViewHelpers/RenderAllFormValuesViewHelper.php b/typo3/sysext/form/Classes/ViewHelpers/RenderAllFormValuesViewHelper.php
index 66721116ebe6..92729aae0af1 100644
--- a/typo3/sysext/form/Classes/ViewHelpers/RenderAllFormValuesViewHelper.php
+++ b/typo3/sysext/form/Classes/ViewHelpers/RenderAllFormValuesViewHelper.php
@@ -32,7 +32,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  * Scope: frontend
  */
-class RenderAllFormValuesViewHelper extends AbstractViewHelper
+final class RenderAllFormValuesViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/form/Classes/ViewHelpers/RenderFormValueViewHelper.php b/typo3/sysext/form/Classes/ViewHelpers/RenderFormValueViewHelper.php
index 2e3a527b582a..6ea03adad603 100644
--- a/typo3/sysext/form/Classes/ViewHelpers/RenderFormValueViewHelper.php
+++ b/typo3/sysext/form/Classes/ViewHelpers/RenderFormValueViewHelper.php
@@ -35,7 +35,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  * Scope: frontend
  */
-class RenderFormValueViewHelper extends AbstractViewHelper
+final class RenderFormValueViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/form/Classes/ViewHelpers/RenderRenderableViewHelper.php b/typo3/sysext/form/Classes/ViewHelpers/RenderRenderableViewHelper.php
index 4e9fa20250e5..bf5a27f794ff 100644
--- a/typo3/sysext/form/Classes/ViewHelpers/RenderRenderableViewHelper.php
+++ b/typo3/sysext/form/Classes/ViewHelpers/RenderRenderableViewHelper.php
@@ -37,7 +37,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  * Scope: frontend
  */
-class RenderRenderableViewHelper extends AbstractViewHelper
+final class RenderRenderableViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/form/Classes/ViewHelpers/RenderViewHelper.php b/typo3/sysext/form/Classes/ViewHelpers/RenderViewHelper.php
index 7350c034f378..74e582396211 100644
--- a/typo3/sysext/form/Classes/ViewHelpers/RenderViewHelper.php
+++ b/typo3/sysext/form/Classes/ViewHelpers/RenderViewHelper.php
@@ -45,7 +45,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  * Scope: frontend
  */
-class RenderViewHelper extends AbstractViewHelper
+final class RenderViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/form/Classes/ViewHelpers/TranslateElementErrorViewHelper.php b/typo3/sysext/form/Classes/ViewHelpers/TranslateElementErrorViewHelper.php
index a32b2254232e..1efbfd8b6272 100644
--- a/typo3/sysext/form/Classes/ViewHelpers/TranslateElementErrorViewHelper.php
+++ b/typo3/sysext/form/Classes/ViewHelpers/TranslateElementErrorViewHelper.php
@@ -31,7 +31,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  * Scope: frontend / backend
  */
-class TranslateElementErrorViewHelper extends AbstractViewHelper
+final class TranslateElementErrorViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/form/Classes/ViewHelpers/TranslateElementPropertyViewHelper.php b/typo3/sysext/form/Classes/ViewHelpers/TranslateElementPropertyViewHelper.php
index 54dea3f53294..7f30f69f9f4d 100644
--- a/typo3/sysext/form/Classes/ViewHelpers/TranslateElementPropertyViewHelper.php
+++ b/typo3/sysext/form/Classes/ViewHelpers/TranslateElementPropertyViewHelper.php
@@ -31,7 +31,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  * Scope: frontend / backend
  */
-class TranslateElementPropertyViewHelper extends AbstractViewHelper
+final class TranslateElementPropertyViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/form/Tests/Unit/ViewHelpers/Form/DatePickerViewHelperTest.php b/typo3/sysext/form/Tests/Unit/ViewHelpers/Form/DatePickerViewHelperTest.php
index 36c1a4afa10e..28088c316667 100644
--- a/typo3/sysext/form/Tests/Unit/ViewHelpers/Form/DatePickerViewHelperTest.php
+++ b/typo3/sysext/form/Tests/Unit/ViewHelpers/Form/DatePickerViewHelperTest.php
@@ -20,125 +20,64 @@ namespace TYPO3\CMS\Form\Tests\Unit\ViewHelpers\Form;
 use TYPO3\CMS\Form\ViewHelpers\Form\DatePickerViewHelper;
 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
 
-/**
- * Test case
- */
 class DatePickerViewHelperTest extends UnitTestCase
 {
-
-    /**
-     * @var \TYPO3\CMS\Form\ViewHelpers\Form\DatePickerViewHelper
-     */
-    protected $subject;
-
-    /**
-     * Set up
-     */
-    protected function setUp(): void
-    {
-        parent::setUp();
-        $this->subject = $this->getAccessibleMock(DatePickerViewHelper::class, [
-            'dummy',
-        ], [], '', false);
-    }
-
-    /**
-     * @test
-     */
-    public function convertDateFormatToDatePickerFormatReturnsTransformedFormat01(): void
-    {
-        $input = 'd';
-        $expected = 'dd';
-        self::assertSame($expected, $this->subject->_call('convertDateFormatToDatePickerFormat', $input));
-    }
-
-    /**
-     * @test
-     */
-    public function convertDateFormatToDatePickerFormatReturnsTransformedFormat02(): void
-    {
-        $input = 'D';
-        $expected = 'D';
-        self::assertSame($expected, $this->subject->_call('convertDateFormatToDatePickerFormat', $input));
-    }
-
-    /**
-     * @test
-     */
-    public function convertDateFormatToDatePickerFormatReturnsTransformedFormat03(): void
-    {
-        $input = 'j';
-        $expected = 'o';
-        self::assertSame($expected, $this->subject->_call('convertDateFormatToDatePickerFormat', $input));
-    }
-
-    /**
-     * @test
-     */
-    public function convertDateFormatToDatePickerFormatReturnsTransformedFormat04(): void
-    {
-        $input = 'l';
-        $expected = 'DD';
-        self::assertSame($expected, $this->subject->_call('convertDateFormatToDatePickerFormat', $input));
-    }
-
-    /**
-     * @test
-     */
-    public function convertDateFormatToDatePickerFormatReturnsTransformedFormat05(): void
-    {
-        $input = 'F';
-        $expected = 'MM';
-        self::assertSame($expected, $this->subject->_call('convertDateFormatToDatePickerFormat', $input));
-    }
-
-    /**
-     * @test
-     */
-    public function convertDateFormatToDatePickerFormatReturnsTransformedFormat06(): void
-    {
-        $input = 'm';
-        $expected = 'mm';
-        self::assertSame($expected, $this->subject->_call('convertDateFormatToDatePickerFormat', $input));
-    }
-
-    /**
-     * @test
-     */
-    public function convertDateFormatToDatePickerFormatReturnsTransformedFormat07(): void
-    {
-        $input = 'M';
-        $expected = 'M';
-        self::assertSame($expected, $this->subject->_call('convertDateFormatToDatePickerFormat', $input));
-    }
-
-    /**
-     * @test
-     */
-    public function convertDateFormatToDatePickerFormatReturnsTransformedFormat08(): void
-    {
-        $input = 'n';
-        $expected = 'm';
-        self::assertSame($expected, $this->subject->_call('convertDateFormatToDatePickerFormat', $input));
-    }
-
-    /**
-     * @test
-     */
-    public function convertDateFormatToDatePickerFormatReturnsTransformedFormat09(): void
+    public function convertDateFormatToDatePickerFormatReturnsTransformedFormatDataProvider(): array
     {
-        $input = 'Y';
-        $expected = 'yy';
-        self::assertSame($expected, $this->subject->_call('convertDateFormatToDatePickerFormat', $input));
+        return [
+            [
+                'd',
+                'dd',
+            ],
+            [
+                'D',
+                'D',
+            ],
+            [
+                'j',
+                'o',
+            ],
+            [
+                'l',
+                'DD',
+            ],
+            [
+                'F',
+                'MM',
+            ],
+            [
+                'm',
+                'mm',
+            ],
+            [
+                'M',
+                'M',
+            ],
+            [
+                'n',
+                'm',
+            ],
+            [
+                'Y',
+                'yy',
+            ],
+            [
+                'y',
+                'y',
+            ],
+        ];
     }
 
     /**
      * @test
+     * @dataProvider convertDateFormatToDatePickerFormatReturnsTransformedFormatDataProvider
      */
-    public function convertDateFormatToDatePickerFormatReturnsTransformedFormat10(): void
+    public function convertDateFormatToDatePickerFormatReturnsTransformedFormat(string $input, string $expected): void
     {
-        $input = 'y';
-        $expected = 'y';
-        self::assertSame($expected, $this->subject->_call('convertDateFormatToDatePickerFormat', $input));
+        $mock = \Closure::bind(static function (DatePickerViewHelper $datePickerViewHelper) use ($input, &$result) {
+            $result = $datePickerViewHelper->convertDateFormatToDatePickerFormat($input);
+        }, null, DatePickerViewHelper::class);
+        $mock(new DatePickerViewHelper());
+        self::assertSame($expected, $result);
     }
 }
diff --git a/typo3/sysext/indexed_search/Classes/ViewHelpers/Format/DateTimeViewHelper.php b/typo3/sysext/indexed_search/Classes/ViewHelpers/Format/DateTimeViewHelper.php
index 79cc0fff4bf4..04feb0e752c0 100644
--- a/typo3/sysext/indexed_search/Classes/ViewHelpers/Format/DateTimeViewHelper.php
+++ b/typo3/sysext/indexed_search/Classes/ViewHelpers/Format/DateTimeViewHelper.php
@@ -24,7 +24,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  * DateTime viewhelper
  * @internal
  */
-class DateTimeViewHelper extends AbstractViewHelper
+final class DateTimeViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/indexed_search/Classes/ViewHelpers/Format/FlagValueViewHelper.php b/typo3/sysext/indexed_search/Classes/ViewHelpers/Format/FlagValueViewHelper.php
index 4a1e5bc81895..7234b7499dfe 100644
--- a/typo3/sysext/indexed_search/Classes/ViewHelpers/Format/FlagValueViewHelper.php
+++ b/typo3/sysext/indexed_search/Classes/ViewHelpers/Format/FlagValueViewHelper.php
@@ -23,7 +23,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  * FlagValue viewhelper
  * @internal
  */
-class FlagValueViewHelper extends AbstractViewHelper
+final class FlagValueViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/indexed_search/Classes/ViewHelpers/Format/GroupListViewHelper.php b/typo3/sysext/indexed_search/Classes/ViewHelpers/Format/GroupListViewHelper.php
index f5fc4da59cbf..3260d74f5568 100644
--- a/typo3/sysext/indexed_search/Classes/ViewHelpers/Format/GroupListViewHelper.php
+++ b/typo3/sysext/indexed_search/Classes/ViewHelpers/Format/GroupListViewHelper.php
@@ -23,7 +23,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  * Group list viewhelper
  * @internal
  */
-class GroupListViewHelper extends AbstractViewHelper
+final class GroupListViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/indexed_search/Classes/ViewHelpers/PageBrowsingResultsViewHelper.php b/typo3/sysext/indexed_search/Classes/ViewHelpers/PageBrowsingResultsViewHelper.php
index 15f8a53ac281..345cb16ea0ee 100644
--- a/typo3/sysext/indexed_search/Classes/ViewHelpers/PageBrowsingResultsViewHelper.php
+++ b/typo3/sysext/indexed_search/Classes/ViewHelpers/PageBrowsingResultsViewHelper.php
@@ -24,7 +24,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  * renders the header of the results page
  * @internal
  */
-class PageBrowsingResultsViewHelper extends AbstractViewHelper
+final class PageBrowsingResultsViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/indexed_search/Classes/ViewHelpers/PageBrowsingViewHelper.php b/typo3/sysext/indexed_search/Classes/ViewHelpers/PageBrowsingViewHelper.php
index ba20c5e28381..0f26598d5b67 100644
--- a/typo3/sysext/indexed_search/Classes/ViewHelpers/PageBrowsingViewHelper.php
+++ b/typo3/sysext/indexed_search/Classes/ViewHelpers/PageBrowsingViewHelper.php
@@ -27,7 +27,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractTagBasedViewHelper;
  * functionality
  * @internal
  */
-class PageBrowsingViewHelper extends AbstractTagBasedViewHelper
+final class PageBrowsingViewHelper extends AbstractTagBasedViewHelper
 {
     /**
      * @var string
diff --git a/typo3/sysext/install/Classes/ViewHelpers/Format/NoSpaceViewHelper.php b/typo3/sysext/install/Classes/ViewHelpers/Format/NoSpaceViewHelper.php
index e08135b4a66a..f025d9a831ca 100644
--- a/typo3/sysext/install/Classes/ViewHelpers/Format/NoSpaceViewHelper.php
+++ b/typo3/sysext/install/Classes/ViewHelpers/Format/NoSpaceViewHelper.php
@@ -26,7 +26,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  * @internal
  */
-class NoSpaceViewHelper extends AbstractViewHelper
+final class NoSpaceViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/install/Classes/ViewHelpers/Format/PhpErrorCodeViewHelper.php b/typo3/sysext/install/Classes/ViewHelpers/Format/PhpErrorCodeViewHelper.php
index e147380dfe4e..a35a08103e6e 100644
--- a/typo3/sysext/install/Classes/ViewHelpers/Format/PhpErrorCodeViewHelper.php
+++ b/typo3/sysext/install/Classes/ViewHelpers/Format/PhpErrorCodeViewHelper.php
@@ -24,7 +24,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  *
  * @internal
  */
-class PhpErrorCodeViewHelper extends AbstractViewHelper
+final class PhpErrorCodeViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/install/Classes/ViewHelpers/PhpInfoViewHelper.php b/typo3/sysext/install/Classes/ViewHelpers/PhpInfoViewHelper.php
index f7fd0ba5e93b..2940b9cd917c 100644
--- a/typo3/sysext/install/Classes/ViewHelpers/PhpInfoViewHelper.php
+++ b/typo3/sysext/install/Classes/ViewHelpers/PhpInfoViewHelper.php
@@ -23,7 +23,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  * Utility class for phpinfo()
  * @internal
  */
-class PhpInfoViewHelper extends AbstractViewHelper
+final class PhpInfoViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/install/Classes/ViewHelpers/Uri/ActionViewHelper.php b/typo3/sysext/install/Classes/ViewHelpers/Uri/ActionViewHelper.php
index c039896140df..32ed009ac664 100644
--- a/typo3/sysext/install/Classes/ViewHelpers/Uri/ActionViewHelper.php
+++ b/typo3/sysext/install/Classes/ViewHelpers/Uri/ActionViewHelper.php
@@ -34,7 +34,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  * </output>
  * @internal
  */
-class ActionViewHelper extends AbstractViewHelper
+final class ActionViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
diff --git a/typo3/sysext/redirects/Classes/ViewHelpers/TargetPageIdViewHelper.php b/typo3/sysext/redirects/Classes/ViewHelpers/TargetPageIdViewHelper.php
index 26efeef45e81..4687f36a14f0 100644
--- a/typo3/sysext/redirects/Classes/ViewHelpers/TargetPageIdViewHelper.php
+++ b/typo3/sysext/redirects/Classes/ViewHelpers/TargetPageIdViewHelper.php
@@ -30,7 +30,7 @@ use TYPO3Fluid\Fluid\Core\ViewHelper\Traits\CompileWithRenderStatic;
  * This ViewHelper checks for such a case and returns the Page ID
  * @internal
  */
-class TargetPageIdViewHelper extends AbstractViewHelper
+final class TargetPageIdViewHelper extends AbstractViewHelper
 {
     use CompileWithRenderStatic;
 
-- 
GitLab