diff --git a/src/Symfony/Component/Validator/Context/ExecutionContextManager.php b/src/Symfony/Component/Validator/Context/ExecutionContextManager.php index 379b563ca2..cfb93831f8 100644 --- a/src/Symfony/Component/Validator/Context/ExecutionContextManager.php +++ b/src/Symfony/Component/Validator/Context/ExecutionContextManager.php @@ -45,8 +45,7 @@ class ExecutionContextManager extends AbstractVisitor implements ExecutionContex public function __construct(GroupManagerInterface $groupManager) { $this->groupManager = $groupManager; - - $this->reset(); + $this->contextStack = new \SplStack(); } public function initialize(ValidatorInterface $validator) @@ -95,7 +94,7 @@ class ExecutionContextManager extends AbstractVisitor implements ExecutionContex public function afterTraversal(array $nodes) { - $this->reset(); + $this->contextStack = new \SplStack(); } public function enterNode(Node $node) @@ -115,9 +114,4 @@ class ExecutionContextManager extends AbstractVisitor implements ExecutionContex $this->currentContext->popNode(); } - - private function reset() - { - $this->contextStack = new \SplStack(); - } } diff --git a/src/Symfony/Component/Validator/NodeVisitor/ObjectInitializer.php b/src/Symfony/Component/Validator/NodeVisitor/ObjectInitializer.php new file mode 100644 index 0000000000..617d10c84f --- /dev/null +++ b/src/Symfony/Component/Validator/NodeVisitor/ObjectInitializer.php @@ -0,0 +1,48 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Validator\NodeVisitor; + +use Symfony\Component\Validator\Node\ClassNode; +use Symfony\Component\Validator\Node\Node; +use Symfony\Component\Validator\ObjectInitializerInterface; + +/** + * @since %%NextVersion%% + * @author Bernhard Schussek + */ +class ObjectInitializer extends AbstractVisitor +{ + /** + * @var ObjectInitializerInterface[] + */ + private $initializers; + + public function __construct(array $initializers) + { + foreach ($initializers as $initializer) { + if (!$initializer instanceof ObjectInitializerInterface) { + throw new \LogicException('Validator initializers must implement ObjectInitializerInterface.'); + } + } + + $this->initializers = $initializers; + } + + public function enterNode(Node $node) + { + if ($node instanceof ClassNode) { + foreach ($this->initializers as $initializer) { + $initializer->initialize($node->value); + } + } + } +}