Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit ee5881b

Browse filesBrowse files
committed
check for circular refs caused by method calls
1 parent a35986f commit ee5881b
Copy full SHA for ee5881b

File tree

Expand file treeCollapse file tree

5 files changed

+31
-14
lines changed
Filter options
Expand file treeCollapse file tree

5 files changed

+31
-14
lines changed

‎src/Symfony/Component/DependencyInjection/Compiler/PassConfig.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/DependencyInjection/Compiler/PassConfig.php
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ public function __construct()
6363
new RemoveUnusedDefinitionsPass(),
6464
)),
6565
new CheckExceptionOnInvalidReferenceBehaviorPass(),
66+
new CheckCircularReferencesPass(),
6667
);
6768
}
6869

‎src/Symfony/Component/DependencyInjection/Tests/Compiler/IntegrationTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/DependencyInjection/Tests/Compiler/IntegrationTest.php
+26Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,4 +113,30 @@ public function testProcessInlinesWhenThereAreMultipleReferencesButFromTheSameDe
113113
$this->assertFalse($container->hasDefinition('b'));
114114
$this->assertFalse($container->hasDefinition('c'), 'Service C was not inlined.');
115115
}
116+
117+
/**
118+
* @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException
119+
*/
120+
public function testCircularReferencesCausedByMethodCallsAreDetectedDuringCompilation()
121+
{
122+
$container = new ContainerBuilder();
123+
$container->setResourceTracking(false);
124+
125+
$container
126+
->register('foobar', '\stdClass')
127+
->addArgument(new Reference('foo'))
128+
;
129+
130+
$container
131+
->register('foo', '\stdClass')
132+
->addArgument(new Reference('bar'))
133+
;
134+
135+
$container
136+
->register('foo', '\stdClass')
137+
->addMethodCall('addFoobar', array(new Reference('foobar')))
138+
;
139+
140+
$container->compile();
141+
}
116142
}

‎src/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container9.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/DependencyInjection/Tests/Fixtures/containers/container9.php
-1Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@
6464
;
6565
$container
6666
->register('baz', 'Baz')
67-
->addMethodCall('setFoo', array(new Reference('foo_with_inline')))
6867
;
6968
$container
7069
->register('request', 'Request')

‎src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9.php
+1-5Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,7 @@ protected function getBarService()
8080
*/
8181
protected function getBazService()
8282
{
83-
$this->services['baz'] = $instance = new \Baz();
84-
85-
$instance->setFoo($this->get('foo_with_inline'));
86-
87-
return $instance;
83+
return $this->services['baz'] = new \Baz();
8884
}
8985

9086
/**

‎src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_compiled.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/DependencyInjection/Tests/Fixtures/php/services9_compiled.php
+3-8Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,7 @@ protected function getBarService()
9999
*/
100100
protected function getBazService()
101101
{
102-
$this->services['baz'] = $instance = new \Baz();
103-
104-
$instance->setFoo($this->get('foo_with_inline'));
105-
106-
return $instance;
102+
return $this->services['baz'] = new \Baz();
107103
}
108104

109105
/**
@@ -227,12 +223,11 @@ protected function getFooBarService()
227223
protected function getFooWithInlineService()
228224
{
229225
$a = new \Bar();
230-
231-
$this->services['foo_with_inline'] = $instance = new \Foo();
232-
233226
$a->pub = 'pub';
234227
$a->setBaz($this->get('baz'));
235228

229+
$this->services['foo_with_inline'] = $instance = new \Foo();
230+
236231
$instance->setBar($a);
237232

238233
return $instance;

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.