5d02848a0900315c399f1f8eac6f5d466d0081cb
[yaffs-website] / vendor / symfony / config / Definition / Builder / TreeBuilder.php
1 <?php
2
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11
12 namespace Symfony\Component\Config\Definition\Builder;
13
14 use Symfony\Component\Config\Definition\NodeInterface;
15
16 /**
17  * This is the entry class for building a config tree.
18  *
19  * @author Johannes M. Schmitt <schmittjoh@gmail.com>
20  */
21 class TreeBuilder implements NodeParentInterface
22 {
23     protected $tree;
24     protected $root;
25     protected $builder;
26
27     /**
28      * Creates the root node.
29      *
30      * @param string      $name    The name of the root node
31      * @param string      $type    The type of the root node
32      * @param NodeBuilder $builder A custom node builder instance
33      *
34      * @return ArrayNodeDefinition|NodeDefinition The root node (as an ArrayNodeDefinition when the type is 'array')
35      *
36      * @throws \RuntimeException When the node type is not supported
37      */
38     public function root($name, $type = 'array', NodeBuilder $builder = null)
39     {
40         $builder = $builder ?: new NodeBuilder();
41
42         return $this->root = $builder->node($name, $type)->setParent($this);
43     }
44
45     /**
46      * Builds the tree.
47      *
48      * @return NodeInterface
49      *
50      * @throws \RuntimeException
51      */
52     public function buildTree()
53     {
54         if (null === $this->root) {
55             throw new \RuntimeException('The configuration tree has no root node.');
56         }
57         if (null !== $this->tree) {
58             return $this->tree;
59         }
60
61         return $this->tree = $this->root->getNode(true);
62     }
63 }