From 65da4d51049357448d7b3852919c37c8f0d23509 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Sun, 25 Oct 2015 18:17:38 +0100 Subject: [PATCH] [VarDumper] Fix anonymous class dumping --- src/Symfony/Component/VarDumper/Caster/Caster.php | 2 +- .../Component/VarDumper/Cloner/AbstractCloner.php | 8 +++----- .../Component/VarDumper/Tests/Caster/CasterTest.php | 13 ++++++++++++- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/Symfony/Component/VarDumper/Caster/Caster.php b/src/Symfony/Component/VarDumper/Caster/Caster.php index 6345ad7fde..23e72e8770 100644 --- a/src/Symfony/Component/VarDumper/Caster/Caster.php +++ b/src/Symfony/Component/VarDumper/Caster/Caster.php @@ -55,7 +55,7 @@ class Caster if (!isset($k[0]) || ("\0" !== $k[0] && !$reflector->hasProperty($k))) { $p[$i] = self::PREFIX_DYNAMIC.$k; } elseif (isset($k[16]) && "\0" === $k[16] && 0 === strpos($k, "\0class@anonymous\0")) { - $p[$i] = "\0anonymous-".$reflector->name.strrchr($k, "\0"); + $p[$i] = "\0".$reflector->getParentClass().'@anonymous'.strrchr($k, "\0"); } } $a = array_combine($p, $a); diff --git a/src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php b/src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php index 9a29dd5e20..613faec79f 100644 --- a/src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php +++ b/src/Symfony/Component/VarDumper/Cloner/AbstractCloner.php @@ -209,14 +209,12 @@ abstract class AbstractCloner implements ClonerInterface $class = $stub->class; if (isset($class[15]) && "\0" === $class[15] && 0 === strpos($class, "class@anonymous\x00")) { - $class = get_parent_class($class); - $stub->class = 'anonymous-'.$class; + $stub->class = get_parent_class($class).'@anonymous'; } if (isset($this->classInfo[$class])) { $classInfo = $this->classInfo[$class]; } else { $classInfo = array( - $class, new \ReflectionClass($class), array_reverse(array($class => $class) + class_parents($class) + class_implements($class) + array('*' => '*')), ); @@ -224,9 +222,9 @@ abstract class AbstractCloner implements ClonerInterface $this->classInfo[$class] = $classInfo; } - $a = $this->callCaster('Symfony\Component\VarDumper\Caster\Caster::castObject', $obj, $classInfo[1], null, $isNested); + $a = $this->callCaster('Symfony\Component\VarDumper\Caster\Caster::castObject', $obj, $classInfo[0], null, $isNested); - foreach ($classInfo[2] as $p) { + foreach ($classInfo[1] as $p) { if (!empty($this->casters[$p = strtolower($p)])) { foreach ($this->casters[$p] as $p) { $a = $this->callCaster($p, $obj, $a, $stub, $isNested); diff --git a/src/Symfony/Component/VarDumper/Tests/Caster/CasterTest.php b/src/Symfony/Component/VarDumper/Tests/Caster/CasterTest.php index 1f30f2aa34..2c42a90660 100644 --- a/src/Symfony/Component/VarDumper/Tests/Caster/CasterTest.php +++ b/src/Symfony/Component/VarDumper/Tests/Caster/CasterTest.php @@ -157,7 +157,18 @@ class CasterTest extends VarDumperTestCase $this->assertDumpMatchesFormat( <<<'EOTXT' -anonymous-stdClass { +stdClass@anonymous { + -foo: "foo" +} +EOTXT + , $c + ); + + $c = eval('return new class { private $foo = "foo"; };'); + + $this->assertDumpMatchesFormat( + <<<'EOTXT' +@anonymous { -foo: "foo" } EOTXT