Skip to content

Commit aca1686

Browse files
committed
Merge branch '2.3' into 2.4
* 2.3: 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 3d91128 + 6a4d765 commit aca1686

File tree

3 files changed

+38
-32
lines changed

3 files changed

+38
-32
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/HttpKernel/Debug/TraceableEventDispatcher.php

Lines changed: 35 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ class TraceableEventDispatcher implements EventDispatcherInterface, TraceableEve
3535
private $dispatcher;
3636
private $wrappedListeners = array();
3737
private $firstCalledEvent = array();
38-
private $id;
3938
private $lastEventId = 0;
4039

4140
/**
@@ -124,9 +123,9 @@ public function dispatch($eventName, Event $event = null)
124123
$event = new Event();
125124
}
126125

127-
$this->id = $eventId = ++$this->lastEventId;
126+
$eventId = ++$this->lastEventId;
128127

129-
$this->preDispatch($eventName, $event);
128+
$this->preDispatch($eventName, $eventId, $event);
130129

131130
$e = $this->stopwatch->start($eventName, 'section');
132131

@@ -138,16 +137,13 @@ public function dispatch($eventName, Event $event = null)
138137

139138
$this->dispatcher->dispatch($eventName, $event);
140139

141-
// reset the id as another event might have been dispatched during the dispatching of this event
142-
$this->id = $eventId;
143-
144140
unset($this->firstCalledEvent[$eventName]);
145141

146142
if ($e->isStarted()) {
147143
$e->stop();
148144
}
149145

150-
$this->postDispatch($eventName, $event);
146+
$this->postDispatch($eventName, $eventId, $event);
151147

152148
return $event;
153149
}
@@ -169,7 +165,7 @@ public function getNotCalledListeners()
169165

170166
foreach ($this->getListeners() as $name => $listeners) {
171167
foreach ($listeners as $listener) {
172-
$info = $this->getListenerInfo($listener, $name);
168+
$info = $this->getListenerInfo($listener, null, $name);
173169
if (!isset($this->called[$name.'.'.$info['pretty']])) {
174170
$notCalled[$name.'.'.$info['pretty']] = $info;
175171
}
@@ -199,24 +195,24 @@ public function __call($method, $arguments)
199195
* Whenever Symfony will require PHP 5.4, this could be changed
200196
* to a proper private method.
201197
*/
202-
public function logSkippedListeners($eventName, Event $event, $listener)
198+
public function logSkippedListeners($eventName, $eventId, Event $event, $listener)
203199
{
204200
if (null === $this->logger) {
205201
return;
206202
}
207203

208-
$info = $this->getListenerInfo($listener, $eventName);
204+
$info = $this->getListenerInfo($listener, $eventId, $eventName);
209205

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

212208
$skippedListeners = $this->getListeners($eventName);
213209
$skipped = false;
214210

215211
foreach ($skippedListeners as $skippedListener) {
216-
$skippedListener = $this->unwrapListener($skippedListener);
212+
$skippedListener = $this->unwrapListener($skippedListener, $eventId);
217213

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

@@ -233,7 +229,7 @@ public function logSkippedListeners($eventName, Event $event, $listener)
233229
* Whenever Symfony will require PHP 5.4, this could be changed
234230
* to a proper private method.
235231
*/
236-
public function preListenerCall($eventName, $listener)
232+
public function preListenerCall($eventName, $eventId, $listener)
237233
{
238234
// is it the first called listener?
239235
if (isset($this->firstCalledEvent[$eventName])) {
@@ -242,7 +238,7 @@ public function preListenerCall($eventName, $listener)
242238
unset($this->firstCalledEvent[$eventName]);
243239
}
244240

245-
$info = $this->getListenerInfo($listener, $eventName);
241+
$info = $this->getListenerInfo($listener, $eventId, $eventName);
246242

247243
if (null !== $this->logger) {
248244
$this->logger->debug(sprintf('Notified event "%s" to listener "%s".', $eventName, $info['pretty']));
@@ -261,9 +257,9 @@ public function preListenerCall($eventName, $listener)
261257
*
262258
* @return array Information about the listener
263259
*/
264-
private function getListenerInfo($listener, $eventName)
260+
private function getListenerInfo($listener, $eventId, $eventName)
265261
{
266-
$listener = $this->unwrapListener($listener);
262+
$listener = $this->unwrapListener($listener, $eventId);
267263

268264
$info = array(
269265
'event' => $eventName,
@@ -315,17 +311,17 @@ private function getListenerInfo($listener, $eventName)
315311
return $info;
316312
}
317313

318-
private function preDispatch($eventName, Event $event)
314+
private function preDispatch($eventName, $eventId, Event $event)
319315
{
320316
// wrap all listeners before they are called
321-
$this->wrappedListeners[$this->id] = new \SplObjectStorage();
317+
$this->wrappedListeners[$eventId] = new \SplObjectStorage();
322318

323319
$listeners = $this->dispatcher->getListeners($eventName);
324320

325321
foreach ($listeners as $listener) {
326322
$this->dispatcher->removeListener($eventName, $listener);
327-
$wrapped = $this->wrapListener($eventName, $listener);
328-
$this->wrappedListeners[$this->id][$wrapped] = $listener;
323+
$wrapped = $this->wrapListener($eventName, $eventId, $listener);
324+
$this->wrappedListeners[$eventId][$wrapped] = $listener;
329325
$this->dispatcher->addListener($eventName, $wrapped);
330326
}
331327

@@ -354,7 +350,7 @@ private function preDispatch($eventName, Event $event)
354350
}
355351
}
356352

357-
private function postDispatch($eventName, Event $event)
353+
private function postDispatch($eventName, $eventId, Event $event)
358354
{
359355
switch ($eventName) {
360356
case KernelEvents::CONTROLLER:
@@ -374,20 +370,20 @@ private function postDispatch($eventName, Event $event)
374370
break;
375371
}
376372

377-
foreach ($this->wrappedListeners[$this->id] as $wrapped) {
373+
foreach ($this->wrappedListeners[$eventId] as $wrapped) {
378374
$this->dispatcher->removeListener($eventName, $wrapped);
379-
$this->dispatcher->addListener($eventName, $this->wrappedListeners[$this->id][$wrapped]);
375+
$this->dispatcher->addListener($eventName, $this->wrappedListeners[$eventId][$wrapped]);
380376
}
381377

382-
unset($this->wrappedListeners[$this->id]);
378+
unset($this->wrappedListeners[$eventId]);
383379
}
384380

385-
private function wrapListener($eventName, $listener)
381+
private function wrapListener($eventName, $eventId, $listener)
386382
{
387383
$self = $this;
388384

389-
return function (Event $event) use ($self, $eventName, $listener) {
390-
$e = $self->preListenerCall($eventName, $listener);
385+
return function (Event $event) use ($self, $eventName, $eventId, $listener) {
386+
$e = $self->preListenerCall($eventName, $eventId, $listener);
391387

392388
call_user_func($listener, $event, $eventName, $self);
393389

@@ -396,16 +392,24 @@ private function wrapListener($eventName, $listener)
396392
}
397393

398394
if ($event->isPropagationStopped()) {
399-
$self->logSkippedListeners($eventName, $event, $listener);
395+
$self->logSkippedListeners($eventName, $eventId, $event, $listener);
400396
}
401397
};
402398
}
403399

404-
private function unwrapListener($listener)
400+
private function unwrapListener($listener, $eventId)
405401
{
406402
// get the original listener
407-
if (is_object($listener) && isset($this->wrappedListeners[$this->id][$listener])) {
408-
return $this->wrappedListeners[$this->id][$listener];
403+
if (is_object($listener)) {
404+
if (null === $eventId) {
405+
foreach (array_keys($this->wrappedListeners) as $eventId) {
406+
if (isset($this->wrappedListeners[$eventId][$listener])) {
407+
return $this->wrappedListeners[$eventId][$listener];
408+
}
409+
}
410+
} elseif (isset($this->wrappedListeners[$eventId][$listener])) {
411+
return $this->wrappedListeners[$eventId][$listener];
412+
}
409413
}
410414

411415
return $listener;

0 commit comments

Comments
 (0)