Improve displaying anonymous classes
This commit is contained in:
parent
524ee7acb6
commit
487bcc6200
@ -776,7 +776,7 @@ class Application implements ResetInterface
|
|||||||
$message = trim($e->getMessage());
|
$message = trim($e->getMessage());
|
||||||
if ('' === $message || OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity()) {
|
if ('' === $message || OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity()) {
|
||||||
$class = \get_class($e);
|
$class = \get_class($e);
|
||||||
$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;
|
||||||
$title = sprintf(' [%s%s] ', $class, 0 !== ($code = $e->getCode()) ? ' ('.$code.')' : '');
|
$title = sprintf(' [%s%s] ', $class, 0 !== ($code = $e->getCode()) ? ' ('.$code.')' : '');
|
||||||
$len = Helper::strlen($title);
|
$len = Helper::strlen($title);
|
||||||
} else {
|
} else {
|
||||||
@ -785,7 +785,7 @@ class Application implements ResetInterface
|
|||||||
|
|
||||||
if (false !== strpos($message, "class@anonymous\0")) {
|
if (false !== strpos($message, "class@anonymous\0")) {
|
||||||
$message = preg_replace_callback('/class@anonymous\x00.*?\.php(?:0x?|:[0-9]++\$)[0-9a-fA-F]++/', function ($m) {
|
$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];
|
||||||
}, $message);
|
}, $message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -406,7 +406,7 @@ class DebugClassLoader
|
|||||||
}
|
}
|
||||||
$deprecations = [];
|
$deprecations = [];
|
||||||
|
|
||||||
$className = isset($class[15]) && "\0" === $class[15] && 0 === strpos($class, "class@anonymous\x00") ? get_parent_class($class).'@anonymous' : $class;
|
$className = isset($class[15]) && "\0" === $class[15] && 0 === strpos($class, "class@anonymous\x00") ? (get_parent_class($class) ?: key(class_implements($class))).'@anonymous' : $class;
|
||||||
|
|
||||||
// Don't trigger deprecations for classes in the same vendor
|
// Don't trigger deprecations for classes in the same vendor
|
||||||
if ($class !== $className) {
|
if ($class !== $className) {
|
||||||
|
@ -762,7 +762,7 @@ class ErrorHandler
|
|||||||
private function parseAnonymousClass(string $message): string
|
private function parseAnonymousClass(string $message): string
|
||||||
{
|
{
|
||||||
return preg_replace_callback('/class@anonymous\x00.*?\.php(?:0x?|:[0-9]++\$)[0-9a-fA-F]++/', static function ($m) {
|
return preg_replace_callback('/class@anonymous\x00.*?\.php(?:0x?|:[0-9]++\$)[0-9a-fA-F]++/', static 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];
|
||||||
}, $message);
|
}, $message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -142,7 +142,7 @@ class FlattenException
|
|||||||
*/
|
*/
|
||||||
public function setClass($class): self
|
public function setClass($class): self
|
||||||
{
|
{
|
||||||
$this->class = 'c' === $class[0] && 0 === strpos($class, "class@anonymous\0") ? get_parent_class($class).'@anonymous' : $class;
|
$this->class = 'c' === $class[0] && 0 === strpos($class, "class@anonymous\0") ? (get_parent_class($class) ?: key(class_implements($class))).'@anonymous' : $class;
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
@ -201,7 +201,7 @@ class FlattenException
|
|||||||
{
|
{
|
||||||
if (false !== strpos($message, "class@anonymous\0")) {
|
if (false !== strpos($message, "class@anonymous\0")) {
|
||||||
$message = preg_replace_callback('/class@anonymous\x00.*?\.php(?:0x?|:[0-9]++\$)[0-9a-fA-F]++/', function ($m) {
|
$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];
|
||||||
}, $message);
|
}, $message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,7 +219,7 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
|
|||||||
{
|
{
|
||||||
if (!isset($this->bundles[$name])) {
|
if (!isset($this->bundles[$name])) {
|
||||||
$class = \get_class($this);
|
$class = \get_class($this);
|
||||||
$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;
|
||||||
|
|
||||||
throw new \InvalidArgumentException(sprintf('Bundle "%s" does not exist or it is not enabled. Maybe you forgot to add it in the registerBundles() method of your %s.php file?', $name, $class));
|
throw new \InvalidArgumentException(sprintf('Bundle "%s" does not exist or it is not enabled. Maybe you forgot to add it in the registerBundles() method of your %s.php file?', $name, $class));
|
||||||
}
|
}
|
||||||
@ -394,7 +394,7 @@ abstract class Kernel implements KernelInterface, RebootableInterface, Terminabl
|
|||||||
protected function getContainerClass()
|
protected function getContainerClass()
|
||||||
{
|
{
|
||||||
$class = \get_class($this);
|
$class = \get_class($this);
|
||||||
$class = 'c' === $class[0] && 0 === strpos($class, "class@anonymous\0") ? get_parent_class($class).str_replace('.', '_', ContainerBuilder::hash($class)) : $class;
|
$class = 'c' === $class[0] && 0 === strpos($class, "class@anonymous\0") ? (get_parent_class($class) ?: key(class_implements($class))).str_replace('.', '_', ContainerBuilder::hash($class)) : $class;
|
||||||
$class = str_replace('\\', '_', $class).ucfirst($this->environment).($this->debug ? 'Debug' : '').'Container';
|
$class = str_replace('\\', '_', $class).ucfirst($this->environment).($this->debug ? 'Debug' : '').'Container';
|
||||||
if (!preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/', $class)) {
|
if (!preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*$/', $class)) {
|
||||||
throw new \InvalidArgumentException(sprintf('The environment "%s" contains invalid characters, it can only contain characters allowed in PHP class names.', $this->environment));
|
throw new \InvalidArgumentException(sprintf('The environment "%s" contains invalid characters, it can only contain characters allowed in PHP class names.', $this->environment));
|
||||||
|
@ -79,7 +79,7 @@ class TraceableStack implements StackInterface
|
|||||||
$this->currentEvent = 'Tail';
|
$this->currentEvent = 'Tail';
|
||||||
} else {
|
} else {
|
||||||
$class = \get_class($nextMiddleware);
|
$class = \get_class($nextMiddleware);
|
||||||
$this->currentEvent = sprintf('"%s"', 'c' === $class[0] && 0 === strpos($class, "class@anonymous\0") ? get_parent_class($class).'@anonymous' : $class);
|
$this->currentEvent = sprintf('"%s"', 'c' === $class[0] && 0 === strpos($class, "class@anonymous\0") ? (get_parent_class($class) ?: key(class_implements($class))).'@anonymous' : $class);
|
||||||
}
|
}
|
||||||
$this->currentEvent .= sprintf(' on "%s"', $this->busName);
|
$this->currentEvent .= sprintf(' on "%s"', $this->busName);
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ class Caster
|
|||||||
$prefixedKeys[$i] = self::PREFIX_DYNAMIC.$k;
|
$prefixedKeys[$i] = self::PREFIX_DYNAMIC.$k;
|
||||||
}
|
}
|
||||||
} elseif (isset($k[16]) && "\0" === $k[16] && 0 === strpos($k, "\0class@anonymous\0")) {
|
} 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;
|
++$i;
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,7 @@ class ClassStub extends ConstStub
|
|||||||
|
|
||||||
if (false !== strpos($identifier, "class@anonymous\0")) {
|
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) {
|
$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);
|
}, $identifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ class ExceptionCaster
|
|||||||
if (isset($a[$xPrefix.'previous'], $a[$trace]) && $a[$xPrefix.'previous'] instanceof \Exception) {
|
if (isset($a[$xPrefix.'previous'], $a[$trace]) && $a[$xPrefix.'previous'] instanceof \Exception) {
|
||||||
$b = (array) $a[$xPrefix.'previous'];
|
$b = (array) $a[$xPrefix.'previous'];
|
||||||
$class = \get_class($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']);
|
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));
|
$a[$trace] = new TraceStub($b[$xPrefix.'trace'], false, 0, -\count($a[$trace]->value));
|
||||||
}
|
}
|
||||||
@ -284,7 +284,7 @@ class ExceptionCaster
|
|||||||
|
|
||||||
if (isset($a[Caster::PREFIX_PROTECTED.'message']) && false !== strpos($a[Caster::PREFIX_PROTECTED.'message'], "class@anonymous\0")) {
|
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) {
|
$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']);
|
}, $a[Caster::PREFIX_PROTECTED.'message']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -286,7 +286,7 @@ abstract class AbstractCloner implements ClonerInterface
|
|||||||
$class = $stub->class;
|
$class = $stub->class;
|
||||||
|
|
||||||
if (isset($class[15]) && "\0" === $class[15] && 0 === strpos($class, "class@anonymous\x00")) {
|
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])) {
|
if (isset($this->classInfo[$class])) {
|
||||||
list($i, $parents, $hasDebugInfo, $fileInfo) = $this->classInfo[$class];
|
list($i, $parents, $hasDebugInfo, $fileInfo) = $this->classInfo[$class];
|
||||||
|
@ -164,11 +164,11 @@ EOTXT
|
|||||||
, $c
|
, $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(
|
$this->assertDumpMatchesFormat(
|
||||||
<<<'EOTXT'
|
<<<'EOTXT'
|
||||||
@anonymous {
|
Countable@anonymous {
|
||||||
-foo: "foo"
|
-foo: "foo"
|
||||||
}
|
}
|
||||||
EOTXT
|
EOTXT
|
||||||
|
Reference in New Issue
Block a user