[Fwb][EventDispatcher][HttpKernel] Fix getClosureScopeClass usage to describe callables
This commit is contained in:
parent
b6dac0f93a
commit
61e459234b
@ -374,10 +374,9 @@ class JsonDescriptor extends Descriptor
|
|||||||
}
|
}
|
||||||
$data['name'] = $r->name;
|
$data['name'] = $r->name;
|
||||||
|
|
||||||
$class = ($class = $r->getClosureThis()) ? \get_class($class) : null;
|
if ($class = $r->getClosureScopeClass()) {
|
||||||
if ($scopeClass = $r->getClosureScopeClass() ?: $class) {
|
$data['class'] = $class->name;
|
||||||
$data['class'] = $scopeClass;
|
if (!$r->getClosureThis()) {
|
||||||
if (!$class) {
|
|
||||||
$data['static'] = true;
|
$data['static'] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -360,10 +360,9 @@ class MarkdownDescriptor extends Descriptor
|
|||||||
}
|
}
|
||||||
$string .= "\n".sprintf('- Name: `%s`', $r->name);
|
$string .= "\n".sprintf('- Name: `%s`', $r->name);
|
||||||
|
|
||||||
$class = ($class = $r->getClosureThis()) ? \get_class($class) : null;
|
if ($class = $r->getClosureScopeClass()) {
|
||||||
if ($scopeClass = $r->getClosureScopeClass() ?: $class) {
|
$string .= "\n".sprintf('- Class: `%s`', $class->name);
|
||||||
$string .= "\n".sprintf('- Class: `%s`', $class);
|
if (!$r->getClosureThis()) {
|
||||||
if (!$class) {
|
|
||||||
$string .= "\n- Static: yes";
|
$string .= "\n- Static: yes";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -474,10 +474,7 @@ class TextDescriptor extends Descriptor
|
|||||||
return 'Closure()';
|
return 'Closure()';
|
||||||
}
|
}
|
||||||
if ($class = $r->getClosureScopeClass()) {
|
if ($class = $r->getClosureScopeClass()) {
|
||||||
return sprintf('%s::%s()', $class, $r->name);
|
return sprintf('%s::%s()', $class->name, $r->name);
|
||||||
}
|
|
||||||
if ($class = $r->getClosureThis()) {
|
|
||||||
return sprintf('%s::%s()', \get_class($class), $r->name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $r->name.'()';
|
return $r->name.'()';
|
||||||
|
@ -586,10 +586,9 @@ class XmlDescriptor extends Descriptor
|
|||||||
}
|
}
|
||||||
$callableXML->setAttribute('name', $r->name);
|
$callableXML->setAttribute('name', $r->name);
|
||||||
|
|
||||||
$class = ($class = $r->getClosureThis()) ? \get_class($class) : null;
|
if ($class = $r->getClosureScopeClass()) {
|
||||||
if ($scopeClass = $r->getClosureScopeClass() ?: $class) {
|
$callableXML->setAttribute('class', $class->name);
|
||||||
$callableXML->setAttribute('class', $class);
|
if (!$r->getClosureThis()) {
|
||||||
if (!$class) {
|
|
||||||
$callableXML->setAttribute('static', 'true');
|
$callableXML->setAttribute('static', 'true');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -155,7 +155,7 @@ class ObjectsProvider
|
|||||||
|
|
||||||
public static function getCallables()
|
public static function getCallables()
|
||||||
{
|
{
|
||||||
return array(
|
$callables = array(
|
||||||
'callable_1' => 'array_key_exists',
|
'callable_1' => 'array_key_exists',
|
||||||
'callable_2' => array('Symfony\\Bundle\\FrameworkBundle\\Tests\\Console\\Descriptor\\CallableClass', 'staticMethod'),
|
'callable_2' => array('Symfony\\Bundle\\FrameworkBundle\\Tests\\Console\\Descriptor\\CallableClass', 'staticMethod'),
|
||||||
'callable_3' => array(new CallableClass(), 'method'),
|
'callable_3' => array(new CallableClass(), 'method'),
|
||||||
@ -164,6 +164,12 @@ class ObjectsProvider
|
|||||||
'callable_6' => function () { return 'Closure'; },
|
'callable_6' => function () { return 'Closure'; },
|
||||||
'callable_7' => new CallableClass(),
|
'callable_7' => new CallableClass(),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (\PHP_VERSION_ID >= 70100) {
|
||||||
|
$callables['callable_from_callable'] = \Closure::fromCallable(new CallableClass());
|
||||||
|
}
|
||||||
|
|
||||||
|
return $callables;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"type": "closure",
|
||||||
|
"name": "__invoke",
|
||||||
|
"class": "Symfony\\Bundle\\FrameworkBundle\\Tests\\Console\\Descriptor\\CallableClass"
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
- Type: `closure`
|
||||||
|
- Name: `__invoke`
|
||||||
|
- Class: `Symfony\Bundle\FrameworkBundle\Tests\Console\Descriptor\CallableClass`
|
@ -0,0 +1 @@
|
|||||||
|
Symfony\Bundle\FrameworkBundle\Tests\Console\Descriptor\CallableClass::__invoke()
|
@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<callable type="closure" name="__invoke" class="Symfony\Bundle\FrameworkBundle\Tests\Console\Descriptor\CallableClass"/>
|
@ -46,10 +46,8 @@ class WrappedListener
|
|||||||
$r = new \ReflectionFunction($listener);
|
$r = new \ReflectionFunction($listener);
|
||||||
if (false !== strpos($r->name, '{closure}')) {
|
if (false !== strpos($r->name, '{closure}')) {
|
||||||
$this->pretty = $this->name = 'closure';
|
$this->pretty = $this->name = 'closure';
|
||||||
} elseif ($this->name = $r->getClosureScopeClass()) {
|
} elseif ($class = $r->getClosureScopeClass()) {
|
||||||
$this->pretty = $this->name.'::'.$r->name;
|
$this->name = $class->name;
|
||||||
} elseif ($class = $r->getClosureThis()) {
|
|
||||||
$this->name = \get_class($class);
|
|
||||||
$this->pretty = $this->name.'::'.$r->name;
|
$this->pretty = $this->name.'::'.$r->name;
|
||||||
} else {
|
} else {
|
||||||
$this->pretty = $this->name = $r->name;
|
$this->pretty = $this->name = $r->name;
|
||||||
|
@ -0,0 +1,64 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file is part of the Symfony package.
|
||||||
|
*
|
||||||
|
* (c) Fabien Potencier <fabien@symfony.com>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Symfony\Component\EventDispatcher\Tests\Debug;
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Symfony\Component\EventDispatcher\Debug\WrappedListener;
|
||||||
|
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||||
|
use Symfony\Component\Stopwatch\Stopwatch;
|
||||||
|
|
||||||
|
class WrappedListenerTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @dataProvider provideListenersToDescribe
|
||||||
|
*/
|
||||||
|
public function testListenerDescription(callable $listener, $expected)
|
||||||
|
{
|
||||||
|
$wrappedListener = new WrappedListener($listener, null, $this->getMockBuilder(Stopwatch::class)->getMock(), $this->getMockBuilder(EventDispatcherInterface::class)->getMock());
|
||||||
|
|
||||||
|
$this->assertStringMatchesFormat($expected, $wrappedListener->getPretty());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function provideListenersToDescribe()
|
||||||
|
{
|
||||||
|
$listeners = array(
|
||||||
|
array(new FooListener(), 'Symfony\Component\EventDispatcher\Tests\Debug\FooListener::__invoke'),
|
||||||
|
array(array(new FooListener(), 'listen'), 'Symfony\Component\EventDispatcher\Tests\Debug\FooListener::listen'),
|
||||||
|
array(array('Symfony\Component\EventDispatcher\Tests\Debug\FooListener', 'listenStatic'), 'Symfony\Component\EventDispatcher\Tests\Debug\FooListener::listenStatic'),
|
||||||
|
array('var_dump', 'var_dump'),
|
||||||
|
array(function () {}, 'closure'),
|
||||||
|
);
|
||||||
|
|
||||||
|
if (\PHP_VERSION_ID >= 70100) {
|
||||||
|
$listeners[] = array(\Closure::fromCallable(array(new FooListener(), 'listen')), 'Symfony\Component\EventDispatcher\Tests\Debug\FooListener::listen');
|
||||||
|
$listeners[] = array(\Closure::fromCallable(array('Symfony\Component\EventDispatcher\Tests\Debug\FooListener', 'listenStatic')), 'Symfony\Component\EventDispatcher\Tests\Debug\FooListener::listenStatic');
|
||||||
|
$listeners[] = array(\Closure::fromCallable(function () {}), 'closure');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $listeners;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class FooListener
|
||||||
|
{
|
||||||
|
public function listen()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __invoke()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function listenStatic()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
@ -393,9 +393,7 @@ class RequestDataCollector extends DataCollector implements EventSubscriberInter
|
|||||||
$controller['method'] = $r->name;
|
$controller['method'] = $r->name;
|
||||||
|
|
||||||
if ($class = $r->getClosureScopeClass()) {
|
if ($class = $r->getClosureScopeClass()) {
|
||||||
$controller['class'] = $class;
|
$controller['class'] = $class->name;
|
||||||
} elseif ($class = $r->getClosureThis()) {
|
|
||||||
$controller['class'] = \get_class($class);
|
|
||||||
} else {
|
} else {
|
||||||
return $r->name;
|
return $r->name;
|
||||||
}
|
}
|
||||||
|
@ -40,13 +40,7 @@ class ReflectionCaster
|
|||||||
$a = static::castFunctionAbstract($c, $a, $stub, $isNested, $filter);
|
$a = static::castFunctionAbstract($c, $a, $stub, $isNested, $filter);
|
||||||
|
|
||||||
if (false === strpos($c->name, '{closure}')) {
|
if (false === strpos($c->name, '{closure}')) {
|
||||||
if (isset($a[$prefix.'class'])) {
|
$stub->class = isset($a[$prefix.'class']) ? $a[$prefix.'class']->value.'::'.$c->name : $c->name;
|
||||||
$stub->class = $a[$prefix.'class']->value.'::'.$c->name;
|
|
||||||
} elseif (isset($a[$prefix.'this'])) {
|
|
||||||
$stub->class = $a[$prefix.'this']->class.'::'.$c->name;
|
|
||||||
} else {
|
|
||||||
$stub->class = $c->name;
|
|
||||||
}
|
|
||||||
unset($a[$prefix.'class']);
|
unset($a[$prefix.'class']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user