Skip to content

Commit 22970e0

Browse files
committed
Merge branch '2.4'
* 2.4: added missing @deprecated tag Fixed recursion level incrementing in FlattenException::flattenArgs(). [HttpKernel] fixed wrong reference in TraceableEventDispatcher Conflicts: src/Symfony/Component/HttpKernel/Debug/TraceableEventDispatcher.php
2 parents bea1537 + aca1686 commit 22970e0

File tree

3 files changed

+34
-28
lines changed

3 files changed

+34
-28
lines changed

src/Symfony/Bundle/TwigBundle/Extension/ActionsExtension.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
* Twig extension for Symfony actions helper
1919
*
2020
* @author Fabien Potencier <[email protected]>
21+
*
22+
* @deprecated Deprecated in 2.2, to be removed in 3.0.
2123
*/
2224
class ActionsExtension extends \Twig_Extension
2325
{

src/Symfony/Component/Debug/Exception/FlattenException.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ private function flattenArgs($args, $level = 0)
249249
if ($level > 10) {
250250
$result[$key] = array('array', '*DEEP NESTED ARRAY*');
251251
} else {
252-
$result[$key] = array('array', $this->flattenArgs($value, ++$level));
252+
$result[$key] = array('array', $this->flattenArgs($value, $level + 1));
253253
}
254254
} elseif (null === $value) {
255255
$result[$key] = array('null', null);

src/Symfony/Component/EventDispatcher/Debug/TraceableEventDispatcher.php

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ class TraceableEventDispatcher implements TraceableEventDispatcherInterface
3232
private $dispatcher;
3333
private $wrappedListeners = array();
3434
private $firstCalledEvent = array();
35-
private $id;
3635
private $lastEventId = 0;
3736

3837
/**
@@ -106,17 +105,17 @@ public function dispatch($eventName, Event $event = null)
106105
$event = new Event();
107106
}
108107

109-
$this->id = $eventId = ++$this->lastEventId;
108+
$eventId = ++$this->lastEventId;
110109

111110
// Wrap all listeners before they are called
112-
$this->wrappedListeners[$this->id] = new \SplObjectStorage();
111+
$this->wrappedListeners[$eventId] = new \SplObjectStorage();
113112

114113
$listeners = $this->dispatcher->getListeners($eventName);
115114

116115
foreach ($listeners as $listener) {
117116
$this->dispatcher->removeListener($eventName, $listener);
118-
$wrapped = $this->wrapListener($eventName, $listener);
119-
$this->wrappedListeners[$this->id][$wrapped] = $listener;
117+
$wrapped = $this->wrapListener($eventName, $eventId, $listener);
118+
$this->wrappedListeners[$eventId][$wrapped] = $listener;
120119
$this->dispatcher->addListener($eventName, $wrapped);
121120
}
122121

@@ -132,9 +131,6 @@ public function dispatch($eventName, Event $event = null)
132131

133132
$this->dispatcher->dispatch($eventName, $event);
134133

135-
// reset the id as another event might have been dispatched during the dispatching of this event
136-
$this->id = $eventId;
137-
138134
unset($this->firstCalledEvent[$eventName]);
139135

140136
if ($e->isStarted()) {
@@ -144,12 +140,12 @@ public function dispatch($eventName, Event $event = null)
144140
$this->postDispatch($eventName, $event);
145141

146142
// Unwrap all listeners after they are called
147-
foreach ($this->wrappedListeners[$this->id] as $wrapped) {
143+
foreach ($this->wrappedListeners[$eventId] as $wrapped) {
148144
$this->dispatcher->removeListener($eventName, $wrapped);
149-
$this->dispatcher->addListener($eventName, $this->wrappedListeners[$this->id][$wrapped]);
145+
$this->dispatcher->addListener($eventName, $this->wrappedListeners[$eventId][$wrapped]);
150146
}
151147

152-
unset($this->wrappedListeners[$this->id]);
148+
unset($this->wrappedListeners[$eventId]);
153149

154150
return $event;
155151
}
@@ -171,7 +167,7 @@ public function getNotCalledListeners()
171167

172168
foreach ($this->getListeners() as $name => $listeners) {
173169
foreach ($listeners as $listener) {
174-
$info = $this->getListenerInfo($listener, $name);
170+
$info = $this->getListenerInfo($listener, $name, null);
175171
if (!isset($this->called[$name.'.'.$info['pretty']])) {
176172
$notCalled[$name.'.'.$info['pretty']] = $info;
177173
}
@@ -201,24 +197,24 @@ public function __call($method, $arguments)
201197
* Whenever Symfony will require PHP 5.4, this could be changed
202198
* to a proper private method.
203199
*/
204-
public function logSkippedListeners($eventName, Event $event, $listener)
200+
public function logSkippedListeners($eventName, $eventId, Event $event, $listener)
205201
{
206202
if (null === $this->logger) {
207203
return;
208204
}
209205

210-
$info = $this->getListenerInfo($listener, $eventName);
206+
$info = $this->getListenerInfo($listener, $eventName, $eventId);
211207

212208
$this->logger->debug(sprintf('Listener "%s" stopped propagation of the event "%s".', $info['pretty'], $eventName));
213209

214210
$skippedListeners = $this->getListeners($eventName);
215211
$skipped = false;
216212

217213
foreach ($skippedListeners as $skippedListener) {
218-
$skippedListener = $this->unwrapListener($skippedListener);
214+
$skippedListener = $this->unwrapListener($skippedListener, $eventId);
219215

220216
if ($skipped) {
221-
$info = $this->getListenerInfo($skippedListener, $eventName);
217+
$info = $this->getListenerInfo($skippedListener, $eventName, $eventId);
222218
$this->logger->debug(sprintf('Listener "%s" was not called for event "%s".', $info['pretty'], $eventName));
223219
}
224220

@@ -235,7 +231,7 @@ public function logSkippedListeners($eventName, Event $event, $listener)
235231
* Whenever Symfony will require PHP 5.4, this could be changed
236232
* to a proper private method.
237233
*/
238-
public function preListenerCall($eventName, $listener)
234+
public function preListenerCall($eventName, $eventId, $listener)
239235
{
240236
// is it the first called listener?
241237
if (isset($this->firstCalledEvent[$eventName])) {
@@ -244,7 +240,7 @@ public function preListenerCall($eventName, $listener)
244240
unset($this->firstCalledEvent[$eventName]);
245241
}
246242

247-
$info = $this->getListenerInfo($listener, $eventName);
243+
$info = $this->getListenerInfo($listener, $eventName, $eventId);
248244

249245
if (null !== $this->logger) {
250246
$this->logger->debug(sprintf('Notified event "%s" to listener "%s".', $eventName, $info['pretty']));
@@ -263,9 +259,9 @@ public function preListenerCall($eventName, $listener)
263259
*
264260
* @return array Information about the listener
265261
*/
266-
private function getListenerInfo($listener, $eventName)
262+
private function getListenerInfo($listener, $eventName, $eventId)
267263
{
268-
$listener = $this->unwrapListener($listener);
264+
$listener = $this->unwrapListener($listener, $eventId);
269265

270266
$info = array(
271267
'event' => $eventName,
@@ -337,12 +333,12 @@ protected function postDispatch($eventName, Event $event)
337333
{
338334
}
339335

340-
private function wrapListener($eventName, $listener)
336+
private function wrapListener($eventName, $eventId, $listener)
341337
{
342338
$self = $this;
343339

344-
return function (Event $event) use ($self, $eventName, $listener) {
345-
$e = $self->preListenerCall($eventName, $listener);
340+
return function (Event $event) use ($self, $eventName, $eventId, $listener) {
341+
$e = $self->preListenerCall($eventName, $eventId, $listener);
346342

347343
call_user_func($listener, $event, $eventName, $self);
348344

@@ -351,16 +347,24 @@ private function wrapListener($eventName, $listener)
351347
}
352348

353349
if ($event->isPropagationStopped()) {
354-
$self->logSkippedListeners($eventName, $event, $listener);
350+
$self->logSkippedListeners($eventName, $eventId, $event, $listener);
355351
}
356352
};
357353
}
358354

359-
private function unwrapListener($listener)
355+
private function unwrapListener($listener, $eventId)
360356
{
361357
// get the original listener
362-
if (is_object($listener) && isset($this->wrappedListeners[$this->id][$listener])) {
363-
return $this->wrappedListeners[$this->id][$listener];
358+
if (is_object($listener)) {
359+
if (null === $eventId) {
360+
foreach (array_keys($this->wrappedListeners) as $eventId) {
361+
if (isset($this->wrappedListeners[$eventId][$listener])) {
362+
return $this->wrappedListeners[$eventId][$listener];
363+
}
364+
}
365+
} elseif (isset($this->wrappedListeners[$eventId][$listener])) {
366+
return $this->wrappedListeners[$eventId][$listener];
367+
}
364368
}
365369

366370
return $listener;

0 commit comments

Comments
 (0)