Skip to content

Commit

Permalink
Improve displaying anonymous classes
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolas-grekas committed Jan 26, 2020
1 parent 1123f84 commit 49b8570
Show file tree
Hide file tree
Showing 5 changed files with 7 additions and 7 deletions.
2 changes: 1 addition & 1 deletion Caster/Caster.php
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ public static function castObject(object $obj, string $class, bool $hasDebugInfo
$prefixedKeys[$i] = self::PREFIX_DYNAMIC.$k;
}
} elseif (isset($k[16]) && "\0" === $k[16] && 0 === strpos($k, "\0class@anonymous\0")) {
$prefixedKeys[$i] = "\0".get_parent_class($class).'@anonymous'.strrchr($k, "\0");
$prefixedKeys[$i] = "\0".(get_parent_class($class) ?: key(class_implements($class))).'@anonymous'.strrchr($k, "\0");
}
++$i;
}
Expand Down
2 changes: 1 addition & 1 deletion Caster/ClassStub.php
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public function __construct(string $identifier, $callable = null)

if (false !== strpos($identifier, "class@anonymous\0")) {
$this->value = $identifier = preg_replace_callback('/class@anonymous\x00.*?\.php(?:0x?|:[0-9]++\$)[0-9a-fA-F]++/', function ($m) {
return class_exists($m[0], false) ? get_parent_class($m[0]).'@anonymous' : $m[0];
return class_exists($m[0], false) ? (get_parent_class($m[0]) ?: key(class_implements($m[0]))).'@anonymous' : $m[0];
}, $identifier);
}

Expand Down
4 changes: 2 additions & 2 deletions Caster/ExceptionCaster.php
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ public static function castThrowingCasterException(ThrowingCasterException $e, a
if (isset($a[$xPrefix.'previous'], $a[$trace]) && $a[$xPrefix.'previous'] instanceof \Exception) {
$b = (array) $a[$xPrefix.'previous'];
$class = \get_class($a[$xPrefix.'previous']);
$class = 'c' === $class[0] && 0 === strpos($class, "class@anonymous\0") ? get_parent_class($class).'@anonymous' : $class;
$class = 'c' === $class[0] && 0 === strpos($class, "class@anonymous\0") ? (get_parent_class($class) ?: key(class_implements($class))).'@anonymous' : $class;
self::traceUnshift($b[$xPrefix.'trace'], $class, $b[$prefix.'file'], $b[$prefix.'line']);
$a[$trace] = new TraceStub($b[$xPrefix.'trace'], false, 0, -\count($a[$trace]->value));
}
Expand Down Expand Up @@ -284,7 +284,7 @@ private static function filterExceptionArray(string $xClass, array $a, string $x

if (isset($a[Caster::PREFIX_PROTECTED.'message']) && false !== strpos($a[Caster::PREFIX_PROTECTED.'message'], "class@anonymous\0")) {
$a[Caster::PREFIX_PROTECTED.'message'] = preg_replace_callback('/class@anonymous\x00.*?\.php(?:0x?|:[0-9]++\$)[0-9a-fA-F]++/', function ($m) {
return class_exists($m[0], false) ? get_parent_class($m[0]).'@anonymous' : $m[0];
return class_exists($m[0], false) ? (get_parent_class($m[0]) ?: key(class_implements($m[0]))).'@anonymous' : $m[0];
}, $a[Caster::PREFIX_PROTECTED.'message']);
}

Expand Down
2 changes: 1 addition & 1 deletion Cloner/AbstractCloner.php
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ protected function castObject(Stub $stub, bool $isNested)
$class = $stub->class;

if (isset($class[15]) && "\0" === $class[15] && 0 === strpos($class, "class@anonymous\x00")) {
$stub->class = get_parent_class($class).'@anonymous';
$stub->class = (get_parent_class($class) ?: key(class_implements($class))).'@anonymous';
}
if (isset($this->classInfo[$class])) {
list($i, $parents, $hasDebugInfo, $fileInfo) = $this->classInfo[$class];
Expand Down
4 changes: 2 additions & 2 deletions Tests/Caster/CasterTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -164,11 +164,11 @@ public function testAnonymousClass()
, $c
);

$c = eval('return new class { private $foo = "foo"; };');
$c = eval('return new class implements \Countable { private $foo = "foo"; public function count() { return 0; } };');

$this->assertDumpMatchesFormat(
<<<'EOTXT'
@anonymous {
Countable@anonymous {
-foo: "foo"
}
EOTXT
Expand Down

0 comments on commit 49b8570

Please sign in to comment.