[TASK] Alias Fluid's AbstractNode to ViewHelperNode for backwards compatibility 20/46420/6
authorClaus Due <claus@namelesscoder.net>
Sun, 31 Jan 2016 15:05:17 +0000 (16:05 +0100)
committerBenni Mack <benni@typo3.org>
Mon, 8 Feb 2016 06:18:01 +0000 (07:18 +0100)
Aliasing this class - although technically not a "good" alias - makes
third-party ViewHelpers' compile() methods compatible.

Change-Id: Ic2c1db6ef3abb2b3f34c793766c7af4ce90d3497
Releases: master
Resolves: #73046
Reviewed-on: https://review.typo3.org/46420
Reviewed-by: Xavier Perseguers <xavier@typo3.org>
Tested-by: Xavier Perseguers <xavier@typo3.org>
Reviewed-by: Daniel Goerz <ervaude@gmail.com>
Reviewed-by: Wouter Wolters <typo3@wouterwolters.nl>
Reviewed-by: Benni Mack <benni@typo3.org>
Tested-by: Benni Mack <benni@typo3.org>
typo3/sysext/core/Documentation/Changelog/master/Breaking-73046-AliasAbstractNode-ViewHelperNodeForBackwardsCompatibility.rst [new file with mode: 0644]
typo3/sysext/fluid/Migrations/Code/ClassAliasMap.php

diff --git a/typo3/sysext/core/Documentation/Changelog/master/Breaking-73046-AliasAbstractNode-ViewHelperNodeForBackwardsCompatibility.rst b/typo3/sysext/core/Documentation/Changelog/master/Breaking-73046-AliasAbstractNode-ViewHelperNodeForBackwardsCompatibility.rst
new file mode 100644 (file)
index 0000000..512a17a
--- /dev/null
@@ -0,0 +1,39 @@
+===================================================================================
+Breaking: #73046 - Alias AbstractNode -> ViewHelperNode for backwards compatibility
+===================================================================================
+
+Description
+===========
+
+ViewHelperInterface::compile() in standalone Fluid now requires an actual ViewHelperNode instead of AbstractNode as it was before.
+The reason for changing this should be fairly obvious. In order to preserve signature compatibility an alias is put in place.
+
+The alias is created so that TYPO3\CMS\Fluid\Core\Parser\SyntaxTree\AbstractNode becomes an alias of TYPO3Fluid\Fluid\Core\Parser\SyntaxTree\ViewHelperNode.
+This is obviously less than ideal but solves the problem immediately and prioritises not breaking the public API by somewhat
+breaking the non-public API.
+
+
+Impact
+======
+
+This signature change means that ViewHelpers which implement a custom compile() method must update their signature (dot not apply
+to ViewHelpers implementing only renderStatic). Two ViewHelpers in TYPO3 CMS Fluid were migrated as part of the standalone Fluid
+merge - but third-party ViewHelpers would require either migration or an alias.
+
+* Overridden TemplateParsers (before standalone Fluid merge) might not function, depending on the nature of overrides (conditions
+  checking class names may fail)
+* Custom Nodes (implemented via an overridden TemplateParser, before standalone Fluid) would break either in function or form
+  (incompatible constructor signatures on php7 at least)
+
+
+Affected Installations
+======================
+
+Any TYPO3 site using an extension which replaces or directly interacts with TemplateParser or TemplateCompiler from Fluid. Only
+known affected community extension is at this point EXT:builder, specifically the template validation/analysis feature.
+
+
+Migration
+=========
+
+Change any reference to classes in ``TYPO3\CMS\Fluid\Core\TemplateParser`` to ``TYPO3Fluid\Fluid\Core\TemplateParser``.
index 2832e6c..16076e3 100644 (file)
@@ -3,6 +3,7 @@ return array(
     'TYPO3\\CMS\\Fluid\\Core\\Compiler\\TemplateCompiler' => \TYPO3Fluid\Fluid\Core\Compiler\TemplateCompiler::class,
     'TYPO3\\CMS\\Fluid\\Core\\Parser\\InterceptorInterface' => \TYPO3Fluid\Fluid\Core\Parser\InterceptorInterface::class,
     'TYPO3\\CMS\\Fluid\\Core\\Parser\\SyntaxTree\\NodeInterface' => \TYPO3Fluid\Fluid\Core\Parser\SyntaxTree\NodeInterface::class,
+    'TYPO3\\CMS\\Fluid\\Core\\Parser\\SyntaxTree\\AbstractNode' => \TYPO3Fluid\Fluid\Core\Parser\SyntaxTree\ViewHelperNode::class,
     'TYPO3\\CMS\\Fluid\\Core\\Rendering\\RenderingContextInterface' => \TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface::class,
     'TYPO3\\CMS\\Fluid\\Core\\ViewHelper\\ViewHelperInterface' => \TYPO3Fluid\Fluid\Core\ViewHelper\ViewHelperInterface::class,
     'TYPO3\\CMS\\Fluid\\Core\\ViewHelper\\Facets\\ChildNodeAccessInterface' => \TYPO3Fluid\Fluid\Core\ViewHelper\ViewHelperInterface::class,