Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 056768d

Browse files
committed
deprecate tree builders without root nodes
1 parent f065873 commit 056768d

File tree

24 files changed

+111
-79
lines changed

24 files changed

+111
-79
lines changed

UPGRADE-4.2.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ Cache
66

77
* Deprecated `CacheItem::getPreviousTags()`, use `CacheItem::getMetadata()` instead.
88

9+
Config
10+
------
11+
12+
* Deprecated constructing a `TreeBuilder` without passing root node information.
13+
914
Security
1015
--------
1116

UPGRADE-5.0.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ Cache
99
Config
1010
------
1111

12+
* Dropped support for constructing a `TreeBuilder` without passing root node information.
1213
* Added the `getChildNodeDefinitions()` method to `ParentNodeDefinitionInterface`.
1314
* The `Processor` class has been made final
1415

src/Symfony/Bundle/DebugBundle/DependencyInjection/Configuration.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,9 @@ class Configuration implements ConfigurationInterface
2626
*/
2727
public function getConfigTreeBuilder()
2828
{
29-
$treeBuilder = new TreeBuilder();
30-
$rootNode = $treeBuilder->root('debug');
29+
$treeBuilder = new TreeBuilder('debug');
3130

32-
$rootNode
31+
$treeBuilder->getRootNode()
3332
->children()
3433
->integerNode('max_items')
3534
->info('Max number of displayed items past the first level, -1 means no limit')

src/Symfony/Bundle/DebugBundle/composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,12 @@
2323
"symfony/var-dumper": "~4.1"
2424
},
2525
"require-dev": {
26-
"symfony/config": "~3.4|~4.0",
26+
"symfony/config": "~4.2",
2727
"symfony/dependency-injection": "~3.4|~4.0",
2828
"symfony/web-profiler-bundle": "~3.4|~4.0"
2929
},
3030
"conflict": {
31+
"symfony/config": "<4.2",
3132
"symfony/dependency-injection": "<3.4"
3233
},
3334
"suggest": {

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ public function __construct(bool $debug)
5454
*/
5555
public function getConfigTreeBuilder()
5656
{
57-
$treeBuilder = new TreeBuilder();
58-
$rootNode = $treeBuilder->root('framework');
57+
$treeBuilder = new TreeBuilder('framework');
58+
$rootNode = $treeBuilder->getRootNode();
5959

6060
$rootNode
6161
->beforeNormalization()

src/Symfony/Bundle/FrameworkBundle/Tests/Functional/Bundle/TestBundle/DependencyInjection/Configuration.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,10 @@ public function __construct($customConfig = null)
2525

2626
public function getConfigTreeBuilder()
2727
{
28-
$treeBuilder = new TreeBuilder();
29-
$rootNode = $treeBuilder->root('test');
28+
$treeBuilder = new TreeBuilder('test');
3029

3130
if ($this->customConfig) {
32-
$this->customConfig->addConfiguration($rootNode);
31+
$this->customConfig->addConfiguration($treeBuilder->getRootNode());
3332
}
3433

3534
return $treeBuilder;

src/Symfony/Bundle/FrameworkBundle/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
"ext-xml": "*",
2121
"symfony/cache": "~3.4|~4.0",
2222
"symfony/dependency-injection": "^4.1.1",
23-
"symfony/config": "~3.4|~4.0",
23+
"symfony/config": "~4.2",
2424
"symfony/event-dispatcher": "^4.1",
2525
"symfony/http-foundation": "^4.1",
2626
"symfony/http-kernel": "^4.1",

src/Symfony/Bundle/SecurityBundle/DependencyInjection/MainConfiguration.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ public function __construct(array $factories, array $userProviderFactories)
4141
*/
4242
public function getConfigTreeBuilder()
4343
{
44-
$tb = new TreeBuilder();
45-
$rootNode = $tb->root('security');
44+
$tb = new TreeBuilder('security');
45+
$rootNode = $tb->getRootNode();
4646

4747
$rootNode
4848
->beforeNormalization()

src/Symfony/Bundle/SecurityBundle/composer.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"require": {
1919
"php": "^7.1.3",
2020
"ext-xml": "*",
21+
"symfony/config": "^4.2",
2122
"symfony/security": "~4.2",
2223
"symfony/dependency-injection": "^3.4.3|^4.0.3",
2324
"symfony/http-kernel": "^4.1"
@@ -46,8 +47,8 @@
4647
"conflict": {
4748
"symfony/var-dumper": "<3.4",
4849
"symfony/event-dispatcher": "<3.4",
49-
"symfony/framework-bundle": "<4.1.1",
50-
"symfony/console": "<3.4"
50+
"symfony/console": "<3.4",
51+
"symfony/framework-bundle": "<4.1.1"
5152
},
5253
"autoload": {
5354
"psr-4": { "Symfony\\Bundle\\SecurityBundle\\": "" },

src/Symfony/Bundle/TwigBundle/DependencyInjection/Configuration.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ class Configuration implements ConfigurationInterface
2929
*/
3030
public function getConfigTreeBuilder()
3131
{
32-
$treeBuilder = new TreeBuilder();
33-
$rootNode = $treeBuilder->root('twig');
32+
$treeBuilder = new TreeBuilder('twig');
33+
$rootNode = $treeBuilder->getRootNode();
3434

3535
$rootNode
3636
->children()

src/Symfony/Bundle/TwigBundle/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
],
1818
"require": {
1919
"php": "^7.1.3",
20-
"symfony/config": "~3.4|~4.0",
20+
"symfony/config": "~4.2",
2121
"symfony/twig-bridge": "^3.4.3|^4.0.3",
2222
"symfony/http-foundation": "~3.4|~4.0",
2323
"symfony/http-kernel": "~3.4|~4.0",

src/Symfony/Bundle/WebProfilerBundle/DependencyInjection/Configuration.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,9 @@ class Configuration implements ConfigurationInterface
3131
*/
3232
public function getConfigTreeBuilder()
3333
{
34-
$treeBuilder = new TreeBuilder();
35-
$rootNode = $treeBuilder->root('web_profiler');
34+
$treeBuilder = new TreeBuilder('web_profiler');
3635

37-
$rootNode
36+
$treeBuilder->getRootNode()
3837
->children()
3938
->booleanNode('toolbar')->defaultFalse()->end()
4039
->booleanNode('intercept_redirects')->defaultFalse()->end()

src/Symfony/Bundle/WebProfilerBundle/composer.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,20 +17,19 @@
1717
],
1818
"require": {
1919
"php": "^7.1.3",
20+
"symfony/config": "^4.2",
2021
"symfony/http-kernel": "~4.1",
2122
"symfony/routing": "~3.4|~4.0",
2223
"symfony/twig-bundle": "^3.4.3|^4.0.3",
2324
"symfony/var-dumper": "~3.4|~4.0",
2425
"twig/twig": "~1.34|~2.4"
2526
},
2627
"require-dev": {
27-
"symfony/config": "~3.4|~4.0",
2828
"symfony/console": "~3.4|~4.0",
2929
"symfony/dependency-injection": "~3.4|~4.0",
3030
"symfony/stopwatch": "~3.4|~4.0"
3131
},
3232
"conflict": {
33-
"symfony/config": "<3.4",
3433
"symfony/dependency-injection": "<3.4",
3534
"symfony/event-dispatcher": "<3.4",
3635
"symfony/var-dumper": "<3.4"

src/Symfony/Component/Config/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
CHANGELOG
22
=========
33

4+
4.2.0
5+
-----
6+
7+
* deprecated constructing a `TreeBuilder` without passing root node information
8+
49
4.1.0
510
-----
611

src/Symfony/Component/Config/Definition/Builder/TreeBuilder.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,15 @@ class TreeBuilder implements NodeParentInterface
2424
protected $tree;
2525
protected $root;
2626

27+
public function __construct(string $name = null, string $type = 'array', NodeBuilder $builder = null)
28+
{
29+
if (null === $name) {
30+
@trigger_error('A tree builder without a root node is deprecated since Symfony 4.2 and will not be supported anymore in 5.0.', E_USER_DEPRECATED);
31+
} else {
32+
$this->root($name, $type, $builder);
33+
}
34+
}
35+
2736
/**
2837
* Creates the root node.
2938
*
@@ -42,6 +51,15 @@ public function root($name, $type = 'array', NodeBuilder $builder = null)
4251
return $this->root = $builder->node($name, $type)->setParent($this);
4352
}
4453

54+
public function getRootNode(): NodeDefinition
55+
{
56+
if (null === $this->root) {
57+
throw new \RuntimeException(sprintf('Calling %s() before creating the root node is not supported, migrate to the new constructor signature instead.', __METHOD__));
58+
}
59+
60+
return $this->root;
61+
}
62+
4563
/**
4664
* Builds the tree.
4765
*

src/Symfony/Component/Config/Tests/Definition/Builder/ExprBuilderTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,10 +212,10 @@ public function testEndThenPartNotSpecified()
212212
*/
213213
protected function getTestBuilder()
214214
{
215-
$builder = new TreeBuilder();
215+
$builder = new TreeBuilder('test');
216216

217217
return $builder
218-
->root('test')
218+
->getRootNode()
219219
->children()
220220
->variableNode('key')
221221
->validate()

src/Symfony/Component/Config/Tests/Definition/Builder/TreeBuilderTest.php

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,9 @@ class TreeBuilderTest extends TestCase
1919
{
2020
public function testUsingACustomNodeBuilder()
2121
{
22-
$builder = new TreeBuilder();
23-
$root = $builder->root('custom', 'array', new CustomNodeBuilder());
22+
$builder = new TreeBuilder('custom', 'array', new CustomNodeBuilder());
2423

25-
$nodeBuilder = $root->children();
24+
$nodeBuilder = $builder->getRootNode()->children();
2625

2726
$this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\Builder\NodeBuilder', $nodeBuilder);
2827

@@ -33,49 +32,46 @@ public function testUsingACustomNodeBuilder()
3332

3433
public function testOverrideABuiltInNodeType()
3534
{
36-
$builder = new TreeBuilder();
37-
$root = $builder->root('override', 'array', new CustomNodeBuilder());
35+
$builder = new TreeBuilder('override', 'array', new CustomNodeBuilder());
3836

39-
$definition = $root->children()->variableNode('variable');
37+
$definition = $builder->getRootNode()->children()->variableNode('variable');
4038

4139
$this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\Builder\VariableNodeDefinition', $definition);
4240
}
4341

4442
public function testAddANodeType()
4543
{
46-
$builder = new TreeBuilder();
47-
$root = $builder->root('override', 'array', new CustomNodeBuilder());
44+
$builder = new TreeBuilder('override', 'array', new CustomNodeBuilder());
4845

49-
$definition = $root->children()->barNode('variable');
46+
$definition = $builder->getRootNode()->children()->barNode('variable');
5047

5148
$this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\Builder\BarNodeDefinition', $definition);
5249
}
5350

5451
public function testCreateABuiltInNodeTypeWithACustomNodeBuilder()
5552
{
56-
$builder = new TreeBuilder();
57-
$root = $builder->root('builtin', 'array', new CustomNodeBuilder());
53+
$builder = new TreeBuilder('builtin', 'array', new CustomNodeBuilder());
5854

59-
$definition = $root->children()->booleanNode('boolean');
55+
$definition = $builder->getRootNode()->children()->booleanNode('boolean');
6056

6157
$this->assertInstanceOf('Symfony\Component\Config\Definition\Builder\BooleanNodeDefinition', $definition);
6258
}
6359

6460
public function testPrototypedArrayNodeUseTheCustomNodeBuilder()
6561
{
66-
$builder = new TreeBuilder();
67-
$root = $builder->root('override', 'array', new CustomNodeBuilder());
62+
$builder = new TreeBuilder('override', 'array', new CustomNodeBuilder());
6863

64+
$root = $builder->getRootNode();
6965
$root->prototype('bar')->end();
7066

7167
$this->assertInstanceOf('Symfony\Component\Config\Tests\Fixtures\BarNode', $root->getNode(true)->getPrototype());
7268
}
7369

7470
public function testAnExtendedNodeBuilderGetsPropagatedToTheChildren()
7571
{
76-
$builder = new TreeBuilder();
72+
$builder = new TreeBuilder('propagation');
7773

78-
$builder->root('propagation')
74+
$builder->getRootNode()
7975
->children()
8076
->setNodeClass('extended', 'Symfony\Component\Config\Definition\Builder\BooleanNodeDefinition')
8177
->node('foo', 'extended')->end()
@@ -99,9 +95,9 @@ public function testAnExtendedNodeBuilderGetsPropagatedToTheChildren()
9995

10096
public function testDefinitionInfoGetsTransferredToNode()
10197
{
102-
$builder = new TreeBuilder();
98+
$builder = new TreeBuilder('test');
10399

104-
$builder->root('test')->info('root info')
100+
$builder->getRootNode()->info('root info')
105101
->children()
106102
->node('child', 'variable')->info('child info')->defaultValue('default')
107103
->end()
@@ -116,9 +112,9 @@ public function testDefinitionInfoGetsTransferredToNode()
116112

117113
public function testDefinitionExampleGetsTransferredToNode()
118114
{
119-
$builder = new TreeBuilder();
115+
$builder = new TreeBuilder('test');
120116

121-
$builder->root('test')
117+
$builder->getRootNode()
122118
->example(array('key' => 'value'))
123119
->children()
124120
->node('child', 'variable')->info('child info')->defaultValue('default')->example('example')
@@ -134,9 +130,9 @@ public function testDefinitionExampleGetsTransferredToNode()
134130

135131
public function testDefaultPathSeparatorIsDot()
136132
{
137-
$builder = new TreeBuilder();
133+
$builder = new TreeBuilder('propagation');
138134

139-
$builder->root('propagation')
135+
$builder->getRootNode()
140136
->children()
141137
->node('foo', 'variable')->end()
142138
->arrayNode('child')
@@ -164,9 +160,9 @@ public function testDefaultPathSeparatorIsDot()
164160

165161
public function testPathSeparatorIsPropagatedToChildren()
166162
{
167-
$builder = new TreeBuilder();
163+
$builder = new TreeBuilder('propagation');
168164

169-
$builder->root('propagation')
165+
$builder->getRootNode()
170166
->children()
171167
->node('foo', 'variable')->end()
172168
->arrayNode('child')
@@ -192,4 +188,13 @@ public function testPathSeparatorIsPropagatedToChildren()
192188
$this->assertInstanceOf('Symfony\Component\Config\Definition\BaseNode', $childChildren['foo']);
193189
$this->assertSame('propagation/child/foo', $childChildren['foo']->getPath());
194190
}
191+
192+
/**
193+
* @group legacy
194+
* @expectedDeprecation A tree builder without a root node is deprecated since Symfony 4.2 and will not be supported anymore in 5.0.
195+
*/
196+
public function testInitializingTreeBuildersWithoutRootNode()
197+
{
198+
new TreeBuilder();
199+
}
195200
}

src/Symfony/Component/Config/Tests/Definition/FinalizationTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ class FinalizationTest extends TestCase
2020
{
2121
public function testUnsetKeyWithDeepHierarchy()
2222
{
23-
$tb = new TreeBuilder();
23+
$tb = new TreeBuilder('config', 'array');
2424
$tree = $tb
25-
->root('config', 'array')
25+
->getRootNode()
2626
->children()
2727
->node('level1', 'array')
2828
->canBeUnset()

0 commit comments

Comments
 (0)