8000 Extract deprecation handler to a private static function · symfony/symfony@e90bfef · GitHub
[go: up one dir, main page]

Skip to content

Commit e90bfef

Browse files
committed
Extract deprecation handler to a private static function
1 parent 14cd6d6 commit e90bfef

File tree

1 file changed

+81
-79
lines changed

1 file changed

+81
-79
lines changed

src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php

Lines changed: 81 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -59,83 +59,7 @@ public static function register($mode = 0)
5959

6060
self::computeMode($mode);
6161

62-
$deprecationHandler = function ($type, $msg, $file, $line, $context = array()) {
63-
$mode = self::$mode;
64-
if ((E_USER_DEPRECATED !== $type && E_DEPRECATED !== $type) || self::MODE_DISABLED === $mode) {
65-
$ErrorHandler = self::utilPrefix().'ErrorHandler';
66-
67-
return $ErrorHandler::handleError($type, $msg, $file, $line, $context);
68-
}
69-
70-
$trace = debug_backtrace();
71-
$group = 'other';
72-
$isVendor = self::MODE_WEAK_VENDORS === $mode && self::inVendors($file);
73-
74-
$i = \count($trace);
75-
while (1 < $i && (!isset($trace[--$i]['class']) || ('ReflectionMethod' === $trace[$i]['class'] || 0 === strpos($trace[$i]['class'], 'PHPUnit_') || 0 === strpos($trace[$i]['class'], 'PHPUnit\\')))) {
76-
// No-op
77-
}
78-
79-
if (isset($trace[$i]['object']) || isset($trace[$i]['class'])) {
80-
if (isset($trace[$i]['class']) && 0 === strpos($trace[$i]['class'], 'Symfony\Bridge\PhpUnit\Legacy\SymfonyTestsListenerFor')) {
81-
$parsedMsg = unserialize($msg);
82-
$msg = $parsedMsg['deprecation'];
83-
$class = $parsedMsg['class'];
84-
$method = $parsedMsg['method'];
85-
// If the deprecation has been triggered via
86-
// \Symfony\Bridge\PhpUnit\Legacy\SymfonyTestsListenerTrait::endTest()
87-
// then we need to use the serialized information to determine
88-
// if the error has been triggered from vendor code.
89-
$isVendor = self::MODE_WEAK_VENDORS === $mode && isset($parsedMsg['triggering_file']) && self::inVendors($parsedMsg['triggering_file']);
90-
} else {
91-
$class = isset($trace[$i]['object']) ? \get_class($trace[$i]['object']) : $trace[$i]['class'];
92-
$method = $trace[$i]['function'];
93-
}
94-
95-
$Test = self::utilPrefix().'Test';
96-
97-
if (0 !== error_reporting()) {
98-
$group = 'unsilenced';
99-
} elseif (0 === strpos($method, 'testLegacy')
100-
|| 0 === strpos($method, 'provideLegacy')
101-
|| 0 === strpos($method, 'getLegacy')
102-
|| strpos($class, '\Legacy')
103-
|| \in_array('legacy', $Test::getGroups($class, $method), true)
104-
) {
105-
$group = 'legacy';
106-
} elseif ($isVendor) {
107-
$group = 'remaining vendor';
108-
} else {
109-
$group = 'remaining';
110-
}
111-
112-
if (isset($mode[0]) && '/' === $mode[0] && preg_match($mode, $msg)) {
113-
$e = new \Exception($msg);
114-
$r = new \ReflectionProperty($e, 'trace');
115-
$r->setAccessible(true);
116-
$r->setValue($e, \array_slice($trace, 1, $i));
117-
118-
echo "\n".ucfirst($group).' deprecation triggered by '.$class.'::'.$method.':';
119-
echo "\n".$msg;
120-
echo "\nStack trace:";
121-
echo "\n".str_replace(' '.getcwd().\DIRECTORY_SEPARATOR, ' ', $e->getTraceAsString());
122-
echo "\n";
123-
124-
exit(1);
125-
}
126-
if ('legacy' !== $group && self::MODE_WEAK !== $mode) {
127-
$ref = &self::$deprecations[$group][$msg]['count'];
128-
++$ref;
129-
$ref = &self::$deprecations[$group][$msg][$class.'::'.$method];
130-
++$ref;
131-
}
132-
} elseif (self::MODE_WEAK !== $mode) {
133-
$ref = &self::$deprecations[$group][$msg]['count'];
134-
++$ref;
135-
}
136-
++self::$deprecations[$group.'Count'];
137-
};
138-
$oldErrorHandler = set_error_handler($deprecationHandler);
62+
$oldErrorHandler = set_error_handler(array(self::class, 'handleError'));
13963

14064
if (null !== $oldErrorHandler) {
14165
restore_error_handler();
@@ -145,15 +69,15 @@ public static function register($mode = 0)
14569
}
14670
} else {
14771
self::$isRegistered = true;
148-
register_shutdown_function(function () use ($deprecationHandler) {
72+
register_shutdown_function(function () {
14973
$mode = self::$mode;
15074
if (isset($mode[0]) && '/' === $mode[0]) {
15175
return;
15276
}
15377
$currErrorHandler = set_error_handler('var_dump');
15478
restore_error_handler();
15579

156-
if ($currErrorHandler !== $deprecationHandler) {
80+
if ($currErrorHandler !== array(self::class, 'handleError')) {
15781
echo "\n", self::colorize('THE ERROR HANDLER HAS CHANGED!', true, $mode), "\n";
15882
}
15983

@@ -382,4 +306,82 @@ private static function utilPrefix()
382306

383307
return self::$utilPrefix = (class_exists('PHPUnit_Util_ErrorHandler') ? 'PHPUnit_Util_' : 'PHPUnit\Util\\');
384308
}
309+
310+
public static function handleError($type, $msg, $file, $line, $context = array())
311+
{
312+
$mode = self::$mode;
313+
if ((E_USER_DEPRECATED !== $type && E_DEPRECATED !== $type) || self::MODE_DISABLED === $mode) {
314+
$ErrorHandler = self::utilPrefix().'ErrorHandler';
315+
316+
return $ErrorHandler::handleError($type, $msg, $file, $line, $context);
317+
}
318+
319+
$trace = debug_backtrace();
320+
$group = 'other';
321+
$isVendor = self::MODE_WEAK_VENDORS === $mode && self::inVendors($file);
322+
323+
$i = \count($trace);
324+
while (1 < $i && (!isset($trace[--$i]['class']) || ('ReflectionMethod' === $trace[$i]['class'] || 0 === strpos($trace[$i]['class'], 'PHPUnit_') || 0 === strpos($trace[$i]['class'], 'PHPUnit\\')))) {
325+
// No-op
326+
}
327+
328+
if (isset($trace[$i]['object']) || isset($trace[$i]['class'])) {
329+
if (isset($trace[$i]['class']) && 0 === strpos($trace[$i]['class'], 'Symfony\Bridge\PhpUnit\Legacy\SymfonyTestsListenerFor')) {
330+
$parsedMsg = unserialize($msg);
331+
$msg = $parsedMsg['deprecation'];
332+
$class = $parsedMsg['class'];
333+
$method = $parsedMsg['method'];
334+
// If the deprecation has been triggered via
335+
// \Symfony\Bridge\PhpUnit\Legacy\SymfonyTestsListenerTrait::endTest()
336+
// then we need to use the serialized information to determine
337+
// if the error has been triggered from vendor code.
338+
$isVendor = self::MODE_WEAK_VENDORS === $mode && isset($parsedMsg['triggering_file']) && self::inVendors($parsedMsg['triggering_file']);
339+
} else {
340+
$class = isset($trace[$i]['object']) ? \get_class($trace[$i]['object']) : $trace[$i]['class'];
341+
$method = $trace[$i]['function'];
342+
}
343+
344+
$Test = self::utilPrefix().'Test';
345+
346+
if (0 !== error_reporting()) {
347+
$group = 'unsilenced';
348+
} elseif (0 === strpos($method, 'testLegacy')
349+
|| 0 === strpos($method, 'provideLegacy')
350+
|| 0 === strpos($method, 'getLegacy')
351+
|| strpos($class, '\Legacy')
352+
|| \in_array('legacy', $Test::getGroups($class, $method), true)
353+
) {
354+
$group = 'legacy';
355+
} elseif ($isVendor) {
356+
$group = 'remaining vendor';
357+
} else {
358+
$group = 'remaining';
359+
}
360+
361+
if (isset($mode[0]) && '/' === $mode[0] && preg_match($mode, $msg)) {
362+
$e = new \Exception($msg);
363+
$r = new \ReflectionProperty($e, 'trace');
364+
$r->setAccessible(true);
365+
$r->setValue($e, \array_slice($trace, 1, $i));
366+
367+
echo "\n".ucfirst($group).' deprecation triggered by '.$class.'::'.$method.':';
368+
echo "\n".$msg;
369+
echo "\nStack trace:";
370+
echo "\n".str_replace(' '.getcwd().\DIRECTORY_SEPARATOR, ' ', $e->getTraceAsString());
371+
echo "\n";
372+
373+
exit(1);
374+
}
375+
if ('legacy' !== $group && self::MODE_WEAK !== $mode) {
376+
$ref = &self::$deprecations[$group][$msg]['count'];
377+
++$ref;
378+
$ref = &self::$deprecations[$group][$msg][$class.'::'.$method];
379+
++$ref;
380+
}
381+
} elseif (self::MODE_WEAK !== $mode) {
382+
$ref = &self::$deprecations[$group][$msg]['count'];
383+
++$ref;
384+
}
385+
++self::$deprecations[$group.'Count'];
386+
}
385387
}

0 commit comments

Comments
 (0)
0