From ffd63ce20098bb4e7e2a6115709fa6fc3f13e7bd Mon Sep 17 00:00:00 2001 From: Bastian Schwarz Date: Sun, 21 Jan 2024 00:25:00 +0100 Subject: [PATCH 1/4] Updated phive --- .idea/deployer.crontab.iml | 1 - phive.xml | 8 +- test/phpunit.dist.xml | 21 +- tools/composer-require-checker | Bin 648094 -> 660004 bytes tools/composer-unused | Bin 32805338 -> 36245023 bytes tools/infection | Bin 1010243 -> 1011925 bytes tools/phpunit.phar | 36087 ++++++++++++++++++++----------- 7 files changed, 23508 insertions(+), 12609 deletions(-) diff --git a/.idea/deployer.crontab.iml b/.idea/deployer.crontab.iml index 072c4c1..e9e65a4 100644 --- a/.idea/deployer.crontab.iml +++ b/.idea/deployer.crontab.iml @@ -4,7 +4,6 @@ - diff --git a/phive.xml b/phive.xml index 1d90e76..94af6fb 100644 --- a/phive.xml +++ b/phive.xml @@ -16,9 +16,9 @@ ~ --> - + - - - + + + diff --git a/test/phpunit.dist.xml b/test/phpunit.dist.xml index cd63c0a..5644f57 100644 --- a/test/phpunit.dist.xml +++ b/test/phpunit.dist.xml @@ -15,17 +15,13 @@ ~ limitations under the License. ~ --> - - - - ./../src - - . @@ -34,4 +30,9 @@ + + + ./../src + + diff --git a/tools/composer-require-checker b/tools/composer-require-checker index 2af0801f2875d9e17cd4bb087d8ccd064772d9c7..aaa35df39870eeae55d9ec9de859ed8bee3ce333 100755 GIT binary patch delta 333039 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 UuDxAfJRBe!oB{v<07pViLT<`B1ONa4 diff --git a/tools/composer-unused b/tools/composer-unused index 98d213ecc9048b48a5ff27e584b8efc989eb253c..017a7cafd2061931ccd749d1bbad7770597164a1 100755 GIT binary patch delta 2960763 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%0A#gIdIp-h7FR|?*jfRhA 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

M&;C6 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%0D>SWHl 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

8SFsWn(qM|$?FCa-m$|0 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
)e%M-8);t%BUn+R!>%kLsbS=6B>(IN>jw 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

% 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

3tpS|aJC3t5a(87s97Gv#S&g~u3btA(UEe&+Q| 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

-V`C*S^NKQSVqJ;l3HXL*(uTZmz&CM+qtyABa?7tijQBBLlBeVFkPqp)iCb|hDnM0G8f4Y zmYUq?=$bHG+y3nYn5SCJ1M2%)+Ip<%v3IBWP;F75*a6w|K=yZ>Wx_rH3X7)$pIV^B znmPsXefJCyQ&xWq-*pV{_P3~|okh80PreNmZuU2G!C%Zwuo!wC(8%XYU@C)SJpT#4 ziFyDsCdsn2vr(Q;vIIGIKG7#BmZ#z&kZ6R7PD!u}r~|N&>2OQxd};qN03K??7h=U0 z2Dx|?EnJb!)`n@JY1z#XA2EBNGartRqgIdm5yF%D2I6Wwik)VJ0f7#e0zdoPpi`tA;01=CPF ze5J|JhE-+M?pJrS@xJVvwmoKu#@9XR=r|wDL6o`g<3^cifLjSF7^NChl&@M*x*S793QpWF10{$mRvTR-lz{UZ zPEOBR$cW;~4BMb;VzyU=4GwVO4-B;IgR2nZ?u2bg7l$r^4J^_k=Qj(3;2Ofskgn24@7 z71U_Z`*ZE>*&=toZjR-&h?I8&;UlsNqG{fS-#}w_!KZh{JWDeBppdTW2t=bsj~tv9 zv9BksU%4GQnZpq_LO17GQmEz;o0|-s*!>#lc2&Os?sV1_Y*qC=mY+HOE7w801!Pcm zd$@!vfBh?j?XcJ(PIY}YkcX;2*qW80)7&}j;7cf~9}^;hOPrq@_t1U2Map1yX(+__ zF$ISFDW%3GaZxcf%;2&*CW>43Lj!31rMNbj`Pya<_M)(wJ`%15ra~FD<}jbheQ`)y z?GXv}MU2Ib9#uWy!AbVdL@dV0)fXfb^;Kd#m9_U(aB{r#qiHKpz3#wH+yP(*Q+3{~ ztbf1~F+Zwn3I%UbVQ(*l(j`AhB?RTEVD5~~FY1UwMCdI-fI1$^x)Cyq?Ipaj zV~b-Llx1`Y+S#53zAt^gWf%AU?0Uq`H*fQY8V#Z)_`q>un*L3wCmqsTBAHhKw$Dl6 z{*m86uDi7FfH#dTw1iMy%n01HaJe4SzDi@^-Pt{Ah#!Ridn#uT?S>Gk+A>2V;TLHw z$DJv&{U?a7tI}__RU~s~OmIheIapx;}0NOS$gG{CyXitGau6U1Dt?E-Ln z+j`)3{()i(m|sCNFmfeQ2Ygp%$wI0JFPCRQ#%t$3E~eI_^~fBshP+GK)$$uOCfJ(dW3u zWc1!H3;gW*Ksr%3euo8YxU&Q9%0(8$&t*V5WuhO~Q1Cv+nF&$C8MvO#JRd!ms~hns z-l>*AkMiMng)qg)o5JYf!sXhf$mY!Q=)icE8q0}Z-pP_CAcO*mu$~2-mtV4Y^EuC3o^XSu z&7Q;y+p@HJ+VZ8)a#HSs(s(X;d;?II5RH>D1bWnYW=nQtBwP)<%0U|nMRA9UQ+N;8 zwT6fDaNAl(3{PZ26k`Q}ojOuxFnY)6H!LeL6?xF?RVEgdBzG!AQ!JLKh@KrlT`KrU zGTkpjaLJq!yEdFtdsbq7Fp)vdG#Snh@<54tHs>z z-P_1IW+JKFkX9;*H!Jxxn|Yoi>D=|Qxvzuzqt|lxbpPRfUok(3ZFITO4Jlnj;TDL8 zEz3sBsO-T27ixC(b>-grdWXnA92|^Y`2pO5oH1Ux7N_T8#*X zvEN&~xr_%IVFt~)gsI@J=QoNxLUMD#?!+>lr`sQ0umPnE{h=6Ue5NyJ0=F_4I&I`spB+BSa2#4jHsT6a&C+-64QCG)- zdT%>oPUW(X6ZD_*@(>xlcGR5EF@wR>He;|iE*q&p(r&nRj}QbU?il7Vc&GzBe=(2t zqJr)pf1<04${7#YIXrvA9`?76t%f?Z`lnG+^0~}luB~#H$fZxYQSdpl>xUe@GP`Lt z9lN0iz5OH1C8#%m;11a~SEbUiHzvZE@N=>!wLd&i%$;vM3!G;vXy41 z#oN_xX~`9pE0z|dySb$;N=X+qimEXayLTV0c*m@zqwgcg^6PiZ`{~yQQay>+_m}f8 z9Y=06`sH1-n;ViS%$~qRl)=36qSqbLiP{HX-rS z&SCK`ubY=Z3%$woVE57GZ*DSa9C3krq}f4D$q$M|J~4;lzb2Wlh>#Nu5rsV|0KZ#q zHaaxKf8cI@-O0g6SO9}kP9U4^1Dj2cIye*Zfjdk{M%9IYs8=L(=2=r?k6?PdV4heNXs=xlwj)39Vh*Pg%aOrsO_p zI`5FVxEJVrN&LaZDSzLuOWuK*j)_Nl_RA~2H08?Tdv%Pf_LzkF=X|DGicmBK@uQUH z7DpH8UTxlzn*AL1H}C0YmWVj1(^KGMr#@SVdnxX!%_l|NrCD!-=p4GSpo(S%<;PLz z;1Kz94c{O?XX!VENR=1u8cpr%wXxKasY~EL8?Ot1H7#G`&8Z?D6^ZM=PL^@)S05G) zCH>|>uC)0Xql7OXqdRUdM47+ulMK1jJBX!rE>L=>L`S(ZZMnMlZ0nIHOrz;fU zWhlRMl5U8I^`Y$5Iw=Q+;PQ%RjQ)I|G@V(*w`S_1MLepn75WGyk5Rh&(Ojq}^2uqu zrMx0vGf>1Y{!W9)X7-vk-(0Y)du@2xtp#EiKKuIxquu-<oRQB5xIlug4%@1%RUlc0lKP%H9frrTw?F*wL z2ykX-8=MAIhDSt+Y`CyCje1v<%rzWaFAC-Bs&R=OEx6yyyZ)GujLtoykx=ce1zmo;zj4liCP+ z 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%0Ad-NM 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 z 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 Wiy^)1+RHa||Mg%0HRj%l_x?Ya2Y8(T delta 763056 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

mq3q2_IC8yenD?-s#T$qp7eNp1G^o-A6c5 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«JD1ug0-OS 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

Covered by small (and larger) testsCovered by medium (and large) testsCovered by large tests (and tests of unknown size)Not coveredNot coverable

', 'structure' => '']); - $template->renderTo($file . '.html'); + try { + $template->renderTo($file . '.html'); + } catch (Exception $e) { + throw new FileCouldNotBeWrittenException($e->getMessage(), $e->getCode(), $e); + } if ($this->hasBranchCoverage) { $template->setVar(['items' => $this->renderItems($node), 'lines' => $this->renderSourceWithBranchCoverage($node), 'legend' => '

Fully coveredPartially coveredNot covered

', 'structure' => $this->renderBranchStructure($node)]); - $template->renderTo($file . '_branch.html'); + try { + $template->renderTo($file . '_branch.html'); + } catch (Exception $e) { + throw new FileCouldNotBeWrittenException($e->getMessage(), $e->getCode(), $e); + } $template->setVar(['items' => $this->renderItems($node), 'lines' => $this->renderSourceWithPathCoverage($node), 'legend' => '

Fully coveredPartially coveredNot covered

', 'structure' => $this->renderPathStructure($node)]); - $template->renderTo($file . '_path.html'); + try { + $template->renderTo($file . '_path.html'); + } catch (Exception $e) { + throw new FileCouldNotBeWrittenException($e->getMessage(), $e->getCode(), $e); + } } } private function renderItems(FileNode $node) : string @@ -29187,30 +31407,7 @@ final class File extends Renderer } private function isKeyword(int $token) : bool { - return isset(self::keywordTokens()[$token]); - } - /** - * @psalm-return array - */ - private static function keywordTokens() : array - { - if (self::$keywordTokens !== []) { - return self::$keywordTokens; - } - self::$keywordTokens = [T_ABSTRACT => \true, T_ARRAY => \true, T_AS => \true, T_BREAK => \true, T_CALLABLE => \true, T_CASE => \true, T_CATCH => \true, T_CLASS => \true, T_CLONE => \true, T_CONST => \true, T_CONTINUE => \true, T_DECLARE => \true, T_DEFAULT => \true, T_DO => \true, T_ECHO => \true, T_ELSE => \true, T_ELSEIF => \true, T_EMPTY => \true, T_ENDDECLARE => \true, T_ENDFOR => \true, T_ENDFOREACH => \true, T_ENDIF => \true, T_ENDSWITCH => \true, T_ENDWHILE => \true, T_EVAL => \true, T_EXIT => \true, T_EXTENDS => \true, T_FINAL => \true, T_FINALLY => \true, T_FOR => \true, T_FOREACH => \true, T_FUNCTION => \true, T_GLOBAL => \true, T_GOTO => \true, T_HALT_COMPILER => \true, T_IF => \true, T_IMPLEMENTS => \true, T_INCLUDE => \true, T_INCLUDE_ONCE => \true, T_INSTANCEOF => \true, T_INSTEADOF => \true, T_INTERFACE => \true, T_ISSET => \true, T_LIST => \true, T_NAMESPACE => \true, T_NEW => \true, T_PRINT => \true, T_PRIVATE => \true, T_PROTECTED => \true, T_PUBLIC => \true, T_REQUIRE => \true, T_REQUIRE_ONCE => \true, T_RETURN => \true, T_STATIC => \true, T_SWITCH => \true, T_THROW => \true, T_TRAIT => \true, T_TRY => \true, T_UNSET => \true, T_USE => \true, T_VAR => \true, T_WHILE => \true, T_YIELD => \true, T_YIELD_FROM => \true]; - if (defined('T_FN')) { - self::$keywordTokens[constant('T_FN')] = \true; - } - if (defined('T_MATCH')) { - self::$keywordTokens[constant('T_MATCH')] = \true; - } - if (defined('T_ENUM')) { - self::$keywordTokens[constant('T_ENUM')] = \true; - } - if (defined('T_READONLY')) { - self::$keywordTokens[constant('T_READONLY')] = \true; - } - return self::$keywordTokens; + return isset(self::KEYWORD_TOKENS[$token]); } }
@@ -29365,7 +31562,7 @@ svg text { .scrollbox { height:245px; - overflow-x:hidden; + overflow-x:scroll; overflow-y:scroll; } @@ -30430,6 +32627,7 @@ namespace PHPUnit\SebastianBergmann\CodeCoverage\Report; use function dirname; use function file_put_contents; use function serialize; +use function strpos; use PHPUnit\SebastianBergmann\CodeCoverage\CodeCoverage; use PHPUnit\SebastianBergmann\CodeCoverage\Driver\WriteOperationFailedException; use PHPUnit\SebastianBergmann\CodeCoverage\Util\Filesystem; @@ -30437,9 +32635,12 @@ final class PHP { public function process(CodeCoverage $coverage, ?string $target = null) : string { + $coverage->clearCache(); $buffer = "contextNode = $context; } + /** + * @param TestType $result + */ public function addTest(string $test, array $result) : void { $node = $this->contextNode->appendChild($this->contextNode->ownerDocument->createElementNS('https://schema.phpunit.de/coverage/1.0', 'test')); @@ -31535,7 +33741,7 @@ final class CacheWarmer { public function warmCache(string $cacheDirectory, bool $useAnnotationsForIgnoringCode, bool $ignoreDeprecatedCode, Filter $filter) : void { - $analyser = new CachingFileAnalyser($cacheDirectory, new ParsingFileAnalyser($useAnnotationsForIgnoringCode, $ignoreDeprecatedCode)); + $analyser = new CachingFileAnalyser($cacheDirectory, new ParsingFileAnalyser($useAnnotationsForIgnoringCode, $ignoreDeprecatedCode), $useAnnotationsForIgnoringCode, $ignoreDeprecatedCode); foreach ($filter->files() as $file) { $analyser->process($file); } @@ -31565,18 +33771,24 @@ use PHPUnit\SebastianBergmann\CodeCoverage\Util\Filesystem; use PHPUnit\SebastianBergmann\FileIterator\Facade as FileIteratorFacade; /** * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage + * + * @psalm-import-type LinesOfCodeType from \SebastianBergmann\CodeCoverage\StaticAnalysis\FileAnalyser */ final class CachingFileAnalyser implements FileAnalyser { private static ?string $cacheVersion = null; + private readonly string $directory; private readonly FileAnalyser $analyser; + private readonly bool $useAnnotationsForIgnoringCode; + private readonly bool $ignoreDeprecatedCode; private array $cache = []; - private readonly string $directory; - public function __construct(string $directory, FileAnalyser $analyser) + public function __construct(string $directory, FileAnalyser $analyser, bool $useAnnotationsForIgnoringCode, bool $ignoreDeprecatedCode) { Filesystem::createDirectory($directory); $this->analyser = $analyser; $this->directory = $directory; + $this->useAnnotationsForIgnoringCode = $useAnnotationsForIgnoringCode; + $this->ignoreDeprecatedCode = $ignoreDeprecatedCode; } public function classesIn(string $filename) : array { @@ -31600,7 +33812,7 @@ final class CachingFileAnalyser implements FileAnalyser return $this->cache[$filename]['functionsIn']; } /** - * @psalm-return array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int} + * @psalm-return LinesOfCodeType */ public function linesOfCodeFor(string $filename) : array { @@ -31647,7 +33859,8 @@ final class CachingFileAnalyser implements FileAnalyser } private function cacheFile(string $filename) : string { - return $this->directory . \DIRECTORY_SEPARATOR . md5($filename . "\x00" . file_get_contents($filename) . "\x00" . self::cacheVersion()); + $cacheKey = md5(implode("\x00", [$filename, file_get_contents($filename), self::cacheVersion(), $this->useAnnotationsForIgnoringCode, $this->ignoreDeprecatedCode])); + return $this->directory . \DIRECTORY_SEPARATOR . $cacheKey; } private static function cacheVersion() : string { @@ -31698,19 +33911,53 @@ use PHPUnit\PhpParser\NodeVisitorAbstract; use PHPUnit\SebastianBergmann\Complexity\CyclomaticComplexityCalculatingVisitor; /** * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage + * + * @psalm-type CodeUnitFunctionType = array{ + * name: string, + * namespacedName: string, + * namespace: string, + * signature: string, + * startLine: int, + * endLine: int, + * ccn: int + * } + * @psalm-type CodeUnitMethodType = array{ + * methodName: string, + * signature: string, + * visibility: string, + * startLine: int, + * endLine: int, + * ccn: int + * } + * @psalm-type CodeUnitClassType = array{ + * name: string, + * namespacedName: string, + * namespace: string, + * startLine: int, + * endLine: int, + * methods: array + * } + * @psalm-type CodeUnitTraitType = array{ + * name: string, + * namespacedName: string, + * namespace: string, + * startLine: int, + * endLine: int, + * methods: array + * } */ final class CodeUnitFindingVisitor extends NodeVisitorAbstract { /** - * @psalm-var array}> + * @psalm-var array */ private array $classes = []; /** - * @psalm-var array}> + * @psalm-var array */ private array $traits = []; /** - * @psalm-var array + * @psalm-var array */ private array $functions = []; public function enterNode(Node $node) : void @@ -31738,21 +33985,21 @@ final class CodeUnitFindingVisitor extends NodeVisitorAbstract $this->processFunction($node); } /** - * @psalm-return array}> + * @psalm-return array */ public function classes() : array { return $this->classes; } /** - * @psalm-return array}> + * @psalm-return array */ public function traits() : array { return $this->traits; } /** - * @psalm-return array + * @psalm-return array */ public function functions() : array { @@ -31919,13 +34166,15 @@ use PHPUnit\PhpParser\Node; use PHPUnit\PhpParser\NodeVisitorAbstract; /** * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage + * + * @psalm-import-type LinesType from \SebastianBergmann\CodeCoverage\StaticAnalysis\FileAnalyser */ final class ExecutableLinesFindingVisitor extends NodeVisitorAbstract { private int $nextBranch = 0; private readonly string $source; /** - * @psalm-var array + * @psalm-var LinesType */ private array $executableLinesGroupedByBranch = []; /** @@ -31968,14 +34217,37 @@ final class ExecutableLinesFindingVisitor extends NodeVisitorAbstract } return; } - if ($node instanceof Node\Stmt\Declare_ || $node instanceof Node\Stmt\DeclareDeclare || $node instanceof Node\Stmt\Else_ || $node instanceof Node\Stmt\EnumCase || $node instanceof Node\Stmt\Finally_ || $node instanceof Node\Stmt\Label || $node instanceof Node\Stmt\Namespace_ || $node instanceof Node\Stmt\Nop || $node instanceof Node\Stmt\Switch_ || $node instanceof Node\Stmt\TryCatch || $node instanceof Node\Stmt\Use_ || $node instanceof Node\Stmt\UseUse || $node instanceof Node\Expr\ConstFetch || $node instanceof Node\Expr\Match_ || $node instanceof Node\Expr\Variable || $node instanceof Node\ComplexType || $node instanceof Node\Const_ || $node instanceof Node\Identifier || $node instanceof Node\Name || $node instanceof Node\Param || $node instanceof Node\Scalar) { + if ($node instanceof Node\Stmt\Declare_ || $node instanceof Node\Stmt\DeclareDeclare || $node instanceof Node\Stmt\Else_ || $node instanceof Node\Stmt\EnumCase || $node instanceof Node\Stmt\Finally_ || $node instanceof Node\Stmt\GroupUse || $node instanceof Node\Stmt\Label || $node instanceof Node\Stmt\Namespace_ || $node instanceof Node\Stmt\Nop || $node instanceof Node\Stmt\Switch_ || $node instanceof Node\Stmt\TryCatch || $node instanceof Node\Stmt\Use_ || $node instanceof Node\Stmt\UseUse || $node instanceof Node\Expr\ConstFetch || $node instanceof Node\Expr\Match_ || $node instanceof Node\Expr\Variable || $node instanceof Node\Expr\Throw_ || $node instanceof Node\ComplexType || $node instanceof Node\Const_ || $node instanceof Node\Identifier || $node instanceof Node\Name || $node instanceof Node\Param || $node instanceof Node\Scalar) { return; } + /* + * nikic/php-parser ^4.18 represents throw statements + * as Stmt\Throw_ objects + */ if ($node instanceof Node\Stmt\Throw_) { $this->setLineBranch($node->expr->getEndLine(), $node->expr->getEndLine(), ++$this->nextBranch); return; } + /* + * nikic/php-parser ^5 represents throw statements + * as Stmt\Expression objects that contain an + * Expr\Throw_ object + */ + if ($node instanceof Node\Stmt\Expression && $node->expr instanceof Node\Expr\Throw_) { + $this->setLineBranch($node->expr->expr->getEndLine(), $node->expr->expr->getEndLine(), ++$this->nextBranch); + return; + } if ($node instanceof Node\Stmt\Enum_ || $node instanceof Node\Stmt\Function_ || $node instanceof Node\Stmt\Class_ || $node instanceof Node\Stmt\ClassMethod || $node instanceof Node\Expr\Closure || $node instanceof Node\Stmt\Trait_) { + if ($node instanceof Node\Stmt\Function_ || $node instanceof Node\Stmt\ClassMethod) { + $unsets = []; + foreach ($node->getParams() as $param) { + foreach (range($param->getStartLine(), $param->getEndLine()) as $line) { + $unsets[$line] = \true; + } + } + unset($unsets[$node->getEndLine()]); + $this->unsets += $unsets; + } $isConcreteClassLike = $node instanceof Node\Stmt\Enum_ || $node instanceof Node\Stmt\Class_ || $node instanceof Node\Stmt\Trait_; if (null !== $node->stmts) { foreach ($node->stmts as $stmt) { @@ -31995,7 +34267,7 @@ final class ExecutableLinesFindingVisitor extends NodeVisitorAbstract } $hasEmptyBody = [] === $node->stmts || null === $node->stmts || 1 === count($node->stmts) && $node->stmts[0] instanceof Node\Stmt\Nop; if ($hasEmptyBody) { - if ($node->getEndLine() === $node->getStartLine()) { + if ($node->getEndLine() === $node->getStartLine() && isset($this->executableLinesGroupedByBranch[$node->getStartLine()])) { return; } $this->setLineBranch($node->getEndLine(), $node->getEndLine(), ++$this->nextBranch); @@ -32106,6 +34378,9 @@ final class ExecutableLinesFindingVisitor extends NodeVisitorAbstract } $this->executableLinesGroupedByBranch = array_diff_key($this->executableLinesGroupedByBranch, $this->unsets); } + /** + * @psalm-return LinesType + */ public function executableLinesGroupedByBranch() : array { return $this->executableLinesGroupedByBranch; @@ -32132,17 +34407,46 @@ namespace PHPUnit\SebastianBergmann\CodeCoverage\StaticAnalysis; /** * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage + * + * @psalm-import-type CodeUnitFunctionType from \SebastianBergmann\CodeCoverage\StaticAnalysis\CodeUnitFindingVisitor + * @psalm-import-type CodeUnitMethodType from \SebastianBergmann\CodeCoverage\StaticAnalysis\CodeUnitFindingVisitor + * @psalm-import-type CodeUnitClassType from \SebastianBergmann\CodeCoverage\StaticAnalysis\CodeUnitFindingVisitor + * @psalm-import-type CodeUnitTraitType from \SebastianBergmann\CodeCoverage\StaticAnalysis\CodeUnitFindingVisitor + * @psalm-import-type LinesOfCodeType from \SebastianBergmann\CodeCoverage\StaticAnalysis\FileAnalyser + * @psalm-import-type LinesType from \SebastianBergmann\CodeCoverage\StaticAnalysis\FileAnalyser + * + * @psalm-type LinesOfCodeType = array{ + * linesOfCode: int, + * commentLinesOfCode: int, + * nonCommentLinesOfCode: int + * } + * @psalm-type LinesType = array */ interface FileAnalyser { + /** + * @psalm-return array + */ public function classesIn(string $filename) : array; + /** + * @psalm-return array + */ public function traitsIn(string $filename) : array; + /** + * @psalm-return array + */ public function functionsIn(string $filename) : array; /** - * @psalm-return array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int} + * @psalm-return LinesOfCodeType */ public function linesOfCodeFor(string $filename) : array; + /** + * @psalm-return LinesType + */ public function executableLinesIn(string $filename) : array; + /** + * @psalm-return LinesType + */ public function ignoredLinesFor(string $filename) : array; } > + */ private array $classes = []; + /** + * @psalm-var array> + */ private array $traits = []; + /** + * @psalm-var array> + */ private array $functions = []; /** - * @var array + * @var array */ private array $linesOfCode = []; + /** + * @var array + */ private array $ignoredLines = []; + /** + * @var array + */ private array $executableLines = []; private readonly bool $useAnnotationsForIgnoringCode; private readonly bool $ignoreDeprecatedCode; @@ -32308,9 +34633,6 @@ final class ParsingFileAnalyser implements FileAnalyser $this->analyse($filename); return $this->functions[$filename]; } - /** - * @psalm-return array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int} - */ public function linesOfCodeFor(string $filename) : array { $this->analyse($filename); @@ -32339,7 +34661,8 @@ final class ParsingFileAnalyser implements FileAnalyser if ($linesOfCode === 0 && !empty($source)) { $linesOfCode = 1; } - $parser = (new ParserFactory())->create(ParserFactory::PREFER_PHP7, new Lexer()); + assert($linesOfCode > 0); + $parser = (new ParserFactory())->createForHostVersion(); try { $nodes = $parser->parse($source); assert($nodes !== null); @@ -32911,7 +35234,7 @@ final class Version public static function id() : string { if (self::$version === '') { - self::$version = (new VersionId('10.0.2', dirname(__DIR__)))->asString(); + self::$version = (new VersionId('10.1.11', dirname(__DIR__)))->asString(); } return self::$version; } @@ -32956,6 +35279,9 @@ final class ExcludeIterator extends RecursiveFilterIterator $current = $this->current(); assert($current instanceof SplFileInfo); $path = $current->getRealPath(); + if ($path === \false) { + return \false; + } foreach ($this->exclude as $exclude) { if (str_starts_with($path, $exclude)) { return \false; @@ -33001,15 +35327,16 @@ use SplFileInfo; final class Facade { /** - * @psalm-param list|string $suffixes - * @psalm-param list|string $prefixes - * @psalm-param list $exclude + * @psalm-param list|non-empty-string $paths + * @psalm-param list|string $suffixes + * @psalm-param list|string $prefixes + * @psalm-param list $exclude * - * @psalm-return list + * @psalm-return list */ - public function getFilesAsArray(string $path, array|string $suffixes = '', array|string $prefixes = '', array $exclude = []) : array + public function getFilesAsArray(array|string $paths, array|string $suffixes = '', array|string $prefixes = '', array $exclude = []) : array { - $iterator = (new Factory())->getFileIterator($path, $suffixes, $prefixes, $exclude); + $iterator = (new Factory())->getFileIterator($paths, $suffixes, $prefixes, $exclude); $files = []; foreach ($iterator as $file) { assert($file instanceof SplFileInfo); @@ -33055,10 +35382,10 @@ use RecursiveIteratorIterator; final class Factory { /** - * @psalm-param list|string $paths - * @psalm-param list|string $suffixes - * @psalm-param list|string $prefixes - * @psalm-param list $exclude + * @psalm-param list|non-empty-string $paths + * @psalm-param list|string $suffixes + * @psalm-param list|string $prefixes + * @psalm-param list $exclude */ public function getFileIterator(array|string $paths, array|string $suffixes = '', array|string $prefixes = '', array $exclude = []) : AppendIterator { @@ -33090,9 +35417,9 @@ final class Factory return $iterator; } /** - * @psalm-param list $paths + * @psalm-param list $paths * - * @psalm-return list + * @psalm-return list */ private function resolveWildcards(array $paths) : array { @@ -33441,7 +35768,7 @@ final class Template */ public function renderTo(string $target) : void { - if (!file_put_contents($target, $this->render())) { + if (!@file_put_contents($target, $this->render())) { throw new RuntimeException(sprintf('Writing rendered result to "%s" failed', $target)); } } @@ -33747,7 +36074,7 @@ final class TimeSinceStartOfRequestNotAvailableException extends RuntimeExceptio - This Schema file defines the rules by which the XML configuration file of PHPUnit 10.0 may be structured. + This Schema file defines the rules by which the XML configuration file of PHPUnit 10.5 may be structured. @@ -33756,18 +36083,49 @@ final class TimeSinceStartOfRequestNotAvailableException extends RuntimeExceptio Root Element - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -33801,7 +36159,7 @@ final class TimeSinceStartOfRequestNotAvailableException extends RuntimeExceptio - + @@ -33826,23 +36184,6 @@ final class TimeSinceStartOfRequestNotAvailableException extends RuntimeExceptio - - - - - - - - - - - - - - - - - @@ -33865,17 +36206,6 @@ final class TimeSinceStartOfRequestNotAvailableException extends RuntimeExceptio - - - - - - - - - - - @@ -33915,20 +36245,26 @@ final class TimeSinceStartOfRequestNotAvailableException extends RuntimeExceptio + + + + + + + + + + - + - - - - - + @@ -33958,6 +36294,7 @@ final class TimeSinceStartOfRequestNotAvailableException extends RuntimeExceptio + @@ -33975,12 +36312,40 @@ final class TimeSinceStartOfRequestNotAvailableException extends RuntimeExceptio - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -34095,13 +36460,6 @@ final class DeferringDispatcher implements \PHPUnit\Event\SubscribableDispatcher { $this->dispatcher->registerSubscriber($subscriber); } - /** - * @psalm-param class-string $className - */ - public function hasSubscriberFor(string $className) : bool - { - return $this->dispatcher->hasSubscriberFor($className); - } public function dispatch(\PHPUnit\Event\Event $event) : void { if ($this->recording) { @@ -34175,19 +36533,7 @@ final class DirectDispatcher implements \PHPUnit\Event\SubscribableDispatcher $this->subscribers[$eventClassName][] = $subscriber; } /** - * @psalm-param class-string $className - */ - public function hasSubscriberFor(string $className) : bool - { - if ($this->tracers !== []) { - return \true; - } - if (isset($this->subscribers[$className])) { - return \true; - } - return \false; - } - /** + * @throws Throwable * @throws UnknownEventTypeException */ public function dispatch(\PHPUnit\Event\Event $event) : void @@ -34199,9 +36545,11 @@ final class DirectDispatcher implements \PHPUnit\Event\SubscribableDispatcher foreach ($this->tracers as $tracer) { try { $tracer->trace($event); + // @codeCoverageIgnoreStart } catch (Throwable $t) { - $this->ignoreThrowablesFromThirdPartySubscribers($t); + $this->handleThrowable($t); } + // @codeCoverageIgnoreEnd } if (!array_key_exists($eventClassName, $this->subscribers)) { return; @@ -34210,18 +36558,26 @@ final class DirectDispatcher implements \PHPUnit\Event\SubscribableDispatcher try { $subscriber->notify($event); } catch (Throwable $t) { - $this->ignoreThrowablesFromThirdPartySubscribers($t); + $this->handleThrowable($t); } } } /** * @throws Throwable */ - private function ignoreThrowablesFromThirdPartySubscribers(Throwable $t) : void + public function handleThrowable(Throwable $t) : void { - if (str_starts_with($t->getFile(), dirname(__DIR__, 2))) { - throw $t; + if ($this->isThrowableFromThirdPartySubscriber($t)) { + \PHPUnit\Event\Facade::emitter()->testRunnerTriggeredWarning(sprintf('Exception in third-party event subscriber: %s%s%s', $t->getMessage(), \PHP_EOL, $t->getTraceAsString())); + return; } + // @codeCoverageIgnoreStart + throw $t; + // @codeCoverageIgnoreEnd + } + private function isThrowableFromThirdPartySubscriber(Throwable $t) : bool + { + return !str_starts_with($t->getFile(), dirname(__DIR__, 2)); } } dispatcher = $dispatcher; @@ -34316,6 +36672,20 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter $this->startSnapshot = $system->snapshot(); $this->previousSnapshot = $system->snapshot(); } + /** + * @deprecated + */ + public function exportObjects() : void + { + $this->exportObjects = \true; + } + /** + * @deprecated + */ + public function exportsObjects() : bool + { + return $this->exportObjects; + } /** * @throws InvalidArgumentException * @throws UnknownEventTypeException @@ -34367,6 +36737,22 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter { $this->dispatcher->dispatch(new \PHPUnit\Event\TestRunner\ExtensionBootstrapped($this->telemetryInfo(), $className, $parameters)); } + /** + * @throws InvalidArgumentException + * @throws UnknownEventTypeException + */ + public function dataProviderMethodCalled(ClassMethod $testMethod, ClassMethod $dataProviderMethod) : void + { + $this->dispatcher->dispatch(new DataProviderMethodCalled($this->telemetryInfo(), $testMethod, $dataProviderMethod)); + } + /** + * @throws InvalidArgumentException + * @throws UnknownEventTypeException + */ + public function dataProviderMethodFinished(ClassMethod $testMethod, ClassMethod ...$calledMethods) : void + { + $this->dispatcher->dispatch(new DataProviderMethodFinished($this->telemetryInfo(), $testMethod, ...$calledMethods)); + } /** * @throws InvalidArgumentException * @throws UnknownEventTypeException @@ -34407,6 +36793,22 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter { $this->dispatcher->dispatch(new \PHPUnit\Event\TestRunner\ExecutionStarted($this->telemetryInfo(), $testSuite)); } + /** + * @throws InvalidArgumentException + * @throws UnknownEventTypeException + */ + public function testRunnerDisabledGarbageCollection() : void + { + $this->dispatcher->dispatch(new \PHPUnit\Event\TestRunner\GarbageCollectionDisabled($this->telemetryInfo())); + } + /** + * @throws InvalidArgumentException + * @throws UnknownEventTypeException + */ + public function testRunnerTriggeredGarbageCollection() : void + { + $this->dispatcher->dispatch(new \PHPUnit\Event\TestRunner\GarbageCollectionTriggered($this->telemetryInfo())); + } /** * @throws InvalidArgumentException * @throws UnknownEventTypeException @@ -34431,13 +36833,21 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter { $this->dispatcher->dispatch(new \PHPUnit\Event\Test\PreparationStarted($this->telemetryInfo(), $test)); } + /** + * @throws InvalidArgumentException + * @throws UnknownEventTypeException + */ + public function testPreparationFailed(\PHPUnit\Event\Code\Test $test) : void + { + $this->dispatcher->dispatch(new \PHPUnit\Event\Test\PreparationFailed($this->telemetryInfo(), $test)); + } /** * @psalm-param class-string $testClassName * * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testBeforeFirstTestMethodCalled(string $testClassName, \PHPUnit\Event\Code\ClassMethod $calledMethod) : void + public function testBeforeFirstTestMethodCalled(string $testClassName, ClassMethod $calledMethod) : void { $this->dispatcher->dispatch(new \PHPUnit\Event\Test\BeforeFirstTestMethodCalled($this->telemetryInfo(), $testClassName, $calledMethod)); } @@ -34447,7 +36857,7 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testBeforeFirstTestMethodErrored(string $testClassName, \PHPUnit\Event\Code\ClassMethod $calledMethod, Throwable $throwable) : void + public function testBeforeFirstTestMethodErrored(string $testClassName, ClassMethod $calledMethod, Throwable $throwable) : void { $this->dispatcher->dispatch(new \PHPUnit\Event\Test\BeforeFirstTestMethodErrored($this->telemetryInfo(), $testClassName, $calledMethod, $throwable)); } @@ -34457,7 +36867,7 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testBeforeFirstTestMethodFinished(string $testClassName, \PHPUnit\Event\Code\ClassMethod ...$calledMethods) : void + public function testBeforeFirstTestMethodFinished(string $testClassName, ClassMethod ...$calledMethods) : void { $this->dispatcher->dispatch(new \PHPUnit\Event\Test\BeforeFirstTestMethodFinished($this->telemetryInfo(), $testClassName, ...$calledMethods)); } @@ -34467,7 +36877,7 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testBeforeTestMethodCalled(string $testClassName, \PHPUnit\Event\Code\ClassMethod $calledMethod) : void + public function testBeforeTestMethodCalled(string $testClassName, ClassMethod $calledMethod) : void { $this->dispatcher->dispatch(new \PHPUnit\Event\Test\BeforeTestMethodCalled($this->telemetryInfo(), $testClassName, $calledMethod)); } @@ -34477,7 +36887,7 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testBeforeTestMethodFinished(string $testClassName, \PHPUnit\Event\Code\ClassMethod ...$calledMethods) : void + public function testBeforeTestMethodFinished(string $testClassName, ClassMethod ...$calledMethods) : void { $this->dispatcher->dispatch(new \PHPUnit\Event\Test\BeforeTestMethodFinished($this->telemetryInfo(), $testClassName, ...$calledMethods)); } @@ -34487,7 +36897,7 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testPreConditionCalled(string $testClassName, \PHPUnit\Event\Code\ClassMethod $calledMethod) : void + public function testPreConditionCalled(string $testClassName, ClassMethod $calledMethod) : void { $this->dispatcher->dispatch(new \PHPUnit\Event\Test\PreConditionCalled($this->telemetryInfo(), $testClassName, $calledMethod)); } @@ -34497,7 +36907,7 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testPreConditionFinished(string $testClassName, \PHPUnit\Event\Code\ClassMethod ...$calledMethods) : void + public function testPreConditionFinished(string $testClassName, ClassMethod ...$calledMethods) : void { $this->dispatcher->dispatch(new \PHPUnit\Event\Test\PreConditionFinished($this->telemetryInfo(), $testClassName, ...$calledMethods)); } @@ -34522,24 +36932,22 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter /** * @throws InvalidArgumentException * @throws UnknownEventTypeException + * + * @deprecated */ public function testAssertionSucceeded(mixed $value, Constraint\Constraint $constraint, string $message) : void { - if (!$this->hasSubscriberFor(\PHPUnit\Event\Test\AssertionSucceeded::class)) { - return; - } - $this->dispatcher->dispatch(new \PHPUnit\Event\Test\AssertionSucceeded($this->telemetryInfo(), (new Exporter())->export($value), $constraint->toString(), $constraint->count(), $message)); + $this->dispatcher->dispatch(new \PHPUnit\Event\Test\AssertionSucceeded($this->telemetryInfo(), Exporter::export($value, $this->exportObjects), $constraint->toString($this->exportObjects), $constraint->count(), $message)); } /** * @throws InvalidArgumentException * @throws UnknownEventTypeException + * + * @deprecated */ public function testAssertionFailed(mixed $value, Constraint\Constraint $constraint, string $message) : void { - if (!$this->hasSubscriberFor(\PHPUnit\Event\Test\AssertionFailed::class)) { - return; - } - $this->dispatcher->dispatch(new \PHPUnit\Event\Test\AssertionFailed($this->telemetryInfo(), (new Exporter())->export($value), $constraint->toString(), $constraint->count(), $message)); + $this->dispatcher->dispatch(new \PHPUnit\Event\Test\AssertionFailed($this->telemetryInfo(), Exporter::export($value, $this->exportObjects), $constraint->toString($this->exportObjects), $constraint->count(), $message)); } /** * @psalm-param class-string $className @@ -34610,7 +37018,7 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter */ public function testCreatedTestProxy(string $className, array $constructorArguments) : void { - $this->dispatcher->dispatch(new \PHPUnit\Event\Test\TestProxyCreated($this->telemetryInfo(), $className, (new Exporter())->export($constructorArguments))); + $this->dispatcher->dispatch(new \PHPUnit\Event\Test\TestProxyCreated($this->telemetryInfo(), $className, Exporter::export($constructorArguments, $this->exportObjects))); } /** * @psalm-param class-string $className @@ -34681,6 +37089,8 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter $this->dispatcher->dispatch(new \PHPUnit\Event\Test\Skipped($this->telemetryInfo(), $test, $message)); } /** + * @psalm-param non-empty-string $message + * * @throws InvalidArgumentException * @throws UnknownEventTypeException */ @@ -34689,62 +37099,92 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter $this->dispatcher->dispatch(new \PHPUnit\Event\Test\PhpunitDeprecationTriggered($this->telemetryInfo(), $test, $message)); } /** + * @psalm-param non-empty-string $message + * @psalm-param non-empty-string $file + * @psalm-param positive-int $line + * * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testTriggeredPhpDeprecation(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line) : void + public function testTriggeredPhpDeprecation(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed, bool $ignoredByBaseline, bool $ignoredByTest) : void { - $this->dispatcher->dispatch(new \PHPUnit\Event\Test\PhpDeprecationTriggered($this->telemetryInfo(), $test, $message, $file, $line)); + $this->dispatcher->dispatch(new \PHPUnit\Event\Test\PhpDeprecationTriggered($this->telemetryInfo(), $test, $message, $file, $line, $suppressed, $ignoredByBaseline, $ignoredByTest)); } /** + * @psalm-param non-empty-string $message + * @psalm-param non-empty-string $file + * @psalm-param positive-int $line + * * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testTriggeredDeprecation(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line) : void + public function testTriggeredDeprecation(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed, bool $ignoredByBaseline, bool $ignoredByTest) : void { - $this->dispatcher->dispatch(new \PHPUnit\Event\Test\DeprecationTriggered($this->telemetryInfo(), $test, $message, $file, $line)); + $this->dispatcher->dispatch(new \PHPUnit\Event\Test\DeprecationTriggered($this->telemetryInfo(), $test, $message, $file, $line, $suppressed, $ignoredByBaseline, $ignoredByTest)); } /** + * @psalm-param non-empty-string $message + * @psalm-param non-empty-string $file + * @psalm-param positive-int $line + * * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testTriggeredError(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line) : void + public function testTriggeredError(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed) : void { - $this->dispatcher->dispatch(new \PHPUnit\Event\Test\ErrorTriggered($this->telemetryInfo(), $test, $message, $file, $line)); + $this->dispatcher->dispatch(new \PHPUnit\Event\Test\ErrorTriggered($this->telemetryInfo(), $test, $message, $file, $line, $suppressed)); } /** + * @psalm-param non-empty-string $message + * @psalm-param non-empty-string $file + * @psalm-param positive-int $line + * * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testTriggeredNotice(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line) : void + public function testTriggeredNotice(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed, bool $ignoredByBaseline) : void { - $this->dispatcher->dispatch(new \PHPUnit\Event\Test\NoticeTriggered($this->telemetryInfo(), $test, $message, $file, $line)); + $this->dispatcher->dispatch(new \PHPUnit\Event\Test\NoticeTriggered($this->telemetryInfo(), $test, $message, $file, $line, $suppressed, $ignoredByBaseline)); } /** + * @psalm-param non-empty-string $message + * @psalm-param non-empty-string $file + * @psalm-param positive-int $line + * * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testTriggeredPhpNotice(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line) : void + public function testTriggeredPhpNotice(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed, bool $ignoredByBaseline) : void { - $this->dispatcher->dispatch(new \PHPUnit\Event\Test\PhpNoticeTriggered($this->telemetryInfo(), $test, $message, $file, $line)); + $this->dispatcher->dispatch(new \PHPUnit\Event\Test\PhpNoticeTriggered($this->telemetryInfo(), $test, $message, $file, $line, $suppressed, $ignoredByBaseline)); } /** + * @psalm-param non-empty-string $message + * @psalm-param non-empty-string $file + * @psalm-param positive-int $line + * * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testTriggeredWarning(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line) : void + public function testTriggeredWarning(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed, bool $ignoredByBaseline) : void { - $this->dispatcher->dispatch(new \PHPUnit\Event\Test\WarningTriggered($this->telemetryInfo(), $test, $message, $file, $line)); + $this->dispatcher->dispatch(new \PHPUnit\Event\Test\WarningTriggered($this->telemetryInfo(), $test, $message, $file, $line, $suppressed, $ignoredByBaseline)); } /** + * @psalm-param non-empty-string $message + * @psalm-param non-empty-string $file + * @psalm-param positive-int $line + * * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testTriggeredPhpWarning(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line) : void + public function testTriggeredPhpWarning(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed, bool $ignoredByBaseline) : void { - $this->dispatcher->dispatch(new \PHPUnit\Event\Test\PhpWarningTriggered($this->telemetryInfo(), $test, $message, $file, $line)); + $this->dispatcher->dispatch(new \PHPUnit\Event\Test\PhpWarningTriggered($this->telemetryInfo(), $test, $message, $file, $line, $suppressed, $ignoredByBaseline)); } /** + * @psalm-param non-empty-string $message + * * @throws InvalidArgumentException * @throws UnknownEventTypeException */ @@ -34753,6 +37193,8 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter $this->dispatcher->dispatch(new \PHPUnit\Event\Test\PhpunitErrorTriggered($this->telemetryInfo(), $test, $message)); } /** + * @psalm-param non-empty-string $message + * * @throws InvalidArgumentException * @throws UnknownEventTypeException */ @@ -34784,7 +37226,7 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testPostConditionCalled(string $testClassName, \PHPUnit\Event\Code\ClassMethod $calledMethod) : void + public function testPostConditionCalled(string $testClassName, ClassMethod $calledMethod) : void { $this->dispatcher->dispatch(new \PHPUnit\Event\Test\PostConditionCalled($this->telemetryInfo(), $testClassName, $calledMethod)); } @@ -34794,7 +37236,7 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testPostConditionFinished(string $testClassName, \PHPUnit\Event\Code\ClassMethod ...$calledMethods) : void + public function testPostConditionFinished(string $testClassName, ClassMethod ...$calledMethods) : void { $this->dispatcher->dispatch(new \PHPUnit\Event\Test\PostConditionFinished($this->telemetryInfo(), $testClassName, ...$calledMethods)); } @@ -34804,7 +37246,7 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testAfterTestMethodCalled(string $testClassName, \PHPUnit\Event\Code\ClassMethod $calledMethod) : void + public function testAfterTestMethodCalled(string $testClassName, ClassMethod $calledMethod) : void { $this->dispatcher->dispatch(new \PHPUnit\Event\Test\AfterTestMethodCalled($this->telemetryInfo(), $testClassName, $calledMethod)); } @@ -34814,7 +37256,7 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testAfterTestMethodFinished(string $testClassName, \PHPUnit\Event\Code\ClassMethod ...$calledMethods) : void + public function testAfterTestMethodFinished(string $testClassName, ClassMethod ...$calledMethods) : void { $this->dispatcher->dispatch(new \PHPUnit\Event\Test\AfterTestMethodFinished($this->telemetryInfo(), $testClassName, ...$calledMethods)); } @@ -34824,7 +37266,7 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testAfterLastTestMethodCalled(string $testClassName, \PHPUnit\Event\Code\ClassMethod $calledMethod) : void + public function testAfterLastTestMethodCalled(string $testClassName, ClassMethod $calledMethod) : void { $this->dispatcher->dispatch(new \PHPUnit\Event\Test\AfterLastTestMethodCalled($this->telemetryInfo(), $testClassName, $calledMethod)); } @@ -34834,7 +37276,7 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter * @throws InvalidArgumentException * @throws UnknownEventTypeException */ - public function testAfterLastTestMethodFinished(string $testClassName, \PHPUnit\Event\Code\ClassMethod ...$calledMethods) : void + public function testAfterLastTestMethodFinished(string $testClassName, ClassMethod ...$calledMethods) : void { $this->dispatcher->dispatch(new \PHPUnit\Event\Test\AfterLastTestMethodFinished($this->telemetryInfo(), $testClassName, ...$calledMethods)); } @@ -34862,6 +37304,22 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter { $this->dispatcher->dispatch(new \PHPUnit\Event\TestRunner\WarningTriggered($this->telemetryInfo(), $message)); } + /** + * @throws InvalidArgumentException + * @throws UnknownEventTypeException + */ + public function testRunnerEnabledGarbageCollection() : void + { + $this->dispatcher->dispatch(new \PHPUnit\Event\TestRunner\GarbageCollectionEnabled($this->telemetryInfo())); + } + /** + * @throws InvalidArgumentException + * @throws UnknownEventTypeException + */ + public function testRunnerExecutionAborted() : void + { + $this->dispatcher->dispatch(new \PHPUnit\Event\TestRunner\ExecutionAborted($this->telemetryInfo())); + } /** * @throws InvalidArgumentException * @throws UnknownEventTypeException @@ -34896,16 +37354,6 @@ final class DispatchingEmitter implements \PHPUnit\Event\Emitter $this->previousSnapshot = $current; return $info; } - /** - * @psalm-param class-string $className - */ - private function hasSubscriberFor(string $className) : bool - { - if (!$this->dispatcher instanceof \PHPUnit\Event\SubscribableDispatcher) { - return \true; - } - return $this->dispatcher->hasSubscriberFor($className); - } } $parameters */ public function testRunnerBootstrappedExtension(string $className, array $parameters) : void; + public function dataProviderMethodCalled(ClassMethod $testMethod, ClassMethod $dataProviderMethod) : void; + public function dataProviderMethodFinished(ClassMethod $testMethod, ClassMethod ...$calledMethods) : void; public function testSuiteLoaded(TestSuite $testSuite) : void; public function testSuiteFiltered(TestSuite $testSuite) : void; public function testSuiteSorted(int $executionOrder, int $executionOrderDefects, bool $resolveDependencies) : void; public function testRunnerEventFacadeSealed() : void; public function testRunnerExecutionStarted(TestSuite $testSuite) : void; + public function testRunnerDisabledGarbageCollection() : void; + public function testRunnerTriggeredGarbageCollection() : void; public function testSuiteSkipped(TestSuite $testSuite, string $message) : void; public function testSuiteStarted(TestSuite $testSuite) : void; public function testPreparationStarted(\PHPUnit\Event\Code\Test $test) : void; + public function testPreparationFailed(\PHPUnit\Event\Code\Test $test) : void; /** * @psalm-param class-string $testClassName */ - public function testBeforeFirstTestMethodCalled(string $testClassName, \PHPUnit\Event\Code\ClassMethod $calledMethod) : void; + public function testBeforeFirstTestMethodCalled(string $testClassName, ClassMethod $calledMethod) : void; /** * @psalm-param class-string $testClassName */ - public function testBeforeFirstTestMethodErrored(string $testClassName, \PHPUnit\Event\Code\ClassMethod $calledMethod, Throwable $throwable) : void; + public function testBeforeFirstTestMethodErrored(string $testClassName, ClassMethod $calledMethod, Throwable $throwable) : void; /** * @psalm-param class-string $testClassName */ - public function testBeforeFirstTestMethodFinished(string $testClassName, \PHPUnit\Event\Code\ClassMethod ...$calledMethods) : void; + public function testBeforeFirstTestMethodFinished(string $testClassName, ClassMethod ...$calledMethods) : void; /** * @psalm-param class-string $testClassName */ - public function testBeforeTestMethodCalled(string $testClassName, \PHPUnit\Event\Code\ClassMethod $calledMethod) : void; + public function testBeforeTestMethodCalled(string $testClassName, ClassMethod $calledMethod) : void; /** * @psalm-param class-string $testClassName */ - public function testBeforeTestMethodFinished(string $testClassName, \PHPUnit\Event\Code\ClassMethod ...$calledMethods) : void; + public function testBeforeTestMethodFinished(string $testClassName, ClassMethod ...$calledMethods) : void; /** * @psalm-param class-string $testClassName */ - public function testPreConditionCalled(string $testClassName, \PHPUnit\Event\Code\ClassMethod $calledMethod) : void; + public function testPreConditionCalled(string $testClassName, ClassMethod $calledMethod) : void; /** * @psalm-param class-string $testClassName */ - public function testPreConditionFinished(string $testClassName, \PHPUnit\Event\Code\ClassMethod ...$calledMethods) : void; + public function testPreConditionFinished(string $testClassName, ClassMethod ...$calledMethods) : void; public function testPrepared(\PHPUnit\Event\Code\Test $test) : void; /** * @psalm-param class-string $className */ public function testRegisteredComparator(string $className) : void; + /** + * @deprecated + */ public function testAssertionSucceeded(mixed $value, Constraint\Constraint $constraint, string $message) : void; + /** + * @deprecated + */ public function testAssertionFailed(mixed $value, Constraint\Constraint $constraint, string $message) : void; /** * @psalm-param class-string $className @@ -35023,18 +37491,68 @@ interface Emitter public function testErrored(\PHPUnit\Event\Code\Test $test, Throwable $throwable) : void; public function testFailed(\PHPUnit\Event\Code\Test $test, Throwable $throwable, ?ComparisonFailure $comparisonFailure) : void; public function testPassed(\PHPUnit\Event\Code\Test $test) : void; + /** + * @psalm-param non-empty-string $message + */ public function testConsideredRisky(\PHPUnit\Event\Code\Test $test, string $message) : void; public function testMarkedAsIncomplete(\PHPUnit\Event\Code\Test $test, Throwable $throwable) : void; + /** + * @psalm-param non-empty-string $message + */ public function testSkipped(\PHPUnit\Event\Code\Test $test, string $message) : void; + /** + * @psalm-param non-empty-string $message + */ public function testTriggeredPhpunitDeprecation(\PHPUnit\Event\Code\Test $test, string $message) : void; - public function testTriggeredPhpDeprecation(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line) : void; - public function testTriggeredDeprecation(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line) : void; - public function testTriggeredError(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line) : void; - public function testTriggeredNotice(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line) : void; - public function testTriggeredPhpNotice(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line) : void; - public function testTriggeredWarning(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line) : void; - public function testTriggeredPhpWarning(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line) : void; + /** + * @psalm-param non-empty-string $message + * @psalm-param non-empty-string $file + * @psalm-param positive-int $line + */ + public function testTriggeredPhpDeprecation(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed, bool $ignoredByBaseline, bool $ignoredByTest) : void; + /** + * @psalm-param non-empty-string $message + * @psalm-param non-empty-string $file + * @psalm-param positive-int $line + */ + public function testTriggeredDeprecation(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed, bool $ignoredByBaseline, bool $ignoredByTest) : void; + /** + * @psalm-param non-empty-string $message + * @psalm-param non-empty-string $file + * @psalm-param positive-int $line + */ + public function testTriggeredError(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed) : void; + /** + * @psalm-param non-empty-string $message + * @psalm-param non-empty-string $file + * @psalm-param positive-int $line + */ + public function testTriggeredNotice(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed, bool $ignoredByBaseline) : void; + /** + * @psalm-param non-empty-string $message + * @psalm-param non-empty-string $file + * @psalm-param positive-int $line + */ + public function testTriggeredPhpNotice(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed, bool $ignoredByBaseline) : void; + /** + * @psalm-param non-empty-string $message + * @psalm-param non-empty-string $file + * @psalm-param positive-int $line + */ + public function testTriggeredWarning(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed, bool $ignoredByBaseline) : void; + /** + * @psalm-param non-empty-string $message + * @psalm-param non-empty-string $file + * @psalm-param positive-int $line + */ + public function testTriggeredPhpWarning(\PHPUnit\Event\Code\Test $test, string $message, string $file, int $line, bool $suppressed, bool $ignoredByBaseline) : void; + /** + * @psalm-param non-empty-string $message + */ public function testTriggeredPhpunitError(\PHPUnit\Event\Code\Test $test, string $message) : void; + /** + * @psalm-param non-empty-string $message + */ public function testTriggeredPhpunitWarning(\PHPUnit\Event\Code\Test $test, string $message) : void; /** * @psalm-param non-empty-string $output @@ -35044,30 +37562,32 @@ interface Emitter /** * @psalm-param class-string $testClassName */ - public function testPostConditionCalled(string $testClassName, \PHPUnit\Event\Code\ClassMethod $calledMethod) : void; + public function testPostConditionCalled(string $testClassName, ClassMethod $calledMethod) : void; /** * @psalm-param class-string $testClassName */ - public function testPostConditionFinished(string $testClassName, \PHPUnit\Event\Code\ClassMethod ...$calledMethods) : void; + public function testPostConditionFinished(string $testClassName, ClassMethod ...$calledMethods) : void; /** * @psalm-param class-string $testClassName */ - public function testAfterTestMethodCalled(string $testClassName, \PHPUnit\Event\Code\ClassMethod $calledMethod) : void; + public function testAfterTestMethodCalled(string $testClassName, ClassMethod $calledMethod) : void; /** * @psalm-param class-string $testClassName */ - public function testAfterTestMethodFinished(string $testClassName, \PHPUnit\Event\Code\ClassMethod ...$calledMethods) : void; + public function testAfterTestMethodFinished(string $testClassName, ClassMethod ...$calledMethods) : void; /** * @psalm-param class-string $testClassName */ - public function testAfterLastTestMethodCalled(string $testClassName, \PHPUnit\Event\Code\ClassMethod $calledMethod) : void; + public function testAfterLastTestMethodCalled(string $testClassName, ClassMethod $calledMethod) : void; /** * @psalm-param class-string $testClassName */ - public function testAfterLastTestMethodFinished(string $testClassName, \PHPUnit\Event\Code\ClassMethod ...$calledMethods) : void; + public function testAfterLastTestMethodFinished(string $testClassName, ClassMethod ...$calledMethods) : void; public function testSuiteFinished(TestSuite $testSuite) : void; public function testRunnerTriggeredDeprecation(string $message) : void; public function testRunnerTriggeredWarning(string $message) : void; + public function testRunnerEnabledGarbageCollection() : void; + public function testRunnerExecutionAborted() : void; public function testRunnerExecutionFinished() : void; public function testRunnerFinished() : void; public function applicationFinished(int $shellExitCode) : void; @@ -35349,6 +37869,8 @@ use PHPUnit\Event\Event; use PHPUnit\Event\Telemetry; /** * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + * + * @deprecated */ final class AssertionFailed implements Event { @@ -35406,6 +37928,8 @@ namespace PHPUnit\Event\Test; use PHPUnit\Event\Subscriber; /** * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + * + * @deprecated */ interface AssertionFailedSubscriber extends Subscriber { @@ -35429,6 +37953,8 @@ use PHPUnit\Event\Event; use PHPUnit\Event\Telemetry; /** * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + * + * @deprecated */ final class AssertionSucceeded implements Event { @@ -35486,6 +38012,8 @@ namespace PHPUnit\Event\Test; use PHPUnit\Event\Subscriber; /** * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + * + * @deprecated */ interface AssertionSucceededSubscriber extends Subscriber { @@ -36708,7 +39236,13 @@ final class ConsideredRisky implements Event { private readonly Telemetry\Info $telemetryInfo; private readonly Code\Test $test; + /** + * @psalm-var non-empty-string + */ private readonly string $message; + /** + * @psalm-param non-empty-string $message + */ public function __construct(Telemetry\Info $telemetryInfo, Code\Test $test, string $message) { $this->telemetryInfo = $telemetryInfo; @@ -36723,6 +39257,9 @@ final class ConsideredRisky implements Event { return $this->test; } + /** + * @psalm-return non-empty-string + */ public function message() : string { return $this->message; @@ -36780,16 +39317,36 @@ final class DeprecationTriggered implements Event { private readonly Telemetry\Info $telemetryInfo; private readonly Test $test; + /** + * @psalm-var non-empty-string + */ private readonly string $message; + /** + * @psalm-var non-empty-string + */ private readonly string $file; + /** + * @psalm-var positive-int + */ private readonly int $line; - public function __construct(Telemetry\Info $telemetryInfo, Test $test, string $message, string $file, int $line) + private readonly bool $suppressed; + private readonly bool $ignoredByBaseline; + private readonly bool $ignoredByTest; + /** + * @psalm-param non-empty-string $message + * @psalm-param non-empty-string $file + * @psalm-param positive-int $line + */ + public function __construct(Telemetry\Info $telemetryInfo, Test $test, string $message, string $file, int $line, bool $suppressed, bool $ignoredByBaseline, bool $ignoredByTest) { $this->telemetryInfo = $telemetryInfo; $this->test = $test; $this->message = $message; $this->file = $file; $this->line = $line; + $this->suppressed = $suppressed; + $this->ignoredByBaseline = $ignoredByBaseline; + $this->ignoredByTest = $ignoredByTest; } public function telemetryInfo() : Telemetry\Info { @@ -36799,25 +39356,54 @@ final class DeprecationTriggered implements Event { return $this->test; } + /** + * @psalm-return non-empty-string + */ public function message() : string { return $this->message; } + /** + * @psalm-return non-empty-string + */ public function file() : string { return $this->file; } + /** + * @psalm-return positive-int + */ public function line() : int { return $this->line; } + public function wasSuppressed() : bool + { + return $this->suppressed; + } + public function ignoredByBaseline() : bool + { + return $this->ignoredByBaseline; + } + public function ignoredByTest() : bool + { + return $this->ignoredByTest; + } public function asString() : string { $message = $this->message; if (!empty($message)) { $message = PHP_EOL . $message; } - return sprintf('Test Triggered Deprecation (%s)%s', $this->test->id(), $message); + $status = ''; + if ($this->ignoredByTest) { + $status = 'Test-Ignored '; + } elseif ($this->ignoredByBaseline) { + $status = 'Baseline-Ignored '; + } elseif ($this->suppressed) { + $status = 'Suppressed '; + } + return sprintf('Test Triggered %sDeprecation (%s)%s', $status, $this->test->id(), $message); } } telemetryInfo = $telemetryInfo; $this->test = $test; $this->message = $message; $this->file = $file; $this->line = $line; + $this->suppressed = $suppressed; } public function telemetryInfo() : Telemetry\Info { @@ -36887,25 +39489,38 @@ final class ErrorTriggered implements Event { return $this->test; } + /** + * @psalm-return non-empty-string + */ public function message() : string { return $this->message; } + /** + * @psalm-return non-empty-string + */ public function file() : string { return $this->file; } + /** + * @psalm-return positive-int + */ public function line() : int { return $this->line; } + public function wasSuppressed() : bool + { + return $this->suppressed; + } public function asString() : string { $message = $this->message; if (!empty($message)) { $message = PHP_EOL . $message; } - return sprintf('Test Triggered Error (%s)%s', $this->test->id(), $message); + return sprintf('Test Triggered %sError (%s)%s', $this->wasSuppressed() ? 'Suppressed ' : '', $this->test->id(), $message); } } telemetryInfo = $telemetryInfo; $this->test = $test; $this->message = $message; $this->file = $file; $this->line = $line; + $this->suppressed = $suppressed; + $this->ignoredByBaseline = $ignoredByBaseline; } public function telemetryInfo() : Telemetry\Info { @@ -36975,25 +39608,48 @@ final class NoticeTriggered implements Event { return $this->test; } + /** + * @psalm-return non-empty-string + */ public function message() : string { return $this->message; } + /** + * @psalm-return non-empty-string + */ public function file() : string { return $this->file; } + /** + * @psalm-return positive-int + */ public function line() : int { return $this->line; } + public function wasSuppressed() : bool + { + return $this->suppressed; + } + public function ignoredByBaseline() : bool + { + return $this->ignoredByBaseline; + } public function asString() : string { $message = $this->message; if (!empty($message)) { $message = PHP_EOL . $message; } - return sprintf('Test Triggered Notice (%s)%s', $this->test->id(), $message); + $status = ''; + if ($this->ignoredByBaseline) { + $status = 'Baseline-Ignored '; + } elseif ($this->suppressed) { + $status = 'Suppressed '; + } + return sprintf('Test Triggered %sNotice (%s)%s', $status, $this->test->id(), $message); } } telemetryInfo = $telemetryInfo; $this->test = $test; $this->message = $message; $this->file = $file; $this->line = $line; + $this->suppressed = $suppressed; + $this->ignoredByBaseline = $ignoredByBaseline; + $this->ignoredByTest = $ignoredByTest; } public function telemetryInfo() : Telemetry\Info { @@ -37063,105 +39739,38 @@ final class PhpDeprecationTriggered implements Event { return $this->test; } + /** + * @psalm-return non-empty-string + */ public function message() : string { return $this->message; } + /** + * @psalm-return non-empty-string + */ public function file() : string { return $this->file; } + /** + * @psalm-return positive-int + */ public function line() : int { return $this->line; } - public function asString() : string - { - $message = $this->message; - if (!empty($message)) { - $message = PHP_EOL . $message; - } - return sprintf('Test Triggered PHP Deprecation (%s)%s', $this->test->id(), $message); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Event\Test; - -use PHPUnit\Event\Subscriber; -/** - * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit - */ -interface PhpDeprecationTriggeredSubscriber extends Subscriber -{ - public function notify(\PHPUnit\Event\Test\PhpDeprecationTriggered $event) : void; -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Event\Test; - -use const PHP_EOL; -use function sprintf; -use PHPUnit\Event\Code\Test; -use PHPUnit\Event\Event; -use PHPUnit\Event\Telemetry; -/** - * @psalm-immutable - * - * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit - */ -final class PhpNoticeTriggered implements Event -{ - private readonly Telemetry\Info $telemetryInfo; - private readonly Test $test; - private readonly string $message; - private readonly string $file; - private readonly int $line; - public function __construct(Telemetry\Info $telemetryInfo, Test $test, string $message, string $file, int $line) - { - $this->telemetryInfo = $telemetryInfo; - $this->test = $test; - $this->message = $message; - $this->file = $file; - $this->line = $line; - } - public function telemetryInfo() : Telemetry\Info - { - return $this->telemetryInfo; - } - public function test() : Test - { - return $this->test; - } - public function message() : string + public function wasSuppressed() : bool { - return $this->message; + return $this->suppressed; } - public function file() : string + public function ignoredByBaseline() : bool { - return $this->file; + return $this->ignoredByBaseline; } - public function line() : int + public function ignoredByTest() : bool { - return $this->line; + return $this->ignoredByTest; } public function asString() : string { @@ -37169,7 +39778,15 @@ final class PhpNoticeTriggered implements Event if (!empty($message)) { $message = PHP_EOL . $message; } - return sprintf('Test Triggered PHP Notice (%s)%s', $this->test->id(), $message); + $status = ''; + if ($this->ignoredByTest) { + $status = 'Test-Ignored '; + } elseif ($this->ignoredByBaseline) { + $status = 'Baseline-Ignored '; + } elseif ($this->suppressed) { + $status = 'Suppressed '; + } + return sprintf('Test Triggered %sPHP Deprecation (%s)%s', $status, $this->test->id(), $message); } } telemetryInfo = $telemetryInfo; $this->test = $test; $this->message = $message; $this->file = $file; $this->line = $line; + $this->suppressed = $suppressed; + $this->ignoredByBaseline = $ignoredByBaseline; } public function telemetryInfo() : Telemetry\Info { @@ -37239,25 +39874,48 @@ final class PhpWarningTriggered implements Event { return $this->test; } + /** + * @psalm-return non-empty-string + */ public function message() : string { return $this->message; } + /** + * @psalm-return non-empty-string + */ public function file() : string { return $this->file; } + /** + * @psalm-return positive-int + */ public function line() : int { return $this->line; } + public function wasSuppressed() : bool + { + return $this->suppressed; + } + public function ignoredByBaseline() : bool + { + return $this->ignoredByBaseline; + } public function asString() : string { $message = $this->message; if (!empty($message)) { $message = PHP_EOL . $message; } - return sprintf('Test Triggered PHP Warning (%s)%s', $this->test->id(), $message); + $status = ''; + if ($this->ignoredByBaseline) { + $status = 'Baseline-Ignored '; + } elseif ($this->suppressed) { + $status = 'Suppressed '; + } + return sprintf('Test Triggered %sPHP Notice (%s)%s', $status, $this->test->id(), $message); } } telemetryInfo = $telemetryInfo; $this->test = $test; $this->message = $message; + $this->file = $file; + $this->line = $line; + $this->suppressed = $suppressed; + $this->ignoredByBaseline = $ignoredByBaseline; } public function telemetryInfo() : Telemetry\Info { @@ -37323,17 +40003,48 @@ final class PhpunitDeprecationTriggered implements Event { return $this->test; } + /** + * @psalm-return non-empty-string + */ public function message() : string { return $this->message; } + /** + * @psalm-return non-empty-string + */ + public function file() : string + { + return $this->file; + } + /** + * @psalm-return positive-int + */ + public function line() : int + { + return $this->line; + } + public function wasSuppressed() : bool + { + return $this->suppressed; + } + public function ignoredByBaseline() : bool + { + return $this->ignoredByBaseline; + } public function asString() : string { $message = $this->message; if (!empty($message)) { $message = PHP_EOL . $message; } - return sprintf('Test Triggered PHPUnit Deprecation (%s)%s', $this->test->id(), $message); + $status = ''; + if ($this->ignoredByBaseline) { + $status = 'Baseline-Ignored '; + } elseif ($this->suppressed) { + $status = 'Suppressed '; + } + return sprintf('Test Triggered %sPHP Warning (%s)%s', $status, $this->test->id(), $message); } } telemetryInfo = $telemetryInfo; @@ -37399,6 +40116,9 @@ final class PhpunitErrorTriggered implements Event { return $this->test; } + /** + * @psalm-return non-empty-string + */ public function message() : string { return $this->message; @@ -37409,7 +40129,7 @@ final class PhpunitErrorTriggered implements Event if (!empty($message)) { $message = PHP_EOL . $message; } - return sprintf('Test Triggered PHPUnit Error (%s)%s', $this->test->id(), $message); + return sprintf('Test Triggered PHPUnit Deprecation (%s)%s', $this->test->id(), $message); } } telemetryInfo = $telemetryInfo; @@ -37475,17 +40202,20 @@ final class PhpunitWarningTriggered implements Event { return $this->test; } + /** + * @psalm-return non-empty-string + */ public function message() : string { return $this->message; } public function asString() : string { - $message = $this->message; + $message = trim($this->message); if (!empty($message)) { $message = PHP_EOL . $message; } - return sprintf('Test Triggered PHPUnit Warning (%s)%s', $this->test->id(), $message); + return sprintf('Test Triggered PHPUnit Error (%s)%s', $this->test->id(), $message); } } telemetryInfo = $telemetryInfo; $this->test = $test; $this->message = $message; - $this->file = $file; - $this->line = $line; } public function telemetryInfo() : Telemetry\Info { @@ -37555,25 +40287,20 @@ final class WarningTriggered implements Event { return $this->test; } + /** + * @psalm-return non-empty-string + */ public function message() : string { return $this->message; } - public function file() : string - { - return $this->file; - } - public function line() : int - { - return $this->line; - } public function asString() : string { $message = $this->message; if (!empty($message)) { $message = PHP_EOL . $message; } - return sprintf('Test Triggered Warning (%s)%s', $this->test->id(), $message); + return sprintf('Test Triggered PHPUnit Warning (%s)%s', $this->test->id(), $message); } } telemetryInfo = $telemetryInfo; $this->test = $test; - $this->numberOfAssertionsPerformed = $numberOfAssertionsPerformed; + $this->message = $message; + $this->file = $file; + $this->line = $line; + $this->suppressed = $suppressed; + $this->ignoredByBaseline = $ignoredByBaseline; } public function telemetryInfo() : Telemetry\Info { return $this->telemetryInfo; } - public function test() : Code\Test + public function test() : Test { return $this->test; } - public function numberOfAssertionsPerformed() : int + /** + * @psalm-return non-empty-string + */ + public function message() : string { - return $this->numberOfAssertionsPerformed; + return $this->message; + } + /** + * @psalm-return non-empty-string + */ + public function file() : string + { + return $this->file; + } + /** + * @psalm-return positive-int + */ + public function line() : int + { + return $this->line; + } + public function wasSuppressed() : bool + { + return $this->suppressed; + } + public function ignoredByBaseline() : bool + { + return $this->ignoredByBaseline; } public function asString() : string { - return sprintf('Test Finished (%s)', $this->test->id()); + $message = $this->message; + if (!empty($message)) { + $message = PHP_EOL . $message; + } + $status = ''; + if ($this->ignoredByBaseline) { + $status = 'Baseline-Ignored '; + } elseif ($this->suppressed) { + $status = 'Suppressed '; + } + return sprintf('Test Triggered %sWarning (%s)%s', $status, $this->test->id(), $message); } } telemetryInfo = $telemetryInfo; - $this->test = $test; + $this->testMethod = $testMethod; + $this->dataProviderMethod = $dataProviderMethod; } - public function telemetryInfo() : Telemetry\Info + public function telemetryInfo() : Info { return $this->telemetryInfo; } - public function test() : Code\Test + public function testMethod() : ClassMethod { - return $this->test; + return $this->testMethod; + } + public function dataProviderMethod() : ClassMethod + { + return $this->dataProviderMethod; } public function asString() : string { - return sprintf('Test Preparation Started (%s)', $this->test->id()); + return sprintf('Data Provider Method Called (%s::%s for test method %s::%s)', $this->dataProviderMethod->className(), $this->dataProviderMethod->methodName(), $this->testMethod->className(), $this->testMethod->methodName()); } } + */ + private readonly array $calledMethods; + public function __construct(Telemetry\Info $telemetryInfo, ClassMethod $testMethod, ClassMethod ...$calledMethods) { $this->telemetryInfo = $telemetryInfo; - $this->test = $test; + $this->testMethod = $testMethod; + $this->calledMethods = $calledMethods; } public function telemetryInfo() : Telemetry\Info { return $this->telemetryInfo; } - public function test() : Code\Test + public function testMethod() : ClassMethod { - return $this->test; + return $this->testMethod; + } + /** + * @psalm-return list + */ + public function calledMethods() : array + { + return $this->calledMethods; } public function asString() : string { - return sprintf('Test Prepared (%s)', $this->test->id()); + $buffer = sprintf('Data Provider Method Finished for %s::%s:', $this->testMethod->className(), $this->testMethod->methodName()); + foreach ($this->calledMethods as $calledMethod) { + $buffer .= sprintf(PHP_EOL . '- %s::%s', $calledMethod->className(), $calledMethod->methodName()); + } + return $buffer; } } telemetryInfo = $telemetryInfo; $this->test = $test; - $this->throwable = $throwable; + $this->numberOfAssertionsPerformed = $numberOfAssertionsPerformed; } public function telemetryInfo() : Telemetry\Info { @@ -37841,17 +40648,13 @@ final class Errored implements Event { return $this->test; } - public function throwable() : Throwable + public function numberOfAssertionsPerformed() : int { - return $this->throwable; + return $this->numberOfAssertionsPerformed; } public function asString() : string { - $message = $this->throwable->message(); - if (!empty($message)) { - $message = PHP_EOL . $message; - } - return sprintf('Test Errored (%s)%s', $this->test->id(), $message); + return sprintf('Test Finished (%s)', $this->test->id()); } } telemetryInfo = $telemetryInfo; $this->test = $test; - $this->throwable = $throwable; - $this->comparisonFailure = $comparisonFailure; } public function telemetryInfo() : Telemetry\Info { @@ -37921,34 +40717,9 @@ final class Failed implements Event { return $this->test; } - public function throwable() : Throwable - { - return $this->throwable; - } - /** - * @psalm-assert-if-true !null $this->comparisonFailure - */ - public function hasComparisonFailure() : bool - { - return $this->comparisonFailure !== null; - } - /** - * @throws NoComparisonFailureException - */ - public function comparisonFailure() : ComparisonFailure - { - if ($this->comparisonFailure === null) { - throw new \PHPUnit\Event\Test\NoComparisonFailureException(); - } - return $this->comparisonFailure; - } public function asString() : string { - $message = $this->throwable->message(); - if (!empty($message)) { - $message = PHP_EOL . $message; - } - return sprintf('Test Failed (%s)%s', $this->test->id(), $message); + return sprintf('Test Preparation Failed (%s)', $this->test->id()); } } telemetryInfo = $telemetryInfo; $this->test = $test; - $this->throwable = $throwable; } public function telemetryInfo() : Telemetry\Info { @@ -38015,17 +40782,9 @@ final class MarkedIncomplete implements Event { return $this->test; } - public function throwable() : Throwable - { - return $this->throwable; - } public function asString() : string { - $message = $this->throwable->message(); - if (!empty($message)) { - $message = PHP_EOL . $message; - } - return sprintf('Test Marked Incomplete (%s)%s', $this->test->id(), $message); + return sprintf('Test Preparation Started (%s)', $this->test->id()); } } test->id()); + return sprintf('Test Prepared (%s)', $this->test->id()); } } telemetryInfo = $telemetryInfo; $this->test = $test; - $this->message = $message; + $this->throwable = $throwable; } public function telemetryInfo() : Telemetry\Info { @@ -38156,17 +40917,17 @@ final class Skipped implements Event { return $this->test; } - public function message() : string + public function throwable() : Throwable { - return $this->message; + return $this->throwable; } public function asString() : string { - $message = $this->message; + $message = trim($this->throwable->message()); if (!empty($message)) { $message = PHP_EOL . $message; } - return sprintf('Test Skipped (%s)%s', $this->test->id(), $message); + return sprintf('Test Errored (%s)%s', $this->test->id(), $message); } } telemetryInfo = $telemetryInfo; - $this->output = $output; + $this->test = $test; + $this->throwable = $throwable; + $this->comparisonFailure = $comparisonFailure; } public function telemetryInfo() : Telemetry\Info { return $this->telemetryInfo; } + public function test() : Code\Test + { + return $this->test; + } + public function throwable() : Throwable + { + return $this->throwable; + } /** - * @psalm-return non-empty-string + * @psalm-assert-if-true !null $this->comparisonFailure */ - public function output() : string + public function hasComparisonFailure() : bool { - return $this->output; + return $this->comparisonFailure !== null; + } + /** + * @throws NoComparisonFailureException + */ + public function comparisonFailure() : ComparisonFailure + { + if ($this->comparisonFailure === null) { + throw new \PHPUnit\Event\Test\NoComparisonFailureException(); + } + return $this->comparisonFailure; } public function asString() : string { - return sprintf('Test Printed Unexpected Output%s%s', \PHP_EOL, $this->output); + $message = trim($this->throwable->message()); + if (!empty($message)) { + $message = PHP_EOL . $message; + } + return sprintf('Test Failed (%s)%s', $this->test->id(), $message); } } telemetryInfo = $telemetryInfo; - $this->className = $className; + $this->test = $test; + $this->throwable = $throwable; } public function telemetryInfo() : Telemetry\Info { return $this->telemetryInfo; } - /** - * @psalm-return class-string - */ - public function className() : string + public function test() : Code\Test { - return $this->className; + return $this->test; + } + public function throwable() : Throwable + { + return $this->throwable; } public function asString() : string { - return sprintf('Mock Object Created (%s)', $this->className); + $message = trim($this->throwable->message()); + if (!empty($message)) { + $message = PHP_EOL . $message; + } + return sprintf('Test Marked Incomplete (%s)%s', $this->test->id(), $message); } } telemetryInfo = $telemetryInfo; - $this->className = $className; + $this->test = $test; } public function telemetryInfo() : Telemetry\Info { return $this->telemetryInfo; } - /** - * @psalm-return class-string - */ - public function className() : string + public function test() : Code\Test { - return $this->className; + return $this->test; } public function asString() : string { - return sprintf('Mock Object Created (%s)', $this->className); + return sprintf('Test Passed (%s)', $this->test->id()); } } - */ - private readonly array $interfaces; - /** - * @psalm-param list $interfaces - */ - public function __construct(Telemetry\Info $telemetryInfo, array $interfaces) + private readonly Code\Test $test; + private readonly string $message; + public function __construct(Telemetry\Info $telemetryInfo, Code\Test $test, string $message) { $this->telemetryInfo = $telemetryInfo; - $this->interfaces = $interfaces; + $this->test = $test; + $this->message = $message; } public function telemetryInfo() : Telemetry\Info { return $this->telemetryInfo; } - /** - * @return list - */ - public function interfaces() : array + public function test() : Code\Test { - return $this->interfaces; + return $this->test; + } + public function message() : string + { + return $this->message; } public function asString() : string { - return sprintf('Mock Object Created (%s)', implode('&', $this->interfaces)); + $message = $this->message; + if (!empty($message)) { + $message = PHP_EOL . $message; + } + return sprintf('Test Skipped (%s)%s', $this->test->id(), $message); } } telemetryInfo = $telemetryInfo; - $this->traitName = $traitName; + $this->output = $output; } public function telemetryInfo() : Telemetry\Info { return $this->telemetryInfo; } /** - * @psalm-return trait-string + * @psalm-return non-empty-string */ - public function traitName() : string + public function output() : string { - return $this->traitName; + return $this->output; } public function asString() : string { - return sprintf('Mock Object Created (%s)', $this->traitName); + return sprintf('Test Printed Unexpected Output%s%s', \PHP_EOL, $this->output); } } - */ - private readonly array $methods; - private readonly bool $callOriginalConstructor; - private readonly array $options; + private readonly string $className; /** - * @psalm-param class-string $originalClassName - * @psalm-param class-string $mockClassName + * @psalm-param class-string $className */ - public function __construct(Telemetry\Info $telemetryInfo, string $wsdlFile, string $originalClassName, string $mockClassName, array $methods, bool $callOriginalConstructor, array $options) + public function __construct(Telemetry\Info $telemetryInfo, string $className) { $this->telemetryInfo = $telemetryInfo; - $this->wsdlFile = $wsdlFile; - $this->originalClassName = $originalClassName; - $this->mockClassName = $mockClassName; - $this->methods = $methods; - $this->callOriginalConstructor = $callOriginalConstructor; - $this->options = $options; + $this->className = $className; } public function telemetryInfo() : Telemetry\Info { return $this->telemetryInfo; } - public function wsdlFile() : string - { - return $this->wsdlFile; - } - /** - * @psalm-return class-string - */ - public function originalClassName() : string - { - return $this->originalClassName; - } /** * @psalm-return class-string */ - public function mockClassName() : string - { - return $this->mockClassName; - } - /** - * @psalm-return list - */ - public function methods() : array - { - return $this->methods; - } - public function callOriginalConstructor() : bool - { - return $this->callOriginalConstructor; - } - public function options() : array + public function className() : string { - return $this->options; + return $this->className; } public function asString() : string { - return sprintf('Mock Object Created (%s)', $this->wsdlFile); + return sprintf('Mock Object Created (%s)', $this->className); } } - */ - private readonly array $methodNames; /** * @psalm-param class-string $className */ - public function __construct(Telemetry\Info $telemetryInfo, string $className, string ...$methodNames) + public function __construct(Telemetry\Info $telemetryInfo, string $className) { $this->telemetryInfo = $telemetryInfo; $this->className = $className; - $this->methodNames = $methodNames; } public function telemetryInfo() : Telemetry\Info { @@ -38724,16 +41461,9 @@ final class PartialMockObjectCreated implements Event { return $this->className; } - /** - * @psalm-return list - */ - public function methodNames() : array - { - return $this->methodNames; - } public function asString() : string { - return sprintf('Partial Mock Object Created (%s)', $this->className); + return sprintf('Mock Object Created (%s)', $this->className); } } */ - private readonly string $className; - private readonly string $constructorArguments; + private readonly array $interfaces; /** - * @psalm-param class-string $className + * @psalm-param list $interfaces */ - public function __construct(Telemetry\Info $telemetryInfo, string $className, string $constructorArguments) + public function __construct(Telemetry\Info $telemetryInfo, array $interfaces) { $this->telemetryInfo = $telemetryInfo; - $this->className = $className; - $this->constructorArguments = $constructorArguments; + $this->interfaces = $interfaces; } public function telemetryInfo() : Telemetry\Info { return $this->telemetryInfo; } /** - * @psalm-return class-string + * @return list */ - public function className() : string - { - return $this->className; - } - public function constructorArguments() : string + public function interfaces() : array { - return $this->constructorArguments; + return $this->interfaces; } public function asString() : string { - return sprintf('Test Proxy Created (%s)', $this->className); + return sprintf('Mock Object Created (%s)', implode('&', $this->interfaces)); } } telemetryInfo = $telemetryInfo; - $this->className = $className; + $this->traitName = $traitName; } public function telemetryInfo() : Telemetry\Info { return $this->telemetryInfo; } /** - * @return class-string + * @psalm-return trait-string */ - public function className() : string + public function traitName() : string { - return $this->className; + return $this->traitName; } public function asString() : string { - return sprintf('Test Stub Created (%s)', $this->className); + return sprintf('Mock Object Created (%s)', $this->traitName); } } + * @psalm-var class-string */ - private readonly array $interfaces; + private readonly string $originalClassName; /** - * @psalm-param list $interfaces + * @psalm-var class-string */ - public function __construct(Telemetry\Info $telemetryInfo, array $interfaces) + private readonly string $mockClassName; + /** + * @psalm-var list + */ + private readonly array $methods; + private readonly bool $callOriginalConstructor; + private readonly array $options; + /** + * @psalm-param class-string $originalClassName + * @psalm-param class-string $mockClassName + */ + public function __construct(Telemetry\Info $telemetryInfo, string $wsdlFile, string $originalClassName, string $mockClassName, array $methods, bool $callOriginalConstructor, array $options) { $this->telemetryInfo = $telemetryInfo; - $this->interfaces = $interfaces; + $this->wsdlFile = $wsdlFile; + $this->originalClassName = $originalClassName; + $this->mockClassName = $mockClassName; + $this->methods = $methods; + $this->callOriginalConstructor = $callOriginalConstructor; + $this->options = $options; } public function telemetryInfo() : Telemetry\Info { return $this->telemetryInfo; } + public function wsdlFile() : string + { + return $this->wsdlFile; + } /** - * @return list + * @psalm-return class-string */ - public function interfaces() : array + public function originalClassName() : string { - return $this->interfaces; + return $this->originalClassName; + } + /** + * @psalm-return class-string + */ + public function mockClassName() : string + { + return $this->mockClassName; + } + /** + * @psalm-return list + */ + public function methods() : array + { + return $this->methods; + } + public function callOriginalConstructor() : bool + { + return $this->callOriginalConstructor; + } + public function options() : array + { + return $this->options; } public function asString() : string { - return sprintf('Test Stub Created (%s)', implode('&', $this->interfaces)); + return sprintf('Mock Object Created (%s)', $this->wsdlFile); } } + */ + private readonly array $methodNames; + /** + * @psalm-param class-string $className + */ + public function __construct(Telemetry\Info $telemetryInfo, string $className, string ...$methodNames) { $this->telemetryInfo = $telemetryInfo; - $this->filename = $filename; + $this->className = $className; + $this->methodNames = $methodNames; } public function telemetryInfo() : Telemetry\Info { return $this->telemetryInfo; } - public function filename() : string + /** + * @psalm-return class-string + */ + public function className() : string { - return $this->filename; + return $this->className; + } + /** + * @psalm-return list + */ + public function methodNames() : array + { + return $this->methodNames; } public function asString() : string { - return sprintf('Bootstrap Finished (%s)', $this->filename); + return sprintf('Partial Mock Object Created (%s)', $this->className); } } telemetryInfo = $telemetryInfo; - $this->configuration = $configuration; + $this->className = $className; + $this->constructorArguments = $constructorArguments; } public function telemetryInfo() : Telemetry\Info { return $this->telemetryInfo; } - public function configuration() : Configuration + /** + * @psalm-return class-string + */ + public function className() : string { - return $this->configuration; + return $this->className; + } + public function constructorArguments() : string + { + return $this->constructorArguments; } public function asString() : string { - return 'Test Runner Configured'; + return sprintf('Test Proxy Created (%s)', $this->className); } } telemetryInfo = $telemetryInfo; - $this->message = $message; + $this->className = $className; } public function telemetryInfo() : Telemetry\Info { return $this->telemetryInfo; } - public function message() : string + /** + * @return class-string + */ + public function className() : string { - return $this->message; + return $this->className; } public function asString() : string { - return sprintf('Test Runner Triggered Deprecation (%s)', $this->message); + return sprintf('Test Stub Created (%s)', $this->className); } } + */ + private readonly array $interfaces; + /** + * @psalm-param list $interfaces + */ + public function __construct(Telemetry\Info $telemetryInfo, array $interfaces) { $this->telemetryInfo = $telemetryInfo; + $this->interfaces = $interfaces; } public function telemetryInfo() : Telemetry\Info { return $this->telemetryInfo; } + /** + * @return list + */ + public function interfaces() : array + { + return $this->interfaces; + } public function asString() : string { - return 'Event Facade Sealed'; + return sprintf('Test Stub Created (%s)', implode('&', $this->interfaces)); } } telemetryInfo = $telemetryInfo; + $this->filename = $filename; } public function telemetryInfo() : Telemetry\Info { return $this->telemetryInfo; } + public function filename() : string + { + return $this->filename; + } public function asString() : string { - return 'Test Runner Execution Finished'; + return sprintf('Bootstrap Finished (%s)', $this->filename); } } telemetryInfo = $telemetryInfo; - $this->testSuite = $testSuite; + $this->configuration = $configuration; } public function telemetryInfo() : Telemetry\Info { return $this->telemetryInfo; } - public function testSuite() : TestSuite + public function configuration() : Configuration { - return $this->testSuite; + return $this->configuration; } public function asString() : string { - return sprintf('Test Runner Execution Started (%d test%s)', $this->testSuite->count(), $this->testSuite->count() !== 1 ? 's' : ''); + return 'Test Runner Configured'; } } + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Event\TestRunner; + +use function sprintf; +use PHPUnit\Event\Event; +use PHPUnit\Event\Telemetry; +/** + * @psalm-immutable + * + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +final class DeprecationTriggered implements Event +{ + private readonly Telemetry\Info $telemetryInfo; + private readonly string $message; + public function __construct(Telemetry\Info $telemetryInfo, string $message) + { + $this->telemetryInfo = $telemetryInfo; + $this->message = $message; + } + public function telemetryInfo() : Telemetry\Info + { + return $this->telemetryInfo; + } + public function message() : string + { + return $this->message; + } + public function asString() : string + { + return sprintf('Test Runner Triggered Deprecation (%s)', $this->message); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Event\TestRunner; + +use PHPUnit\Event\Subscriber; +/** + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +interface DeprecationTriggeredSubscriber extends Subscriber +{ + public function notify(\PHPUnit\Event\TestRunner\DeprecationTriggered $event) : void; +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Event\TestRunner; + +use PHPUnit\Event\Event; +use PHPUnit\Event\Telemetry; +/** + * @psalm-immutable + * + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +final class EventFacadeSealed implements Event +{ + private readonly Telemetry\Info $telemetryInfo; + public function __construct(Telemetry\Info $telemetryInfo) + { + $this->telemetryInfo = $telemetryInfo; + } + public function telemetryInfo() : Telemetry\Info + { + return $this->telemetryInfo; + } + public function asString() : string + { + return 'Event Facade Sealed'; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Event\TestRunner; + +use PHPUnit\Event\Subscriber; +/** + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +interface EventFacadeSealedSubscriber extends Subscriber +{ + public function notify(\PHPUnit\Event\TestRunner\EventFacadeSealed $event) : void; +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Event\TestRunner; + +use PHPUnit\Event\Event; +use PHPUnit\Event\Telemetry; +/** + * @psalm-immutable + * + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +final class ExecutionAborted implements Event +{ + private readonly Telemetry\Info $telemetryInfo; + public function __construct(Telemetry\Info $telemetryInfo) + { + $this->telemetryInfo = $telemetryInfo; + } + public function telemetryInfo() : Telemetry\Info + { + return $this->telemetryInfo; + } + public function asString() : string + { + return 'Test Runner Execution Aborted'; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Event\TestRunner; + +use PHPUnit\Event\Subscriber; +/** + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +interface ExecutionAbortedSubscriber extends Subscriber +{ + public function notify(\PHPUnit\Event\TestRunner\ExecutionAborted $event) : void; +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Event\TestRunner; + +use PHPUnit\Event\Event; +use PHPUnit\Event\Telemetry; +/** + * @psalm-immutable + * + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +final class ExecutionFinished implements Event +{ + private readonly Telemetry\Info $telemetryInfo; + public function __construct(Telemetry\Info $telemetryInfo) + { + $this->telemetryInfo = $telemetryInfo; + } + public function telemetryInfo() : Telemetry\Info + { + return $this->telemetryInfo; + } + public function asString() : string + { + return 'Test Runner Execution Finished'; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Event\TestRunner; + +use PHPUnit\Event\Subscriber; +/** + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +interface ExecutionFinishedSubscriber extends Subscriber +{ + public function notify(\PHPUnit\Event\TestRunner\ExecutionFinished $event) : void; +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Event\TestRunner; + +use function sprintf; +use PHPUnit\Event\Event; +use PHPUnit\Event\Telemetry; +use PHPUnit\Event\TestSuite\TestSuite; +/** + * @psalm-immutable + * + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +final class ExecutionStarted implements Event +{ + private readonly Telemetry\Info $telemetryInfo; + private readonly TestSuite $testSuite; + public function __construct(Telemetry\Info $telemetryInfo, TestSuite $testSuite) + { + $this->telemetryInfo = $telemetryInfo; + $this->testSuite = $testSuite; + } + public function telemetryInfo() : Telemetry\Info + { + return $this->telemetryInfo; + } + public function testSuite() : TestSuite + { + return $this->testSuite; + } + public function asString() : string + { + return sprintf('Test Runner Execution Started (%d test%s)', $this->testSuite->count(), $this->testSuite->count() !== 1 ? 's' : ''); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Event\TestRunner; + +use PHPUnit\Event\Subscriber; +/** + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +interface ExecutionStartedSubscriber extends Subscriber +{ + public function notify(\PHPUnit\Event\TestRunner\ExecutionStarted $event) : void; } telemetryInfo = $telemetryInfo; + } + public function telemetryInfo() : Telemetry\Info + { + return $this->telemetryInfo; + } + public function asString() : string + { + return 'Test Runner Disabled Garbage Collection'; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Event\TestRunner; + +use PHPUnit\Event\Subscriber; +/** + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +interface GarbageCollectionDisabledSubscriber extends Subscriber +{ + public function notify(\PHPUnit\Event\TestRunner\GarbageCollectionDisabled $event) : void; +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Event\TestRunner; + +use PHPUnit\Event\Event; +use PHPUnit\Event\Telemetry; +/** + * @psalm-immutable + * + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +final class GarbageCollectionEnabled implements Event +{ + private readonly Telemetry\Info $telemetryInfo; + public function __construct(Telemetry\Info $telemetryInfo) + { + $this->telemetryInfo = $telemetryInfo; + } + public function telemetryInfo() : Telemetry\Info + { + return $this->telemetryInfo; + } + public function asString() : string + { + return 'Test Runner Enabled Garbage Collection'; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Event\TestRunner; + +use PHPUnit\Event\Subscriber; +/** + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +interface GarbageCollectionEnabledSubscriber extends Subscriber +{ + public function notify(\PHPUnit\Event\TestRunner\GarbageCollectionEnabled $event) : void; +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Event\TestRunner; + +use PHPUnit\Event\Event; +use PHPUnit\Event\Telemetry; +/** + * @psalm-immutable + * + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +final class GarbageCollectionTriggered implements Event +{ + private readonly Telemetry\Info $telemetryInfo; + public function __construct(Telemetry\Info $telemetryInfo) + { + $this->telemetryInfo = $telemetryInfo; + } + public function telemetryInfo() : Telemetry\Info + { + return $this->telemetryInfo; + } + public function asString() : string + { + return 'Test Runner Triggered Garbage Collection'; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Event\TestRunner; + +use PHPUnit\Event\Subscriber; +/** + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +interface GarbageCollectionTriggeredSubscriber extends Subscriber +{ + public function notify(\PHPUnit\Event\TestRunner\GarbageCollectionTriggered $event) : void; +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Event\TestRunner; + use PHPUnit\Event\Event; use PHPUnit\Event\Telemetry; /** @@ -39796,11 +43102,7 @@ final class Finished implements Event } public function asString() : string { - $name = ''; - if (!empty($this->testSuite->name())) { - $name = $this->testSuite->name() . ', '; - } - return sprintf('Test Suite Finished (%s%d test%s)', $name, $this->testSuite->count(), $this->testSuite->count() !== 1 ? 's' : ''); + return sprintf('Test Suite Finished (%s, %d test%s)', $this->testSuite->name(), $this->testSuite->count(), $this->testSuite->count() !== 1 ? 's' : ''); } } testSuite->name())) { - $name = $this->testSuite->name() . ', '; - } - return sprintf('Test Suite Skipped (%s%s)', $name, $this->message); + return sprintf('Test Suite Skipped (%s, %s)', $this->testSuite->name(), $this->message); } } testSuite->name())) { - $name = $this->testSuite->name() . ', '; - } - return sprintf('Test Suite Started (%s%d test%s)', $name, $this->testSuite->count(), $this->testSuite->count() !== 1 ? 's' : ''); + return sprintf('Test Suite Started (%s, %d test%s)', $this->testSuite->name(), $this->testSuite->count(), $this->testSuite->count() !== 1 ? 's' : ''); } } + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Event\Code; + +use PHPUnit\Event\Exception; +use RuntimeException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class NoTestCaseObjectOnCallStackException extends RuntimeException implements Exception +{ + public function __construct() + { + parent::__construct('Cannot find TestCase object on call stack'); + } +} +emitter; + } + public function __construct() + { + $this->emitter = $this->createDispatchingEmitter(); + } /** * @throws EventFacadeIsSealedException * @throws UnknownSubscriberTypeException */ - public static function registerSubscribers(\PHPUnit\Event\Subscriber ...$subscribers) : void + public function registerSubscribers(\PHPUnit\Event\Subscriber ...$subscribers) : void { foreach ($subscribers as $subscriber) { - self::registerSubscriber($subscriber); + $this->registerSubscriber($subscriber); } } /** * @throws EventFacadeIsSealedException * @throws UnknownSubscriberTypeException */ - public static function registerSubscriber(\PHPUnit\Event\Subscriber $subscriber) : void + public function registerSubscriber(\PHPUnit\Event\Subscriber $subscriber) : void { - if (self::$sealed) { + if ($this->sealed) { throw new \PHPUnit\Event\EventFacadeIsSealedException(); } - self::deferredDispatcher()->registerSubscriber($subscriber); + $this->deferredDispatcher()->registerSubscriber($subscriber); } /** * @throws EventFacadeIsSealedException */ - public static function registerTracer(\PHPUnit\Event\Tracer\Tracer $tracer) : void + public function registerTracer(\PHPUnit\Event\Tracer\Tracer $tracer) : void { - if (self::$sealed) { + if ($this->sealed) { throw new \PHPUnit\Event\EventFacadeIsSealedException(); } - self::deferredDispatcher()->registerTracer($tracer); + $this->deferredDispatcher()->registerTracer($tracer); } - public static function emitter() : \PHPUnit\Event\Emitter - { - if (self::$emitter === null) { - self::$emitter = self::createDispatchingEmitter(); - } - return self::$emitter; - } - /** @noinspection PhpUnused */ - public static function initForIsolation(HRTime $offset) : \PHPUnit\Event\CollectingDispatcher + /** + * @codeCoverageIgnore + * + * @noinspection PhpUnused + */ + public function initForIsolation(HRTime $offset, bool $exportObjects) : \PHPUnit\Event\CollectingDispatcher { $dispatcher = new \PHPUnit\Event\CollectingDispatcher(); - self::$emitter = new \PHPUnit\Event\DispatchingEmitter($dispatcher, new \PHPUnit\Event\Telemetry\System(new \PHPUnit\Event\Telemetry\SystemStopWatchWithOffset($offset), new \PHPUnit\Event\Telemetry\SystemMemoryMeter())); - self::$sealed = \true; + $this->emitter = new \PHPUnit\Event\DispatchingEmitter($dispatcher, new \PHPUnit\Event\Telemetry\System(new \PHPUnit\Event\Telemetry\SystemStopWatchWithOffset($offset), new \PHPUnit\Event\Telemetry\SystemMemoryMeter(), $this->garbageCollectorStatusProvider())); + if ($exportObjects) { + $this->emitter->exportObjects(); + } + $this->sealed = \true; return $dispatcher; } - public static function forward(\PHPUnit\Event\EventCollection $events) : void + public function forward(\PHPUnit\Event\EventCollection $events) : void { - if (self::$suspended !== null) { + if ($this->suspended !== null) { return; } - $dispatcher = self::deferredDispatcher(); + $dispatcher = $this->deferredDispatcher(); foreach ($events as $event) { $dispatcher->dispatch($event); } } - public static function seal() : void + public function seal() : void { - self::deferredDispatcher()->flush(); - self::$sealed = \true; - self::emitter()->testRunnerEventFacadeSealed(); + $this->deferredDispatcher()->flush(); + $this->sealed = \true; + $this->emitter->testRunnerEventFacadeSealed(); } - private static function createDispatchingEmitter() : \PHPUnit\Event\DispatchingEmitter + private function createDispatchingEmitter() : \PHPUnit\Event\DispatchingEmitter { - return new \PHPUnit\Event\DispatchingEmitter(self::deferredDispatcher(), self::createTelemetrySystem()); + return new \PHPUnit\Event\DispatchingEmitter($this->deferredDispatcher(), $this->createTelemetrySystem()); } - private static function createTelemetrySystem() : \PHPUnit\Event\Telemetry\System + private function createTelemetrySystem() : \PHPUnit\Event\Telemetry\System { - return new \PHPUnit\Event\Telemetry\System(new \PHPUnit\Event\Telemetry\SystemStopWatch(), new \PHPUnit\Event\Telemetry\SystemMemoryMeter()); + return new \PHPUnit\Event\Telemetry\System(new \PHPUnit\Event\Telemetry\SystemStopWatch(), new \PHPUnit\Event\Telemetry\SystemMemoryMeter(), $this->garbageCollectorStatusProvider()); } - private static function deferredDispatcher() : \PHPUnit\Event\DeferringDispatcher + private function deferredDispatcher() : \PHPUnit\Event\DeferringDispatcher { - if (self::$deferringDispatcher === null) { - self::$deferringDispatcher = new \PHPUnit\Event\DeferringDispatcher(new \PHPUnit\Event\DirectDispatcher(self::typeMap())); + if ($this->deferringDispatcher === null) { + $this->deferringDispatcher = new \PHPUnit\Event\DeferringDispatcher(new \PHPUnit\Event\DirectDispatcher($this->typeMap())); } - return self::$deferringDispatcher; + return $this->deferringDispatcher; } - private static function typeMap() : \PHPUnit\Event\TypeMap + private function typeMap() : \PHPUnit\Event\TypeMap { - if (self::$typeMap === null) { + if ($this->typeMap === null) { $typeMap = new \PHPUnit\Event\TypeMap(); - self::registerDefaultTypes($typeMap); - self::$typeMap = $typeMap; + $this->registerDefaultTypes($typeMap); + $this->typeMap = $typeMap; } - return self::$typeMap; + return $this->typeMap; } - private static function registerDefaultTypes(\PHPUnit\Event\TypeMap $typeMap) : void + private function registerDefaultTypes(\PHPUnit\Event\TypeMap $typeMap) : void { - $defaultEvents = [\PHPUnit\Event\Application\Started::class, \PHPUnit\Event\Application\Finished::class, \PHPUnit\Event\Test\MarkedIncomplete::class, \PHPUnit\Event\Test\AfterLastTestMethodCalled::class, \PHPUnit\Event\Test\AfterLastTestMethodFinished::class, \PHPUnit\Event\Test\AfterTestMethodCalled::class, \PHPUnit\Event\Test\AfterTestMethodFinished::class, \PHPUnit\Event\Test\AssertionSucceeded::class, \PHPUnit\Event\Test\AssertionFailed::class, \PHPUnit\Event\Test\BeforeFirstTestMethodCalled::class, \PHPUnit\Event\Test\BeforeFirstTestMethodErrored::class, \PHPUnit\Event\Test\BeforeFirstTestMethodFinished::class, \PHPUnit\Event\Test\BeforeTestMethodCalled::class, \PHPUnit\Event\Test\BeforeTestMethodFinished::class, \PHPUnit\Event\Test\ComparatorRegistered::class, \PHPUnit\Event\Test\ConsideredRisky::class, \PHPUnit\Event\Test\DeprecationTriggered::class, \PHPUnit\Event\Test\Errored::class, \PHPUnit\Event\Test\ErrorTriggered::class, \PHPUnit\Event\Test\Failed::class, \PHPUnit\Event\Test\Finished::class, \PHPUnit\Event\Test\NoticeTriggered::class, \PHPUnit\Event\Test\Passed::class, \PHPUnit\Event\Test\PhpDeprecationTriggered::class, \PHPUnit\Event\Test\PhpNoticeTriggered::class, \PHPUnit\Event\Test\PhpunitDeprecationTriggered::class, \PHPUnit\Event\Test\PhpunitErrorTriggered::class, \PHPUnit\Event\Test\PhpunitWarningTriggered::class, \PHPUnit\Event\Test\PhpWarningTriggered::class, \PHPUnit\Event\Test\PostConditionCalled::class, \PHPUnit\Event\Test\PostConditionFinished::class, \PHPUnit\Event\Test\PreConditionCalled::class, \PHPUnit\Event\Test\PreConditionFinished::class, \PHPUnit\Event\Test\PreparationStarted::class, \PHPUnit\Event\Test\Prepared::class, \PHPUnit\Event\Test\PrintedUnexpectedOutput::class, \PHPUnit\Event\Test\Skipped::class, \PHPUnit\Event\Test\WarningTriggered::class, \PHPUnit\Event\Test\MockObjectCreated::class, \PHPUnit\Event\Test\MockObjectForAbstractClassCreated::class, \PHPUnit\Event\Test\MockObjectForIntersectionOfInterfacesCreated::class, \PHPUnit\Event\Test\MockObjectForTraitCreated::class, \PHPUnit\Event\Test\MockObjectFromWsdlCreated::class, \PHPUnit\Event\Test\PartialMockObjectCreated::class, \PHPUnit\Event\Test\TestProxyCreated::class, \PHPUnit\Event\Test\TestStubCreated::class, \PHPUnit\Event\Test\TestStubForIntersectionOfInterfacesCreated::class, \PHPUnit\Event\TestRunner\BootstrapFinished::class, \PHPUnit\Event\TestRunner\Configured::class, \PHPUnit\Event\TestRunner\EventFacadeSealed::class, \PHPUnit\Event\TestRunner\ExecutionFinished::class, \PHPUnit\Event\TestRunner\ExecutionStarted::class, \PHPUnit\Event\TestRunner\ExtensionLoadedFromPhar::class, \PHPUnit\Event\TestRunner\ExtensionBootstrapped::class, \PHPUnit\Event\TestRunner\Finished::class, \PHPUnit\Event\TestRunner\Started::class, \PHPUnit\Event\TestRunner\DeprecationTriggered::class, \PHPUnit\Event\TestRunner\WarningTriggered::class, \PHPUnit\Event\TestSuite\Filtered::class, \PHPUnit\Event\TestSuite\Finished::class, \PHPUnit\Event\TestSuite\Loaded::class, \PHPUnit\Event\TestSuite\Skipped::class, \PHPUnit\Event\TestSuite\Sorted::class, \PHPUnit\Event\TestSuite\Started::class]; + $defaultEvents = [\PHPUnit\Event\Application\Started::class, \PHPUnit\Event\Application\Finished::class, \PHPUnit\Event\Test\DataProviderMethodCalled::class, \PHPUnit\Event\Test\DataProviderMethodFinished::class, \PHPUnit\Event\Test\MarkedIncomplete::class, \PHPUnit\Event\Test\AfterLastTestMethodCalled::class, \PHPUnit\Event\Test\AfterLastTestMethodFinished::class, \PHPUnit\Event\Test\AfterTestMethodCalled::class, \PHPUnit\Event\Test\AfterTestMethodFinished::class, \PHPUnit\Event\Test\AssertionSucceeded::class, \PHPUnit\Event\Test\AssertionFailed::class, \PHPUnit\Event\Test\BeforeFirstTestMethodCalled::class, \PHPUnit\Event\Test\BeforeFirstTestMethodErrored::class, \PHPUnit\Event\Test\BeforeFirstTestMethodFinished::class, \PHPUnit\Event\Test\BeforeTestMethodCalled::class, \PHPUnit\Event\Test\BeforeTestMethodFinished::class, \PHPUnit\Event\Test\ComparatorRegistered::class, \PHPUnit\Event\Test\ConsideredRisky::class, \PHPUnit\Event\Test\DeprecationTriggered::class, \PHPUnit\Event\Test\Errored::class, \PHPUnit\Event\Test\ErrorTriggered::class, \PHPUnit\Event\Test\Failed::class, \PHPUnit\Event\Test\Finished::class, \PHPUnit\Event\Test\NoticeTriggered::class, \PHPUnit\Event\Test\Passed::class, \PHPUnit\Event\Test\PhpDeprecationTriggered::class, \PHPUnit\Event\Test\PhpNoticeTriggered::class, \PHPUnit\Event\Test\PhpunitDeprecationTriggered::class, \PHPUnit\Event\Test\PhpunitErrorTriggered::class, \PHPUnit\Event\Test\PhpunitWarningTriggered::class, \PHPUnit\Event\Test\PhpWarningTriggered::class, \PHPUnit\Event\Test\PostConditionCalled::class, \PHPUnit\Event\Test\PostConditionFinished::class, \PHPUnit\Event\Test\PreConditionCalled::class, \PHPUnit\Event\Test\PreConditionFinished::class, \PHPUnit\Event\Test\PreparationStarted::class, \PHPUnit\Event\Test\Prepared::class, \PHPUnit\Event\Test\PreparationFailed::class, \PHPUnit\Event\Test\PrintedUnexpectedOutput::class, \PHPUnit\Event\Test\Skipped::class, \PHPUnit\Event\Test\WarningTriggered::class, \PHPUnit\Event\Test\MockObjectCreated::class, \PHPUnit\Event\Test\MockObjectForAbstractClassCreated::class, \PHPUnit\Event\Test\MockObjectForIntersectionOfInterfacesCreated::class, \PHPUnit\Event\Test\MockObjectForTraitCreated::class, \PHPUnit\Event\Test\MockObjectFromWsdlCreated::class, \PHPUnit\Event\Test\PartialMockObjectCreated::class, \PHPUnit\Event\Test\TestProxyCreated::class, \PHPUnit\Event\Test\TestStubCreated::class, \PHPUnit\Event\Test\TestStubForIntersectionOfInterfacesCreated::class, \PHPUnit\Event\TestRunner\BootstrapFinished::class, \PHPUnit\Event\TestRunner\Configured::class, \PHPUnit\Event\TestRunner\EventFacadeSealed::class, \PHPUnit\Event\TestRunner\ExecutionAborted::class, \PHPUnit\Event\TestRunner\ExecutionFinished::class, \PHPUnit\Event\TestRunner\ExecutionStarted::class, \PHPUnit\Event\TestRunner\ExtensionLoadedFromPhar::class, \PHPUnit\Event\TestRunner\ExtensionBootstrapped::class, \PHPUnit\Event\TestRunner\Finished::class, \PHPUnit\Event\TestRunner\Started::class, \PHPUnit\Event\TestRunner\DeprecationTriggered::class, \PHPUnit\Event\TestRunner\WarningTriggered::class, \PHPUnit\Event\TestRunner\GarbageCollectionDisabled::class, \PHPUnit\Event\TestRunner\GarbageCollectionTriggered::class, \PHPUnit\Event\TestRunner\GarbageCollectionEnabled::class, \PHPUnit\Event\TestSuite\Filtered::class, \PHPUnit\Event\TestSuite\Finished::class, \PHPUnit\Event\TestSuite\Loaded::class, \PHPUnit\Event\TestSuite\Skipped::class, \PHPUnit\Event\TestSuite\Sorted::class, \PHPUnit\Event\TestSuite\Started::class]; foreach ($defaultEvents as $eventClass) { $typeMap->addMapping($eventClass . 'Subscriber', $eventClass); } } + private function garbageCollectorStatusProvider() : \PHPUnit\Event\Telemetry\GarbageCollectorStatusProvider + { + if (!isset(gc_status()['running'])) { + // @codeCoverageIgnoreStart + return new Php81GarbageCollectorStatusProvider(); + // @codeCoverageIgnoreEnd + } + return new Php83GarbageCollectorStatusProvider(); + } } mapping)) { - throw new \PHPUnit\Event\SubscriberTypeAlreadyRegisteredException(sprintf('Subscriber type "%s" already registered - cannot overwrite', $subscriberInterface)); - } - if (in_array($eventClass, $this->mapping, \true)) { - throw new \PHPUnit\Event\EventAlreadyAssignedException(sprintf('Event "%s" already assigned - cannot add multiple subscriber types for an event type', $eventClass)); - } + $this->ensureSubscriberInterfaceExists($subscriberInterface); + $this->ensureSubscriberInterfaceExtendsInterface($subscriberInterface); + $this->ensureEventClassExists($eventClass); + $this->ensureEventClassImplementsEventInterface($eventClass); + $this->ensureSubscriberWasNotAlreadyRegistered($subscriberInterface); + $this->ensureEventWasNotAlreadyAssigned($eventClass); $this->mapping[$subscriberInterface] = $eventClass; } public function isKnownSubscriberType(\PHPUnit\Event\Subscriber $subscriber) : bool @@ -40688,6 +44023,72 @@ final class TypeMap } throw new \PHPUnit\Event\MapError(sprintf('Subscriber "%s" does not implement a known interface', $subscriber::class)); } + /** + * @psalm-param class-string $subscriberInterface + * + * @throws UnknownSubscriberException + */ + private function ensureSubscriberInterfaceExists(string $subscriberInterface) : void + { + if (!interface_exists($subscriberInterface)) { + throw new \PHPUnit\Event\UnknownSubscriberException(sprintf('Subscriber "%s" does not exist or is not an interface', $subscriberInterface)); + } + } + /** + * @psalm-param class-string $eventClass + * + * @throws UnknownEventException + */ + private function ensureEventClassExists(string $eventClass) : void + { + if (!class_exists($eventClass)) { + throw new \PHPUnit\Event\UnknownEventException(sprintf('Event class "%s" does not exist', $eventClass)); + } + } + /** + * @psalm-param class-string $subscriberInterface + * + * @throws InvalidSubscriberException + */ + private function ensureSubscriberInterfaceExtendsInterface(string $subscriberInterface) : void + { + if (!in_array(\PHPUnit\Event\Subscriber::class, class_implements($subscriberInterface), \true)) { + throw new \PHPUnit\Event\InvalidSubscriberException(sprintf('Subscriber "%s" does not extend Subscriber interface', $subscriberInterface)); + } + } + /** + * @psalm-param class-string $eventClass + * + * @throws InvalidEventException + */ + private function ensureEventClassImplementsEventInterface(string $eventClass) : void + { + if (!in_array(\PHPUnit\Event\Event::class, class_implements($eventClass), \true)) { + throw new \PHPUnit\Event\InvalidEventException(sprintf('Event "%s" does not implement Event interface', $eventClass)); + } + } + /** + * @psalm-param class-string $subscriberInterface + * + * @throws SubscriberTypeAlreadyRegisteredException + */ + private function ensureSubscriberWasNotAlreadyRegistered(string $subscriberInterface) : void + { + if (array_key_exists($subscriberInterface, $this->mapping)) { + throw new \PHPUnit\Event\SubscriberTypeAlreadyRegisteredException(sprintf('Subscriber type "%s" already registered', $subscriberInterface)); + } + } + /** + * @psalm-param class-string $eventClass + * + * @throws EventAlreadyAssignedException + */ + private function ensureEventWasNotAlreadyAssigned(string $eventClass) : void + { + if (in_array($eventClass, $this->mapping, \true)) { + throw new \PHPUnit\Event\EventAlreadyAssignedException(sprintf('Event "%s" already assigned', $eventClass)); + } + } } seconds(); - $minutes = 00; - $hours = 00; + $minutes = 0; + $hours = 0; if ($seconds > 60 * 60) { $hours = floor($seconds / 60 / 60); $seconds -= $hours * 60 * 60; @@ -41177,6 +44578,185 @@ declare (strict_types=1); */ namespace PHPUnit\Event\Telemetry; +use PHPUnit\Event\RuntimeException; +/** + * @psalm-immutable + * + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +final class GarbageCollectorStatus +{ + private readonly int $runs; + private readonly int $collected; + private readonly int $threshold; + private readonly int $roots; + private readonly ?float $applicationTime; + private readonly ?float $collectorTime; + private readonly ?float $destructorTime; + private readonly ?float $freeTime; + private readonly ?bool $running; + private readonly ?bool $protected; + private readonly ?bool $full; + private readonly ?int $bufferSize; + public function __construct(int $runs, int $collected, int $threshold, int $roots, ?float $applicationTime, ?float $collectorTime, ?float $destructorTime, ?float $freeTime, ?bool $running, ?bool $protected, ?bool $full, ?int $bufferSize) + { + $this->runs = $runs; + $this->collected = $collected; + $this->threshold = $threshold; + $this->roots = $roots; + $this->applicationTime = $applicationTime; + $this->collectorTime = $collectorTime; + $this->destructorTime = $destructorTime; + $this->freeTime = $freeTime; + $this->running = $running; + $this->protected = $protected; + $this->full = $full; + $this->bufferSize = $bufferSize; + } + public function runs() : int + { + return $this->runs; + } + public function collected() : int + { + return $this->collected; + } + public function threshold() : int + { + return $this->threshold; + } + public function roots() : int + { + return $this->roots; + } + /** + * @psalm-assert-if-true !null $this->applicationTime + * @psalm-assert-if-true !null $this->collectorTime + * @psalm-assert-if-true !null $this->destructorTime + * @psalm-assert-if-true !null $this->freeTime + * @psalm-assert-if-true !null $this->running + * @psalm-assert-if-true !null $this->protected + * @psalm-assert-if-true !null $this->full + * @psalm-assert-if-true !null $this->bufferSize + */ + public function hasExtendedInformation() : bool + { + return $this->running !== null; + } + /** + * @throws RuntimeException on PHP < 8.3 + */ + public function applicationTime() : float + { + if ($this->applicationTime === null) { + throw new RuntimeException('Information not available'); + } + return $this->applicationTime; + } + /** + * @throws RuntimeException on PHP < 8.3 + */ + public function collectorTime() : float + { + if ($this->collectorTime === null) { + throw new RuntimeException('Information not available'); + } + return $this->collectorTime; + } + /** + * @throws RuntimeException on PHP < 8.3 + */ + public function destructorTime() : float + { + if ($this->destructorTime === null) { + throw new RuntimeException('Information not available'); + } + return $this->destructorTime; + } + /** + * @throws RuntimeException on PHP < 8.3 + */ + public function freeTime() : float + { + if ($this->freeTime === null) { + throw new RuntimeException('Information not available'); + } + return $this->freeTime; + } + /** + * @throws RuntimeException on PHP < 8.3 + */ + public function isRunning() : bool + { + if ($this->running === null) { + throw new RuntimeException('Information not available'); + } + return $this->running; + } + /** + * @throws RuntimeException on PHP < 8.3 + */ + public function isProtected() : bool + { + if ($this->protected === null) { + throw new RuntimeException('Information not available'); + } + return $this->protected; + } + /** + * @throws RuntimeException on PHP < 8.3 + */ + public function isFull() : bool + { + if ($this->full === null) { + throw new RuntimeException('Information not available'); + } + return $this->full; + } + /** + * @throws RuntimeException on PHP < 8.3 + */ + public function bufferSize() : int + { + if ($this->bufferSize === null) { + throw new RuntimeException('Information not available'); + } + return $this->bufferSize; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Event\Telemetry; + +/** + * @internal This interface is not covered by the backward compatibility promise for PHPUnit + */ +interface GarbageCollectorStatusProvider +{ + public function status() : \PHPUnit\Event\Telemetry\GarbageCollectorStatus; +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Event\Telemetry; + use function sprintf; use PHPUnit\Event\InvalidArgumentException; /** @@ -41311,6 +44891,10 @@ final class Info { return $this->memorySincePrevious; } + public function garbageCollectorStatus() : \PHPUnit\Event\Telemetry\GarbageCollectorStatus + { + return $this->current->garbageCollectorStatus(); + } public function asString() : string { return sprintf('[%s / %s] [%d bytes]', $this->durationSinceStart()->asString(), $this->durationSincePrevious()->asString(), $this->memoryUsage()->bytes()); @@ -41330,7 +44914,7 @@ declare (strict_types=1); namespace PHPUnit\Event\Telemetry; /** - * @internal This class is not covered by the backward compatibility promise for PHPUnit + * @internal This interface is not covered by the backward compatibility promise for PHPUnit */ interface MemoryMeter { @@ -41388,6 +44972,58 @@ declare (strict_types=1); */ namespace PHPUnit\Event\Telemetry; +use function gc_status; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + * + * @codeCoverageIgnore + */ +final class Php81GarbageCollectorStatusProvider implements \PHPUnit\Event\Telemetry\GarbageCollectorStatusProvider +{ + public function status() : \PHPUnit\Event\Telemetry\GarbageCollectorStatus + { + $status = gc_status(); + return new \PHPUnit\Event\Telemetry\GarbageCollectorStatus($status['runs'], $status['collected'], $status['threshold'], $status['roots'], null, null, null, null, null, null, null, null); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Event\Telemetry; + +use function gc_status; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class Php83GarbageCollectorStatusProvider implements \PHPUnit\Event\Telemetry\GarbageCollectorStatusProvider +{ + public function status() : \PHPUnit\Event\Telemetry\GarbageCollectorStatus + { + $status = gc_status(); + return new \PHPUnit\Event\Telemetry\GarbageCollectorStatus($status['runs'], $status['collected'], $status['threshold'], $status['roots'], $status['application_time'], $status['collector_time'], $status['destructor_time'], $status['free_time'], $status['running'], $status['protected'], $status['full'], $status['buffer_size']); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Event\Telemetry; + /** * @psalm-immutable * @@ -41398,11 +45034,13 @@ final class Snapshot private readonly \PHPUnit\Event\Telemetry\HRTime $time; private readonly \PHPUnit\Event\Telemetry\MemoryUsage $memoryUsage; private readonly \PHPUnit\Event\Telemetry\MemoryUsage $peakMemoryUsage; - public function __construct(\PHPUnit\Event\Telemetry\HRTime $time, \PHPUnit\Event\Telemetry\MemoryUsage $memoryUsage, \PHPUnit\Event\Telemetry\MemoryUsage $peakMemoryUsage) + private readonly \PHPUnit\Event\Telemetry\GarbageCollectorStatus $garbageCollectorStatus; + public function __construct(\PHPUnit\Event\Telemetry\HRTime $time, \PHPUnit\Event\Telemetry\MemoryUsage $memoryUsage, \PHPUnit\Event\Telemetry\MemoryUsage $peakMemoryUsage, \PHPUnit\Event\Telemetry\GarbageCollectorStatus $garbageCollectorStatus) { $this->time = $time; $this->memoryUsage = $memoryUsage; $this->peakMemoryUsage = $peakMemoryUsage; + $this->garbageCollectorStatus = $garbageCollectorStatus; } public function time() : \PHPUnit\Event\Telemetry\HRTime { @@ -41416,6 +45054,10 @@ final class Snapshot { return $this->peakMemoryUsage; } + public function garbageCollectorStatus() : \PHPUnit\Event\Telemetry\GarbageCollectorStatus + { + return $this->garbageCollectorStatus; + } } stopWatch = $stopWatch; $this->memoryMeter = $memoryMeter; + $this->garbageCollectorStatusProvider = $garbageCollectorStatusProvider; } public function snapshot() : \PHPUnit\Event\Telemetry\Snapshot { - return new \PHPUnit\Event\Telemetry\Snapshot($this->stopWatch->current(), $this->memoryMeter->memoryUsage(), $this->memoryMeter->peakMemoryUsage()); + return new \PHPUnit\Event\Telemetry\Snapshot($this->stopWatch->current(), $this->memoryMeter->memoryUsage(), $this->memoryMeter->peakMemoryUsage(), $this->garbageCollectorStatusProvider->status()); } } file(); } + /** + * @psalm-return non-empty-string + */ public function name() : string { return $this->file(); @@ -41622,11 +45270,20 @@ namespace PHPUnit\Event\Code; */ abstract class Test { + /** + * @psalm-var non-empty-string + */ private readonly string $file; + /** + * @psalm-param non-empty-string $file + */ public function __construct(string $file) { $this->file = $file; } + /** + * @psalm-return non-empty-string + */ public function file() : string { return $this->file; @@ -41645,7 +45302,13 @@ abstract class Test { return \false; } + /** + * @psalm-return non-empty-string + */ public abstract function id() : string; + /** + * @psalm-return non-empty-string + */ public abstract function name() : string; } dataSetName = $dataSetName; + $this->dataAsStringForResultOutput = $dataAsStringForResultOutput; parent::__construct($data); } public function dataSetName() : int|string { return $this->dataSetName; } + /** + * @internal This method is not covered by the backward compatibility promise for PHPUnit + */ + public function dataAsStringForResultOutput() : string + { + return $this->dataAsStringForResultOutput; + } /** * @psalm-assert-if-true DataFromDataProvider $this */ @@ -42116,7 +45788,6 @@ namespace PHPUnit\Event\Code; use function assert; use function is_int; use function sprintf; -use PHPUnit\Event\TestData\NoDataSetFromDataProviderException; use PHPUnit\Event\TestData\TestDataCollection; use PHPUnit\Metadata\MetadataCollection; /** @@ -42134,6 +45805,9 @@ final class TestMethod extends \PHPUnit\Event\Code\Test * @psalm-var non-empty-string */ private readonly string $methodName; + /** + * @psalm-var non-negative-int + */ private readonly int $line; private readonly \PHPUnit\Event\Code\TestDox $testDox; private readonly MetadataCollection $metadata; @@ -42141,6 +45815,8 @@ final class TestMethod extends \PHPUnit\Event\Code\Test /** * @psalm-param class-string $className * @psalm-param non-empty-string $methodName + * @psalm-param non-empty-string $file + * @psalm-param non-negative-int $line */ public function __construct(string $className, string $methodName, string $file, int $line, \PHPUnit\Event\Code\TestDox $testDox, MetadataCollection $metadata, TestDataCollection $testData) { @@ -42166,6 +45842,9 @@ final class TestMethod extends \PHPUnit\Event\Code\Test { return $this->methodName; } + /** + * @psalm-return non-negative-int + */ public function line() : int { return $this->line; @@ -42190,7 +45869,7 @@ final class TestMethod extends \PHPUnit\Event\Code\Test return \true; } /** - * @throws NoDataSetFromDataProviderException + * @psalm-return non-empty-string */ public function id() : string { @@ -42201,14 +45880,14 @@ final class TestMethod extends \PHPUnit\Event\Code\Test return $buffer; } /** - * @throws NoDataSetFromDataProviderException + * @psalm-return non-empty-string */ public function nameWithClass() : string { return $this->className . '::' . $this->name(); } /** - * @throws NoDataSetFromDataProviderException + * @psalm-return non-empty-string */ public function name() : string { @@ -42238,15 +45917,17 @@ declare (strict_types=1); namespace PHPUnit\Event\Code; use function assert; +use function debug_backtrace; use function is_numeric; +use PHPUnit\Event\Facade as EventFacade; use PHPUnit\Event\TestData\DataFromDataProvider; use PHPUnit\Event\TestData\DataFromTestDependency; use PHPUnit\Event\TestData\MoreThanOneDataSetFromDataProviderException; use PHPUnit\Event\TestData\TestDataCollection; use PHPUnit\Framework\TestCase; use PHPUnit\Metadata\Parser\Registry as MetadataRegistry; +use PHPUnit\Util\Exporter; use PHPUnit\Util\Reflection; -use PHPUnit\SebastianBergmann\Exporter\Exporter; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ @@ -42260,7 +45941,19 @@ final class TestMethodBuilder $methodName = $testCase->name(); assert(!empty($methodName)); $location = Reflection::sourceLocationFor($testCase::class, $methodName); - return new \PHPUnit\Event\Code\TestMethod($testCase::class, $methodName, $location['file'], $location['line'], \PHPUnit\Event\Code\TestDoxBuilder::fromTestCase($testCase), MetadataRegistry::parser()->for($testCase::class, $methodName), self::dataFor($testCase)); + return new \PHPUnit\Event\Code\TestMethod($testCase::class, $methodName, $location['file'], $location['line'], \PHPUnit\Event\Code\TestDoxBuilder::fromTestCase($testCase), MetadataRegistry::parser()->forClassAndMethod($testCase::class, $methodName), self::dataFor($testCase)); + } + /** + * @throws NoTestCaseObjectOnCallStackException + */ + public static function fromCallStack() : \PHPUnit\Event\Code\TestMethod + { + foreach (debug_backtrace() as $frame) { + if (isset($frame['object']) && $frame['object'] instanceof TestCase) { + return $frame['object']->valueObjectForEvents(); + } + } + throw new \PHPUnit\Event\Code\NoTestCaseObjectOnCallStackException(); } /** * @throws MoreThanOneDataSetFromDataProviderException @@ -42273,10 +45966,10 @@ final class TestMethodBuilder if (is_numeric($dataSetName)) { $dataSetName = (int) $dataSetName; } - $testData[] = DataFromDataProvider::from($dataSetName, (new Exporter())->export($testCase->providedData())); + $testData[] = DataFromDataProvider::from($dataSetName, Exporter::export($testCase->providedData(), EventFacade::emitter()->exportsObjects()), $testCase->dataSetAsStringWithData()); } if ($testCase->hasDependencyInput()) { - $testData[] = DataFromTestDependency::from((new Exporter())->export($testCase->dependencyInput())); + $testData[] = DataFromTestDependency::from(Exporter::export($testCase->dependencyInput(), EventFacade::emitter()->exportsObjects())); } return TestDataCollection::fromArray($testData); } @@ -42302,15 +45995,24 @@ use PHPUnit\Event\Code\TestCollection; */ abstract class TestSuite { + /** + * @psalm-var non-empty-string + */ private readonly string $name; private readonly int $count; private readonly TestCollection $tests; + /** + * @psalm-param non-empty-string $name + */ public function __construct(string $name, int $size, TestCollection $tests) { $this->name = $name; $this->count = $size; $this->tests = $tests; } + /** + * @psalm-return non-empty-string + */ public function name() : string { return $this->name; @@ -42359,6 +46061,7 @@ declare (strict_types=1); namespace PHPUnit\Event\TestSuite; use function explode; +use PHPUnit\Event\Code\Test; use PHPUnit\Event\Code\TestCollection; use PHPUnit\Event\RuntimeException; use PHPUnit\Framework\DataProviderTestSuite; @@ -42379,7 +46082,7 @@ final class TestSuiteBuilder public static function from(FrameworkTestSuite $testSuite) : \PHPUnit\Event\TestSuite\TestSuite { $groups = []; - foreach ($testSuite->getGroupDetails() as $groupName => $tests) { + foreach ($testSuite->groupDetails() as $groupName => $tests) { if (!isset($groups[$groupName])) { $groups[$groupName] = []; } @@ -42388,16 +46091,12 @@ final class TestSuiteBuilder } } $tests = []; - foreach ($testSuite->tests() as $test) { - if ($test instanceof TestCase || $test instanceof PhptTestCase) { - $tests[] = $test->valueObjectForEvents(); - } - } + self::process($testSuite, $tests); if ($testSuite instanceof DataProviderTestSuite) { - [$className, $methodName] = explode('::', $testSuite->getName()); + [$className, $methodName] = explode('::', $testSuite->name()); try { $reflector = new ReflectionMethod($className, $methodName); - return new \PHPUnit\Event\TestSuite\TestSuiteForTestMethodWithDataProvider($testSuite->getName(), $testSuite->count(), TestCollection::fromArray($tests), $className, $methodName, $reflector->getFileName(), $reflector->getStartLine()); + return new \PHPUnit\Event\TestSuite\TestSuiteForTestMethodWithDataProvider($testSuite->name(), $testSuite->count(), TestCollection::fromArray($tests), $className, $methodName, $reflector->getFileName(), $reflector->getStartLine()); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new RuntimeException($e->getMessage(), $e->getCode(), $e); @@ -42406,15 +46105,30 @@ final class TestSuiteBuilder } if ($testSuite->isForTestClass()) { try { - $reflector = new ReflectionClass($testSuite->getName()); - return new \PHPUnit\Event\TestSuite\TestSuiteForTestClass($testSuite->getName(), $testSuite->count(), TestCollection::fromArray($tests), $reflector->getFileName(), $reflector->getStartLine()); + $reflector = new ReflectionClass($testSuite->name()); + return new \PHPUnit\Event\TestSuite\TestSuiteForTestClass($testSuite->name(), $testSuite->count(), TestCollection::fromArray($tests), $reflector->getFileName(), $reflector->getStartLine()); // @codeCoverageIgnoreStart } catch (ReflectionException $e) { throw new RuntimeException($e->getMessage(), $e->getCode(), $e); } // @codeCoverageIgnoreEnd } - return new \PHPUnit\Event\TestSuite\TestSuiteWithName($testSuite->getName(), $testSuite->count(), TestCollection::fromArray($tests)); + return new \PHPUnit\Event\TestSuite\TestSuiteWithName($testSuite->name(), $testSuite->count(), TestCollection::fromArray($tests)); + } + /** + * @psalm-param list $tests + */ + private static function process(FrameworkTestSuite $testSuite, array &$tests) : void + { + foreach ($testSuite->getIterator() as $test) { + if ($test instanceof FrameworkTestSuite) { + self::process($test, $tests); + continue; + } + if ($test instanceof TestCase || $test instanceof PhptTestCase) { + $tests[] = $test->valueObjectForEvents(); + } + } } } getMessage(), ThrowableToStringMapper::map($t), Filter::getFilteredStacktrace($t), $previous); + return new \PHPUnit\Event\Code\Throwable($t::class, $t->getMessage(), ThrowableToStringMapper::map($t), Filter::getFilteredStacktrace($t, \false), $previous); } } - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Attributes; - -use Attribute; -/** - * @psalm-immutable - * - * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit - */ -#[Attribute(Attribute::TARGET_CLASS)] -final class Medium -{ -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\Attributes; - -use Attribute; -/** - * @psalm-immutable - * - * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit - */ -#[Attribute(Attribute::TARGET_METHOD)] -final class PostCondition -{ -} - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5513 */ -namespace PHPUnit\Framework\Attributes; - -use Attribute; -/** - * @psalm-immutable - * - * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit - */ -#[Attribute(Attribute::TARGET_METHOD)] -final class PreCondition +#[Attribute(Attribute::TARGET_CLASS | Attribute::IS_REPEATABLE)] +final class IgnoreClassForCodeCoverage { + /** + * @psalm-var class-string + */ + private readonly string $className; + /** + * @psalm-param class-string $className + */ + public function __construct(string $className) + { + $this->className = $className; + } + /** + * @psalm-return class-string + */ + public function className() : string + { + return $this->className; + } } enabled = $enabled; - } - public function enabled() : bool - { - return $this->enabled; - } } functionName = $functionName; + } + /** + * @psalm-return non-empty-string + */ + public function functionName() : string + { + return $this->functionName; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework\Attributes; + +use Attribute; +/** + * @psalm-immutable + * + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5513 + */ +#[Attribute(Attribute::TARGET_CLASS | Attribute::IS_REPEATABLE)] +final class IgnoreMethodForCodeCoverage +{ + /** + * @psalm-var class-string + */ + private readonly string $className; + /** + * @psalm-var non-empty-string + */ + private readonly string $methodName; + /** + * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName + */ + public function __construct(string $className, string $methodName) + { + $this->className = $className; + $this->methodName = $methodName; + } + /** + * @psalm-return class-string + */ + public function className() : string + { + return $this->className; + } + /** + * @psalm-return non-empty-string + */ + public function methodName() : string + { + return $this->methodName; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework\Attributes; + +use Attribute; +/** + * @psalm-immutable + * + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +#[Attribute(Attribute::TARGET_CLASS)] +final class Large +{ +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework\Attributes; + +use Attribute; +/** + * @psalm-immutable + * + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +#[Attribute(Attribute::TARGET_CLASS)] +final class Medium +{ +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework\Attributes; + +use Attribute; +/** + * @psalm-immutable + * + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +#[Attribute(Attribute::TARGET_METHOD)] +final class PostCondition +{ +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework\Attributes; + +use Attribute; +/** + * @psalm-immutable + * + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +#[Attribute(Attribute::TARGET_METHOD)] +final class PreCondition +{ +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework\Attributes; + +use Attribute; +/** + * @psalm-immutable + * + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +#[Attribute(Attribute::TARGET_CLASS | Attribute::TARGET_METHOD)] +final class PreserveGlobalState +{ + private readonly bool $enabled; + public function __construct(bool $enabled) + { + $this->enabled = $enabled; + } + public function enabled() : bool + { + return $this->enabled; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework\Attributes; + +use Attribute; +/** + * @psalm-immutable + * + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +#[Attribute(Attribute::TARGET_CLASS | Attribute::TARGET_METHOD | Attribute::IS_REPEATABLE)] +final class RequiresFunction { /** * @psalm-var non-empty-string @@ -48726,6 +52694,29 @@ final class UsesFunction } + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework\Attributes; + +use Attribute; +/** + * @psalm-immutable + * + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +#[Attribute(Attribute::TARGET_METHOD)] +final class WithoutErrorHandler +{ +} +exporter()->export($this->value); + return 'is greater than ' . Exporter::export($this->value, $exportObjects); } /** * Evaluates the constraint for parameter $other. Returns true if the @@ -49035,7 +53027,7 @@ final class IsEmpty extends \PHPUnit\Framework\Constraint\Constraint protected function failureDescription(mixed $other) : string { $type = gettype($other); - return sprintf('%s %s %s', str_starts_with($type, 'a') || str_starts_with($type, 'o') ? 'an' : 'a', $type, $this->toString()); + return sprintf('%s %s %s', str_starts_with($type, 'a') || str_starts_with($type, 'o') ? 'an' : 'a', $type, $this->toString(\true)); } } exporter()->export($this->value); + return 'is less than ' . Exporter::export($this->value, $exportObjects); } /** * Evaluates the constraint for parameter $other. Returns true if the @@ -49090,6 +53083,7 @@ declare (strict_types=1); */ namespace PHPUnit\Framework\Constraint; +use Countable; use PHPUnit\Framework\Exception; /** * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit @@ -49097,7 +53091,7 @@ use PHPUnit\Framework\Exception; final class SameSize extends \PHPUnit\Framework\Constraint\Count { /** - * @psalm-param \Countable|iterable $expected + * @psalm-param Countable|iterable $expected * * @throws Exception */ @@ -49119,18 +53113,19 @@ declare (strict_types=1); */ namespace PHPUnit\Framework\Constraint; +use function gettype; use function sprintf; +use function strtolower; use Countable; use PHPUnit\Framework\ExpectationFailedException; use PHPUnit\Framework\SelfDescribing; +use PHPUnit\Util\Exporter; use PHPUnit\SebastianBergmann\Comparator\ComparisonFailure; -use PHPUnit\SebastianBergmann\Exporter\Exporter; /** * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit */ abstract class Constraint implements Countable, SelfDescribing { - private ?Exporter $exporter = null; /** * Evaluates the constraint for parameter $other. * @@ -49164,20 +53159,18 @@ abstract class Constraint implements Countable, SelfDescribing { return 1; } - protected function exporter() : Exporter + /** + * @deprecated + */ + protected function exporter() : \PHPUnit\SebastianBergmann\Exporter\Exporter { - if ($this->exporter === null) { - $this->exporter = new Exporter(); - } - return $this->exporter; + return new \PHPUnit\SebastianBergmann\Exporter\Exporter(); } /** * Evaluates the constraint for parameter $other. Returns true if the * constraint is met, false otherwise. * * This method can be overridden to implement the evaluation algorithm. - * - * @codeCoverageIgnore */ protected function matches(mixed $other) : bool { @@ -49221,7 +53214,7 @@ abstract class Constraint implements Countable, SelfDescribing */ protected function failureDescription(mixed $other) : string { - return $this->exporter()->export($other) . ' ' . $this->toString(); + return Exporter::export($other, \true) . ' ' . $this->toString(\true); } /** * Returns a custom string representation of the constraint object when it @@ -49257,7 +53250,7 @@ abstract class Constraint implements Countable, SelfDescribing if ($string === '') { return ''; } - return $this->exporter()->export($other) . ' ' . $string; + return Exporter::export($other, \true) . ' ' . $string; } /** * Reduces the sub-expression starting at $this by skipping degenerate @@ -49323,6 +53316,25 @@ abstract class Constraint implements Countable, SelfDescribing { return $this; } + /** + * @psalm-return non-empty-string + */ + protected function valueToTypeStringFragment(mixed $value) : string + { + $type = strtolower(gettype($value)); + if ($type === 'double') { + $type = 'float'; + } + if ($type === 'resource (closed)') { + $type = 'closed resource'; + } + return match ($type) { + 'array', 'integer', 'object' => 'an ' . $type . ' ', + 'boolean', 'closed resource', 'float', 'resource', 'string' => 'a ' . $type . ' ', + 'null' => 'null ', + default => 'a value of ' . $type . ' ', + }; + } } value)) { @@ -49407,7 +53420,7 @@ final class IsEqual extends \PHPUnit\Framework\Constraint\Constraint if ($this->delta != 0) { $delta = sprintf(' with delta <%F>', $this->delta); } - return sprintf('is equal to %s%s', $this->exporter()->export($this->value), $delta); + return sprintf('is equal to %s%s', Exporter::export($this->value, $exportObjects), $delta); } } getComparatorFor($this->value, $other); - $comparator->assertEquals($this->value, $other, 0.0, \true, \false); + $comparator->assertEquals($this->value, $other, 0.0, \true); } catch (ComparisonFailure $f) { if ($returnResult) { return \false; @@ -49475,7 +53489,7 @@ final class IsEqualCanonicalizing extends \PHPUnit\Framework\Constraint\Constrai /** * Returns a string representation of the constraint. */ - public function toString() : string + public function toString(bool $exportObjects = \false) : string { if (is_string($this->value)) { if (str_contains($this->value, "\n")) { @@ -49483,7 +53497,7 @@ final class IsEqualCanonicalizing extends \PHPUnit\Framework\Constraint\Constrai } return sprintf("is equal to '%s'", $this->value); } - return sprintf('is equal to %s', $this->exporter()->export($this->value)); + return sprintf('is equal to %s', Exporter::export($this->value, $exportObjects)); } } value)) { if (str_contains($this->value, "\n")) { @@ -49559,7 +53574,7 @@ final class IsEqualIgnoringCase extends \PHPUnit\Framework\Constraint\Constraint } return sprintf("is equal to '%s'", $this->value); } - return sprintf('is equal to %s', $this->exporter()->export($this->value)); + return sprintf('is equal to %s', Exporter::export($this->value, $exportObjects)); } } ', $this->exporter()->export($this->value), $this->delta); + return sprintf('is equal to %s with delta <%F>', Exporter::export($this->value, $exportObjects), $this->delta); } } exporter()->export($other), $this->exporter()->export($this->expectedCode)); + return sprintf('%s is equal to expected exception code %s', Exporter::export($other, \true), Exporter::export($this->expectedCode, \true)); } } expectedMessage === '') { return 'exception message is empty'; } - return 'exception message contains ' . $this->exporter()->export($this->expectedMessage); + return 'exception message contains ' . Exporter::export($this->expectedMessage); } protected function matches(mixed $other) : bool { @@ -49809,6 +53827,7 @@ namespace PHPUnit\Framework\Constraint; use function preg_match; use function sprintf; use Exception; +use PHPUnit\Util\Exporter; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ @@ -49821,7 +53840,7 @@ final class ExceptionMessageMatchesRegularExpression extends \PHPUnit\Framework\ } public function toString() : string { - return 'exception message matches ' . $this->exporter()->export($this->regularExpression); + return 'exception message matches ' . Exporter::export($this->regularExpression); } /** * Evaluates the constraint for parameter $other. Returns true if the @@ -50096,12 +54115,16 @@ declare (strict_types=1); */ namespace PHPUnit\Framework\Constraint; +use function explode; +use function gettype; use function is_array; use function is_object; use function is_string; use function sprintf; use PHPUnit\Framework\ExpectationFailedException; +use PHPUnit\Util\Exporter; use PHPUnit\SebastianBergmann\Comparator\ComparisonFailure; +use UnitEnum; /** * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit */ @@ -50136,9 +54159,9 @@ final class IsIdentical extends \PHPUnit\Framework\Constraint\Constraint if (is_string($this->value) && is_string($other)) { $f = new ComparisonFailure($this->value, $other, sprintf("'%s'", $this->value), sprintf("'%s'", $other)); } - // if both values are array, make sure a diff is generated - if (is_array($this->value) && is_array($other)) { - $f = new ComparisonFailure($this->value, $other, $this->exporter()->export($this->value), $this->exporter()->export($other)); + // if both values are array or enums, make sure a diff is generated + if (is_array($this->value) && is_array($other) || $this->value instanceof UnitEnum && $other instanceof UnitEnum) { + $f = new ComparisonFailure($this->value, $other, Exporter::export($this->value, \true), Exporter::export($other, \true)); } $this->fail($other, $description, $f); } @@ -50147,12 +54170,12 @@ final class IsIdentical extends \PHPUnit\Framework\Constraint\Constraint /** * Returns a string representation of the constraint. */ - public function toString() : string + public function toString(bool $exportObjects = \false) : string { if (is_object($this->value)) { return 'is identical to an object of class "' . $this->value::class . '"'; } - return 'is identical to ' . $this->exporter()->export($this->value); + return 'is identical to ' . Exporter::export($this->value, $exportObjects); } /** * Returns the description of the failure. @@ -50165,6 +54188,9 @@ final class IsIdentical extends \PHPUnit\Framework\Constraint\Constraint if (is_object($this->value) && is_object($other)) { return 'two variables reference the same object'; } + if (explode(' ', gettype($this->value), 2)[0] === 'resource' && explode(' ', gettype($other), 2)[0] === 'resource') { + return 'two variables reference the same resource'; + } if (is_string($this->value) && is_string($other)) { return 'two strings are identical'; } @@ -50446,7 +54472,70 @@ final class ObjectEquals extends \PHPUnit\Framework\Constraint\Constraint } protected function failureDescription(mixed $other) : string { - return $this->toString(); + return $this->toString(\true); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework\Constraint; + +use function gettype; +use function is_object; +use function sprintf; +use ReflectionObject; +/** + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +final class ObjectHasProperty extends \PHPUnit\Framework\Constraint\Constraint +{ + private readonly string $propertyName; + public function __construct(string $propertyName) + { + $this->propertyName = $propertyName; + } + /** + * Returns a string representation of the constraint. + */ + public function toString() : string + { + return sprintf('has property "%s"', $this->propertyName); + } + /** + * Evaluates the constraint for parameter $other. Returns true if the + * constraint is met, false otherwise. + * + * @param mixed $other value or object to evaluate + */ + protected function matches(mixed $other) : bool + { + if (!is_object($other)) { + return \false; + } + return (new ReflectionObject($other))->hasProperty($this->propertyName); + } + /** + * Returns the description of the failure. + * + * The beginning of failure messages is "Failed asserting that" in most + * cases. This method should return the second part of that sentence. + * + * @param mixed $other evaluated value or object + */ + protected function failureDescription(mixed $other) : string + { + if (is_object($other)) { + return sprintf('object of class "%s" %s', $other::class, $this->toString(\true)); + } + return sprintf('"%s" (%s) %s', $other, gettype($other), $this->toString(\true)); } } '/\\b' . preg_quote($s, '/') . '/', $positives); if (count($matches) > 0) { $nonInput = $matches[2]; @@ -50978,6 +55070,7 @@ declare (strict_types=1); */ namespace PHPUnit\Framework\Constraint; +use function is_string; use function json_decode; use function json_last_error; use function sprintf; @@ -50999,7 +55092,7 @@ final class IsJson extends \PHPUnit\Framework\Constraint\Constraint */ protected function matches(mixed $other) : bool { - if ($other === '') { + if (!is_string($other) || $other === '') { return \false; } json_decode($other); @@ -51016,15 +55109,18 @@ final class IsJson extends \PHPUnit\Framework\Constraint\Constraint */ protected function failureDescription(mixed $other) : string { + if (!is_string($other)) { + return $this->valueToTypeStringFragment($other) . 'is valid JSON'; + } if ($other === '') { return 'an empty string is valid JSON'; } - json_decode($other); - return sprintf('%s is valid JSON (%s)', $this->exporter()->shortenedExport($other), $this->determineJsonError(json_last_error())); + return sprintf('a string is valid JSON (%s)', $this->determineJsonError($other)); } - private function determineJsonError(int $error) : string + private function determineJsonError(string $json) : string { - return match ($error) { + json_decode($json); + return match (json_last_error()) { \JSON_ERROR_NONE => '', \JSON_ERROR_DEPTH => 'Maximum stack depth exceeded', \JSON_ERROR_STATE_MISMATCH => 'Underflow or the modes mismatch', @@ -51090,25 +55186,28 @@ declare (strict_types=1); namespace PHPUnit\Framework\Constraint; use function is_string; +use function mb_detect_encoding; use function mb_stripos; use function mb_strtolower; use function sprintf; use function str_contains; +use function strlen; use function strtr; +use PHPUnit\Util\Exporter; /** * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit */ final class StringContains extends \PHPUnit\Framework\Constraint\Constraint { - private readonly string $string; + private readonly string $needle; private readonly bool $ignoreCase; private readonly bool $ignoreLineEndings; - public function __construct(string $string, bool $ignoreCase = \false, bool $ignoreLineEndings = \false) + public function __construct(string $needle, bool $ignoreCase = \false, bool $ignoreLineEndings = \false) { if ($ignoreLineEndings) { - $string = $this->normalizeLineEndings($string); + $needle = $this->normalizeLineEndings($needle); } - $this->string = $string; + $this->needle = $needle; $this->ignoreCase = $ignoreCase; $this->ignoreLineEndings = $ignoreLineEndings; } @@ -51117,11 +55216,20 @@ final class StringContains extends \PHPUnit\Framework\Constraint\Constraint */ public function toString() : string { - $string = $this->string; + $needle = $this->needle; if ($this->ignoreCase) { - $string = mb_strtolower($this->string, 'UTF-8'); + $needle = mb_strtolower($this->needle, 'UTF-8'); } - return sprintf('contains "%s"', $string); + return sprintf('contains "%s" [%s](length: %s)', $needle, $this->getDetectedEncoding($needle), strlen($needle)); + } + public function failureDescription(mixed $other) : string + { + $stringifiedHaystack = Exporter::export($other, \true); + $haystackEncoding = $this->getDetectedEncoding($other); + $haystackLength = $this->getHaystackLength($other); + $haystackInformation = sprintf('%s [%s](length: %s) ', $stringifiedHaystack, $haystackEncoding, $haystackLength); + $needleInformation = $this->toString(\true); + return $haystackInformation . $needleInformation; } /** * Evaluates the constraint for parameter $other. Returns true if the @@ -51129,31 +55237,56 @@ final class StringContains extends \PHPUnit\Framework\Constraint\Constraint */ protected function matches(mixed $other) : bool { - if ('' === $this->string) { + $haystack = $other; + if ('' === $this->needle) { return \true; } - if (!is_string($other)) { + if (!is_string($haystack)) { return \false; } if ($this->ignoreLineEndings) { - $other = $this->normalizeLineEndings($other); + $haystack = $this->normalizeLineEndings($haystack); } if ($this->ignoreCase) { /* - * We must use the multi byte safe version so we can accurately compare non latin upper characters with + * We must use the multibyte-safe version, so we can accurately compare non-latin uppercase characters with * their lowercase equivalents. */ - return mb_stripos($other, $this->string, 0, 'UTF-8') !== \false; + return mb_stripos($haystack, $this->needle, 0, 'UTF-8') !== \false; } /* - * Use the non multi byte safe functions to see if the string is contained in $other. + * Use the non-multibyte safe functions to see if the string is contained in $other. * - * This function is very fast and we don't care about the character position in the string. + * This function is very fast, and we don't care about the character position in the string. * - * Additionally, we want this method to be binary safe so we can check if some binary data is in other binary + * Additionally, we want this method to be binary safe, so we can check if some binary data is in other binary * data. */ - return str_contains($other, $this->string); + return str_contains($haystack, $this->needle); + } + private function getDetectedEncoding(mixed $other) : string + { + if ($this->ignoreCase) { + return 'Encoding ignored'; + } + if (!is_string($other)) { + return 'Encoding detection failed'; + } + $detectedEncoding = mb_detect_encoding($other, null, \true); + if (!$detectedEncoding) { + return 'Encoding detection failed'; + } + return $detectedEncoding; + } + private function getHaystackLength(mixed $haystack) : int + { + if (!is_string($haystack)) { + return 0; + } + if ($this->ignoreLineEndings) { + $haystack = $this->normalizeLineEndings($haystack); + } + return strlen($haystack); } private function normalizeLineEndings(string $string) : string { @@ -51395,6 +55528,7 @@ namespace PHPUnit\Framework\Constraint; use function array_key_exists; use function is_array; use ArrayAccess; +use PHPUnit\Util\Exporter; /** * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit */ @@ -51410,7 +55544,7 @@ final class ArrayHasKey extends \PHPUnit\Framework\Constraint\Constraint */ public function toString() : string { - return 'has the key ' . $this->exporter()->export($this->key); + return 'has the key ' . Exporter::export($this->key); } /** * Evaluates the constraint for parameter $other. Returns true if the @@ -51434,7 +55568,7 @@ final class ArrayHasKey extends \PHPUnit\Framework\Constraint\Constraint */ protected function failureDescription(mixed $other) : string { - return 'an array ' . $this->toString(); + return 'an array ' . $this->toString(\true); } } 'an ' . $type . ' ' . $this->toString(), - 'boolean', 'closed resource', 'float', 'resource', 'string' => 'a ' . $type . ' ' . $this->toString(), - 'null' => 'null ' . $this->toString(), - default => 'a value of ' . $type . ' ' . $this->toString(), - }; + return $this->valueToTypeStringFragment($other) . $this->toString(\true); } } exporter()->export($this->value); + return 'contains ' . Exporter::export($this->value, $exportObjects); } /** * Returns the description of the failure. @@ -51540,7 +55661,7 @@ abstract class TraversableContains extends \PHPUnit\Framework\Constraint\Constra */ protected function failureDescription(mixed $other) : string { - return sprintf('%s %s', is_array($other) ? 'an array' : 'a traversable', $this->toString()); + return sprintf('%s %s', is_array($other) ? 'an array' : 'a traversable', $this->toString(\true)); } protected function value() : mixed { @@ -51709,7 +55830,13 @@ use PHPUnit\Framework\UnknownClassOrInterfaceException; */ final class IsInstanceOf extends \PHPUnit\Framework\Constraint\Constraint { + /** + * @psalm-var class-string + */ private readonly string $name; + /** + * @psalm-var 'class'|'interface' + */ private readonly string $type; /** * @throws UnknownClassOrInterfaceException @@ -51748,7 +55875,7 @@ final class IsInstanceOf extends \PHPUnit\Framework\Constraint\Constraint */ protected function failureDescription(mixed $other) : string { - return sprintf('%s is an instance of %s %s', $this->exporter()->shortenedExport($other), $this->type, $this->name); + return $this->valueToTypeStringFragment($other) . $this->toString(\true); } } */ private const KNOWN_TYPES = ['array' => \true, 'boolean' => \true, 'bool' => \true, 'double' => \true, 'float' => \true, 'integer' => \true, 'int' => \true, 'null' => \true, 'numeric' => \true, 'object' => \true, 'real' => \true, 'resource' => \true, 'resource (closed)' => \true, 'string' => \true, 'scalar' => \true, 'callable' => \true, 'iterable' => \true]; + /** + * @psalm-var 'array'|'boolean'|'bool'|'double'|'float'|'integer'|'int'|'null'|'numeric'|'object'|'real'|'resource'|'resource (closed)'|'string'|'scalar'|'callable'|'iterable' + */ private readonly string $type; /** + * @psalm-param 'array'|'boolean'|'bool'|'double'|'float'|'integer'|'int'|'null'|'numeric'|'object'|'real'|'resource'|'resource (closed)'|'string'|'scalar'|'callable'|'iterable' $type + * * @throws UnknownTypeException */ public function __construct(string $type) @@ -51967,9 +56099,7 @@ final class DataProviderTestSuite extends \PHPUnit\Framework\TestSuite $this->dependencies = $dependencies; foreach ($this->tests() as $test) { if (!$test instanceof \PHPUnit\Framework\TestCase) { - // @codeCoverageIgnoreStart continue; - // @codeCoverageIgnoreStart } $test->setDependencies($dependencies); } @@ -51980,7 +56110,7 @@ final class DataProviderTestSuite extends \PHPUnit\Framework\TestSuite public function provides() : array { if ($this->providedTests === null) { - $this->providedTests = [new \PHPUnit\Framework\ExecutionOrderDependency($this->getName())]; + $this->providedTests = [new \PHPUnit\Framework\ExecutionOrderDependency($this->name())]; } return $this->providedTests; } @@ -51998,7 +56128,7 @@ final class DataProviderTestSuite extends \PHPUnit\Framework\TestSuite */ public function size() : TestSize { - [$className, $methodName] = explode('::', $this->getName()); + [$className, $methodName] = explode('::', $this->name()); return (new Groups())->size($className, $methodName); } } @@ -52079,38 +56209,9 @@ declare (strict_types=1); */ namespace PHPUnit\Framework; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class Error extends \PHPUnit\Framework\Exception implements \PHPUnit\Framework\SelfDescribing -{ - /** - * Wrapper for getMessage() which is declared as final. - */ - public function toString() : string - { - return $this->getMessage(); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework; - use function array_keys; use function get_object_vars; -use PHPUnit\Util\Filter; -use PHPUnit\Util\ThrowableToStringMapper; use RuntimeException; -use Stringable; use Throwable; /** * Base class for all PHPUnit Framework exceptions. @@ -52134,7 +56235,7 @@ use Throwable; * * @internal This class is not covered by the backward compatibility promise for PHPUnit */ -class Exception extends RuntimeException implements \PHPUnit\Exception, Stringable +class Exception extends RuntimeException implements \PHPUnit\Exception { protected array $serializableTrace; public function __construct(string $message = '', int $code = 0, Throwable $previous = null) @@ -52145,17 +56246,6 @@ class Exception extends RuntimeException implements \PHPUnit\Exception, Stringab unset($this->serializableTrace[$key]['args']); } } - /** - * @throws Exception - */ - public function __toString() : string - { - $string = ThrowableToStringMapper::map($this); - if ($trace = Filter::getFilteredStacktrace($this)) { - $string .= "\n" . $trace; - } - return $string; - } public function __sleep() : array { return array_keys(get_object_vars($this)); @@ -52645,30 +56735,6 @@ declare (strict_types=1); */ namespace PHPUnit\Framework; -use function sprintf; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class UnknownClassException extends \PHPUnit\Framework\InvalidArgumentException -{ - public function __construct(string $name) - { - parent::__construct(sprintf('Class "%s" does not exist', $name)); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework; - use function sprintf; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit @@ -52855,62 +56921,65 @@ declare (strict_types=1); */ namespace PHPUnit\Framework\MockObject; -use PHPUnit\Framework\MockObject\Builder\InvocationMocker as InvocationMockerBuilder; -use PHPUnit\Framework\MockObject\Rule\InvocationOrder; +use PHPUnit\SebastianBergmann\Type\Type; /** - * @internal This trait is not covered by the backward compatibility promise for PHPUnit + * @internal This class is not covered by the backward compatibility promise for PHPUnit */ -trait Api +final class ConfigurableMethod { /** - * @psalm-var list + * @psalm-var non-empty-string */ - private static array $__phpunit_configurableMethods; - private object $__phpunit_originalObject; - private bool $__phpunit_returnValueGeneration = \true; - private ?\PHPUnit\Framework\MockObject\InvocationHandler $__phpunit_invocationMocker = null; - /** @noinspection MagicMethodsValidityInspection */ - public static function __phpunit_initConfigurableMethods(\PHPUnit\Framework\MockObject\ConfigurableMethod ...$configurableMethods) : void - { - if (isset(static::$__phpunit_configurableMethods)) { - throw new \PHPUnit\Framework\MockObject\ConfigurableMethodsAlreadyInitializedException('Configurable methods is already initialized and can not be reinitialized'); - } - static::$__phpunit_configurableMethods = $configurableMethods; - } - /** @noinspection MagicMethodsValidityInspection */ - public function __phpunit_setOriginalObject(object $originalObject) : void + private readonly string $name; + /** + * @psalm-var array + */ + private readonly array $defaultParameterValues; + /** + * @psalm-var non-negative-int + */ + private readonly int $numberOfParameters; + private readonly Type $returnType; + /** + * @psalm-param non-empty-string $name + * @psalm-param array $defaultParameterValues + * @psalm-param non-negative-int $numberOfParameters + */ + public function __construct(string $name, array $defaultParameterValues, int $numberOfParameters, Type $returnType) { - $this->__phpunit_originalObject = $originalObject; + $this->name = $name; + $this->defaultParameterValues = $defaultParameterValues; + $this->numberOfParameters = $numberOfParameters; + $this->returnType = $returnType; } - /** @noinspection MagicMethodsValidityInspection */ - public function __phpunit_setReturnValueGeneration(bool $returnValueGeneration) : void + /** + * @psalm-return non-empty-string + */ + public function name() : string { - $this->__phpunit_returnValueGeneration = $returnValueGeneration; + return $this->name; } - /** @noinspection MagicMethodsValidityInspection */ - public function __phpunit_getInvocationHandler() : \PHPUnit\Framework\MockObject\InvocationHandler + /** + * @psalm-return array + */ + public function defaultParameterValues() : array { - if ($this->__phpunit_invocationMocker === null) { - $this->__phpunit_invocationMocker = new \PHPUnit\Framework\MockObject\InvocationHandler(static::$__phpunit_configurableMethods, $this->__phpunit_returnValueGeneration); - } - return $this->__phpunit_invocationMocker; + return $this->defaultParameterValues; } - /** @noinspection MagicMethodsValidityInspection */ - public function __phpunit_hasMatchers() : bool + /** + * @psalm-return non-negative-int + */ + public function numberOfParameters() : int { - return $this->__phpunit_getInvocationHandler()->hasMatchers(); + return $this->numberOfParameters; } - /** @noinspection MagicMethodsValidityInspection */ - public function __phpunit_verify(bool $unsetInvocationMocker = \true) : void + public function mayReturn(mixed $value) : bool { - $this->__phpunit_getInvocationHandler()->verify(); - if ($unsetInvocationMocker) { - $this->__phpunit_invocationMocker = null; - } + return $this->returnType->isAssignable(Type::fromValue($value, \false)); } - public function expects(InvocationOrder $matcher) : InvocationMockerBuilder + public function returnTypeDeclaration() : string { - return $this->__phpunit_getInvocationHandler()->expects($matcher); + return $this->returnType->asString(); } } expects(new AnyInvokedCount()); - return call_user_func_array([$expects, 'method'], func_get_args()); - } } __phpunit_invocationMocker = clone $this->__phpunit_getInvocationHandler(); + parent::__construct(sprintf('Trying to configure method "%s" with addMethods(), but it exists in class "%s". Use onlyMethods() for methods that exist in the class', $methodName, $type)); } } __phpunit_invocationMocker = clone $this->__phpunit_getInvocationHandler(); - parent::__clone(); + parent::__construct(sprintf('Trying to configure method "%s" with onlyMethods(), but it does not exist in class "%s"', $methodName, $type)); } } - */ - private readonly array $configurableMethods; - /** - * @psalm-var ?array - */ - private ?array $configurableMethodNames = null; - public function __construct(InvocationHandler $handler, Matcher $matcher, ConfigurableMethod ...$configurableMethods) - { - $this->invocationHandler = $handler; - $this->matcher = $matcher; - $this->configurableMethods = $configurableMethods; - } - /** - * @throws MatcherAlreadyRegisteredException - * - * @return $this - */ - public function id(string $id) : self - { - $this->invocationHandler->registerMatcher($id, $this->matcher); - return $this; - } - /** - * @return $this - */ - public function will(Stub $stub) : \PHPUnit\Framework\MockObject\Builder\Identity - { - $this->matcher->setStub($stub); - return $this; - } - /** - * @throws IncompatibleReturnValueException - */ - public function willReturn(mixed $value, mixed ...$nextValues) : self - { - if (count($nextValues) === 0) { - $this->ensureTypeOfReturnValues([$value]); - $stub = $value instanceof Stub ? $value : new ReturnStub($value); - } else { - $values = array_merge([$value], $nextValues); - $this->ensureTypeOfReturnValues($values); - $stub = new ConsecutiveCalls($values); - } - return $this->will($stub); - } - public function willReturnReference(mixed &$reference) : self - { - $stub = new ReturnReference($reference); - return $this->will($stub); - } - public function willReturnMap(array $valueMap) : self - { - $stub = new ReturnValueMap($valueMap); - return $this->will($stub); - } - public function willReturnArgument(int $argumentIndex) : self - { - $stub = new ReturnArgument($argumentIndex); - return $this->will($stub); - } - public function willReturnCallback(callable $callback) : self - { - $stub = new ReturnCallback($callback); - return $this->will($stub); - } - public function willReturnSelf() : self - { - $stub = new ReturnSelf(); - return $this->will($stub); - } - public function willReturnOnConsecutiveCalls(mixed ...$values) : self - { - $stub = new ConsecutiveCalls($values); - return $this->will($stub); - } - public function willThrowException(Throwable $exception) : self - { - $stub = new Exception($exception); - return $this->will($stub); - } - /** - * @return $this - */ - public function after(string $id) : self - { - $this->matcher->setAfterMatchBuilderId($id); - return $this; - } - /** - * @throws \PHPUnit\Framework\Exception - * @throws MethodNameNotConfiguredException - * @throws MethodParametersAlreadyConfiguredException - * - * @return $this - */ - public function with(mixed ...$arguments) : self - { - $this->ensureParametersCanBeConfigured(); - $this->matcher->setParametersRule(new Rule\Parameters($arguments)); - return $this; - } - /** - * @throws MethodNameNotConfiguredException - * @throws MethodParametersAlreadyConfiguredException - * - * @return $this - */ - public function withAnyParameters() : self - { - $this->ensureParametersCanBeConfigured(); - $this->matcher->setParametersRule(new Rule\AnyParameters()); - return $this; - } - /** - * @throws \PHPUnit\Framework\InvalidArgumentException - * @throws MethodCannotBeConfiguredException - * @throws MethodNameAlreadyConfiguredException - * - * @return $this - */ - public function method(Constraint|string $constraint) : self - { - if ($this->matcher->hasMethodNameRule()) { - throw new MethodNameAlreadyConfiguredException(); - } - if (is_string($constraint)) { - $this->configurableMethodNames ??= array_flip(array_map(static fn(ConfigurableMethod $configurable) => strtolower($configurable->name()), $this->configurableMethods)); - if (!array_key_exists(strtolower($constraint), $this->configurableMethodNames)) { - throw new MethodCannotBeConfiguredException($constraint); - } - } - $this->matcher->setMethodNameRule(new Rule\MethodName($constraint)); - return $this; - } - /** - * @throws MethodNameNotConfiguredException - * @throws MethodParametersAlreadyConfiguredException - */ - private function ensureParametersCanBeConfigured() : void - { - if (!$this->matcher->hasMethodNameRule()) { - throw new MethodNameNotConfiguredException(); - } - if ($this->matcher->hasParametersRule()) { - throw new MethodParametersAlreadyConfiguredException(); - } - } - private function configuredMethod() : ?ConfigurableMethod - { - $configuredMethod = null; - foreach ($this->configurableMethods as $configurableMethod) { - if ($this->matcher->methodNameRule()->matchesName($configurableMethod->name())) { - if ($configuredMethod !== null) { - return null; - } - $configuredMethod = $configurableMethod; - } - } - return $configuredMethod; - } - /** - * @throws IncompatibleReturnValueException - */ - private function ensureTypeOfReturnValues(array $values) : void + public function __construct(\PHPUnit\Framework\MockObject\ConfigurableMethod $method, mixed $value) { - $configuredMethod = $this->configuredMethod(); - if ($configuredMethod === null) { - return; - } - foreach ($values as $value) { - if (!$configuredMethod->mayReturn($value)) { - throw new IncompatibleReturnValueException($configuredMethod, $value); - } - } + parent::__construct(sprintf('Method %s may not return value of type %s, its declared return type is "%s"', $method->name(), get_debug_type($value), $method->returnTypeDeclaration())); } } > $valueMap - */ - public function willReturnMap(array $valueMap) : self; - public function willReturnArgument(int $argumentIndex) : self; - public function willReturnCallback(callable $callback) : self; - public function willReturnSelf() : self; - public function willReturnOnConsecutiveCalls(mixed ...$values) : self; - public function willThrowException(Throwable $exception) : self; + public function __construct(string $id) + { + parent::__construct(sprintf('No builder found for match builder identification <%s>', $id)); + } } - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\MockObject\Builder; - -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -interface ParametersMatch extends \PHPUnit\Framework\MockObject\Builder\Stub -{ - /** - * Defines the expectation which must occur before the current is valid. - */ - public function after(string $id) : \PHPUnit\Framework\MockObject\Builder\Stub; - /** - * Sets the parameters to match for, each parameter to this function will - * be part of match. To perform specific matches or constraints create a - * new PHPUnit\Framework\Constraint\Constraint and use it for the parameter. - * If the parameter value is not a constraint it will use the - * PHPUnit\Framework\Constraint\IsEqual for the value. - * - * Some examples: - * - * // match first parameter with value 2 - * $b->with(2); - * // match first parameter with value 'smock' and second identical to 42 - * $b->with('smock', new PHPUnit\Framework\Constraint\IsEqual(42)); - * - */ - public function with(mixed ...$arguments) : self; - /** - * Sets a rule which allows any kind of parameters. - * - * Some examples: - * - * // match any number of parameters - * $b->withAnyParameters(); - * - */ - public function withAnyParameters() : self; -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\MockObject\Builder; - -use PHPUnit\Framework\MockObject\Stub\Stub as BaseStub; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -interface Stub extends \PHPUnit\Framework\MockObject\Builder\Identity -{ - /** - * Stubs the matching method with the stub object $stub. Any invocations of - * the matched method will now be handled by the stub instead. - */ - public function will(BaseStub $stub) : \PHPUnit\Framework\MockObject\Builder\Identity; -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\MockObject; - -use PHPUnit\SebastianBergmann\Type\Type; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class ConfigurableMethod -{ - private readonly string $name; - private readonly Type $returnType; - public function __construct(string $name, Type $returnType) - { - $this->name = $name; - $this->returnType = $returnType; - } - public function name() : string - { - return $this->name; - } - public function mayReturn(mixed $value) : bool - { - if ($value === null && $this->returnType->allowsNull()) { - return \true; - } - return $this->returnType->isAssignable(Type::fromValue($value, \false)); - } - public function returnTypeDeclaration() : string - { - return $this->returnType->asString(); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\MockObject; - -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class BadMethodCallException extends \BadMethodCallException implements \PHPUnit\Framework\MockObject\Exception -{ -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\MockObject; - -use function sprintf; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class CannotUseAddMethodsException extends \PHPUnit\Framework\Exception implements \PHPUnit\Framework\MockObject\Exception +final class MatcherAlreadyRegisteredException extends \PHPUnit\Framework\Exception implements \PHPUnit\Framework\MockObject\Exception { - public function __construct(string $type, string $methodName) + public function __construct(string $id) { - parent::__construct(sprintf('Trying to configure method "%s" with addMethods(), but it exists in class "%s". Use onlyMethods() for methods that exist in the class', $methodName, $type)); + parent::__construct(sprintf('Matcher with id <%s> is already registered', $id)); } } $methods - */ - public function __construct(array $methods) + public function __construct(\PHPUnit\Framework\MockObject\Invocation $invocation) { - parent::__construct(sprintf('Cannot double using a method list that contains duplicates: "%s" (duplicate: "%s")', implode(', ', $methods), implode(', ', array_unique(array_diff_assoc($methods, array_unique($methods)))))); + parent::__construct(sprintf('No return value is configured for %s::%s() and return value generation is disabled', $invocation->className(), $invocation->methodName())); } } name(), get_debug_type($value), $method->returnTypeDeclaration())); + parent::__construct(sprintf('Class "%s" already exists', $className)); } } ', $id)); + parent::__construct(sprintf('Class "%s" is declared "final" and cannot be doubled', $className)); } } is already registered', $id)); + parent::__construct(sprintf('Class "%s" is declared "readonly" and cannot be doubled', $className)); } } - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\MockObject; - -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class MethodNameAlreadyConfiguredException extends \PHPUnit\Framework\Exception implements \PHPUnit\Framework\MockObject\Exception +final class DuplicateMethodException extends \PHPUnit\Framework\Exception implements \PHPUnit\Framework\MockObject\Generator\Exception { - public function __construct() + /** + * @psalm-param list $methods + */ + public function __construct(array $methods) { - parent::__construct('Method name is already configured'); + parent::__construct(sprintf('Cannot double using a method list that contains duplicates: "%s" (duplicate: "%s")', implode(', ', $methods), implode(', ', array_unique(array_diff_assoc($methods, array_unique($methods)))))); } } className(), $invocation->methodName())); - } } - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\MockObject; - -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class SoapExtensionNotAvailableException extends \PHPUnit\Framework\Exception implements \PHPUnit\Framework\MockObject\Exception +final class SoapExtensionNotAvailableException extends \PHPUnit\Framework\Exception implements \PHPUnit\Framework\MockObject\Generator\Exception { public function __construct() { @@ -53955,13 +57592,13 @@ declare (strict_types=1); * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace PHPUnit\Framework\MockObject; +namespace PHPUnit\Framework\MockObject\Generator; use function sprintf; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ -final class UnknownClassException extends \PHPUnit\Framework\Exception implements \PHPUnit\Framework\MockObject\Exception +final class UnknownClassException extends \PHPUnit\Framework\Exception implements \PHPUnit\Framework\MockObject\Generator\Exception { public function __construct(string $className) { @@ -53979,13 +57616,15 @@ declare (strict_types=1); * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace PHPUnit\Framework\MockObject; +namespace PHPUnit\Framework\MockObject\Generator; use function sprintf; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5243 */ -final class UnknownTraitException extends \PHPUnit\Framework\Exception implements \PHPUnit\Framework\MockObject\Exception +final class UnknownTraitException extends \PHPUnit\Framework\Exception implements \PHPUnit\Framework\MockObject\Generator\Exception { public function __construct(string $traitName) { @@ -54003,13 +57642,13 @@ declare (strict_types=1); * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace PHPUnit\Framework\MockObject; +namespace PHPUnit\Framework\MockObject\Generator; use function sprintf; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ -final class UnknownTypeException extends \PHPUnit\Framework\Exception implements \PHPUnit\Framework\MockObject\Exception +final class UnknownTypeException extends \PHPUnit\Framework\Exception implements \PHPUnit\Framework\MockObject\Generator\Exception { public function __construct(string $type) { @@ -54027,7 +57666,7 @@ declare (strict_types=1); * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace PHPUnit\Framework\MockObject; +namespace PHPUnit\Framework\MockObject\Generator; use const PHP_EOL; use const PREG_OFFSET_CAPTURE; @@ -54064,6 +57703,16 @@ use Exception; use Iterator; use IteratorAggregate; use PHPUnit\Framework\InvalidArgumentException; +use PHPUnit\Framework\MockObject\ConfigurableMethod; +use PHPUnit\Framework\MockObject\DoubledCloneMethod; +use PHPUnit\Framework\MockObject\Method; +use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\MockObject\MockObjectApi; +use PHPUnit\Framework\MockObject\MockObjectInternal; +use PHPUnit\Framework\MockObject\ProxiedCloneMethod; +use PHPUnit\Framework\MockObject\Stub; +use PHPUnit\Framework\MockObject\StubApi; +use PHPUnit\Framework\MockObject\StubInternal; use ReflectionClass; use ReflectionMethod; use SoapClient; @@ -54075,20 +57724,17 @@ use Traversable; */ final class Generator { - use \PHPUnit\Framework\MockObject\TemplateLoader; + use \PHPUnit\Framework\MockObject\Generator\TemplateLoader; /** * @var array */ private const EXCLUDED_METHOD_NAMES = ['__CLASS__' => \true, '__DIR__' => \true, '__FILE__' => \true, '__FUNCTION__' => \true, '__LINE__' => \true, '__METHOD__' => \true, '__NAMESPACE__' => \true, '__TRAIT__' => \true, '__clone' => \true, '__halt_compiler' => \true]; + /** + * @psalm-var array + */ private static array $cache = []; /** - * Returns a mock object for the specified class. - * - * @psalm-template RealInstanceType of object - * - * @psalm-param class-string $type - * - * @psalm-return MockObject&RealInstanceType + * Returns a test double for the specified class. * * @throws ClassAlreadyExistsException * @throws ClassIsEnumerationException @@ -54101,7 +57747,7 @@ final class Generator * @throws RuntimeException * @throws UnknownTypeException */ - public function getMock(string $type, ?array $methods = [], array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = \true, bool $callOriginalClone = \true, bool $callAutoload = \true, bool $cloneArguments = \true, bool $callOriginalMethods = \false, object $proxyTarget = null, bool $allowMockingUnknownTypes = \true, bool $returnValueGeneration = \true) : \PHPUnit\Framework\MockObject\MockObject + public function testDouble(string $type, bool $mockObject, ?array $methods = [], array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = \true, bool $callOriginalClone = \true, bool $callAutoload = \true, bool $cloneArguments = \true, bool $callOriginalMethods = \false, object $proxyTarget = null, bool $allowMockingUnknownTypes = \true, bool $returnValueGeneration = \true) : MockObject|Stub { if ($type === Traversable::class) { $type = Iterator::class; @@ -54112,11 +57758,16 @@ final class Generator $this->ensureValidMethods($methods); $this->ensureMockedClassDoesNotAlreadyExist($mockClassName); if (!$callOriginalConstructor && $callOriginalMethods) { - throw new \PHPUnit\Framework\MockObject\OriginalConstructorInvocationRequiredException(); + throw new \PHPUnit\Framework\MockObject\Generator\OriginalConstructorInvocationRequiredException(); } - $mock = $this->generate($type, $methods, $mockClassName, $callOriginalClone, $callAutoload, $cloneArguments, $callOriginalMethods); + $mock = $this->generate($type, $mockObject, $methods, $mockClassName, $callOriginalClone, $callAutoload, $cloneArguments, $callOriginalMethods); $object = $this->getObject($mock, $type, $callOriginalConstructor, $arguments, $callOriginalMethods, $proxyTarget, $returnValueGeneration); - assert($object instanceof \PHPUnit\Framework\MockObject\MockObject); + assert($object instanceof $type); + if ($mockObject) { + assert($object instanceof MockObject); + } else { + assert($object instanceof Stub); + } return $object; } /** @@ -54125,23 +57776,23 @@ final class Generator * @throws RuntimeException * @throws UnknownTypeException */ - public function getMockForInterfaces(array $interfaces, bool $callAutoload = \true) : \PHPUnit\Framework\MockObject\MockObject + public function testDoubleForInterfaceIntersection(array $interfaces, bool $mockObject, bool $callAutoload = \true) : MockObject|Stub { if (count($interfaces) < 2) { - throw new \PHPUnit\Framework\MockObject\RuntimeException('At least two interfaces must be specified'); + throw new \PHPUnit\Framework\MockObject\Generator\RuntimeException('At least two interfaces must be specified'); } foreach ($interfaces as $interface) { if (!interface_exists($interface, $callAutoload)) { - throw new \PHPUnit\Framework\MockObject\UnknownTypeException($interface); + throw new \PHPUnit\Framework\MockObject\Generator\UnknownTypeException($interface); } } sort($interfaces); $methods = []; foreach ($interfaces as $interface) { - $methods = array_merge($methods, $this->getClassMethods($interface)); + $methods = array_merge($methods, $this->namesOfMethodsIn($interface)); } if (count(array_unique($methods)) < count($methods)) { - throw new \PHPUnit\Framework\MockObject\RuntimeException('Interfaces must not declare the same method'); + throw new \PHPUnit\Framework\MockObject\Generator\RuntimeException('Interfaces must not declare the same method'); } $unqualifiedNames = []; foreach ($interfaces as $interface) { @@ -54155,7 +57806,7 @@ final class Generator $template = $this->loadTemplate('intersection.tpl'); $template->setVar(['intersection' => $intersectionName, 'interfaces' => implode(', ', $interfaces)]); eval($template->render()); - return $this->getMock($intersectionName); + return $this->testDouble($intersectionName, $mockObject); } /** * Returns a mock object for the specified abstract class with all abstract @@ -54163,12 +57814,6 @@ final class Generator * * Concrete methods to mock can be specified with the $mockedMethods parameter. * - * @psalm-template RealInstanceType of object - * - * @psalm-param class-string $originalClassName - * - * @psalm-return MockObject&RealInstanceType - * * @throws ClassAlreadyExistsException * @throws ClassIsEnumerationException * @throws ClassIsFinalException @@ -54181,17 +57826,13 @@ final class Generator * @throws RuntimeException * @throws UnknownClassException * @throws UnknownTypeException + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5241 */ - public function getMockForAbstractClass(string $originalClassName, array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = \true, bool $callOriginalClone = \true, bool $callAutoload = \true, array $mockedMethods = null, bool $cloneArguments = \true) : \PHPUnit\Framework\MockObject\MockObject + public function mockObjectForAbstractClass(string $originalClassName, array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = \true, bool $callOriginalClone = \true, bool $callAutoload = \true, array $mockedMethods = null, bool $cloneArguments = \true) : MockObject { if (class_exists($originalClassName, $callAutoload) || interface_exists($originalClassName, $callAutoload)) { - try { - $reflector = new ReflectionClass($originalClassName); - // @codeCoverageIgnoreStart - } catch (\ReflectionException $e) { - throw new \PHPUnit\Framework\MockObject\ReflectionException($e->getMessage(), $e->getCode(), $e); - } - // @codeCoverageIgnoreEnd + $reflector = $this->reflectClass($originalClassName); $methods = $mockedMethods; foreach ($reflector->getMethods() as $method) { if ($method->isAbstract() && !in_array($method->getName(), $methods ?? [], \true)) { @@ -54201,9 +57842,12 @@ final class Generator if (empty($methods)) { $methods = null; } - return $this->getMock($originalClassName, $methods, $arguments, $mockClassName, $callOriginalConstructor, $callOriginalClone, $callAutoload, $cloneArguments); + $mockObject = $this->testDouble($originalClassName, \true, $methods, $arguments, $mockClassName, $callOriginalConstructor, $callOriginalClone, $callAutoload, $cloneArguments); + assert($mockObject instanceof $originalClassName); + assert($mockObject instanceof MockObject); + return $mockObject; } - throw new \PHPUnit\Framework\MockObject\UnknownClassException($originalClassName); + throw new \PHPUnit\Framework\MockObject\Generator\UnknownClassException($originalClassName); } /** * Returns a mock object for the specified trait with all abstract methods @@ -54225,18 +57869,20 @@ final class Generator * @throws UnknownClassException * @throws UnknownTraitException * @throws UnknownTypeException + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5243 */ - public function getMockForTrait(string $traitName, array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = \true, bool $callOriginalClone = \true, bool $callAutoload = \true, array $mockedMethods = null, bool $cloneArguments = \true) : \PHPUnit\Framework\MockObject\MockObject + public function mockObjectForTrait(string $traitName, array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = \true, bool $callOriginalClone = \true, bool $callAutoload = \true, array $mockedMethods = null, bool $cloneArguments = \true) : MockObject { if (!trait_exists($traitName, $callAutoload)) { - throw new \PHPUnit\Framework\MockObject\UnknownTraitException($traitName); + throw new \PHPUnit\Framework\MockObject\Generator\UnknownTraitException($traitName); } $className = $this->generateClassName($traitName, '', 'Trait_'); $classTemplate = $this->loadTemplate('trait_class.tpl'); $classTemplate->setVar(['prologue' => 'abstract ', 'class_name' => $className['className'], 'trait_name' => $traitName]); - $mockTrait = new \PHPUnit\Framework\MockObject\MockTrait($classTemplate->render(), $className['className']); + $mockTrait = new \PHPUnit\Framework\MockObject\Generator\MockTrait($classTemplate->render(), $className['className']); $mockTrait->generate(); - return $this->getMockForAbstractClass($className['className'], $arguments, $mockClassName, $callOriginalConstructor, $callOriginalClone, $callAutoload, $mockedMethods, $cloneArguments); + return $this->mockObjectForAbstractClass($className['className'], $arguments, $mockClassName, $callOriginalConstructor, $callOriginalClone, $callAutoload, $mockedMethods, $cloneArguments); } /** * Returns an object for the specified trait. @@ -54246,16 +57892,18 @@ final class Generator * @throws ReflectionException * @throws RuntimeException * @throws UnknownTraitException + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5244 */ - public function getObjectForTrait(string $traitName, string $traitClassName = '', bool $callAutoload = \true, bool $callOriginalConstructor = \false, array $arguments = []) : object + public function objectForTrait(string $traitName, string $traitClassName = '', bool $callAutoload = \true, bool $callOriginalConstructor = \false, array $arguments = []) : object { if (!trait_exists($traitName, $callAutoload)) { - throw new \PHPUnit\Framework\MockObject\UnknownTraitException($traitName); + throw new \PHPUnit\Framework\MockObject\Generator\UnknownTraitException($traitName); } $className = $this->generateClassName($traitName, $traitClassName, 'Trait_'); $classTemplate = $this->loadTemplate('trait_class.tpl'); $classTemplate->setVar(['prologue' => '', 'class_name' => $className['className'], 'trait_name' => $traitName]); - return $this->getObject(new \PHPUnit\Framework\MockObject\MockTrait($classTemplate->render(), $className['className']), '', $callOriginalConstructor, $arguments); + return $this->getObject(new \PHPUnit\Framework\MockObject\Generator\MockTrait($classTemplate->render(), $className['className']), '', $callOriginalConstructor, $arguments); } /** * @throws ClassIsEnumerationException @@ -54263,26 +57911,32 @@ final class Generator * @throws ClassIsReadonlyException * @throws ReflectionException * @throws RuntimeException + * + * @todo This method is only public because it is used to test generated code in PHPT tests + * + * @see https://github.com/sebastianbergmann/phpunit/issues/5476 */ - public function generate(string $type, array $methods = null, string $mockClassName = '', bool $callOriginalClone = \true, bool $callAutoload = \true, bool $cloneArguments = \true, bool $callOriginalMethods = \false) : \PHPUnit\Framework\MockObject\MockClass + public function generate(string $type, bool $mockObject, array $methods = null, string $mockClassName = '', bool $callOriginalClone = \true, bool $callAutoload = \true, bool $cloneArguments = \true, bool $callOriginalMethods = \false) : \PHPUnit\Framework\MockObject\Generator\MockClass { if ($mockClassName !== '') { - return $this->generateMock($type, $methods, $mockClassName, $callOriginalClone, $callAutoload, $cloneArguments, $callOriginalMethods); + return $this->generateCodeForTestDoubleClass($type, $mockObject, $methods, $mockClassName, $callOriginalClone, $callAutoload, $cloneArguments, $callOriginalMethods); } - $key = md5($type . serialize($methods) . serialize($callOriginalClone) . serialize($cloneArguments) . serialize($callOriginalMethods)); + $key = md5($type . ($mockObject ? 'MockObject' : 'TestStub') . serialize($methods) . serialize($callOriginalClone) . serialize($cloneArguments) . serialize($callOriginalMethods)); if (!isset(self::$cache[$key])) { - self::$cache[$key] = $this->generateMock($type, $methods, $mockClassName, $callOriginalClone, $callAutoload, $cloneArguments, $callOriginalMethods); + self::$cache[$key] = $this->generateCodeForTestDoubleClass($type, $mockObject, $methods, $mockClassName, $callOriginalClone, $callAutoload, $cloneArguments, $callOriginalMethods); } return self::$cache[$key]; } /** * @throws RuntimeException * @throws SoapExtensionNotAvailableException + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5242 */ public function generateClassFromWsdl(string $wsdlFile, string $className, array $methods = [], array $options = []) : string { if (!extension_loaded('soap')) { - throw new \PHPUnit\Framework\MockObject\SoapExtensionNotAvailableException(); + throw new \PHPUnit\Framework\MockObject\Generator\SoapExtensionNotAvailableException(); } $options['cache_wsdl'] = WSDL_CACHE_NONE; try { @@ -54290,7 +57944,7 @@ final class Generator $_methods = array_unique($client->__getFunctions()); unset($client); } catch (SoapFault $e) { - throw new \PHPUnit\Framework\MockObject\RuntimeException($e->getMessage(), $e->getCode(), $e); + throw new \PHPUnit\Framework\MockObject\Generator\RuntimeException($e->getMessage(), $e->getCode(), $e); } sort($_methods); $methodTemplate = $this->loadTemplate('wsdl_method.tpl'); @@ -54329,28 +57983,6 @@ final class Generator $classTemplate->setVar(['namespace' => $namespace, 'class_name' => $className, 'wsdl' => $wsdlFile, 'options' => $optionsBuffer, 'methods' => $methodsBuffer]); return $classTemplate->render(); } - /** - * @throws ReflectionException - * - * @psalm-return list - */ - public function getClassMethods(string $className) : array - { - try { - $class = new ReflectionClass($className); - // @codeCoverageIgnoreStart - } catch (\ReflectionException $e) { - throw new \PHPUnit\Framework\MockObject\ReflectionException($e->getMessage(), $e->getCode(), $e); - } - // @codeCoverageIgnoreEnd - $methods = []; - foreach ($class->getMethods() as $method) { - if ($method->isPublic() || $method->isAbstract()) { - $methods[] = $method->getName(); - } - } - return $methods; - } /** * @throws ReflectionException * @@ -54358,41 +57990,15 @@ final class Generator */ public function mockClassMethods(string $className, bool $callOriginalMethods, bool $cloneArguments) : array { - try { - $class = new ReflectionClass($className); - // @codeCoverageIgnoreStart - } catch (\ReflectionException $e) { - throw new \PHPUnit\Framework\MockObject\ReflectionException($e->getMessage(), $e->getCode(), $e); - } - // @codeCoverageIgnoreEnd + $class = $this->reflectClass($className); $methods = []; foreach ($class->getMethods() as $method) { if (($method->isPublic() || $method->isAbstract()) && $this->canMethodBeDoubled($method)) { - $methods[] = \PHPUnit\Framework\MockObject\MockMethod::fromReflection($method, $callOriginalMethods, $cloneArguments); + $methods[] = \PHPUnit\Framework\MockObject\Generator\MockMethod::fromReflection($method, $callOriginalMethods, $cloneArguments); } } return $methods; } - /** - * @throws ReflectionException - * - * @psalm-return list - */ - public function mockInterfaceMethods(string $interfaceName, bool $cloneArguments) : array - { - try { - $class = new ReflectionClass($interfaceName); - // @codeCoverageIgnoreStart - } catch (\ReflectionException $e) { - throw new \PHPUnit\Framework\MockObject\ReflectionException($e->getMessage(), $e->getCode(), $e); - } - // @codeCoverageIgnoreEnd - $methods = []; - foreach ($class->getMethods() as $method) { - $methods[] = \PHPUnit\Framework\MockObject\MockMethod::fromReflection($method, \false, $cloneArguments); - } - return $methods; - } /** * @psalm-param class-string $interfaceName * @@ -54402,13 +58008,7 @@ final class Generator */ private function userDefinedInterfaceMethods(string $interfaceName) : array { - try { - // @codeCoverageIgnoreStart - $interface = new ReflectionClass($interfaceName); - } catch (\ReflectionException $e) { - throw new \PHPUnit\Framework\MockObject\ReflectionException($e->getMessage(), $e->getCode(), $e); - } - // @codeCoverageIgnoreEnd + $interface = $this->reflectClass($interfaceName); $methods = []; foreach ($interface->getMethods() as $method) { if (!$method->isUserDefined()) { @@ -54422,14 +58022,14 @@ final class Generator * @throws ReflectionException * @throws RuntimeException */ - private function getObject(\PHPUnit\Framework\MockObject\MockType $mockClass, string $type = '', bool $callOriginalConstructor = \false, array $arguments = [], bool $callOriginalMethods = \false, object $proxyTarget = null, bool $returnValueGeneration = \true) : object + private function getObject(\PHPUnit\Framework\MockObject\Generator\MockType $mockClass, string $type = '', bool $callOriginalConstructor = \false, array $arguments = [], bool $callOriginalMethods = \false, object $proxyTarget = null, bool $returnValueGeneration = \true) : object { $className = $mockClass->generate(); $object = $this->instantiate($className, $callOriginalConstructor, $arguments); if ($callOriginalMethods) { $this->instantiateProxyTarget($proxyTarget, $object, $type, $arguments); } - if ($object instanceof \PHPUnit\Framework\MockObject\MockObject) { + if ($object instanceof StubInternal) { $object->__phpunit_setReturnValueGeneration($returnValueGeneration); } return $object; @@ -54441,17 +58041,18 @@ final class Generator * @throws ReflectionException * @throws RuntimeException */ - private function generateMock(string $type, ?array $explicitMethods, string $mockClassName, bool $callOriginalClone, bool $callAutoload, bool $cloneArguments, bool $callOriginalMethods) : \PHPUnit\Framework\MockObject\MockClass + private function generateCodeForTestDoubleClass(string $type, bool $mockObject, ?array $explicitMethods, string $mockClassName, bool $callOriginalClone, bool $callAutoload, bool $cloneArguments, bool $callOriginalMethods) : \PHPUnit\Framework\MockObject\Generator\MockClass { - $classTemplate = $this->loadTemplate('mocked_class.tpl'); + $classTemplate = $this->loadTemplate('test_double_class.tpl'); $additionalInterfaces = []; - $mockedCloneMethod = \false; - $unmockedCloneMethod = \false; + $doubledCloneMethod = \false; + $proxiedCloneMethod = \false; $isClass = \false; $isInterface = \false; $class = null; - $mockMethods = new \PHPUnit\Framework\MockObject\MockMethodSet(); - $_mockClassName = $this->generateClassName($type, $mockClassName, 'Mock_'); + $mockMethods = new \PHPUnit\Framework\MockObject\Generator\MockMethodSet(); + $testDoubleClassPrefix = $mockObject ? 'MockObject_' : 'TestStub_'; + $_mockClassName = $this->generateClassName($type, $mockClassName, $testDoubleClassPrefix); if (class_exists($_mockClassName['fullClassName'], $callAutoload)) { $isClass = \true; } elseif (interface_exists($_mockClassName['fullClassName'], $callAutoload)) { @@ -54463,36 +58064,24 @@ final class Generator $prologue = 'namespace ' . $_mockClassName['namespaceName'] . " {\n\n" . $prologue . "}\n\n" . "namespace {\n\n"; $epilogue = "\n\n}"; } - $mockedCloneMethod = \true; + $doubledCloneMethod = \true; } else { - try { - $class = new ReflectionClass($_mockClassName['fullClassName']); - // @codeCoverageIgnoreStart - } catch (\ReflectionException $e) { - throw new \PHPUnit\Framework\MockObject\ReflectionException($e->getMessage(), $e->getCode(), $e); - } - // @codeCoverageIgnoreEnd + $class = $this->reflectClass($_mockClassName['fullClassName']); if ($class->isEnum()) { - throw new \PHPUnit\Framework\MockObject\ClassIsEnumerationException($_mockClassName['fullClassName']); + throw new \PHPUnit\Framework\MockObject\Generator\ClassIsEnumerationException($_mockClassName['fullClassName']); } if ($class->isFinal()) { - throw new \PHPUnit\Framework\MockObject\ClassIsFinalException($_mockClassName['fullClassName']); + throw new \PHPUnit\Framework\MockObject\Generator\ClassIsFinalException($_mockClassName['fullClassName']); } if (method_exists($class, 'isReadOnly') && $class->isReadOnly()) { - throw new \PHPUnit\Framework\MockObject\ClassIsReadonlyException($_mockClassName['fullClassName']); + throw new \PHPUnit\Framework\MockObject\Generator\ClassIsReadonlyException($_mockClassName['fullClassName']); } // @see https://github.com/sebastianbergmann/phpunit/issues/2995 if ($isInterface && $class->implementsInterface(Throwable::class)) { $actualClassName = Exception::class; $additionalInterfaces[] = $class->getName(); $isInterface = \false; - try { - $class = new ReflectionClass($actualClassName); - // @codeCoverageIgnoreStart - } catch (\ReflectionException $e) { - throw new \PHPUnit\Framework\MockObject\ReflectionException($e->getMessage(), $e->getCode(), $e); - } - // @codeCoverageIgnoreEnd + $class = $this->reflectClass($actualClassName); foreach ($this->userDefinedInterfaceMethods($_mockClassName['fullClassName']) as $method) { $methodName = $method->getName(); if ($class->hasMethod($methodName)) { @@ -54501,9 +58090,9 @@ final class Generator continue; } } - $mockMethods->addMethods(\PHPUnit\Framework\MockObject\MockMethod::fromReflection($method, $callOriginalMethods, $cloneArguments)); + $mockMethods->addMethods(\PHPUnit\Framework\MockObject\Generator\MockMethod::fromReflection($method, $callOriginalMethods, $cloneArguments)); } - $_mockClassName = $this->generateClassName($actualClassName, $_mockClassName['className'], 'Mock_'); + $_mockClassName = $this->generateClassName($actualClassName, $_mockClassName['className'], $testDoubleClassPrefix); } // @see https://github.com/sebastianbergmann/phpunit-mock-objects/issues/103 if ($isInterface && $class->implementsInterface(Traversable::class) && !$class->implementsInterface(Iterator::class) && !$class->implementsInterface(IteratorAggregate::class)) { @@ -54514,30 +58103,30 @@ final class Generator $cloneMethod = $class->getMethod('__clone'); if (!$cloneMethod->isFinal()) { if ($callOriginalClone && !$isInterface) { - $unmockedCloneMethod = \true; + $proxiedCloneMethod = \true; } else { - $mockedCloneMethod = \true; + $doubledCloneMethod = \true; } } } else { - $mockedCloneMethod = \true; + $doubledCloneMethod = \true; } } if ($isClass && $explicitMethods === []) { $mockMethods->addMethods(...$this->mockClassMethods($_mockClassName['fullClassName'], $callOriginalMethods, $cloneArguments)); } if ($isInterface && ($explicitMethods === [] || $explicitMethods === null)) { - $mockMethods->addMethods(...$this->mockInterfaceMethods($_mockClassName['fullClassName'], $cloneArguments)); + $mockMethods->addMethods(...$this->interfaceMethods($_mockClassName['fullClassName'], $cloneArguments)); } if (is_array($explicitMethods)) { foreach ($explicitMethods as $methodName) { if ($class !== null && $class->hasMethod($methodName)) { $method = $class->getMethod($methodName); if ($this->canMethodBeDoubled($method)) { - $mockMethods->addMethods(\PHPUnit\Framework\MockObject\MockMethod::fromReflection($method, $callOriginalMethods, $cloneArguments)); + $mockMethods->addMethods(\PHPUnit\Framework\MockObject\Generator\MockMethod::fromReflection($method, $callOriginalMethods, $cloneArguments)); } } else { - $mockMethods->addMethods(\PHPUnit\Framework\MockObject\MockMethod::fromName($_mockClassName['fullClassName'], $methodName, $cloneArguments)); + $mockMethods->addMethods(\PHPUnit\Framework\MockObject\Generator\MockMethod::fromName($_mockClassName['fullClassName'], $methodName, $cloneArguments)); } } } @@ -54545,21 +58134,29 @@ final class Generator $configurable = []; foreach ($mockMethods->asArray() as $mockMethod) { $mockedMethods .= $mockMethod->generateCode(); - $configurable[] = new \PHPUnit\Framework\MockObject\ConfigurableMethod($mockMethod->methodName(), $mockMethod->returnType()); + $configurable[] = new ConfigurableMethod($mockMethod->methodName(), $mockMethod->defaultParameterValues(), $mockMethod->numberOfParameters(), $mockMethod->returnType()); + } + /** @psalm-var trait-string[] $traits */ + $traits = [StubApi::class]; + if ($mockObject) { + $traits[] = MockObjectApi::class; } - $method = ''; if (!$mockMethods->hasMethod('method') && (!isset($class) || !$class->hasMethod('method'))) { - $method = PHP_EOL . ' use \\PHPUnit\\Framework\\MockObject\\Method;'; + $traits[] = Method::class; + } + if ($doubledCloneMethod) { + $traits[] = DoubledCloneMethod::class; } - $cloneTrait = ''; - if ($mockedCloneMethod) { - $cloneTrait = PHP_EOL . ' use \\PHPUnit\\Framework\\MockObject\\MockedCloneMethod;'; + if ($proxiedCloneMethod) { + $traits[] = ProxiedCloneMethod::class; } - if ($unmockedCloneMethod) { - $cloneTrait = PHP_EOL . ' use \\PHPUnit\\Framework\\MockObject\\UnmockedCloneMethod;'; + $useStatements = ''; + foreach ($traits as $trait) { + $useStatements .= sprintf(' use %s;' . PHP_EOL, $trait); } - $classTemplate->setVar(['prologue' => $prologue ?? '', 'epilogue' => $epilogue ?? '', 'class_declaration' => $this->generateMockClassDeclaration($_mockClassName, $isInterface, $additionalInterfaces), 'clone' => $cloneTrait, 'mock_class_name' => $_mockClassName['className'], 'mocked_methods' => $mockedMethods, 'method' => $method]); - return new \PHPUnit\Framework\MockObject\MockClass($classTemplate->render(), $_mockClassName['className'], $configurable); + unset($traits); + $classTemplate->setVar(['prologue' => $prologue ?? '', 'epilogue' => $epilogue ?? '', 'class_declaration' => $this->generateTestDoubleClassDeclaration($mockObject, $_mockClassName, $isInterface, $additionalInterfaces), 'use_statements' => $useStatements, 'mock_class_name' => $_mockClassName['className'], 'mocked_methods' => $mockedMethods]); + return new \PHPUnit\Framework\MockObject\Generator\MockClass($classTemplate->render(), $_mockClassName['className'], $configurable); } private function generateClassName(string $type, string $className, string $prefix) : array { @@ -54582,10 +58179,14 @@ final class Generator } return ['className' => $className, 'originalClassName' => $type, 'fullClassName' => $fullClassName, 'namespaceName' => $namespaceName]; } - private function generateMockClassDeclaration(array $mockClassName, bool $isInterface, array $additionalInterfaces = []) : string + private function generateTestDoubleClassDeclaration(bool $mockObject, array $mockClassName, bool $isInterface, array $additionalInterfaces = []) : string { + if ($mockObject) { + $additionalInterfaces[] = MockObjectInternal::class; + } else { + $additionalInterfaces[] = StubInternal::class; + } $buffer = 'class '; - $additionalInterfaces[] = \PHPUnit\Framework\MockObject\MockObject::class; $interfaces = implode(', ', $additionalInterfaces); if ($isInterface) { $buffer .= sprintf('%s implements %s', $mockClassName['className'], $interfaces); @@ -54627,7 +58228,7 @@ final class Generator private function ensureKnownType(string $type, bool $callAutoload) : void { if (!class_exists($type, $callAutoload) && !interface_exists($type, $callAutoload)) { - throw new \PHPUnit\Framework\MockObject\UnknownTypeException($type); + throw new \PHPUnit\Framework\MockObject\Generator\UnknownTypeException($type); } } /** @@ -54636,16 +58237,17 @@ final class Generator */ private function ensureValidMethods(?array $methods) : void { - if (null !== $methods) { - foreach ($methods as $method) { - if (!preg_match('~[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*~', (string) $method)) { - throw new \PHPUnit\Framework\MockObject\InvalidMethodNameException((string) $method); - } - } - if ($methods !== array_unique($methods)) { - throw new \PHPUnit\Framework\MockObject\DuplicateMethodException($methods); + if ($methods === null) { + return; + } + foreach ($methods as $method) { + if (!preg_match('~[a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*~', (string) $method)) { + throw new \PHPUnit\Framework\MockObject\Generator\InvalidMethodNameException((string) $method); } } + if ($methods !== array_unique($methods)) { + throw new \PHPUnit\Framework\MockObject\Generator\DuplicateMethodException($methods); + } } /** * @throws ClassAlreadyExistsException @@ -54654,15 +58256,9 @@ final class Generator private function ensureMockedClassDoesNotAlreadyExist(string $mockClassName) : void { if ($mockClassName !== '' && class_exists($mockClassName, \false)) { - try { - $reflector = new ReflectionClass($mockClassName); - // @codeCoverageIgnoreStart - } catch (\ReflectionException $e) { - throw new \PHPUnit\Framework\MockObject\ReflectionException($e->getMessage(), $e->getCode(), $e); - } - // @codeCoverageIgnoreEnd - if (!$reflector->implementsInterface(\PHPUnit\Framework\MockObject\MockObject::class)) { - throw new \PHPUnit\Framework\MockObject\ClassAlreadyExistsException($mockClassName); + $reflector = $this->reflectClass($mockClassName); + if (!$reflector->implementsInterface(MockObject::class)) { + throw new \PHPUnit\Framework\MockObject\Generator\ClassAlreadyExistsException($mockClassName); } } } @@ -54681,7 +58277,7 @@ final class Generator return (new ReflectionClass($className))->newInstanceArgs($arguments); // @codeCoverageIgnoreStart } catch (\ReflectionException $e) { - throw new \PHPUnit\Framework\MockObject\ReflectionException($e->getMessage(), $e->getCode(), $e); + throw new \PHPUnit\Framework\MockObject\Generator\ReflectionException($e->getMessage(), $e->getCode(), $e); } // @codeCoverageIgnoreEnd } @@ -54689,9 +58285,9 @@ final class Generator return (new ReflectionClass($className))->newInstanceWithoutConstructor(); // @codeCoverageIgnoreStart } catch (\ReflectionException $e) { - throw new \PHPUnit\Framework\MockObject\ReflectionException($e->getMessage(), $e->getCode(), $e); + throw new \PHPUnit\Framework\MockObject\Generator\ReflectionException($e->getMessage(), $e->getCode(), $e); + // @codeCoverageIgnoreEnd } - // @codeCoverageIgnoreEnd } /** * @psalm-param class-string $type @@ -54710,137 +58306,64 @@ final class Generator $proxyTarget = $class->newInstanceArgs($arguments); // @codeCoverageIgnoreStart } catch (\ReflectionException $e) { - throw new \PHPUnit\Framework\MockObject\ReflectionException($e->getMessage(), $e->getCode(), $e); + throw new \PHPUnit\Framework\MockObject\Generator\ReflectionException($e->getMessage(), $e->getCode(), $e); } // @codeCoverageIgnoreEnd } } $object->__phpunit_setOriginalObject($proxyTarget); } -} - - @trigger_error({deprecation}, E_USER_DEPRECATED); -declare(strict_types=1); - -interface {intersection} extends {interfaces} -{ -} -declare(strict_types=1); - -{prologue}{class_declaration} -{ - use \PHPUnit\Framework\MockObject\Api;{method}{clone} -{mocked_methods}}{epilogue} - - {modifier} function {reference}{method_name}({arguments_decl}){return_declaration} - {{deprecation} - $__phpunit_arguments = [{arguments_call}]; - $__phpunit_count = func_num_args(); - - if ($__phpunit_count > {arguments_count}) { - $__phpunit_arguments_tmp = func_get_args(); - - for ($__phpunit_i = {arguments_count}; $__phpunit_i < $__phpunit_count; $__phpunit_i++) { - $__phpunit_arguments[] = $__phpunit_arguments_tmp[$__phpunit_i]; - } - } - - $__phpunit_result = $this->__phpunit_getInvocationHandler()->invoke( - new \PHPUnit\Framework\MockObject\Invocation( - '{class_name}', '{method_name}', $__phpunit_arguments, '{return_type}', $this, {clone_arguments} - ) - ); - - return $__phpunit_result; - } - - {modifier} function {reference}{method_name}({arguments_decl}){return_declaration} - {{deprecation} - $__phpunit_arguments = [{arguments_call}]; - $__phpunit_count = func_num_args(); - - if ($__phpunit_count > {arguments_count}) { - $__phpunit_arguments_tmp = func_get_args(); - - for ($__phpunit_i = {arguments_count}; $__phpunit_i < $__phpunit_count; $__phpunit_i++) { - $__phpunit_arguments[] = $__phpunit_arguments_tmp[$__phpunit_i]; - } - } - - $this->__phpunit_getInvocationHandler()->invoke( - new \PHPUnit\Framework\MockObject\Invocation( - '{class_name}', '{method_name}', $__phpunit_arguments, '{return_type}', $this, {clone_arguments} - ) - ); - } - - {modifier} function {reference}{method_name}({arguments_decl}){return_declaration} + /** + * @psalm-param class-string $className + * + * @throws ReflectionException + */ + private function reflectClass(string $className) : ReflectionClass { - throw new \PHPUnit\Framework\MockObject\BadMethodCallException('Static method "{method_name}" cannot be invoked on mock object'); + try { + $class = new ReflectionClass($className); + // @codeCoverageIgnoreStart + } catch (\ReflectionException $e) { + throw new \PHPUnit\Framework\MockObject\Generator\ReflectionException($e->getMessage(), $e->getCode(), $e); + } + // @codeCoverageIgnoreEnd + return $class; } - - {modifier} function {reference}{method_name}({arguments_decl}){return_declaration} + /** + * @psalm-param class-string $classOrInterfaceName + * + * @psalm-return list + * + * @throws ReflectionException + */ + private function namesOfMethodsIn(string $classOrInterfaceName) : array { - $__phpunit_arguments = [{arguments_call}]; - $__phpunit_count = func_num_args(); - - if ($__phpunit_count > {arguments_count}) { - $__phpunit_arguments_tmp = func_get_args(); - - for ($__phpunit_i = {arguments_count}; $__phpunit_i < $__phpunit_count; $__phpunit_i++) { - $__phpunit_arguments[] = $__phpunit_arguments_tmp[$__phpunit_i]; + $class = $this->reflectClass($classOrInterfaceName); + $methods = []; + foreach ($class->getMethods() as $method) { + if ($method->isPublic() || $method->isAbstract()) { + $methods[] = $method->getName(); } } - - $this->__phpunit_getInvocationHandler()->invoke( - new \PHPUnit\Framework\MockObject\Invocation( - '{class_name}', '{method_name}', $__phpunit_arguments, '{return_type}', $this, {clone_arguments}, true - ) - ); - - return call_user_func_array(array($this->__phpunit_originalObject, "{method_name}"), $__phpunit_arguments); + return $methods; } - - {modifier} function {reference}{method_name}({arguments_decl}){return_declaration} + /** + * @psalm-param class-string $interfaceName + * + * @psalm-return list + * + * @throws ReflectionException + */ + private function interfaceMethods(string $interfaceName, bool $cloneArguments) : array { - $__phpunit_arguments = [{arguments_call}]; - $__phpunit_count = func_num_args(); - - if ($__phpunit_count > {arguments_count}) { - $__phpunit_arguments_tmp = func_get_args(); - - for ($__phpunit_i = {arguments_count}; $__phpunit_i < $__phpunit_count; $__phpunit_i++) { - $__phpunit_arguments[] = $__phpunit_arguments_tmp[$__phpunit_i]; - } + $class = $this->reflectClass($interfaceName); + $methods = []; + foreach ($class->getMethods() as $method) { + $methods[] = \PHPUnit\Framework\MockObject\Generator\MockMethod::fromReflection($method, \false, $cloneArguments); } - - $this->__phpunit_getInvocationHandler()->invoke( - new \PHPUnit\Framework\MockObject\Invocation( - '{class_name}', '{method_name}', $__phpunit_arguments, '{return_type}', $this, {clone_arguments}, true - ) - ); - - call_user_func_array(array($this->__phpunit_originalObject, "{method_name}"), $__phpunit_arguments); + return $methods; } -declare(strict_types=1); - -{prologue}class {class_name} -{ - use {trait_name}; } -declare(strict_types=1); - -{namespace}class {class_name} extends \SoapClient -{ - public function __construct($wsdl, array $options) - { - parent::__construct('{wsdl}', $options); - } -{methods}} - - public function {method_name}({arguments}) - { - } className = $className; - $this->methodName = $methodName; - $this->parameters = $parameters; - $this->object = $object; - $this->proxiedCall = $proxiedCall; - if (strtolower($methodName) === '__tostring') { - $returnType = 'string'; - } - if (str_starts_with($returnType, '?')) { - $returnType = substr($returnType, 1); - $this->isReturnTypeNullable = \true; - } - $this->returnType = $returnType; - if (!$cloneObjects) { - return; - } - foreach ($this->parameters as $key => $value) { - if (is_object($value)) { - $this->parameters[$key] = Cloner::clone($value); - } - } - } - public function className() : string - { - return $this->className; - } - public function methodName() : string - { - return $this->methodName; - } - public function parameters() : array - { - return $this->parameters; - } + private readonly string $classCode; /** - * @throws Exception + * @psalm-var class-string */ - public function generateReturnValue() : mixed - { - if ($this->isReturnTypeNullable || $this->proxiedCall) { - return null; - } - $intersection = \false; - $union = \false; - $unionContainsIntersections = \false; - if (str_contains($this->returnType, '|')) { - $types = explode('|', $this->returnType); - $union = \true; - if (str_contains($this->returnType, '(')) { - $unionContainsIntersections = \true; - } - } elseif (str_contains($this->returnType, '&')) { - $types = explode('&', $this->returnType); - $intersection = \true; - } else { - $types = [$this->returnType]; - } - $types = array_map('strtolower', $types); - if (!$intersection && !$unionContainsIntersections) { - if (in_array('', $types, \true) || in_array('null', $types, \true) || in_array('mixed', $types, \true) || in_array('void', $types, \true)) { - return null; - } - if (in_array('true', $types, \true)) { - return \true; - } - if (in_array('false', $types, \true) || in_array('bool', $types, \true)) { - return \false; - } - if (in_array('float', $types, \true)) { - return 0.0; - } - if (in_array('int', $types, \true)) { - return 0; - } - if (in_array('string', $types, \true)) { - return ''; - } - if (in_array('array', $types, \true)) { - return []; - } - if (in_array('static', $types, \true)) { - try { - return (new ReflectionClass($this->object::class))->newInstanceWithoutConstructor(); - // @codeCoverageIgnoreStart - } catch (\ReflectionException $e) { - throw new \PHPUnit\Framework\MockObject\ReflectionException($e->getMessage(), $e->getCode(), $e); - } - // @codeCoverageIgnoreEnd - } - if (in_array('object', $types, \true)) { - return new stdClass(); - } - if (in_array('callable', $types, \true) || in_array('closure', $types, \true)) { - return static function () : void { - }; - } - if (in_array('traversable', $types, \true) || in_array('generator', $types, \true) || in_array('iterable', $types, \true)) { - $generator = static function () : \Generator { - yield from []; - }; - return $generator(); - } - if (!$union) { - try { - return (new \PHPUnit\Framework\MockObject\Generator())->getMock($this->returnType, [], [], '', \false); - } catch (Throwable $t) { - if ($t instanceof \PHPUnit\Framework\MockObject\Exception) { - throw $t; - } - throw new \PHPUnit\Framework\MockObject\RuntimeException($t->getMessage(), (int) $t->getCode(), $t); - } - } - } - if ($intersection && $this->onlyInterfaces($types)) { - try { - return (new \PHPUnit\Framework\MockObject\Generator())->getMockForInterfaces($types); - } catch (Throwable $t) { - throw new \PHPUnit\Framework\MockObject\RuntimeException(sprintf('Return value for %s::%s() cannot be generated: %s', $this->className, $this->methodName, $t->getMessage()), (int) $t->getCode()); - } - } - $reason = ''; - if ($union) { - $reason = ' because the declared return type is a union'; - } elseif ($intersection) { - $reason = ' because the declared return type is an intersection'; - } - throw new \PHPUnit\Framework\MockObject\RuntimeException(sprintf('Return value for %s::%s() cannot be generated%s, please configure a return value for this method', $this->className, $this->methodName, $reason)); - } - public function toString() : string - { - $exporter = new Exporter(); - return sprintf('%s::%s(%s)%s', $this->className, $this->methodName, implode(', ', array_map([$exporter, 'shortenedExport'], $this->parameters)), $this->returnType ? sprintf(': %s', $this->returnType) : ''); - } - public function object() : object + private readonly string $mockName; + /** + * @psalm-var list + */ + private readonly array $configurableMethods; + /** + * @psalm-param class-string $mockName + * @psalm-param list $configurableMethods + */ + public function __construct(string $classCode, string $mockName, array $configurableMethods) { - return $this->object; + $this->classCode = $classCode; + $this->mockName = $mockName; + $this->configurableMethods = $configurableMethods; } /** - * @psalm-param non-empty-list $types + * @psalm-return class-string */ - private function onlyInterfaces(array $types) : bool + public function generate() : string { - foreach ($types as $type) { - if (!interface_exists($type)) { - return \false; - } + if (!class_exists($this->mockName, \false)) { + eval($this->classCode); + call_user_func([$this->mockName, '__phpunit_initConfigurableMethods'], ...$this->configurableMethods); } - return \true; + return $this->mockName; + } + public function classCode() : string + { + return $this->classCode; } } + * @psalm-var class-string */ - private array $matchers = []; + private readonly string $className; /** - * @psalm-var array + * @psalm-var non-empty-string */ - private array $matcherMap = []; + private readonly string $methodName; + private readonly bool $cloneArguments; + private readonly string $modifier; + private readonly string $argumentsForDeclaration; + private readonly string $argumentsForCall; + private readonly Type $returnType; + private readonly string $reference; + private readonly bool $callOriginalMethod; + private readonly bool $static; + private readonly ?string $deprecation; /** - * @psalm-var list + * @psalm-var array */ - private readonly array $configurableMethods; - private readonly bool $returnValueGeneration; - private ?\PHPUnit\Framework\MockObject\ReturnValueNotConfiguredException $deferredError = null; + private readonly array $defaultParameterValues; /** - * @psalm-param list $configurableMethods + * @psalm-var non-negative-int */ - public function __construct(array $configurableMethods, bool $returnValueGeneration) - { - $this->configurableMethods = $configurableMethods; - $this->returnValueGeneration = $returnValueGeneration; - } - public function hasMatchers() : bool + private readonly int $numberOfParameters; + /** + * @throws ReflectionException + * @throws RuntimeException + */ + public static function fromReflection(ReflectionMethod $method, bool $callOriginalMethod, bool $cloneArguments) : self { - foreach ($this->matchers as $matcher) { - if ($matcher->hasMatchers()) { - return \true; - } + if ($method->isPrivate()) { + $modifier = 'private'; + } elseif ($method->isProtected()) { + $modifier = 'protected'; + } else { + $modifier = 'public'; } - return \false; + if ($method->isStatic()) { + $modifier .= ' static'; + } + if ($method->returnsReference()) { + $reference = '&'; + } else { + $reference = ''; + } + $docComment = $method->getDocComment(); + if (is_string($docComment) && preg_match('#\\*[ \\t]*+@deprecated[ \\t]*+(.*?)\\r?+\\n[ \\t]*+\\*(?:[ \\t]*+@|/$)#s', $docComment, $deprecation)) { + $deprecation = trim(preg_replace('#[ \\t]*\\r?\\n[ \\t]*+\\*[ \\t]*+#', ' ', $deprecation[1])); + } else { + $deprecation = null; + } + return new self($method->getDeclaringClass()->getName(), $method->getName(), $cloneArguments, $modifier, self::methodParametersForDeclaration($method), self::methodParametersForCall($method), self::methodParametersDefaultValues($method), count($method->getParameters()), (new ReflectionMapper())->fromReturnType($method), $reference, $callOriginalMethod, $method->isStatic(), $deprecation); } /** - * Looks up the match builder with identification $id and returns it. + * @param class-string $className + * @param non-empty-string $methodName */ - public function lookupMatcher(string $id) : ?\PHPUnit\Framework\MockObject\Matcher + public static function fromName(string $className, string $methodName, bool $cloneArguments) : self { - return $this->matcherMap[$id] ?? null; + return new self($className, $methodName, $cloneArguments, 'public', '', '', [], 0, new UnknownType(), '', \false, \false, null); } /** - * Registers a matcher with the identification $id. The matcher can later be - * looked up using lookupMatcher() to figure out if it has been invoked. - * - * @throws MatcherAlreadyRegisteredException + * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName + * @psalm-param array $defaultParameterValues + * @psalm-param non-negative-int $numberOfParameters */ - public function registerMatcher(string $id, \PHPUnit\Framework\MockObject\Matcher $matcher) : void + private function __construct(string $className, string $methodName, bool $cloneArguments, string $modifier, string $argumentsForDeclaration, string $argumentsForCall, array $defaultParameterValues, int $numberOfParameters, Type $returnType, string $reference, bool $callOriginalMethod, bool $static, ?string $deprecation) { - if (isset($this->matcherMap[$id])) { - throw new \PHPUnit\Framework\MockObject\MatcherAlreadyRegisteredException($id); - } - $this->matcherMap[$id] = $matcher; + $this->className = $className; + $this->methodName = $methodName; + $this->cloneArguments = $cloneArguments; + $this->modifier = $modifier; + $this->argumentsForDeclaration = $argumentsForDeclaration; + $this->argumentsForCall = $argumentsForCall; + $this->defaultParameterValues = $defaultParameterValues; + $this->numberOfParameters = $numberOfParameters; + $this->returnType = $returnType; + $this->reference = $reference; + $this->callOriginalMethod = $callOriginalMethod; + $this->static = $static; + $this->deprecation = $deprecation; } - public function expects(InvocationOrder $rule) : InvocationMocker + /** + * @psalm-return non-empty-string + */ + public function methodName() : string { - $matcher = new \PHPUnit\Framework\MockObject\Matcher($rule); - $this->addMatcher($matcher); - return new InvocationMocker($this, $matcher, ...$this->configurableMethods); + return $this->methodName; } /** - * @throws \PHPUnit\Framework\MockObject\Exception - * @throws Exception + * @throws RuntimeException */ - public function invoke(\PHPUnit\Framework\MockObject\Invocation $invocation) : mixed + public function generateCode() : string { - $exception = null; - $hasReturnValue = \false; - $returnValue = null; - foreach ($this->matchers as $match) { - try { - if ($match->matches($invocation)) { - $value = $match->invoked($invocation); - if (!$hasReturnValue) { - $returnValue = $value; - $hasReturnValue = \true; - } - } - } catch (Exception $e) { - $exception = $e; - } + if ($this->static) { + $templateFile = 'doubled_static_method.tpl'; + } else { + $templateFile = sprintf('%s_method.tpl', $this->callOriginalMethod ? 'proxied' : 'doubled'); } - if ($exception !== null) { - throw $exception; + $deprecation = $this->deprecation; + $returnResult = ''; + if (!$this->returnType->isNever() && !$this->returnType->isVoid()) { + $returnResult = <<<'EOT' + + + return $__phpunit_result; +EOT; } - if ($hasReturnValue) { - return $returnValue; + if (null !== $this->deprecation) { + $deprecation = "The {$this->className}::{$this->methodName} method is deprecated ({$this->deprecation})."; + $deprecationTemplate = $this->loadTemplate('deprecation.tpl'); + $deprecationTemplate->setVar(['deprecation' => var_export($deprecation, \true)]); + $deprecation = $deprecationTemplate->render(); } - if (!$this->returnValueGeneration) { - $exception = new \PHPUnit\Framework\MockObject\ReturnValueNotConfiguredException($invocation); - if (strtolower($invocation->methodName()) === '__tostring') { - $this->deferredError = $exception; - return ''; + $template = $this->loadTemplate($templateFile); + $template->setVar(['arguments_decl' => $this->argumentsForDeclaration, 'arguments_call' => $this->argumentsForCall, 'return_declaration' => !empty($this->returnType->asString()) ? ': ' . $this->returnType->asString() : '', 'return_type' => $this->returnType->asString(), 'arguments_count' => !empty($this->argumentsForCall) ? substr_count($this->argumentsForCall, ',') + 1 : 0, 'class_name' => $this->className, 'method_name' => $this->methodName, 'modifier' => $this->modifier, 'reference' => $this->reference, 'clone_arguments' => $this->cloneArguments ? 'true' : 'false', 'deprecation' => $deprecation, 'return_result' => $returnResult]); + return $template->render(); + } + public function returnType() : Type + { + return $this->returnType; + } + /** + * @psalm-return array + */ + public function defaultParameterValues() : array + { + return $this->defaultParameterValues; + } + /** + * @psalm-return non-negative-int + */ + public function numberOfParameters() : int + { + return $this->numberOfParameters; + } + /** + * Returns the parameters of a function or method. + * + * @throws RuntimeException + */ + private static function methodParametersForDeclaration(ReflectionMethod $method) : string + { + $parameters = []; + $types = (new ReflectionMapper())->fromParameterTypes($method); + foreach ($method->getParameters() as $i => $parameter) { + $name = '$' . $parameter->getName(); + /* Note: PHP extensions may use empty names for reference arguments + * or "..." for methods taking a variable number of arguments. + */ + if ($name === '$' || $name === '$...') { + $name = '$arg' . $i; } - throw $exception; + $default = ''; + $reference = ''; + $typeDeclaration = ''; + if (!$types[$i]->type()->isUnknown()) { + $typeDeclaration = $types[$i]->type()->asString() . ' '; + } + if ($parameter->isPassedByReference()) { + $reference = '&'; + } + if ($parameter->isVariadic()) { + $name = '...' . $name; + } elseif ($parameter->isDefaultValueAvailable()) { + $default = ' = ' . self::exportDefaultValue($parameter); + } elseif ($parameter->isOptional()) { + $default = ' = null'; + } + $parameters[] = $typeDeclaration . $reference . $name . $default; } - return $invocation->generateReturnValue(); + return implode(', ', $parameters); } - public function matches(\PHPUnit\Framework\MockObject\Invocation $invocation) : bool + /** + * Returns the parameters of a function or method. + * + * @throws ReflectionException + */ + private static function methodParametersForCall(ReflectionMethod $method) : string { - foreach ($this->matchers as $matcher) { - if (!$matcher->matches($invocation)) { - return \false; + $parameters = []; + foreach ($method->getParameters() as $i => $parameter) { + $name = '$' . $parameter->getName(); + /* Note: PHP extensions may use empty names for reference arguments + * or "..." for methods taking a variable number of arguments. + */ + if ($name === '$' || $name === '$...') { + $name = '$arg' . $i; + } + if ($parameter->isVariadic()) { + continue; + } + if ($parameter->isPassedByReference()) { + $parameters[] = '&' . $name; + } else { + $parameters[] = $name; } } - return \true; + return implode(', ', $parameters); } /** - * @throws Throwable + * @throws ReflectionException */ - public function verify() : void + private static function exportDefaultValue(ReflectionParameter $parameter) : string { - foreach ($this->matchers as $matcher) { - $matcher->verify(); - } - if ($this->deferredError) { - throw $this->deferredError; + try { + $defaultValue = $parameter->getDefaultValue(); + if (!is_object($defaultValue)) { + return var_export($defaultValue, \true); + } + $parameterAsString = $parameter->__toString(); + return explode(' = ', substr(substr($parameterAsString, strpos($parameterAsString, ' ') + strlen(' ')), 0, -2))[1]; + // @codeCoverageIgnoreStart + } catch (\ReflectionException $e) { + throw new \PHPUnit\Framework\MockObject\Generator\ReflectionException($e->getMessage(), $e->getCode(), $e); } + // @codeCoverageIgnoreEnd } - private function addMatcher(\PHPUnit\Framework\MockObject\Matcher $matcher) : void + /** + * @psalm-return array + */ + private static function methodParametersDefaultValues(ReflectionMethod $method) : array { - $this->matchers[] = $matcher; + $result = []; + foreach ($method->getParameters() as $i => $parameter) { + if (!$parameter->isDefaultValueAvailable()) { + continue; + } + $result[$i] = $parameter->getDefaultValue(); + } + return $result; } } invocationRule = $rule; - } - public function hasMatchers() : bool - { - return !$this->invocationRule instanceof AnyInvokedCount; - } - public function hasMethodNameRule() : bool - { - return $this->methodNameRule !== null; - } - public function methodNameRule() : MethodName - { - return $this->methodNameRule; - } - public function setMethodNameRule(MethodName $rule) : void - { - $this->methodNameRule = $rule; - } - public function hasParametersRule() : bool - { - return $this->parametersRule !== null; - } - public function setParametersRule(ParametersRule $rule) : void + /** + * @psalm-var array + */ + private array $methods = []; + public function addMethods(\PHPUnit\Framework\MockObject\Generator\MockMethod ...$methods) : void { - $this->parametersRule = $rule; + foreach ($methods as $method) { + $this->methods[strtolower($method->methodName())] = $method; + } } - public function setStub(Stub $stub) : void + /** + * @psalm-return list + */ + public function asArray() : array { - $this->stub = $stub; + return array_values($this->methods); } - public function setAfterMatchBuilderId(string $id) : void + public function hasMethod(string $methodName) : bool { - $this->afterMatchBuilderId = $id; + return array_key_exists(strtolower($methodName), $this->methods); } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework\MockObject\Generator; + +use function class_exists; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5243 + */ +final class MockTrait implements \PHPUnit\Framework\MockObject\Generator\MockType +{ + private readonly string $classCode; /** - * @throws Exception - * @throws ExpectationFailedException - * @throws MatchBuilderNotFoundException - * @throws MethodNameNotConfiguredException - * @throws RuntimeException + * @psalm-var class-string */ - public function invoked(\PHPUnit\Framework\MockObject\Invocation $invocation) : mixed - { - if ($this->methodNameRule === null) { - throw new \PHPUnit\Framework\MockObject\MethodNameNotConfiguredException(); - } - if ($this->afterMatchBuilderId !== null) { - $matcher = $invocation->object()->__phpunit_getInvocationHandler()->lookupMatcher($this->afterMatchBuilderId); - if (!$matcher) { - throw new \PHPUnit\Framework\MockObject\MatchBuilderNotFoundException($this->afterMatchBuilderId); - } - } - $this->invocationRule->invoked($invocation); - try { - $this->parametersRule?->apply($invocation); - } catch (ExpectationFailedException $e) { - throw new ExpectationFailedException(sprintf("Expectation failed for %s when %s\n%s", $this->methodNameRule->toString(), $this->invocationRule->toString(), $e->getMessage()), $e->getComparisonFailure()); - } - if ($this->stub) { - return $this->stub->invoke($invocation); - } - return $invocation->generateReturnValue(); - } + private readonly string $mockName; /** - * @throws ExpectationFailedException - * @throws MatchBuilderNotFoundException - * @throws MethodNameNotConfiguredException - * @throws RuntimeException + * @psalm-param class-string $mockName */ - public function matches(\PHPUnit\Framework\MockObject\Invocation $invocation) : bool + public function __construct(string $classCode, string $mockName) { - if ($this->afterMatchBuilderId !== null) { - $matcher = $invocation->object()->__phpunit_getInvocationHandler()->lookupMatcher($this->afterMatchBuilderId); - if (!$matcher) { - throw new \PHPUnit\Framework\MockObject\MatchBuilderNotFoundException($this->afterMatchBuilderId); - } - assert($matcher instanceof self); - if (!$matcher->invocationRule->hasBeenInvoked()) { - return \false; - } - } - if ($this->methodNameRule === null) { - throw new \PHPUnit\Framework\MockObject\MethodNameNotConfiguredException(); - } - if (!$this->invocationRule->matches($invocation)) { - return \false; - } - try { - if (!$this->methodNameRule->matches($invocation)) { - return \false; - } - } catch (ExpectationFailedException $e) { - throw new ExpectationFailedException(sprintf("Expectation failed for %s when %s\n%s", $this->methodNameRule->toString(), $this->invocationRule->toString(), $e->getMessage()), $e->getComparisonFailure()); - } - return \true; + $this->classCode = $classCode; + $this->mockName = $mockName; } /** - * @throws ExpectationFailedException - * @throws MethodNameNotConfiguredException + * @psalm-return class-string */ - public function verify() : void - { - if ($this->methodNameRule === null) { - throw new \PHPUnit\Framework\MockObject\MethodNameNotConfiguredException(); - } - try { - $this->invocationRule->verify(); - if ($this->parametersRule === null) { - $this->parametersRule = new AnyParameters(); - } - $invocationIsAny = $this->invocationRule instanceof AnyInvokedCount; - $invocationIsNever = $this->invocationRule instanceof InvokedCount && $this->invocationRule->isNever(); - $invocationIsAtMost = $this->invocationRule instanceof InvokedAtMostCount; - if (!$invocationIsAny && !$invocationIsNever && !$invocationIsAtMost) { - $this->parametersRule->verify(); - } - } catch (ExpectationFailedException $e) { - throw new ExpectationFailedException(sprintf("Expectation failed for %s when %s.\n%s", $this->methodNameRule->toString(), $this->invocationRule->toString(), ThrowableToStringMapper::map($e))); - } - } - public function toString() : string + public function generate() : string { - $list = [$this->invocationRule->toString()]; - if ($this->methodNameRule !== null) { - $list[] = 'where ' . $this->methodNameRule->toString(); - } - if ($this->parametersRule !== null) { - $list[] = 'and ' . $this->parametersRule->toString(); - } - if ($this->afterMatchBuilderId !== null) { - $list[] = 'after ' . $this->afterMatchBuilderId; - } - if ($this->stub !== null) { - $list[] = 'will ' . $this->stub->toString(); + if (!class_exists($this->mockName, \false)) { + eval($this->classCode); } - return implode(' ', $list); + return $this->mockName; } } + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework\MockObject\Generator; + +use PHPUnit\SebastianBergmann\Template\Template; +/** + * @internal This trait is not covered by the backward compatibility promise for PHPUnit + */ +trait TemplateLoader +{ + /** + * @psalm-var array + */ + private static array $templates = []; + /** + * @psalm-suppress MissingThrowsDocblock + */ + private function loadTemplate(string $template) : Template { - $this->methodName = $methodName; + $filename = __DIR__ . '/templates/' . $template; + if (!isset(self::$templates[$filename])) { + self::$templates[$filename] = new Template($filename); + } + return self::$templates[$filename]; } - public function toString() : string +} + + @trigger_error({deprecation}, E_USER_DEPRECATED); + + {modifier} function {reference}{method_name}({arguments_decl}){return_declaration} + {{deprecation} + $__phpunit_definedVariables = get_defined_vars(); + $__phpunit_namedVariadicParameters = []; + + foreach ($__phpunit_definedVariables as $__phpunit_definedVariableName => $__phpunit_definedVariableValue) { + if ((new ReflectionParameter([__CLASS__, __FUNCTION__], $__phpunit_definedVariableName))->isVariadic()) { + foreach ($__phpunit_definedVariableValue as $__phpunit_key => $__phpunit_namedValue) { + if (is_string($__phpunit_key)) { + $__phpunit_namedVariadicParameters[$__phpunit_key] = $__phpunit_namedValue; + } + } + } + } + + $__phpunit_arguments = [{arguments_call}]; + $__phpunit_count = func_num_args(); + + if ($__phpunit_count > {arguments_count}) { + $__phpunit_arguments_tmp = func_get_args(); + + for ($__phpunit_i = {arguments_count}; $__phpunit_i < $__phpunit_count; $__phpunit_i++) { + $__phpunit_arguments[] = $__phpunit_arguments_tmp[$__phpunit_i]; + } + } + + $__phpunit_arguments = array_merge($__phpunit_arguments, $__phpunit_namedVariadicParameters); + + $__phpunit_result = $this->__phpunit_getInvocationHandler()->invoke( + new \PHPUnit\Framework\MockObject\Invocation( + '{class_name}', '{method_name}', $__phpunit_arguments, '{return_type}', $this, {clone_arguments} + ) + );{return_result} + } + + {modifier} function {reference}{method_name}({arguments_decl}){return_declaration} { - return sprintf('is "%s"', $this->methodName); + throw new \PHPUnit\Framework\MockObject\BadMethodCallException('Static method "{method_name}" cannot be invoked on mock object'); } - protected function matches(mixed $other) : bool +declare(strict_types=1); + +interface {intersection} extends {interfaces} +{ +} + + {modifier} function {reference}{method_name}({arguments_decl}){return_declaration} { - if (!is_string($other)) { - return \false; + $__phpunit_definedVariables = get_defined_vars(); + $__phpunit_namedVariadicParameters = []; + + foreach ($__phpunit_definedVariables as $__phpunit_definedVariableName => $__phpunit_definedVariableValue) { + if ((new ReflectionParameter([__CLASS__, __FUNCTION__], $__phpunit_definedVariableName))->isVariadic()) { + foreach ($__phpunit_definedVariableValue as $__phpunit_key => $__phpunit_namedValue) { + if (is_string($__phpunit_key)) { + $__phpunit_namedVariadicParameters[$__phpunit_key] = $__phpunit_namedValue; + } + } + } + } + + $__phpunit_arguments = [{arguments_call}]; + $__phpunit_count = func_num_args(); + + if ($__phpunit_count > {arguments_count}) { + $__phpunit_arguments_tmp = func_get_args(); + + for ($__phpunit_i = {arguments_count}; $__phpunit_i < $__phpunit_count; $__phpunit_i++) { + $__phpunit_arguments[] = $__phpunit_arguments_tmp[$__phpunit_i]; + } } - return strtolower($this->methodName) === strtolower($other); + + $__phpunit_arguments = array_merge($__phpunit_arguments, $__phpunit_namedVariadicParameters); + + $this->__phpunit_getInvocationHandler()->invoke( + new \PHPUnit\Framework\MockObject\Invocation( + '{class_name}', '{method_name}', $__phpunit_arguments, '{return_type}', $this, {clone_arguments}, true + ) + ); + + $__phpunit_result = call_user_func_array([$this->__phpunit_originalObject, "{method_name}"], $__phpunit_arguments);{return_result} } +declare(strict_types=1); + +{prologue}{class_declaration} +{ +{use_statements}{mocked_methods}}{epilogue} +declare(strict_types=1); + +{prologue}class {class_name} +{ + use {trait_name}; } +declare(strict_types=1); + +{namespace}class {class_name} extends \SoapClient +{ + public function __construct($wsdl, array $options) + { + parent::__construct('{wsdl}', $options); + } +{methods}} + + public function {method_name}({arguments}) + { + } + */ + private array $methods = []; private bool $emptyMethodsArray = \false; - private string $mockClassName = ''; + /** + * @psalm-var ?class-string + */ + private ?string $mockClassName = null; private array $constructorArgs = []; private bool $originalConstructor = \true; private bool $originalClone = \true; @@ -55431,25 +59007,25 @@ final class MockBuilder private ?object $proxyTarget = null; private bool $allowMockingUnknownTypes = \true; private bool $returnValueGeneration = \true; - private readonly \PHPUnit\Framework\MockObject\Generator $generator; + private readonly Generator $generator; /** - * @psalm-param class-string $type + * @psalm-param class-string|trait-string $type */ public function __construct(TestCase $testCase, string $type) { $this->testCase = $testCase; $this->type = $type; - $this->generator = new \PHPUnit\Framework\MockObject\Generator(); + $this->generator = new Generator(); } /** * Creates a mock object using a fluent interface. * - * @throws \PHPUnit\Framework\InvalidArgumentException * @throws ClassAlreadyExistsException * @throws ClassIsEnumerationException * @throws ClassIsFinalException * @throws ClassIsReadonlyException * @throws DuplicateMethodException + * @throws InvalidArgumentException * @throws InvalidMethodNameException * @throws OriginalConstructorInvocationRequiredException * @throws ReflectionException @@ -55458,12 +59034,12 @@ final class MockBuilder * * @psalm-return MockObject&MockedType */ - public function getMock(bool $register = \true) : \PHPUnit\Framework\MockObject\MockObject + public function getMock() : \PHPUnit\Framework\MockObject\MockObject { - $object = $this->generator->getMock($this->type, !$this->emptyMethodsArray ? $this->methods : null, $this->constructorArgs, $this->mockClassName, $this->originalConstructor, $this->originalClone, $this->autoload, $this->cloneArguments, $this->callOriginalMethods, $this->proxyTarget, $this->allowMockingUnknownTypes, $this->returnValueGeneration); - if ($register) { - $this->testCase->registerMockObject($object); - } + $object = $this->generator->testDouble($this->type, \true, !$this->emptyMethodsArray ? $this->methods : null, $this->constructorArgs, $this->mockClassName ?? '', $this->originalConstructor, $this->originalClone, $this->autoload, $this->cloneArguments, $this->callOriginalMethods, $this->proxyTarget, $this->allowMockingUnknownTypes, $this->returnValueGeneration); + assert($object instanceof $this->type); + assert($object instanceof \PHPUnit\Framework\MockObject\MockObject); + $this->testCase->registerMockObject($object); return $object; } /** @@ -55474,10 +59050,13 @@ final class MockBuilder * @throws \PHPUnit\Framework\Exception * @throws ReflectionException * @throws RuntimeException + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5305 */ public function getMockForAbstractClass() : \PHPUnit\Framework\MockObject\MockObject { - $object = $this->generator->getMockForAbstractClass($this->type, $this->constructorArgs, $this->mockClassName, $this->originalConstructor, $this->originalClone, $this->autoload, $this->methods, $this->cloneArguments); + $object = $this->generator->mockObjectForAbstractClass($this->type, $this->constructorArgs, $this->mockClassName ?? '', $this->originalConstructor, $this->originalClone, $this->autoload, $this->methods, $this->cloneArguments); + assert($object instanceof \PHPUnit\Framework\MockObject\MockObject); $this->testCase->registerMockObject($object); return $object; } @@ -55489,17 +59068,21 @@ final class MockBuilder * @throws \PHPUnit\Framework\Exception * @throws ReflectionException * @throws RuntimeException + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5306 */ public function getMockForTrait() : \PHPUnit\Framework\MockObject\MockObject { - $object = $this->generator->getMockForTrait($this->type, $this->constructorArgs, $this->mockClassName, $this->originalConstructor, $this->originalClone, $this->autoload, $this->methods, $this->cloneArguments); + assert(trait_exists($this->type)); + $object = $this->generator->mockObjectForTrait($this->type, $this->constructorArgs, $this->mockClassName ?? '', $this->originalConstructor, $this->originalClone, $this->autoload, $this->methods, $this->cloneArguments); + assert($object instanceof \PHPUnit\Framework\MockObject\MockObject); $this->testCase->registerMockObject($object); return $object; } /** * Specifies the subset of methods to mock, requiring each to exist in the class. * - * @psalm-param list $methods + * @psalm-param list $methods * * @throws CannotUseOnlyMethodsException * @throws ReflectionException @@ -55516,27 +59099,29 @@ final class MockBuilder $reflector = new ReflectionClass($this->type); // @codeCoverageIgnoreStart } catch (\ReflectionException $e) { - throw new \PHPUnit\Framework\MockObject\ReflectionException($e->getMessage(), $e->getCode(), $e); + throw new ReflectionException($e->getMessage(), $e->getCode(), $e); + // @codeCoverageIgnoreEnd } - // @codeCoverageIgnoreEnd foreach ($methods as $method) { if (!$reflector->hasMethod($method)) { throw new \PHPUnit\Framework\MockObject\CannotUseOnlyMethodsException($this->type, $method); } } - $this->methods = array_merge($this->methods ?? [], $methods); + $this->methods = array_merge($this->methods, $methods); return $this; } /** * Specifies methods that don't exist in the class which you want to mock. * - * @psalm-param list $methods + * @psalm-param list $methods * * @throws CannotUseAddMethodsException * @throws ReflectionException * @throws RuntimeException * * @return $this + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5320 */ public function addMethods(array $methods) : self { @@ -55548,15 +59133,15 @@ final class MockBuilder $reflector = new ReflectionClass($this->type); // @codeCoverageIgnoreStart } catch (\ReflectionException $e) { - throw new \PHPUnit\Framework\MockObject\ReflectionException($e->getMessage(), $e->getCode(), $e); + throw new ReflectionException($e->getMessage(), $e->getCode(), $e); + // @codeCoverageIgnoreEnd } - // @codeCoverageIgnoreEnd foreach ($methods as $method) { if ($reflector->hasMethod($method)) { throw new \PHPUnit\Framework\MockObject\CannotUseAddMethodsException($this->type, $method); } } - $this->methods = array_merge($this->methods ?? [], $methods); + $this->methods = array_merge($this->methods, $methods); return $this; } /** @@ -55572,6 +59157,8 @@ final class MockBuilder /** * Specifies the name for the mock class. * + * @psalm-param class-string $name + * * @return $this */ public function setMockClassName(string $name) : self @@ -55623,6 +59210,8 @@ final class MockBuilder * Disables the use of class autoloading while creating the mock object. * * @return $this + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5309 */ public function disableAutoload() : self { @@ -55633,6 +59222,8 @@ final class MockBuilder * Enables the use of class autoloading while creating the mock object. * * @return $this + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5309 */ public function enableAutoload() : self { @@ -55643,6 +59234,8 @@ final class MockBuilder * Disables the cloning of arguments passed to mocked methods. * * @return $this + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5315 */ public function disableArgumentCloning() : self { @@ -55653,6 +59246,8 @@ final class MockBuilder * Enables the cloning of arguments passed to mocked methods. * * @return $this + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5315 */ public function enableArgumentCloning() : self { @@ -55663,6 +59258,8 @@ final class MockBuilder * Enables the invocation of the original methods. * * @return $this + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5307 */ public function enableProxyingToOriginalMethods() : self { @@ -55673,6 +59270,8 @@ final class MockBuilder * Disables the invocation of the original methods. * * @return $this + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5307 */ public function disableProxyingToOriginalMethods() : self { @@ -55684,6 +59283,8 @@ final class MockBuilder * Sets the proxy target. * * @return $this + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5307 */ public function setProxyTarget(object $object) : self { @@ -55692,6 +59293,8 @@ final class MockBuilder } /** * @return $this + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5308 */ public function allowMockingUnknownTypes() : self { @@ -55700,6 +59303,8 @@ final class MockBuilder } /** * @return $this + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5308 */ public function disallowMockingUnknownTypes() : self { @@ -55736,46 +59341,14 @@ declare (strict_types=1); */ namespace PHPUnit\Framework\MockObject; -use function call_user_func; -use function class_exists; /** - * @internal This class is not covered by the backward compatibility promise for PHPUnit + * @internal This trait is not covered by the backward compatibility promise for PHPUnit */ -final class MockClass implements \PHPUnit\Framework\MockObject\MockType +trait DoubledCloneMethod { - private readonly string $classCode; - /** - * @psalm-var class-string - */ - private readonly string $mockName; - /** - * @psalm-var list - */ - private readonly array $configurableMethods; - /** - * @psalm-param class-string $mockName - * @psalm-param list $configurableMethods - */ - public function __construct(string $classCode, string $mockName, array $configurableMethods) + public function __clone() : void { - $this->classCode = $classCode; - $this->mockName = $mockName; - $this->configurableMethods = $configurableMethods; - } - /** - * @psalm-return class-string - */ - public function generate() : string - { - if (!class_exists($this->mockName, \false)) { - eval($this->classCode); - call_user_func([$this->mockName, '__phpunit_initConfigurableMethods'], ...$this->configurableMethods); - } - return $this->mockName; - } - public function classCode() : string - { - return $this->classCode; + $this->__phpunit_invocationMocker = clone $this->__phpunit_getInvocationHandler(); } } isPrivate()) { - $modifier = 'private'; - } elseif ($method->isProtected()) { - $modifier = 'protected'; - } else { - $modifier = 'public'; - } - if ($method->isStatic()) { - $modifier .= ' static'; - } - if ($method->returnsReference()) { - $reference = '&'; - } else { - $reference = ''; - } - $docComment = $method->getDocComment(); - if (is_string($docComment) && preg_match('#\\*[ \\t]*+@deprecated[ \\t]*+(.*?)\\r?+\\n[ \\t]*+\\*(?:[ \\t]*+@|/$)#s', $docComment, $deprecation)) { - $deprecation = trim(preg_replace('#[ \\t]*\\r?\\n[ \\t]*+\\*[ \\t]*+#', ' ', $deprecation[1])); - } else { - $deprecation = null; - } - return new self($method->getDeclaringClass()->getName(), $method->getName(), $cloneArguments, $modifier, self::methodParametersForDeclaration($method), self::methodParametersForCall($method), (new ReflectionMapper())->fromReturnType($method), $reference, $callOriginalMethod, $method->isStatic(), $deprecation); - } - public static function fromName(string $fullClassName, string $methodName, bool $cloneArguments) : self - { - return new self($fullClassName, $methodName, $cloneArguments, 'public', '', '', new UnknownType(), '', \false, \false, null); - } - public function __construct(string $className, string $methodName, bool $cloneArguments, string $modifier, string $argumentsForDeclaration, string $argumentsForCall, Type $returnType, string $reference, bool $callOriginalMethod, bool $static, ?string $deprecation) - { - $this->className = $className; - $this->methodName = $methodName; - $this->cloneArguments = $cloneArguments; - $this->modifier = $modifier; - $this->argumentsForDeclaration = $argumentsForDeclaration; - $this->argumentsForCall = $argumentsForCall; - $this->returnType = $returnType; - $this->reference = $reference; - $this->callOriginalMethod = $callOriginalMethod; - $this->static = $static; - $this->deprecation = $deprecation; - } - public function methodName() : string - { - return $this->methodName; - } - /** - * @throws RuntimeException - */ - public function generateCode() : string - { - if ($this->static) { - $templateFile = 'mocked_static_method.tpl'; - } elseif ($this->returnType->isNever() || $this->returnType->isVoid()) { - $templateFile = sprintf('%s_method_never_or_void.tpl', $this->callOriginalMethod ? 'proxied' : 'mocked'); - } else { - $templateFile = sprintf('%s_method.tpl', $this->callOriginalMethod ? 'proxied' : 'mocked'); - } - $deprecation = $this->deprecation; - if (null !== $this->deprecation) { - $deprecation = "The {$this->className}::{$this->methodName} method is deprecated ({$this->deprecation})."; - $deprecationTemplate = $this->loadTemplate('deprecation.tpl'); - $deprecationTemplate->setVar(['deprecation' => var_export($deprecation, \true)]); - $deprecation = $deprecationTemplate->render(); - } - $template = $this->loadTemplate($templateFile); - $template->setVar(['arguments_decl' => $this->argumentsForDeclaration, 'arguments_call' => $this->argumentsForCall, 'return_declaration' => !empty($this->returnType->asString()) ? ': ' . $this->returnType->asString() : '', 'return_type' => $this->returnType->asString(), 'arguments_count' => !empty($this->argumentsForCall) ? substr_count($this->argumentsForCall, ',') + 1 : 0, 'class_name' => $this->className, 'method_name' => $this->methodName, 'modifier' => $this->modifier, 'reference' => $this->reference, 'clone_arguments' => $this->cloneArguments ? 'true' : 'false', 'deprecation' => $deprecation]); - return $template->render(); - } - public function returnType() : Type - { - return $this->returnType; - } - /** - * Returns the parameters of a function or method. - * - * @throws RuntimeException - */ - private static function methodParametersForDeclaration(ReflectionMethod $method) : string - { - $parameters = []; - $types = (new ReflectionMapper())->fromParameterTypes($method); - foreach ($method->getParameters() as $i => $parameter) { - $name = '$' . $parameter->getName(); - /* Note: PHP extensions may use empty names for reference arguments - * or "..." for methods taking a variable number of arguments. - */ - if ($name === '$' || $name === '$...') { - $name = '$arg' . $i; - } - $default = ''; - $reference = ''; - $typeDeclaration = ''; - if (!$types[$i]->type()->isUnknown()) { - $typeDeclaration = $types[$i]->type()->asString() . ' '; - } - if ($parameter->isPassedByReference()) { - $reference = '&'; - } - if ($parameter->isVariadic()) { - $name = '...' . $name; - } elseif ($parameter->isDefaultValueAvailable()) { - $default = ' = ' . self::exportDefaultValue($parameter); - } elseif ($parameter->isOptional()) { - $default = ' = null'; - } - $parameters[] = $typeDeclaration . $reference . $name . $default; - } - return implode(', ', $parameters); - } - /** - * Returns the parameters of a function or method. - * - * @throws ReflectionException - */ - private static function methodParametersForCall(ReflectionMethod $method) : string - { - $parameters = []; - foreach ($method->getParameters() as $i => $parameter) { - $name = '$' . $parameter->getName(); - /* Note: PHP extensions may use empty names for reference arguments - * or "..." for methods taking a variable number of arguments. - */ - if ($name === '$' || $name === '$...') { - $name = '$arg' . $i; - } - if ($parameter->isVariadic()) { - continue; - } - if ($parameter->isPassedByReference()) { - $parameters[] = '&' . $name; - } else { - $parameters[] = $name; - } - } - return implode(', ', $parameters); - } - /** - * @throws ReflectionException - */ - private static function exportDefaultValue(ReflectionParameter $parameter) : string + public function method() : InvocationMocker { - try { - $defaultValue = $parameter->getDefaultValue(); - if (!is_object($defaultValue)) { - return var_export($defaultValue, \true); - } - $parameterAsString = $parameter->__toString(); - return explode(' = ', substr(substr($parameterAsString, strpos($parameterAsString, ' ') + strlen(' ')), 0, -2))[1]; - // @codeCoverageIgnoreStart - } catch (\ReflectionException $e) { - throw new \PHPUnit\Framework\MockObject\ReflectionException($e->getMessage(), $e->getCode(), $e); - } - // @codeCoverageIgnoreEnd + $expects = $this->expects(new AnyInvokedCount()); + return call_user_func_array([$expects, 'method'], func_get_args()); } } - */ - private array $methods = []; - public function addMethods(\PHPUnit\Framework\MockObject\MockMethod ...$methods) : void + private object $__phpunit_originalObject; + /** @noinspection MagicMethodsValidityInspection */ + public function __phpunit_hasMatchers() : bool { - foreach ($methods as $method) { - $this->methods[strtolower($method->methodName())] = $method; - } + return $this->__phpunit_getInvocationHandler()->hasMatchers(); } - /** - * @psalm-return list - */ - public function asArray() : array + /** @noinspection MagicMethodsValidityInspection */ + public function __phpunit_setOriginalObject(object $originalObject) : void { - return array_values($this->methods); + $this->__phpunit_originalObject = $originalObject; } - public function hasMethod(string $methodName) : bool + /** @noinspection MagicMethodsValidityInspection */ + public function __phpunit_verify(bool $unsetInvocationMocker = \true) : void { - return array_key_exists(strtolower($methodName), $this->methods); + $this->__phpunit_getInvocationHandler()->verify(); + if ($unsetInvocationMocker) { + $this->__phpunit_unsetInvocationMocker(); + } + } + public abstract function __phpunit_getInvocationHandler() : \PHPUnit\Framework\MockObject\InvocationHandler; + public abstract function __phpunit_unsetInvocationMocker() : void; + public function expects(InvocationOrder $matcher) : InvocationMockerBuilder + { + return $this->__phpunit_getInvocationHandler()->expects($matcher); } } __phpunit_invocationMocker = clone $this->__phpunit_getInvocationHandler(); + parent::__clone(); + } } */ - public function __construct(string $classCode, string $mockName) + private static array $__phpunit_configurableMethods; + private bool $__phpunit_returnValueGeneration = \true; + private ?\PHPUnit\Framework\MockObject\InvocationHandler $__phpunit_invocationMocker = null; + /** @noinspection MagicMethodsValidityInspection */ + public static function __phpunit_initConfigurableMethods(\PHPUnit\Framework\MockObject\ConfigurableMethod ...$configurableMethods) : void { - $this->classCode = $classCode; - $this->mockName = $mockName; + static::$__phpunit_configurableMethods = $configurableMethods; } - /** - * @psalm-return class-string - */ - public function generate() : string + /** @noinspection MagicMethodsValidityInspection */ + public function __phpunit_setReturnValueGeneration(bool $returnValueGeneration) : void { - if (!class_exists($this->mockName, \false)) { - eval($this->classCode); + $this->__phpunit_returnValueGeneration = $returnValueGeneration; + } + /** @noinspection MagicMethodsValidityInspection */ + public function __phpunit_getInvocationHandler() : \PHPUnit\Framework\MockObject\InvocationHandler + { + if ($this->__phpunit_invocationMocker === null) { + $this->__phpunit_invocationMocker = new \PHPUnit\Framework\MockObject\InvocationHandler(static::$__phpunit_configurableMethods, $this->__phpunit_returnValueGeneration); } - return $this->mockName; + return $this->__phpunit_invocationMocker; } - public function classCode() : string + /** @noinspection MagicMethodsValidityInspection */ + public function __phpunit_unsetInvocationMocker() : void { - return $this->classCode; + $this->__phpunit_invocationMocker = null; } } + */ + private readonly array $configurableMethods; + /** + * @psalm-var ?array + */ + private ?array $configurableMethodNames = null; + public function __construct(InvocationHandler $handler, Matcher $matcher, ConfigurableMethod ...$configurableMethods) { - return 'invoked zero or more times'; + $this->invocationHandler = $handler; + $this->matcher = $matcher; + $this->configurableMethods = $configurableMethods; } - public function verify() : void + /** + * @throws MatcherAlreadyRegisteredException + * + * @return $this + */ + public function id(string $id) : self { + $this->invocationHandler->registerMatcher($id, $this->matcher); + return $this; } - public function matches(BaseInvocation $invocation) : bool + /** + * @return $this + */ + public function will(Stub $stub) : \PHPUnit\Framework\MockObject\Builder\Identity { - return \true; + $this->matcher->setStub($stub); + return $this; } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\MockObject\Rule; - -use PHPUnit\Framework\MockObject\Invocation as BaseInvocation; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class AnyParameters implements \PHPUnit\Framework\MockObject\Rule\ParametersRule -{ - public function toString() : string + /** + * @throws IncompatibleReturnValueException + */ + public function willReturn(mixed $value, mixed ...$nextValues) : self { - return 'with any parameters'; + if (count($nextValues) === 0) { + $this->ensureTypeOfReturnValues([$value]); + $stub = $value instanceof Stub ? $value : new ReturnStub($value); + return $this->will($stub); + } + $values = array_merge([$value], $nextValues); + $this->ensureTypeOfReturnValues($values); + $stub = new ConsecutiveCalls($values); + return $this->will($stub); } - public function apply(BaseInvocation $invocation) : void + public function willReturnReference(mixed &$reference) : self { + $stub = new ReturnReference($reference); + return $this->will($stub); } - public function verify() : void + public function willReturnMap(array $valueMap) : self { + $method = $this->configuredMethod(); + assert($method instanceof ConfigurableMethod); + $numberOfParameters = $method->numberOfParameters(); + $defaultValues = $method->defaultParameterValues(); + $hasDefaultValues = !empty($defaultValues); + $_valueMap = []; + foreach ($valueMap as $mapping) { + $numberOfConfiguredParameters = count($mapping) - 1; + if ($numberOfConfiguredParameters === $numberOfParameters || !$hasDefaultValues) { + $_valueMap[] = $mapping; + continue; + } + $_mapping = []; + $returnValue = array_pop($mapping); + foreach (range(0, $numberOfParameters - 1) as $i) { + if (isset($mapping[$i])) { + $_mapping[] = $mapping[$i]; + continue; + } + if (isset($defaultValues[$i])) { + $_mapping[] = $defaultValues[$i]; + } + } + $_mapping[] = $returnValue; + $_valueMap[] = $_mapping; + } + $stub = new ReturnValueMap($_valueMap); + return $this->will($stub); } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\MockObject\Rule; - -use function count; -use PHPUnit\Framework\MockObject\Invocation as BaseInvocation; -use PHPUnit\Framework\MockObject\Verifiable; -use PHPUnit\Framework\SelfDescribing; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -abstract class InvocationOrder implements SelfDescribing, Verifiable -{ - /** - * @psalm-var list - */ - private array $invocations = []; - public function numberOfInvocations() : int + public function willReturnArgument(int $argumentIndex) : self { - return count($this->invocations); + $stub = new ReturnArgument($argumentIndex); + return $this->will($stub); } - public function hasBeenInvoked() : bool + public function willReturnCallback(callable $callback) : self { - return count($this->invocations) > 0; + $stub = new ReturnCallback($callback); + return $this->will($stub); } - public final function invoked(BaseInvocation $invocation) : void + public function willReturnSelf() : self { - $this->invocations[] = $invocation; - $this->invokedDo($invocation); + $stub = new ReturnSelf(); + return $this->will($stub); } - public abstract function matches(BaseInvocation $invocation) : bool; - protected function invokedDo(BaseInvocation $invocation) : void + public function willReturnOnConsecutiveCalls(mixed ...$values) : self { + $stub = new ConsecutiveCalls($values); + return $this->will($stub); } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\MockObject\Rule; - -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\MockObject\Invocation as BaseInvocation; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class InvokedAtLeastCount extends \PHPUnit\Framework\MockObject\Rule\InvocationOrder -{ - private readonly int $requiredInvocations; - public function __construct(int $requiredInvocations) + public function willThrowException(Throwable $exception) : self { - $this->requiredInvocations = $requiredInvocations; + $stub = new Exception($exception); + return $this->will($stub); } - public function toString() : string + /** + * @return $this + */ + public function after(string $id) : self { - return 'invoked at least ' . $this->requiredInvocations . ' times'; + $this->matcher->setAfterMatchBuilderId($id); + return $this; } /** - * Verifies that the current expectation is valid. If everything is OK the - * code should just return, if not it must throw an exception. + * @throws \PHPUnit\Framework\Exception + * @throws MethodNameNotConfiguredException + * @throws MethodParametersAlreadyConfiguredException * - * @throws ExpectationFailedException + * @return $this */ - public function verify() : void + public function with(mixed ...$arguments) : self { - $count = $this->numberOfInvocations(); - if ($count < $this->requiredInvocations) { - throw new ExpectationFailedException('Expected invocation at least ' . $this->requiredInvocations . ' times but it occurred ' . $count . ' time(s).'); + $this->ensureParametersCanBeConfigured(); + $this->matcher->setParametersRule(new Rule\Parameters($arguments)); + return $this; + } + /** + * @throws MethodNameNotConfiguredException + * @throws MethodParametersAlreadyConfiguredException + * + * @return $this + */ + public function withAnyParameters() : self + { + $this->ensureParametersCanBeConfigured(); + $this->matcher->setParametersRule(new Rule\AnyParameters()); + return $this; + } + /** + * @throws InvalidArgumentException + * @throws MethodCannotBeConfiguredException + * @throws MethodNameAlreadyConfiguredException + * + * @return $this + */ + public function method(Constraint|string $constraint) : self + { + if ($this->matcher->hasMethodNameRule()) { + throw new MethodNameAlreadyConfiguredException(); + } + if (is_string($constraint)) { + $this->configurableMethodNames ??= array_flip(array_map(static fn(ConfigurableMethod $configurable) => strtolower($configurable->name()), $this->configurableMethods)); + if (!array_key_exists(strtolower($constraint), $this->configurableMethodNames)) { + throw new MethodCannotBeConfiguredException($constraint); + } } + $this->matcher->setMethodNameRule(new Rule\MethodName($constraint)); + return $this; } - public function matches(BaseInvocation $invocation) : bool + /** + * @throws MethodNameNotConfiguredException + * @throws MethodParametersAlreadyConfiguredException + */ + private function ensureParametersCanBeConfigured() : void { - return \true; + if (!$this->matcher->hasMethodNameRule()) { + throw new MethodNameNotConfiguredException(); + } + if ($this->matcher->hasParametersRule()) { + throw new MethodParametersAlreadyConfiguredException(); + } + } + private function configuredMethod() : ?ConfigurableMethod + { + $configuredMethod = null; + foreach ($this->configurableMethods as $configurableMethod) { + if ($this->matcher->methodNameRule()->matchesName($configurableMethod->name())) { + if ($configuredMethod !== null) { + return null; + } + $configuredMethod = $configurableMethod; + } + } + return $configuredMethod; + } + /** + * @throws IncompatibleReturnValueException + */ + private function ensureTypeOfReturnValues(array $values) : void + { + $configuredMethod = $this->configuredMethod(); + if ($configuredMethod === null) { + return; + } + foreach ($values as $value) { + if (!$configuredMethod->mayReturn($value)) { + throw new IncompatibleReturnValueException($configuredMethod, $value); + } + } } } > $valueMap */ - public function verify() : void - { - $count = $this->numberOfInvocations(); - if ($count < 1) { - throw new ExpectationFailedException('Expected invocation at least once but it never occurred.'); - } - } - public function matches(BaseInvocation $invocation) : bool - { - return \true; - } + public function willReturnMap(array $valueMap) : self; + public function willReturnArgument(int $argumentIndex) : self; + public function willReturnCallback(callable $callback) : self; + public function willReturnSelf() : self; + public function willReturnOnConsecutiveCalls(mixed ...$values) : self; + public function willThrowException(Throwable $exception) : self; } allowedInvocations = $allowedInvocations; - } - public function toString() : string - { - return 'invoked at most ' . $this->allowedInvocations . ' times'; - } /** - * Verifies that the current expectation is valid. If everything is OK the - * code should just return, if not it must throw an exception. - * - * @throws ExpectationFailedException + * Adds a new method name match and returns the parameter match object for + * further matching possibilities. */ - public function verify() : void - { - $count = $this->numberOfInvocations(); - if ($count > $this->allowedInvocations) { - throw new ExpectationFailedException('Expected invocation at most ' . $this->allowedInvocations . ' times but it occurred ' . $count . ' time(s).'); - } - } - public function matches(BaseInvocation $invocation) : bool - { - return \true; - } + public function method(Constraint|string $constraint) : self; } expectedCount = $expectedCount; - } - public function isNever() : bool - { - return $this->expectedCount === 0; - } - public function toString() : string - { - return 'invoked ' . $this->expectedCount . ' time(s)'; - } - public function matches(BaseInvocation $invocation) : bool - { - return \true; - } /** - * Verifies that the current expectation is valid. If everything is OK the - * code should just return, if not it must throw an exception. + * Defines the expectation which must occur before the current is valid. + */ + public function after(string $id) : \PHPUnit\Framework\MockObject\Builder\Stub; + /** + * Sets the parameters to match for, each parameter to this function will + * be part of match. To perform specific matches or constraints create a + * new PHPUnit\Framework\Constraint\Constraint and use it for the parameter. + * If the parameter value is not a constraint it will use the + * PHPUnit\Framework\Constraint\IsEqual for the value. * - * @throws ExpectationFailedException + * Some examples: + * + * // match first parameter with value 2 + * $b->with(2); + * // match first parameter with value 'smock' and second identical to 42 + * $b->with('smock', new PHPUnit\Framework\Constraint\IsEqual(42)); + * */ - public function verify() : void - { - $count = $this->numberOfInvocations(); - if ($count !== $this->expectedCount) { - throw new ExpectationFailedException(sprintf('Method was expected to be called %d times, ' . 'actually called %d times.', $this->expectedCount, $count)); - } - } + public function with(mixed ...$arguments) : self; /** - * @throws ExpectationFailedException + * Sets a rule which allows any kind of parameters. + * + * Some examples: + * + * // match any number of parameters + * $b->withAnyParameters(); + * */ - protected function invokedDo(BaseInvocation $invocation) : void - { - $count = $this->numberOfInvocations(); - if ($count > $this->expectedCount) { - $message = $invocation->toString() . ' '; - $message .= match ($this->expectedCount) { - 0 => 'was not expected to be called.', - 1 => 'was not expected to be called more than once.', - default => sprintf('was not expected to be called more than %d times.', $this->expectedCount), - }; - throw new ExpectationFailedException($message); - } - } + public function withAnyParameters() : self; } constraint = $constraint; - } - public function toString() : string - { - return 'method name ' . $this->constraint->toString(); - } - /** - * @throws \PHPUnit\Framework\ExpectationFailedException - */ - public function matches(BaseInvocation $invocation) : bool - { - return $this->matchesName($invocation->methodName()); - } /** - * @throws \PHPUnit\Framework\ExpectationFailedException + * Stubs the matching method with the stub object $stub. Any invocations of + * the matched method will now be handled by the stub instead. */ - public function matchesName(string $methodName) : bool - { - return (bool) $this->constraint->evaluate($methodName, '', \true); - } + public function will(BaseStub $stub) : \PHPUnit\Framework\MockObject\Builder\Identity; } - */ - private array $parameters = []; - private ?BaseInvocation $invocation = null; - private null|bool|ExpectationFailedException $parameterVerificationResult; - /** - * @throws \PHPUnit\Framework\Exception - */ - public function __construct(array $parameters) - { - foreach ($parameters as $parameter) { - if (!$parameter instanceof Constraint) { - $parameter = new IsEqual($parameter); - } - $this->parameters[] = $parameter; - } - } - public function toString() : string - { - $text = 'with parameter'; - foreach ($this->parameters as $index => $parameter) { - if ($index > 0) { - $text .= ' and'; - } - $text .= ' ' . $index . ' ' . $parameter->toString(); - } - return $text; - } - /** - * @throws Exception - */ - public function apply(BaseInvocation $invocation) : void - { - $this->invocation = $invocation; - $this->parameterVerificationResult = null; - try { - $this->parameterVerificationResult = $this->doVerify(); - } catch (ExpectationFailedException $e) { - $this->parameterVerificationResult = $e; - throw $this->parameterVerificationResult; - } - } - /** - * Checks if the invocation $invocation matches the current rules. If it - * does the rule will get the invoked() method called which should check - * if an expectation is met. - * - * @throws ExpectationFailedException - */ - public function verify() : void - { - $this->doVerify(); - } - /** - * @throws ExpectationFailedException - */ - private function doVerify() : bool - { - if (isset($this->parameterVerificationResult)) { - return $this->guardAgainstDuplicateEvaluationOfParameterConstraints(); - } - if ($this->invocation === null) { - throw new ExpectationFailedException('Mocked method does not exist.'); - } - if (count($this->invocation->parameters()) < count($this->parameters)) { - $message = 'Parameter count for invocation %s is too low.'; - // The user called `->with($this->anything())`, but may have meant - // `->withAnyParameters()`. - // - // @see https://github.com/sebastianbergmann/phpunit-mock-objects/issues/199 - if (count($this->parameters) === 1 && $this->parameters[0]::class === IsAnything::class) { - $message .= "\nTo allow 0 or more parameters with any value, omit ->with() or use ->withAnyParameters() instead."; - } - throw new ExpectationFailedException(sprintf($message, $this->invocation->toString())); - } - foreach ($this->parameters as $i => $parameter) { - $parameter->evaluate($this->invocation->parameters()[$i], sprintf('Parameter %s for invocation %s does not match expected ' . 'value.', $i, $this->invocation->toString())); - } - return \true; - } - /** - * @throws ExpectationFailedException - */ - private function guardAgainstDuplicateEvaluationOfParameterConstraints() : bool - { - if ($this->parameterVerificationResult instanceof ExpectationFailedException) { - throw $this->parameterVerificationResult; - } - return (bool) $this->parameterVerificationResult; - } + public function expects(InvocationOrder $invocationRule) : InvocationMocker; } stack = $stack; - } - public function invoke(Invocation $invocation) : mixed - { - $this->value = array_shift($this->stack); - if ($this->value instanceof \PHPUnit\Framework\MockObject\Stub\Stub) { - $this->value = $this->value->invoke($invocation); - } - return $this->value; - } - public function toString() : string - { - $exporter = new Exporter(); - return sprintf('return user-specified value %s', $exporter->export($this->value)); - } + public static function __phpunit_initConfigurableMethods(\PHPUnit\Framework\MockObject\ConfigurableMethod ...$configurableMethods) : void; + public function __phpunit_getInvocationHandler() : \PHPUnit\Framework\MockObject\InvocationHandler; + public function __phpunit_setReturnValueGeneration(bool $returnValueGeneration) : void; + public function __phpunit_unsetInvocationMocker() : void; } exception = $exception; + $this->className = $className; + $this->methodName = $methodName; + $this->object = $object; + $this->proxiedCall = $proxiedCall; + if (strtolower($methodName) === '__tostring') { + $returnType = 'string'; + } + if (str_starts_with($returnType, '?')) { + $returnType = substr($returnType, 1); + $this->isReturnTypeNullable = \true; + } else { + $this->isReturnTypeNullable = \false; + } + $this->returnType = $returnType; + if (!$cloneObjects) { + $this->parameters = $parameters; + return; + } + foreach ($parameters as $key => $value) { + if (is_object($value)) { + $parameters[$key] = Cloner::clone($value); + } + } + $this->parameters = $parameters; } /** - * @throws Throwable + * @psalm-return class-string */ - public function invoke(Invocation $invocation) : never + public function className() : string { - throw $this->exception; + return $this->className; } - public function toString() : string + /** + * @psalm-return non-empty-string + */ + public function methodName() : string { - $exporter = new Exporter(); - return sprintf('raise user-specified exception %s', $exporter->export($this->exception)); + return $this->methodName; } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Framework\MockObject\Stub; - -use function sprintf; -use PHPUnit\Framework\MockObject\Invocation; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class ReturnArgument implements \PHPUnit\Framework\MockObject\Stub\Stub -{ - private readonly int $argumentIndex; - public function __construct(int $argumentIndex) + public function parameters() : array { - $this->argumentIndex = $argumentIndex; + return $this->parameters; } - public function invoke(Invocation $invocation) : mixed + /** + * @throws Exception + */ + public function generateReturnValue() : mixed { - return $invocation->parameters()[$this->argumentIndex] ?? null; + if ($this->returnType === 'never') { + throw new \PHPUnit\Framework\MockObject\NeverReturningMethodException($this->className, $this->methodName); + } + if ($this->isReturnTypeNullable || $this->proxiedCall) { + return null; + } + return (new \PHPUnit\Framework\MockObject\ReturnValueGenerator())->generate($this->className, $this->methodName, $this->object::class, $this->returnType); } public function toString() : string { - return sprintf('return argument #%d', $this->argumentIndex); + $exporter = new Exporter(); + return sprintf('%s::%s(%s)%s', $this->className, $this->methodName, implode(', ', array_map([$exporter, 'shortenedExport'], $this->parameters)), $this->returnType ? sprintf(': %s', $this->returnType) : ''); + } + public function object() : \PHPUnit\Framework\MockObject\MockObjectInternal|\PHPUnit\Framework\MockObject\StubInternal + { + return $this->object; } } */ - private $callback; - public function __construct(callable $callback) + private array $matchers = []; + /** + * @psalm-var array + */ + private array $matcherMap = []; + /** + * @psalm-var list + */ + private readonly array $configurableMethods; + private readonly bool $returnValueGeneration; + /** + * @psalm-param list $configurableMethods + */ + public function __construct(array $configurableMethods, bool $returnValueGeneration) { - $this->callback = $callback; + $this->configurableMethods = $configurableMethods; + $this->returnValueGeneration = $returnValueGeneration; } - public function invoke(Invocation $invocation) : mixed + public function hasMatchers() : bool { - return call_user_func_array($this->callback, $invocation->parameters()); + foreach ($this->matchers as $matcher) { + if ($matcher->hasMatchers()) { + return \true; + } + } + return \false; } - public function toString() : string + /** + * Looks up the match builder with identification $id and returns it. + */ + public function lookupMatcher(string $id) : ?\PHPUnit\Framework\MockObject\Matcher { - if (is_array($this->callback)) { - if (is_object($this->callback[0])) { - $class = $this->callback[0]::class; - $type = '->'; - } else { - $class = $this->callback[0]; - $type = '::'; + return $this->matcherMap[$id] ?? null; + } + /** + * Registers a matcher with the identification $id. The matcher can later be + * looked up using lookupMatcher() to figure out if it has been invoked. + * + * @throws MatcherAlreadyRegisteredException + */ + public function registerMatcher(string $id, \PHPUnit\Framework\MockObject\Matcher $matcher) : void + { + if (isset($this->matcherMap[$id])) { + throw new \PHPUnit\Framework\MockObject\MatcherAlreadyRegisteredException($id); + } + $this->matcherMap[$id] = $matcher; + } + public function expects(InvocationOrder $rule) : InvocationMocker + { + $matcher = new \PHPUnit\Framework\MockObject\Matcher($rule); + $this->addMatcher($matcher); + return new InvocationMocker($this, $matcher, ...$this->configurableMethods); + } + /** + * @throws \PHPUnit\Framework\MockObject\Exception + * @throws Exception + */ + public function invoke(\PHPUnit\Framework\MockObject\Invocation $invocation) : mixed + { + $exception = null; + $hasReturnValue = \false; + $returnValue = null; + foreach ($this->matchers as $match) { + try { + if ($match->matches($invocation)) { + $value = $match->invoked($invocation); + if (!$hasReturnValue) { + $returnValue = $value; + $hasReturnValue = \true; + } + } + } catch (Exception $e) { + $exception = $e; + } + } + if ($exception !== null) { + throw $exception; + } + if ($hasReturnValue) { + return $returnValue; + } + if (!$this->returnValueGeneration) { + if (strtolower($invocation->methodName()) === '__tostring') { + return ''; } - return sprintf('return result of user defined callback %s%s%s() with the ' . 'passed arguments', $class, $type, $this->callback[1]); + throw new \PHPUnit\Framework\MockObject\ReturnValueNotConfiguredException($invocation); + } + return $invocation->generateReturnValue(); + } + /** + * @throws Throwable + */ + public function verify() : void + { + foreach ($this->matchers as $matcher) { + $matcher->verify(); } - return 'return result of user defined callback ' . $this->callback . ' with the passed arguments'; + } + private function addMatcher(\PHPUnit\Framework\MockObject\Matcher $matcher) : void + { + $this->matchers[] = $matcher; } } reference =& $reference; + $this->invocationRule = $rule; } - public function invoke(Invocation $invocation) : mixed + public function hasMatchers() : bool { - return $this->reference; + return !$this->invocationRule instanceof AnyInvokedCount; } - public function toString() : string + public function hasMethodNameRule() : bool { - $exporter = new Exporter(); - return sprintf('return user-specified reference %s', $exporter->export($this->reference)); + return $this->methodNameRule !== null; + } + public function methodNameRule() : MethodName + { + return $this->methodNameRule; + } + public function setMethodNameRule(MethodName $rule) : void + { + $this->methodNameRule = $rule; + } + public function hasParametersRule() : bool + { + return $this->parametersRule !== null; + } + public function setParametersRule(ParametersRule $rule) : void + { + $this->parametersRule = $rule; + } + public function setStub(Stub $stub) : void + { + $this->stub = $stub; + } + public function setAfterMatchBuilderId(string $id) : void + { + $this->afterMatchBuilderId = $id; + } + /** + * @throws Exception + * @throws ExpectationFailedException + * @throws MatchBuilderNotFoundException + * @throws MethodNameNotConfiguredException + * @throws RuntimeException + */ + public function invoked(\PHPUnit\Framework\MockObject\Invocation $invocation) : mixed + { + if ($this->methodNameRule === null) { + throw new \PHPUnit\Framework\MockObject\MethodNameNotConfiguredException(); + } + if ($this->afterMatchBuilderId !== null) { + $matcher = $invocation->object()->__phpunit_getInvocationHandler()->lookupMatcher($this->afterMatchBuilderId); + if (!$matcher) { + throw new \PHPUnit\Framework\MockObject\MatchBuilderNotFoundException($this->afterMatchBuilderId); + } + } + $this->invocationRule->invoked($invocation); + try { + $this->parametersRule?->apply($invocation); + } catch (ExpectationFailedException $e) { + throw new ExpectationFailedException(sprintf("Expectation failed for %s when %s\n%s", $this->methodNameRule->toString(), $this->invocationRule->toString(), $e->getMessage()), $e->getComparisonFailure()); + } + if ($this->stub) { + return $this->stub->invoke($invocation); + } + return $invocation->generateReturnValue(); + } + /** + * @throws ExpectationFailedException + * @throws MatchBuilderNotFoundException + * @throws MethodNameNotConfiguredException + * @throws RuntimeException + */ + public function matches(\PHPUnit\Framework\MockObject\Invocation $invocation) : bool + { + if ($this->afterMatchBuilderId !== null) { + $matcher = $invocation->object()->__phpunit_getInvocationHandler()->lookupMatcher($this->afterMatchBuilderId); + if (!$matcher) { + throw new \PHPUnit\Framework\MockObject\MatchBuilderNotFoundException($this->afterMatchBuilderId); + } + if (!$matcher->invocationRule->hasBeenInvoked()) { + return \false; + } + } + if ($this->methodNameRule === null) { + throw new \PHPUnit\Framework\MockObject\MethodNameNotConfiguredException(); + } + if (!$this->invocationRule->matches($invocation)) { + return \false; + } + try { + if (!$this->methodNameRule->matches($invocation)) { + return \false; + } + } catch (ExpectationFailedException $e) { + throw new ExpectationFailedException(sprintf("Expectation failed for %s when %s\n%s", $this->methodNameRule->toString(), $this->invocationRule->toString(), $e->getMessage()), $e->getComparisonFailure()); + } + return \true; + } + /** + * @throws ExpectationFailedException + * @throws MethodNameNotConfiguredException + */ + public function verify() : void + { + if ($this->methodNameRule === null) { + throw new \PHPUnit\Framework\MockObject\MethodNameNotConfiguredException(); + } + try { + $this->invocationRule->verify(); + if ($this->parametersRule === null) { + $this->parametersRule = new AnyParameters(); + } + $invocationIsAny = $this->invocationRule instanceof AnyInvokedCount; + $invocationIsNever = $this->invocationRule instanceof InvokedCount && $this->invocationRule->isNever(); + $invocationIsAtMost = $this->invocationRule instanceof InvokedAtMostCount; + if (!$invocationIsAny && !$invocationIsNever && !$invocationIsAtMost) { + $this->parametersRule->verify(); + } + } catch (ExpectationFailedException $e) { + throw new ExpectationFailedException(sprintf("Expectation failed for %s when %s.\n%s", $this->methodNameRule->toString(), $this->invocationRule->toString(), ThrowableToStringMapper::map($e))); + } } } object(); + $this->methodName = $methodName; } public function toString() : string { - return 'return the current object'; + return sprintf('is "%s"', $this->methodName); + } + protected function matches(mixed $other) : bool + { + return strtolower($this->methodName) === strtolower((string) $other); } } value = $value; + $intersection = \false; + $union = \false; + if (str_contains($returnType, '|')) { + $types = explode('|', $returnType); + $union = \true; + foreach (array_keys($types) as $key) { + if (str_starts_with($types[$key], '(') && str_ends_with($types[$key], ')')) { + $types[$key] = substr($types[$key], 1, -1); + } + } + } elseif (str_contains($returnType, '&')) { + $types = explode('&', $returnType); + $intersection = \true; + } else { + $types = [$returnType]; + } + $types = array_map('strtolower', $types); + if (!$intersection) { + if (in_array('', $types, \true) || in_array('null', $types, \true) || in_array('mixed', $types, \true) || in_array('void', $types, \true)) { + return null; + } + if (in_array('true', $types, \true)) { + return \true; + } + if (in_array('false', $types, \true) || in_array('bool', $types, \true)) { + return \false; + } + if (in_array('float', $types, \true)) { + return 0.0; + } + if (in_array('int', $types, \true)) { + return 0; + } + if (in_array('string', $types, \true)) { + return ''; + } + if (in_array('array', $types, \true)) { + return []; + } + if (in_array('static', $types, \true)) { + return $this->newInstanceOf($stubClassName, $className, $methodName); + } + if (in_array('object', $types, \true)) { + return new stdClass(); + } + if (in_array('callable', $types, \true) || in_array('closure', $types, \true)) { + return static function () : void { + }; + } + if (in_array('traversable', $types, \true) || in_array('generator', $types, \true) || in_array('iterable', $types, \true)) { + $generator = static function () : \Generator { + yield from []; + }; + return $generator(); + } + if (!$union) { + return $this->testDoubleFor($returnType, $className, $methodName); + } + } + if ($union) { + foreach ($types as $type) { + if (str_contains($type, '&')) { + $_types = explode('&', $type); + if ($this->onlyInterfaces($_types)) { + return $this->testDoubleForIntersectionOfInterfaces($_types, $className, $methodName); + } + } + } + } + if ($intersection && $this->onlyInterfaces($types)) { + return $this->testDoubleForIntersectionOfInterfaces($types, $className, $methodName); + } + $reason = ''; + if ($union) { + $reason = ' because the declared return type is a union'; + } elseif ($intersection) { + $reason = ' because the declared return type is an intersection'; + } + throw new \PHPUnit\Framework\MockObject\RuntimeException(sprintf('Return value for %s::%s() cannot be generated%s, please configure a return value for this method', $className, $methodName, $reason)); } - public function invoke(Invocation $invocation) : mixed + /** + * @psalm-param non-empty-list $types + */ + private function onlyInterfaces(array $types) : bool { - return $this->value; + foreach ($types as $type) { + if (!interface_exists($type)) { + return \false; + } + } + return \true; } - public function toString() : string + /** + * @psalm-param class-string $stubClassName + * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName + * + * @throws RuntimeException + */ + private function newInstanceOf(string $stubClassName, string $className, string $methodName) : \PHPUnit\Framework\MockObject\Stub { - $exporter = new Exporter(); - return sprintf('return user-specified value %s', $exporter->export($this->value)); + try { + return (new ReflectionClass($stubClassName))->newInstanceWithoutConstructor(); + } catch (Throwable $t) { + throw new \PHPUnit\Framework\MockObject\RuntimeException(sprintf('Return value for %s::%s() cannot be generated: %s', $className, $methodName, $t->getMessage())); + } + } + /** + * @psalm-param class-string $type + * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName + * + * @throws RuntimeException + */ + private function testDoubleFor(string $type, string $className, string $methodName) : \PHPUnit\Framework\MockObject\Stub + { + try { + return (new Generator())->testDouble($type, \false, [], [], '', \false); + } catch (Throwable $t) { + throw new \PHPUnit\Framework\MockObject\RuntimeException(sprintf('Return value for %s::%s() cannot be generated: %s', $className, $methodName, $t->getMessage())); + } + } + /** + * @psalm-param non-empty-list $types + * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName + * + * @throws RuntimeException + */ + private function testDoubleForIntersectionOfInterfaces(array $types, string $className, string $methodName) : \PHPUnit\Framework\MockObject\Stub + { + try { + return (new Generator())->testDoubleForInterfaceIntersection($types, \false); + } catch (Throwable $t) { + throw new \PHPUnit\Framework\MockObject\RuntimeException(sprintf('Return value for %s::%s() cannot be generated: %s', $className, $methodName, $t->getMessage())); + } } } valueMap = $valueMap; + return 'invoked zero or more times'; } - public function invoke(Invocation $invocation) : mixed + public function verify() : void { - $parameterCount = count($invocation->parameters()); - foreach ($this->valueMap as $map) { - if (!is_array($map) || $parameterCount !== count($map) - 1) { - continue; - } - $return = array_pop($map); - if ($invocation->parameters() === $map) { - return $return; - } - } - return null; } - public function toString() : string + public function matches(BaseInvocation $invocation) : bool { - return 'return value from a map'; + return \true; } } - */ - private static array $templates = []; - /** - * @psalm-suppress MissingThrowsDocblock + * @psalm-var list */ - private function loadTemplate(string $template) : Template + private array $invocations = []; + public function numberOfInvocations() : int + { + return count($this->invocations); + } + public function hasBeenInvoked() : bool + { + return count($this->invocations) > 0; + } + public final function invoked(BaseInvocation $invocation) : void + { + $this->invocations[] = $invocation; + $this->invokedDo($invocation); + } + public abstract function matches(BaseInvocation $invocation) : bool; + public abstract function verify() : void; + protected function invokedDo(BaseInvocation $invocation) : void { - $filename = __DIR__ . '/Generator/' . $template; - if (!isset(self::$templates[$filename])) { - self::$templates[$filename] = new Template($filename); - } - return self::$templates[$filename]; } } requiredInvocations = $requiredInvocations; + } + public function toString() : string + { + return sprintf('invoked at least %d time%s', $this->requiredInvocations, $this->requiredInvocations !== 1 ? 's' : ''); + } /** * Verifies that the current expectation is valid. If everything is OK the * code should just return, if not it must throw an exception. * * @throws ExpectationFailedException */ - public function verify() : void; -} -numberOfInvocations(); + if ($actualInvocations < $this->requiredInvocations) { + throw new ExpectationFailedException(sprintf('Expected invocation at least %d time%s but it occurred %d time%s.', $this->requiredInvocations, $this->requiredInvocations !== 1 ? 's' : '', $actualInvocations, $actualInvocations !== 1 ? 's' : '')); + } + } + public function matches(BaseInvocation $invocation) : bool + { + return \true; + } +} + - */ - public function provides() : array; + public function toString() : string + { + return 'invoked at least once'; + } /** - * @psalm-return list + * Verifies that the current expectation is valid. If everything is OK the + * code should just return, if not it must throw an exception. + * + * @throws ExpectationFailedException */ - public function requires() : array; + public function verify() : void + { + $count = $this->numberOfInvocations(); + if ($count < 1) { + throw new ExpectationFailedException('Expected invocation at least once but it never occurred.'); + } + } + public function matches(BaseInvocation $invocation) : bool + { + return \true; + } } allowedInvocations = $allowedInvocations; + } + public function toString() : string + { + return sprintf('invoked at most %d time%s', $this->allowedInvocations, $this->allowedInvocations !== 1 ? 's' : ''); + } /** - * Returns a string representation of the object. + * Verifies that the current expectation is valid. If everything is OK the + * code should just return, if not it must throw an exception. + * + * @throws ExpectationFailedException */ - public function toString() : string; + public function verify() : void + { + $actualInvocations = $this->numberOfInvocations(); + if ($actualInvocations > $this->allowedInvocations) { + throw new ExpectationFailedException(sprintf('Expected invocation at most %d time%s but it occurred %d time%s.', $this->allowedInvocations, $this->allowedInvocations !== 1 ? 's' : '', $actualInvocations, $actualInvocations !== 1 ? 's' : '')); + } + } + public function matches(BaseInvocation $invocation) : bool + { + return \true; + } } expectedCount = $expectedCount; + } + public function isNever() : bool + { + return $this->expectedCount === 0; + } + public function toString() : string + { + return sprintf('invoked %d time%s', $this->expectedCount, $this->expectedCount !== 1 ? 's' : ''); + } + public function matches(BaseInvocation $invocation) : bool + { + return \true; + } + /** + * Verifies that the current expectation is valid. If everything is OK the + * code should just return, if not it must throw an exception. + * + * @throws ExpectationFailedException + */ + public function verify() : void + { + $actualCount = $this->numberOfInvocations(); + if ($actualCount !== $this->expectedCount) { + throw new ExpectationFailedException(sprintf('Method was expected to be called %d time%s, actually called %d time%s.', $this->expectedCount, $this->expectedCount !== 1 ? 's' : '', $actualCount, $actualCount !== 1 ? 's' : '')); + } + } + /** + * @throws ExpectationFailedException + */ + protected function invokedDo(BaseInvocation $invocation) : void + { + $count = $this->numberOfInvocations(); + if ($count > $this->expectedCount) { + $message = $invocation->toString() . ' '; + $message .= match ($this->expectedCount) { + 0 => 'was not expected to be called.', + 1 => 'was not expected to be called more than once.', + default => sprintf('was not expected to be called more than %d times.', $this->expectedCount), + }; + throw new ExpectationFailedException($message); + } + } } getName(); - $data = (new DataProvider())->providedData($className, $methodName); - if ($data !== null) { - $test = $this->buildDataProviderTestSuite($methodName, $className, $data, $this->shouldTestMethodBeRunInSeparateProcess($className, $methodName), $this->shouldGlobalStateBePreserved($className, $methodName), $this->shouldAllTestMethodsOfTestClassBeRunInSingleSeparateProcess($className), $this->backupSettings($className, $methodName)); - } else { - $test = new $className($methodName); - } - if ($test instanceof \PHPUnit\Framework\TestCase) { - $this->configureTestCase($test, $this->shouldTestMethodBeRunInSeparateProcess($className, $methodName), $this->shouldGlobalStateBePreserved($className, $methodName), $this->shouldAllTestMethodsOfTestClassBeRunInSingleSeparateProcess($className), $this->backupSettings($className, $methodName)); + if (is_string($constraint)) { + $constraint = new MethodNameConstraint($constraint); } - return $test; + $this->constraint = $constraint; + } + public function toString() : string + { + return 'method name ' . $this->constraint->toString(); } /** - * @psalm-param class-string $className - * @psalm-param non-empty-string $methodName - * @psalm-param array{backupGlobals: ?bool, backupGlobalsExcludeList: list, backupStaticProperties: ?bool, backupStaticPropertiesExcludeList: array>} $backupSettings + * @throws ExpectationFailedException */ - private function buildDataProviderTestSuite(string $methodName, string $className, array $data, bool $runTestInSeparateProcess, ?bool $preserveGlobalState, bool $runClassInSeparateProcess, array $backupSettings) : \PHPUnit\Framework\DataProviderTestSuite + public function matches(BaseInvocation $invocation) : bool { - $dataProviderTestSuite = \PHPUnit\Framework\DataProviderTestSuite::empty($className . '::' . $methodName); - $groups = (new Groups())->groups($className, $methodName); - foreach ($data as $_dataName => $_data) { - $_test = new $className($methodName); - assert($_test instanceof \PHPUnit\Framework\TestCase); - $_test->setData($_dataName, $_data); - $this->configureTestCase($_test, $runTestInSeparateProcess, $preserveGlobalState, $runClassInSeparateProcess, $backupSettings); - $dataProviderTestSuite->addTest($_test, $groups); - } - return $dataProviderTestSuite; + return $this->matchesName($invocation->methodName()); } /** - * @psalm-param array{backupGlobals: ?bool, backupGlobalsExcludeList: list, backupStaticProperties: ?bool, backupStaticPropertiesExcludeList: array>} $backupSettings + * @throws ExpectationFailedException */ - private function configureTestCase(\PHPUnit\Framework\TestCase $test, bool $runTestInSeparateProcess, ?bool $preserveGlobalState, bool $runClassInSeparateProcess, array $backupSettings) : void + public function matchesName(string $methodName) : bool { - if ($runTestInSeparateProcess) { - $test->setRunTestInSeparateProcess(\true); - } - if ($runClassInSeparateProcess) { - $test->setRunClassInSeparateProcess(\true); - } - if ($preserveGlobalState !== null) { - $test->setPreserveGlobalState($preserveGlobalState); - } - if ($backupSettings['backupGlobals'] !== null) { - $test->setBackupGlobals($backupSettings['backupGlobals']); - } else { - $test->setBackupGlobals(ConfigurationRegistry::get()->backupGlobals()); - } - $test->setBackupGlobalsExcludeList($backupSettings['backupGlobalsExcludeList']); - if ($backupSettings['backupStaticProperties'] !== null) { - $test->setBackupStaticProperties($backupSettings['backupStaticProperties']); - } else { - $test->setBackupStaticProperties(ConfigurationRegistry::get()->backupStaticProperties()); - } - $test->setBackupStaticPropertiesExcludeList($backupSettings['backupStaticPropertiesExcludeList']); + return (bool) $this->constraint->evaluate($methodName, '', \true); } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework\MockObject\Rule; + +use function count; +use function sprintf; +use Exception; +use PHPUnit\Framework\Constraint\Constraint; +use PHPUnit\Framework\Constraint\IsAnything; +use PHPUnit\Framework\Constraint\IsEqual; +use PHPUnit\Framework\ExpectationFailedException; +use PHPUnit\Framework\MockObject\Invocation as BaseInvocation; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class Parameters implements \PHPUnit\Framework\MockObject\Rule\ParametersRule +{ /** - * @psalm-param class-string $className - * @psalm-param non-empty-string $methodName - * - * @psalm-return array{backupGlobals: ?bool, backupGlobalsExcludeList: list, backupStaticProperties: ?bool, backupStaticPropertiesExcludeList: array>} + * @psalm-var list */ - private function backupSettings(string $className, string $methodName) : array + private array $parameters = []; + private ?BaseInvocation $invocation = null; + private null|bool|ExpectationFailedException $parameterVerificationResult; + /** + * @throws \PHPUnit\Framework\Exception + */ + public function __construct(array $parameters) { - $metadataForClass = MetadataRegistry::parser()->forClass($className); - $metadataForMethod = MetadataRegistry::parser()->forMethod($className, $methodName); - $metadataForClassAndMethod = MetadataRegistry::parser()->forClassAndMethod($className, $methodName); - $backupGlobals = null; - $backupGlobalsExcludeList = []; - if ($metadataForMethod->isBackupGlobals()->isNotEmpty()) { - $metadata = $metadataForMethod->isBackupGlobals()->asArray()[0]; - assert($metadata instanceof BackupGlobals); - if ($metadata->enabled()) { - $backupGlobals = \true; - } - } elseif ($metadataForClass->isBackupGlobals()->isNotEmpty()) { - $metadata = $metadataForClass->isBackupGlobals()->asArray()[0]; - assert($metadata instanceof BackupGlobals); - if ($metadata->enabled()) { - $backupGlobals = \true; - } - } - foreach ($metadataForClassAndMethod->isExcludeGlobalVariableFromBackup() as $metadata) { - assert($metadata instanceof ExcludeGlobalVariableFromBackup); - $backupGlobalsExcludeList[] = $metadata->globalVariableName(); - } - $backupStaticProperties = null; - $backupStaticPropertiesExcludeList = []; - if ($metadataForMethod->isBackupStaticProperties()->isNotEmpty()) { - $metadata = $metadataForMethod->isBackupStaticProperties()->asArray()[0]; - assert($metadata instanceof BackupStaticProperties); - if ($metadata->enabled()) { - $backupStaticProperties = \true; - } - } elseif ($metadataForClass->isBackupStaticProperties()->isNotEmpty()) { - $metadata = $metadataForClass->isBackupStaticProperties()->asArray()[0]; - assert($metadata instanceof BackupStaticProperties); - if ($metadata->enabled()) { - $backupStaticProperties = \true; - } - } - foreach ($metadataForClassAndMethod->isExcludeStaticPropertyFromBackup() as $metadata) { - assert($metadata instanceof ExcludeStaticPropertyFromBackup); - if (!isset($backupStaticPropertiesExcludeList[$metadata->className()])) { - $backupStaticPropertiesExcludeList[$metadata->className()] = []; + foreach ($parameters as $parameter) { + if (!$parameter instanceof Constraint) { + $parameter = new IsEqual($parameter); } - $backupStaticPropertiesExcludeList[$metadata->className()][] = $metadata->propertyName(); + $this->parameters[] = $parameter; } - return ['backupGlobals' => $backupGlobals, 'backupGlobalsExcludeList' => $backupGlobalsExcludeList, 'backupStaticProperties' => $backupStaticProperties, 'backupStaticPropertiesExcludeList' => $backupStaticPropertiesExcludeList]; } /** - * @psalm-param class-string $className - * @psalm-param non-empty-string $methodName + * @throws Exception */ - private function shouldGlobalStateBePreserved(string $className, string $methodName) : ?bool + public function apply(BaseInvocation $invocation) : void { - $metadataForMethod = MetadataRegistry::parser()->forMethod($className, $methodName); - if ($metadataForMethod->isPreserveGlobalState()->isNotEmpty()) { - $metadata = $metadataForMethod->isPreserveGlobalState()->asArray()[0]; - assert($metadata instanceof PreserveGlobalState); - return $metadata->enabled(); - } - $metadataForClass = MetadataRegistry::parser()->forClass($className); - if ($metadataForClass->isPreserveGlobalState()->isNotEmpty()) { - $metadata = $metadataForClass->isPreserveGlobalState()->asArray()[0]; - assert($metadata instanceof PreserveGlobalState); - return $metadata->enabled(); + $this->invocation = $invocation; + $this->parameterVerificationResult = null; + try { + $this->parameterVerificationResult = $this->doVerify(); + } catch (ExpectationFailedException $e) { + $this->parameterVerificationResult = $e; + throw $this->parameterVerificationResult; } - return null; } /** - * @psalm-param class-string $className - * @psalm-param non-empty-string $methodName + * Checks if the invocation $invocation matches the current rules. If it + * does the rule will get the invoked() method called which should check + * if an expectation is met. + * + * @throws ExpectationFailedException */ - private function shouldTestMethodBeRunInSeparateProcess(string $className, string $methodName) : bool + public function verify() : void { - if (MetadataRegistry::parser()->forClass($className)->isRunTestsInSeparateProcesses()->isNotEmpty()) { - return \true; + $this->doVerify(); + } + /** + * @throws ExpectationFailedException + */ + private function doVerify() : bool + { + if (isset($this->parameterVerificationResult)) { + return $this->guardAgainstDuplicateEvaluationOfParameterConstraints(); } - if (MetadataRegistry::parser()->forMethod($className, $methodName)->isRunInSeparateProcess()->isNotEmpty()) { - return \true; + if ($this->invocation === null) { + throw new ExpectationFailedException('Mocked method does not exist.'); } - return \false; + if (count($this->invocation->parameters()) < count($this->parameters)) { + $message = 'Parameter count for invocation %s is too low.'; + // The user called `->with($this->anything())`, but may have meant + // `->withAnyParameters()`. + // + // @see https://github.com/sebastianbergmann/phpunit-mock-objects/issues/199 + if (count($this->parameters) === 1 && $this->parameters[0]::class === IsAnything::class) { + $message .= "\nTo allow 0 or more parameters with any value, omit ->with() or use ->withAnyParameters() instead."; + } + throw new ExpectationFailedException(sprintf($message, $this->invocation->toString())); + } + foreach ($this->parameters as $i => $parameter) { + $parameter->evaluate($this->invocation->parameters()[$i], sprintf('Parameter %s for invocation %s does not match expected ' . 'value.', $i, $this->invocation->toString())); + } + return \true; } /** - * @psalm-param class-string $className + * @throws ExpectationFailedException */ - private function shouldAllTestMethodsOfTestClassBeRunInSingleSeparateProcess(string $className) : bool + private function guardAgainstDuplicateEvaluationOfParameterConstraints() : bool { - return MetadataRegistry::parser()->forClass($className)->isRunClassInSeparateProcess()->isNotEmpty(); + if ($this->parameterVerificationResult instanceof ExpectationFailedException) { + throw $this->parameterVerificationResult; + } + return (bool) $this->parameterVerificationResult; } } - */ - private array $backupGlobalsExcludeList = []; - private ?bool $backupStaticProperties = null; - /** - * @psalm-var array> - */ - private array $backupStaticPropertiesExcludeList = []; - private ?Snapshot $snapshot = null; - private ?bool $runClassInSeparateProcess = null; - private ?bool $runTestInSeparateProcess = null; - private bool $preserveGlobalState = \false; - private bool $inIsolation = \false; - private ?string $expectedException = null; - private ?string $expectedExceptionMessage = null; - private ?string $expectedExceptionMessageRegExp = null; - private null|int|string $expectedExceptionCode = null; - /** - * @psalm-var list - */ - private array $providedTests = []; - private array $data = []; - private int|string $dataName = ''; - /** - * @psalm-var non-empty-string - */ - private string $name; - /** - * @psalm-var list - */ - private array $groups = []; - /** - * @psalm-var list - */ - private array $dependencies = []; - private array $dependencyInput = []; /** - * @psalm-var array + * @throws ExpectationFailedException if the invocation violates the rule */ - private array $iniSettings = []; - private array $locale = []; - private ?MockGenerator $mockObjectGenerator = null; - /** - * @psalm-var list - */ - private array $mockObjects = []; - private bool $registerMockObjectsFromTestArgumentsRecursively = \false; - private TestStatus $status; - private int $numberOfAssertionsPerformed = 0; - private mixed $testResult = null; - private string $output = ''; - private ?string $outputExpectedRegex = null; - private ?string $outputExpectedString = null; - private bool $outputBufferingActive = \false; - private int $outputBufferingLevel; - private bool $outputRetrievedForAssertion = \false; - private bool $doesNotPerformAssertions = \false; - /** - * @psalm-var list - */ - private array $customComparators = []; - private ?Event\Code\TestMethod $testValueObjectForEvents = null; - private bool $wasPrepared = \false; - /** - * Returns a matcher that matches when the method is executed - * zero or more times. - */ - public static final function any() : AnyInvokedCountMatcher + public function apply(BaseInvocation $invocation) : void; + public function verify() : void; +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework\MockObject\Stub; + +use function array_shift; +use PHPUnit\Framework\MockObject\Invocation; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class ConsecutiveCalls implements \PHPUnit\Framework\MockObject\Stub\Stub +{ + private array $stack; + public function __construct(array $stack) { - return new AnyInvokedCountMatcher(); + $this->stack = $stack; } - /** - * Returns a matcher that matches when the method is never executed. - */ - public static final function never() : InvokedCountMatcher + public function invoke(Invocation $invocation) : mixed { - return new InvokedCountMatcher(0); + $value = array_shift($this->stack); + if ($value instanceof \PHPUnit\Framework\MockObject\Stub\Stub) { + $value = $value->invoke($invocation); + } + return $value; } - /** - * Returns a matcher that matches when the method is executed - * at least N times. - */ - public static final function atLeast(int $requiredInvocations) : InvokedAtLeastCountMatcher +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework\MockObject\Stub; + +use PHPUnit\Framework\MockObject\Invocation; +use Throwable; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class Exception implements \PHPUnit\Framework\MockObject\Stub\Stub +{ + private readonly Throwable $exception; + public function __construct(Throwable $exception) { - return new InvokedAtLeastCountMatcher($requiredInvocations); + $this->exception = $exception; } /** - * Returns a matcher that matches when the method is executed at least once. + * @throws Throwable */ - public static final function atLeastOnce() : InvokedAtLeastOnceMatcher + public function invoke(Invocation $invocation) : never { - return new InvokedAtLeastOnceMatcher(); + throw $this->exception; } - /** - * Returns a matcher that matches when the method is executed exactly once. - */ - public static final function once() : InvokedCountMatcher +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework\MockObject\Stub; + +use PHPUnit\Framework\MockObject\Invocation; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class ReturnArgument implements \PHPUnit\Framework\MockObject\Stub\Stub +{ + private readonly int $argumentIndex; + public function __construct(int $argumentIndex) { - return new InvokedCountMatcher(1); + $this->argumentIndex = $argumentIndex; } - /** - * Returns a matcher that matches when the method is executed - * exactly $count times. - */ - public static final function exactly(int $count) : InvokedCountMatcher + public function invoke(Invocation $invocation) : mixed { - return new InvokedCountMatcher($count); + return $invocation->parameters()[$this->argumentIndex] ?? null; } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework\MockObject\Stub; + +use function call_user_func_array; +use PHPUnit\Framework\MockObject\Invocation; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class ReturnCallback implements \PHPUnit\Framework\MockObject\Stub\Stub +{ /** - * Returns a matcher that matches when the method is executed - * at most N times. + * @var callable */ - public static final function atMost(int $allowedInvocations) : InvokedAtMostCountMatcher - { - return new InvokedAtMostCountMatcher($allowedInvocations); - } - public static final function returnValue(mixed $value) : ReturnStub + private $callback; + public function __construct(callable $callback) { - return new ReturnStub($value); + $this->callback = $callback; } - public static final function returnValueMap(array $valueMap) : ReturnValueMapStub + public function invoke(Invocation $invocation) : mixed { - return new ReturnValueMapStub($valueMap); + return call_user_func_array($this->callback, $invocation->parameters()); } - public static final function returnArgument(int $argumentIndex) : ReturnArgumentStub +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework\MockObject\Stub; + +use PHPUnit\Framework\MockObject\Invocation; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class ReturnReference implements \PHPUnit\Framework\MockObject\Stub\Stub +{ + private mixed $reference; + public function __construct(mixed &$reference) { - return new ReturnArgumentStub($argumentIndex); + $this->reference =& $reference; } - public static final function returnCallback(callable $callback) : ReturnCallbackStub + public function invoke(Invocation $invocation) : mixed { - return new ReturnCallbackStub($callback); + return $this->reference; } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework\MockObject\Stub; + +use PHPUnit\Framework\MockObject\Invocation; +use PHPUnit\Framework\MockObject\RuntimeException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class ReturnSelf implements \PHPUnit\Framework\MockObject\Stub\Stub +{ /** - * Returns the current object. - * - * This method is useful when mocking a fluent interface. + * @throws RuntimeException */ - public static final function returnSelf() : ReturnSelfStub + public function invoke(Invocation $invocation) : object { - return new ReturnSelfStub(); + return $invocation->object(); } - public static final function throwException(Throwable $exception) : ExceptionStub +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework\MockObject\Stub; + +use PHPUnit\Framework\MockObject\Invocation; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class ReturnStub implements \PHPUnit\Framework\MockObject\Stub\Stub +{ + private readonly mixed $value; + public function __construct(mixed $value) { - return new ExceptionStub($exception); + $this->value = $value; } - public static final function onConsecutiveCalls(mixed ...$arguments) : ConsecutiveCallsStub + public function invoke(Invocation $invocation) : mixed { - return new ConsecutiveCallsStub($arguments); + return $this->value; } - /** - * @psalm-param non-empty-string $name - * - * @internal This method is not covered by the backward compatibility promise for PHPUnit - */ - public function __construct(string $name) +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework\MockObject\Stub; + +use function array_pop; +use function count; +use function is_array; +use PHPUnit\Framework\MockObject\Invocation; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class ReturnValueMap implements \PHPUnit\Framework\MockObject\Stub\Stub +{ + private readonly array $valueMap; + public function __construct(array $valueMap) { - $this->setName($name); - $this->status = TestStatus::unknown(); + $this->valueMap = $valueMap; } - /** - * This method is called before the first test of this test class is run. - */ - public static function setUpBeforeClass() : void + public function invoke(Invocation $invocation) : mixed { + $parameterCount = count($invocation->parameters()); + foreach ($this->valueMap as $map) { + if (!is_array($map) || $parameterCount !== count($map) - 1) { + continue; + } + $return = array_pop($map); + if ($invocation->parameters() === $map) { + return $return; + } + } + return null; } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework\MockObject\Stub; + +use PHPUnit\Framework\MockObject\Invocation; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +interface Stub +{ /** - * This method is called after the last test of this test class is run. + * Fakes the processing of the invocation $invocation by returning a + * specific value. */ - public static function tearDownAfterClass() : void - { - } + public function invoke(Invocation $invocation) : mixed; +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework; + +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +interface Reorderable +{ + public function sortId() : string; /** - * This method is called before each test. + * @psalm-return list */ - protected function setUp() : void - { - } + public function provides() : array; /** - * Performs assertions shared by all tests of a test case. - * - * This method is called between setUp() and test. + * @psalm-return list */ - protected function assertPreConditions() : void - { - } + public function requires() : array; +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework; + +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +interface SelfDescribing +{ /** - * Performs assertions shared by all tests of a test case. + * Returns a string representation of the object. + */ + public function toString() : string; +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework; + +use Countable; +/** + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +interface Test extends Countable +{ + public function run() : void; +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework; + +use function assert; +use PHPUnit\Metadata\Api\DataProvider; +use PHPUnit\Metadata\Api\Groups; +use PHPUnit\Metadata\BackupGlobals; +use PHPUnit\Metadata\BackupStaticProperties; +use PHPUnit\Metadata\ExcludeGlobalVariableFromBackup; +use PHPUnit\Metadata\ExcludeStaticPropertyFromBackup; +use PHPUnit\Metadata\Parser\Registry as MetadataRegistry; +use PHPUnit\Metadata\PreserveGlobalState; +use PHPUnit\TextUI\Configuration\Registry as ConfigurationRegistry; +use ReflectionClass; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class TestBuilder +{ + /** + * @psalm-param non-empty-string $methodName * - * This method is called between test and tearDown(). + * @throws InvalidDataProviderException */ - protected function assertPostConditions() : void + public function build(ReflectionClass $theClass, string $methodName) : \PHPUnit\Framework\Test { + $className = $theClass->getName(); + $data = (new DataProvider())->providedData($className, $methodName); + if ($data !== null) { + return $this->buildDataProviderTestSuite($methodName, $className, $data, $this->shouldTestMethodBeRunInSeparateProcess($className, $methodName), $this->shouldGlobalStateBePreserved($className, $methodName), $this->shouldAllTestMethodsOfTestClassBeRunInSingleSeparateProcess($className), $this->backupSettings($className, $methodName)); + } + $test = new $className($methodName); + assert($test instanceof \PHPUnit\Framework\TestCase); + $this->configureTestCase($test, $this->shouldTestMethodBeRunInSeparateProcess($className, $methodName), $this->shouldGlobalStateBePreserved($className, $methodName), $this->shouldAllTestMethodsOfTestClassBeRunInSingleSeparateProcess($className), $this->backupSettings($className, $methodName)); + return $test; } /** - * This method is called after each test. + * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName + * @psalm-param array{backupGlobals: ?bool, backupGlobalsExcludeList: list, backupStaticProperties: ?bool, backupStaticPropertiesExcludeList: array>} $backupSettings */ - protected function tearDown() : void + private function buildDataProviderTestSuite(string $methodName, string $className, array $data, bool $runTestInSeparateProcess, ?bool $preserveGlobalState, bool $runClassInSeparateProcess, array $backupSettings) : \PHPUnit\Framework\DataProviderTestSuite { + $dataProviderTestSuite = \PHPUnit\Framework\DataProviderTestSuite::empty($className . '::' . $methodName); + $groups = (new Groups())->groups($className, $methodName); + foreach ($data as $_dataName => $_data) { + $_test = new $className($methodName); + assert($_test instanceof \PHPUnit\Framework\TestCase); + $_test->setData($_dataName, $_data); + $this->configureTestCase($_test, $runTestInSeparateProcess, $preserveGlobalState, $runClassInSeparateProcess, $backupSettings); + $dataProviderTestSuite->addTest($_test, $groups); + } + return $dataProviderTestSuite; } /** - * Returns a string representation of the test case. - * - * @throws Exception - * - * @internal This method is not covered by the backward compatibility promise for PHPUnit + * @psalm-param array{backupGlobals: ?bool, backupGlobalsExcludeList: list, backupStaticProperties: ?bool, backupStaticPropertiesExcludeList: array>} $backupSettings */ - public function toString() : string + private function configureTestCase(\PHPUnit\Framework\TestCase $test, bool $runTestInSeparateProcess, ?bool $preserveGlobalState, bool $runClassInSeparateProcess, array $backupSettings) : void { - $buffer = sprintf('%s::%s', (new ReflectionClass($this))->getName(), $this->name); - return $buffer . $this->dataSetAsStringWithData(); + if ($runTestInSeparateProcess) { + $test->setRunTestInSeparateProcess(\true); + } + if ($runClassInSeparateProcess) { + $test->setRunClassInSeparateProcess(\true); + } + if ($preserveGlobalState !== null) { + $test->setPreserveGlobalState($preserveGlobalState); + } + if ($backupSettings['backupGlobals'] !== null) { + $test->setBackupGlobals($backupSettings['backupGlobals']); + } else { + $test->setBackupGlobals(ConfigurationRegistry::get()->backupGlobals()); + } + $test->setBackupGlobalsExcludeList($backupSettings['backupGlobalsExcludeList']); + if ($backupSettings['backupStaticProperties'] !== null) { + $test->setBackupStaticProperties($backupSettings['backupStaticProperties']); + } else { + $test->setBackupStaticProperties(ConfigurationRegistry::get()->backupStaticProperties()); + } + $test->setBackupStaticPropertiesExcludeList($backupSettings['backupStaticPropertiesExcludeList']); } /** - * @internal This method is not covered by the backward compatibility promise for PHPUnit + * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName + * + * @psalm-return array{backupGlobals: ?bool, backupGlobalsExcludeList: list, backupStaticProperties: ?bool, backupStaticPropertiesExcludeList: array>} */ - public final function count() : int - { - return 1; - } - public final function getActualOutputForAssertion() : string + private function backupSettings(string $className, string $methodName) : array { - $this->outputRetrievedForAssertion = \true; - return $this->output(); - } + $metadataForClass = MetadataRegistry::parser()->forClass($className); + $metadataForMethod = MetadataRegistry::parser()->forMethod($className, $methodName); + $metadataForClassAndMethod = MetadataRegistry::parser()->forClassAndMethod($className, $methodName); + $backupGlobals = null; + $backupGlobalsExcludeList = []; + if ($metadataForMethod->isBackupGlobals()->isNotEmpty()) { + $metadata = $metadataForMethod->isBackupGlobals()->asArray()[0]; + assert($metadata instanceof BackupGlobals); + if ($metadata->enabled()) { + $backupGlobals = \true; + } + } elseif ($metadataForClass->isBackupGlobals()->isNotEmpty()) { + $metadata = $metadataForClass->isBackupGlobals()->asArray()[0]; + assert($metadata instanceof BackupGlobals); + if ($metadata->enabled()) { + $backupGlobals = \true; + } + } + foreach ($metadataForClassAndMethod->isExcludeGlobalVariableFromBackup() as $metadata) { + assert($metadata instanceof ExcludeGlobalVariableFromBackup); + $backupGlobalsExcludeList[] = $metadata->globalVariableName(); + } + $backupStaticProperties = null; + $backupStaticPropertiesExcludeList = []; + if ($metadataForMethod->isBackupStaticProperties()->isNotEmpty()) { + $metadata = $metadataForMethod->isBackupStaticProperties()->asArray()[0]; + assert($metadata instanceof BackupStaticProperties); + if ($metadata->enabled()) { + $backupStaticProperties = \true; + } + } elseif ($metadataForClass->isBackupStaticProperties()->isNotEmpty()) { + $metadata = $metadataForClass->isBackupStaticProperties()->asArray()[0]; + assert($metadata instanceof BackupStaticProperties); + if ($metadata->enabled()) { + $backupStaticProperties = \true; + } + } + foreach ($metadataForClassAndMethod->isExcludeStaticPropertyFromBackup() as $metadata) { + assert($metadata instanceof ExcludeStaticPropertyFromBackup); + if (!isset($backupStaticPropertiesExcludeList[$metadata->className()])) { + $backupStaticPropertiesExcludeList[$metadata->className()] = []; + } + $backupStaticPropertiesExcludeList[$metadata->className()][] = $metadata->propertyName(); + } + return ['backupGlobals' => $backupGlobals, 'backupGlobalsExcludeList' => $backupGlobalsExcludeList, 'backupStaticProperties' => $backupStaticProperties, 'backupStaticPropertiesExcludeList' => $backupStaticPropertiesExcludeList]; + } + /** + * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName + */ + private function shouldGlobalStateBePreserved(string $className, string $methodName) : ?bool + { + $metadataForMethod = MetadataRegistry::parser()->forMethod($className, $methodName); + if ($metadataForMethod->isPreserveGlobalState()->isNotEmpty()) { + $metadata = $metadataForMethod->isPreserveGlobalState()->asArray()[0]; + assert($metadata instanceof PreserveGlobalState); + return $metadata->enabled(); + } + $metadataForClass = MetadataRegistry::parser()->forClass($className); + if ($metadataForClass->isPreserveGlobalState()->isNotEmpty()) { + $metadata = $metadataForClass->isPreserveGlobalState()->asArray()[0]; + assert($metadata instanceof PreserveGlobalState); + return $metadata->enabled(); + } + return null; + } + /** + * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName + */ + private function shouldTestMethodBeRunInSeparateProcess(string $className, string $methodName) : bool + { + if (MetadataRegistry::parser()->forClass($className)->isRunTestsInSeparateProcesses()->isNotEmpty()) { + return \true; + } + if (MetadataRegistry::parser()->forMethod($className, $methodName)->isRunInSeparateProcess()->isNotEmpty()) { + return \true; + } + return \false; + } + /** + * @psalm-param class-string $className + */ + private function shouldAllTestMethodsOfTestClassBeRunInSingleSeparateProcess(string $className) : bool + { + return MetadataRegistry::parser()->forClass($className)->isRunClassInSeparateProcess()->isNotEmpty(); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Framework; + +use const LC_ALL; +use const LC_COLLATE; +use const LC_CTYPE; +use const LC_MONETARY; +use const LC_NUMERIC; +use const LC_TIME; +use const PATHINFO_FILENAME; +use const PHP_EOL; +use const PHP_URL_PATH; +use function array_keys; +use function array_merge; +use function array_values; +use function assert; +use function basename; +use function chdir; +use function class_exists; +use function clearstatcache; +use function count; +use function defined; +use function explode; +use function getcwd; +use function implode; +use function in_array; +use function ini_set; +use function is_array; +use function is_callable; +use function is_int; +use function is_object; +use function is_string; +use function libxml_clear_errors; +use function method_exists; +use function ob_end_clean; +use function ob_get_clean; +use function ob_get_contents; +use function ob_get_level; +use function ob_start; +use function parse_url; +use function pathinfo; +use function preg_replace; +use function setlocale; +use function sprintf; +use function str_contains; +use function trim; +use AssertionError; +use PHPUnit\DeepCopy\DeepCopy; +use PHPUnit\Event; +use PHPUnit\Event\NoPreviousThrowableException; +use PHPUnit\Event\TestData\MoreThanOneDataSetFromDataProviderException; +use PHPUnit\Framework\Constraint\Exception as ExceptionConstraint; +use PHPUnit\Framework\Constraint\ExceptionCode; +use PHPUnit\Framework\Constraint\ExceptionMessageIsOrContains; +use PHPUnit\Framework\Constraint\ExceptionMessageMatchesRegularExpression; +use PHPUnit\Framework\MockObject\Exception as MockObjectException; +use PHPUnit\Framework\MockObject\Generator\Generator as MockGenerator; +use PHPUnit\Framework\MockObject\MockBuilder; +use PHPUnit\Framework\MockObject\MockObject; +use PHPUnit\Framework\MockObject\MockObjectInternal; +use PHPUnit\Framework\MockObject\Rule\AnyInvokedCount as AnyInvokedCountMatcher; +use PHPUnit\Framework\MockObject\Rule\InvokedAtLeastCount as InvokedAtLeastCountMatcher; +use PHPUnit\Framework\MockObject\Rule\InvokedAtLeastOnce as InvokedAtLeastOnceMatcher; +use PHPUnit\Framework\MockObject\Rule\InvokedAtMostCount as InvokedAtMostCountMatcher; +use PHPUnit\Framework\MockObject\Rule\InvokedCount as InvokedCountMatcher; +use PHPUnit\Framework\MockObject\Stub; +use PHPUnit\Framework\MockObject\Stub\ConsecutiveCalls as ConsecutiveCallsStub; +use PHPUnit\Framework\MockObject\Stub\Exception as ExceptionStub; +use PHPUnit\Framework\MockObject\Stub\ReturnArgument as ReturnArgumentStub; +use PHPUnit\Framework\MockObject\Stub\ReturnCallback as ReturnCallbackStub; +use PHPUnit\Framework\MockObject\Stub\ReturnSelf as ReturnSelfStub; +use PHPUnit\Framework\MockObject\Stub\ReturnStub; +use PHPUnit\Framework\MockObject\Stub\ReturnValueMap as ReturnValueMapStub; +use PHPUnit\Framework\TestSize\TestSize; +use PHPUnit\Framework\TestStatus\TestStatus; +use PHPUnit\Metadata\Api\Groups; +use PHPUnit\Metadata\Api\HookMethods; +use PHPUnit\Metadata\Api\Requirements; +use PHPUnit\Metadata\Parser\Registry as MetadataRegistry; +use PHPUnit\TestRunner\TestResult\PassedTests; +use PHPUnit\TextUI\Configuration\Registry as ConfigurationRegistry; +use PHPUnit\Util\Cloner; +use PHPUnit\Util\Test as TestUtil; +use ReflectionClass; +use ReflectionException; +use ReflectionObject; +use PHPUnit\SebastianBergmann\CodeCoverage\StaticAnalysisCacheNotConfiguredException; +use PHPUnit\SebastianBergmann\CodeCoverage\UnintentionallyCoveredCodeException; +use PHPUnit\SebastianBergmann\Comparator\Comparator; +use PHPUnit\SebastianBergmann\Comparator\Factory as ComparatorFactory; +use PHPUnit\SebastianBergmann\Diff\Differ; +use PHPUnit\SebastianBergmann\Diff\Output\UnifiedDiffOutputBuilder; +use PHPUnit\SebastianBergmann\Exporter\Exporter; +use PHPUnit\SebastianBergmann\GlobalState\ExcludeList as GlobalStateExcludeList; +use PHPUnit\SebastianBergmann\GlobalState\Restorer; +use PHPUnit\SebastianBergmann\GlobalState\Snapshot; +use PHPUnit\SebastianBergmann\Invoker\TimeoutException; +use PHPUnit\SebastianBergmann\ObjectEnumerator\Enumerator; +use PHPUnit\SebastianBergmann\RecursionContext\Context; +use Throwable; +/** + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Framework\Reorderable, \PHPUnit\Framework\SelfDescribing, \PHPUnit\Framework\Test +{ + private const LOCALE_CATEGORIES = [LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, LC_TIME]; + private ?bool $backupGlobals = null; + /** + * @psalm-var list + */ + private array $backupGlobalsExcludeList = []; + private ?bool $backupStaticProperties = null; + /** + * @psalm-var array> + */ + private array $backupStaticPropertiesExcludeList = []; + private ?Snapshot $snapshot = null; + private ?bool $runClassInSeparateProcess = null; + private ?bool $runTestInSeparateProcess = null; + private bool $preserveGlobalState = \false; + private bool $inIsolation = \false; + private ?string $expectedException = null; + private ?string $expectedExceptionMessage = null; + private ?string $expectedExceptionMessageRegExp = null; + private null|int|string $expectedExceptionCode = null; + /** + * @psalm-var list + */ + private array $providedTests = []; + private array $data = []; + private int|string $dataName = ''; + /** + * @psalm-var non-empty-string + */ + private string $name; + /** + * @psalm-var list + */ + private array $groups = []; + /** + * @psalm-var list + */ + private array $dependencies = []; + private array $dependencyInput = []; + /** + * @psalm-var array + */ + private array $iniSettings = []; + private array $locale = []; + /** + * @psalm-var list + */ + private array $mockObjects = []; + private bool $registerMockObjectsFromTestArgumentsRecursively = \false; + private TestStatus $status; + private int $numberOfAssertionsPerformed = 0; + private mixed $testResult = null; + private string $output = ''; + private ?string $outputExpectedRegex = null; + private ?string $outputExpectedString = null; + private bool $outputBufferingActive = \false; + private int $outputBufferingLevel; + private bool $outputRetrievedForAssertion = \false; + private bool $doesNotPerformAssertions = \false; + /** + * @psalm-var list + */ + private array $customComparators = []; + private ?Event\Code\TestMethod $testValueObjectForEvents = null; + private bool $wasPrepared = \false; + /** + * @psalm-var array + */ + private array $failureTypes = []; + /** + * Returns a matcher that matches when the method is executed + * zero or more times. + */ + public static final function any() : AnyInvokedCountMatcher + { + return new AnyInvokedCountMatcher(); + } + /** + * Returns a matcher that matches when the method is never executed. + */ + public static final function never() : InvokedCountMatcher + { + return new InvokedCountMatcher(0); + } + /** + * Returns a matcher that matches when the method is executed + * at least N times. + */ + public static final function atLeast(int $requiredInvocations) : InvokedAtLeastCountMatcher + { + return new InvokedAtLeastCountMatcher($requiredInvocations); + } + /** + * Returns a matcher that matches when the method is executed at least once. + */ + public static final function atLeastOnce() : InvokedAtLeastOnceMatcher + { + return new InvokedAtLeastOnceMatcher(); + } + /** + * Returns a matcher that matches when the method is executed exactly once. + */ + public static final function once() : InvokedCountMatcher + { + return new InvokedCountMatcher(1); + } + /** + * Returns a matcher that matches when the method is executed + * exactly $count times. + */ + public static final function exactly(int $count) : InvokedCountMatcher + { + return new InvokedCountMatcher($count); + } + /** + * Returns a matcher that matches when the method is executed + * at most N times. + */ + public static final function atMost(int $allowedInvocations) : InvokedAtMostCountMatcher + { + return new InvokedAtMostCountMatcher($allowedInvocations); + } + /** + * @deprecated Use $double->willReturn() instead of $double->will($this->returnValue()) + * @see https://github.com/sebastianbergmann/phpunit/issues/5423 + */ + public static final function returnValue(mixed $value) : ReturnStub + { + return new ReturnStub($value); + } + /** + * @deprecated Use $double->willReturnMap() instead of $double->will($this->returnValueMap()) + * @see https://github.com/sebastianbergmann/phpunit/issues/5423 + */ + public static final function returnValueMap(array $valueMap) : ReturnValueMapStub + { + return new ReturnValueMapStub($valueMap); + } + /** + * @deprecated Use $double->willReturnArgument() instead of $double->will($this->returnArgument()) + * @see https://github.com/sebastianbergmann/phpunit/issues/5423 + */ + public static final function returnArgument(int $argumentIndex) : ReturnArgumentStub + { + return new ReturnArgumentStub($argumentIndex); + } + /** + * @deprecated Use $double->willReturnCallback() instead of $double->will($this->returnCallback()) + * @see https://github.com/sebastianbergmann/phpunit/issues/5423 + */ + public static final function returnCallback(callable $callback) : ReturnCallbackStub + { + return new ReturnCallbackStub($callback); + } + /** + * @deprecated Use $double->willReturnSelf() instead of $double->will($this->returnSelf()) + * @see https://github.com/sebastianbergmann/phpunit/issues/5423 + */ + public static final function returnSelf() : ReturnSelfStub + { + return new ReturnSelfStub(); + } + public static final function throwException(Throwable $exception) : ExceptionStub + { + return new ExceptionStub($exception); + } + /** + * @deprecated Use $double->willReturn() instead of $double->will($this->onConsecutiveCalls()) + * @see https://github.com/sebastianbergmann/phpunit/issues/5423 + * @see https://github.com/sebastianbergmann/phpunit/issues/5425 + */ + public static final function onConsecutiveCalls(mixed ...$arguments) : ConsecutiveCallsStub + { + return new ConsecutiveCallsStub($arguments); + } + /** + * @psalm-param non-empty-string $name + * + * @internal This method is not covered by the backward compatibility promise for PHPUnit + */ + public function __construct(string $name) + { + $this->setName($name); + $this->status = TestStatus::unknown(); + } + /** + * This method is called before the first test of this test class is run. + */ + public static function setUpBeforeClass() : void + { + } + /** + * This method is called after the last test of this test class is run. + */ + public static function tearDownAfterClass() : void + { + } + /** + * This method is called before each test. + */ + protected function setUp() : void + { + } + /** + * Performs assertions shared by all tests of a test case. + * + * This method is called between setUp() and test. + */ + protected function assertPreConditions() : void + { + } + /** + * Performs assertions shared by all tests of a test case. + * + * This method is called between test and tearDown(). + */ + protected function assertPostConditions() : void + { + } + /** + * This method is called after each test. + */ + protected function tearDown() : void + { + } + /** + * Returns a string representation of the test case. + * + * @throws Exception + * + * @internal This method is not covered by the backward compatibility promise for PHPUnit + */ + public function toString() : string + { + $buffer = sprintf('%s::%s', (new ReflectionClass($this))->getName(), $this->name); + return $buffer . $this->dataSetAsStringWithData(); + } + /** + * @internal This method is not covered by the backward compatibility promise for PHPUnit + */ + public final function count() : int + { + return 1; + } + public final function getActualOutputForAssertion() : string + { + $this->outputRetrievedForAssertion = \true; + return $this->output(); + } public final function expectOutputRegex(string $expectedRegex) : void { $this->outputExpectedRegex = $expectedRegex; @@ -57719,7 +62069,6 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr * @throws CodeCoverageException * @throws Exception * @throws MoreThanOneDataSetFromDataProviderException - * @throws NoDataSetFromDataProviderException * @throws NoPreviousThrowableException * @throws ProcessIsolationException * @throws StaticAnalysisCacheNotConfiguredException @@ -57751,12 +62100,6 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr { return new MockBuilder($this, $className); } - public final function registerComparator(Comparator $comparator) : void - { - ComparatorFactory::getInstance()->register($comparator); - Event\Facade::emitter()->testRegisteredComparator($comparator::class); - $this->customComparators[] = $comparator; - } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ @@ -57802,7 +62145,7 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr if ($this->output === '') { return \false; } - if ($this->hasExpectationOnOutput()) { + if ($this->expectsOutput()) { return \false; } return \true; @@ -57827,12 +62170,14 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr /** * @internal This method is not covered by the backward compatibility promise for PHPUnit */ - public final function hasExpectationOnOutput() : bool + public final function expectsOutput() : bool { - return is_string($this->outputExpectedString) || is_string($this->outputExpectedRegex) || $this->outputRetrievedForAssertion; + return $this->hasExpectationOnOutput() || $this->outputRetrievedForAssertion; } /** * @internal This method is not covered by the backward compatibility promise for PHPUnit + * + * @deprecated */ public final function registerMockObjectsFromTestArgumentsRecursively() : void { @@ -57860,7 +62205,7 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr if ($this->inIsolation) { $this->invokeBeforeClassHookMethods($hookMethods, $emitter); } - if (method_exists(static::class, $this->name) && MetadataRegistry::parser()->forMethod(static::class, $this->name)->isDoesNotPerformAssertions()->isNotEmpty()) { + if (method_exists(static::class, $this->name) && MetadataRegistry::parser()->forClassAndMethod(static::class, $this->name)->isDoesNotPerformAssertions()->isNotEmpty()) { $this->doesNotPerformAssertions = \true; } $this->invokeBeforeTestHookMethods($hookMethods, $emitter); @@ -57878,25 +62223,40 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr $this->status = TestStatus::skipped($e->getMessage()); $emitter->testSkipped($this->valueObjectForEvents(), $e->getMessage()); } catch (AssertionError|\PHPUnit\Framework\AssertionFailedError $e) { + if (!$this->wasPrepared) { + $this->wasPrepared = \true; + $emitter->testPreparationFailed($this->valueObjectForEvents()); + } $this->status = TestStatus::failure($e->getMessage()); $emitter->testFailed($this->valueObjectForEvents(), Event\Code\ThrowableBuilder::from($e), Event\Code\ComparisonFailureBuilder::from($e)); } catch (TimeoutException $e) { $this->status = TestStatus::risky($e->getMessage()); } catch (Throwable $_e) { - $e = $_e; - $this->status = TestStatus::error($_e->getMessage()); - $emitter->testErrored($this->valueObjectForEvents(), Event\Code\ThrowableBuilder::from($_e)); + if ($this->isRegisteredFailure($_e)) { + $this->status = TestStatus::failure($_e->getMessage()); + $emitter->testFailed($this->valueObjectForEvents(), Event\Code\ThrowableBuilder::from($_e), null); + } else { + $e = $this->transformException($_e); + $this->status = TestStatus::error($e->getMessage()); + $emitter->testErrored($this->valueObjectForEvents(), Event\Code\ThrowableBuilder::from($e)); + } } - if ($this->stopOutputBuffering() && !isset($e)) { + $outputBufferingStopped = \false; + if (!isset($e) && $this->hasExpectationOnOutput() && $this->stopOutputBuffering()) { + $outputBufferingStopped = \true; $this->performAssertionsOnOutput(); } if ($this->status->isSuccess()) { - Event\Facade::emitter()->testPassed($this->valueObjectForEvents()); + $emitter->testPassed($this->valueObjectForEvents()); if (!$this->usesDataProvider()) { PassedTests::instance()->testMethodPassed($this->valueObjectForEvents(), $this->testResult); } } - $this->mockObjects = []; + try { + $this->mockObjects = []; + } catch (Throwable $t) { + Event\Facade::emitter()->testErrored($this->valueObjectForEvents(), Event\Code\ThrowableBuilder::from($t)); + } // Tear down the fixture. An exception raised in tearDown() will be // caught and passed on when no exception was raised before. try { @@ -57906,6 +62266,9 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr $this->invokeAfterClassHookMethods($hookMethods, $emitter); } } + } catch (AssertionError|\PHPUnit\Framework\AssertionFailedError $e) { + $this->status = TestStatus::failure($e->getMessage()); + $emitter->testFailed($this->valueObjectForEvents(), Event\Code\ThrowableBuilder::from($e), Event\Code\ComparisonFailureBuilder::from($e)); } catch (Throwable $exceptionRaisedDuringTearDown) { if (!isset($e)) { $this->status = TestStatus::error($exceptionRaisedDuringTearDown->getMessage()); @@ -57913,6 +62276,9 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr $emitter->testErrored($this->valueObjectForEvents(), Event\Code\ThrowableBuilder::from($exceptionRaisedDuringTearDown)); } } + if (!$outputBufferingStopped) { + $this->stopOutputBuffering(); + } clearstatcache(); if ($currentWorkingDirectory !== getcwd()) { chdir($currentWorkingDirectory); @@ -58053,6 +62419,7 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr */ public final function registerMockObject(MockObject $mockObject) : void { + assert($mockObject instanceof MockObjectInternal); $this->mockObjects[] = $mockObject; } /** @@ -58175,6 +62542,19 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr { return $this->wasPrepared; } + protected final function registerComparator(Comparator $comparator) : void + { + ComparatorFactory::getInstance()->register($comparator); + Event\Facade::emitter()->testRegisteredComparator($comparator::class); + $this->customComparators[] = $comparator; + } + /** + * @psalm-param class-string $classOrInterface + */ + protected final function registerFailureType(string $classOrInterface) : void + { + $this->failureTypes[$classOrInterface] = \true; + } /** * @throws AssertionFailedError * @throws Exception @@ -58205,6 +62585,8 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr * test is run. * * @throws Exception + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5214 */ protected function iniSet(string $varName, string $newValue) : void { @@ -58220,6 +62602,8 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr * resets the locale to its original value after the test is run. * * @throws Exception + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5216 */ protected function setLocale(mixed ...$arguments) : void { @@ -58239,36 +62623,6 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr throw new \PHPUnit\Framework\Exception('The locale functionality is not implemented on your platform, ' . 'the specified locale does not exist or the category name is ' . 'invalid.'); } } - /** - * Creates a test stub for the specified interface or class. - * - * @psalm-template RealInstanceType of object - * - * @psalm-param class-string $originalClassName - * - * @psalm-return Stub&RealInstanceType - * - * @throws \PHPUnit\Framework\MockObject\Exception - * @throws InvalidArgumentException - * @throws NoPreviousThrowableException - */ - protected function createStub(string $originalClassName) : Stub - { - $stub = $this->createTestDouble($originalClassName, \false); - Event\Facade::emitter()->testCreatedStub($originalClassName); - return $stub; - } - /** - * @psalm-param list $interfaces - * - * @throws \PHPUnit\Framework\MockObject\Exception - */ - protected function createStubForIntersectionOfInterfaces(array $interfaces) : Stub - { - $stub = $this->mockObjectGenerator()->getMockForInterfaces($interfaces); - Event\Facade::emitter()->testCreatedStubForIntersectionOfInterfaces($interfaces); - return $stub; - } /** * Creates a mock object for the specified interface or class. * @@ -58278,24 +62632,29 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr * * @psalm-return MockObject&RealInstanceType * - * @throws \PHPUnit\Framework\MockObject\Exception * @throws InvalidArgumentException + * @throws MockObjectException * @throws NoPreviousThrowableException */ protected function createMock(string $originalClassName) : MockObject { - $mock = $this->createTestDouble($originalClassName); + $mock = (new MockGenerator())->testDouble($originalClassName, \true, callOriginalConstructor: \false, callOriginalClone: \false, cloneArguments: \false, allowMockingUnknownTypes: \false); + assert($mock instanceof $originalClassName); + assert($mock instanceof MockObject); + $this->registerMockObject($mock); Event\Facade::emitter()->testCreatedMockObject($originalClassName); return $mock; } /** * @psalm-param list $interfaces * - * @throws \PHPUnit\Framework\MockObject\Exception + * @throws MockObjectException */ protected function createMockForIntersectionOfInterfaces(array $interfaces) : MockObject { - $mock = $this->mockObjectGenerator()->getMockForInterfaces($interfaces); + $mock = (new MockGenerator())->testDoubleForInterfaceIntersection($interfaces, \true); + assert($mock instanceof MockObject); + $this->registerMockObject($mock); Event\Facade::emitter()->testCreatedMockObjectForIntersectionOfInterfaces($interfaces); return $mock; } @@ -58308,8 +62667,8 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr * * @psalm-return MockObject&RealInstanceType * - * @throws \PHPUnit\Framework\MockObject\Exception * @throws InvalidArgumentException + * @throws MockObjectException * @throws NoPreviousThrowableException */ protected function createConfiguredMock(string $originalClassName, array $configuration) : MockObject @@ -58323,7 +62682,7 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr /** * Creates a partial mock object for the specified interface or class. * - * @psalm-param list $methods + * @psalm-param list $methods * * @psalm-template RealInstanceType of object * @@ -58331,8 +62690,8 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr * * @psalm-return MockObject&RealInstanceType * - * @throws \PHPUnit\Framework\MockObject\Exception * @throws InvalidArgumentException + * @throws MockObjectException */ protected function createPartialMock(string $originalClassName, array $methods) : MockObject { @@ -58349,8 +62708,10 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr * * @psalm-return MockObject&RealInstanceType * - * @throws \PHPUnit\Framework\MockObject\Exception * @throws InvalidArgumentException + * @throws MockObjectException + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5240 */ protected function createTestProxy(string $originalClassName, array $constructorArguments = []) : MockObject { @@ -58369,26 +62730,26 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr * * @psalm-return MockObject&RealInstanceType * - * @throws \PHPUnit\Framework\MockObject\Exception * @throws InvalidArgumentException + * @throws MockObjectException + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5241 */ protected function getMockForAbstractClass(string $originalClassName, array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = \true, bool $callOriginalClone = \true, bool $callAutoload = \true, array $mockedMethods = [], bool $cloneArguments = \false) : MockObject { - $mockObject = $this->mockObjectGenerator()->getMockForAbstractClass($originalClassName, $arguments, $mockClassName, $callOriginalConstructor, $callOriginalClone, $callAutoload, $mockedMethods, $cloneArguments); + $mockObject = (new MockGenerator())->mockObjectForAbstractClass($originalClassName, $arguments, $mockClassName, $callOriginalConstructor, $callOriginalClone, $callAutoload, $mockedMethods, $cloneArguments); $this->registerMockObject($mockObject); Event\Facade::emitter()->testCreatedMockObjectForAbstractClass($originalClassName); + assert($mockObject instanceof $originalClassName); + assert($mockObject instanceof MockObject); return $mockObject; } /** * Creates a mock object based on the given WSDL file. * - * @psalm-template RealInstanceType of object - * - * @psalm-param class-string|string $originalClassName - * - * @psalm-return MockObject&RealInstanceType + * @throws MockObjectException * - * @throws \PHPUnit\Framework\MockObject\Exception + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5242 */ protected function getMockFromWsdl(string $wsdlFile, string $originalClassName = '', string $mockClassName = '', array $methods = [], bool $callOriginalConstructor = \true, array $options = []) : MockObject { @@ -58397,10 +62758,11 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr $originalClassName = preg_replace('/\\W/', '', $fileName); } if (!class_exists($originalClassName)) { - eval($this->mockObjectGenerator()->generateClassFromWsdl($wsdlFile, $originalClassName, $methods, $options)); + eval((new MockGenerator())->generateClassFromWsdl($wsdlFile, $originalClassName, $methods, $options)); } - $mockObject = $this->mockObjectGenerator()->getMock($originalClassName, $methods, ['', $options], $mockClassName, $callOriginalConstructor, \false, \false); + $mockObject = (new MockGenerator())->testDouble($originalClassName, \true, $methods, ['', $options], $mockClassName, $callOriginalConstructor, \false, \false); Event\Facade::emitter()->testCreatedMockObjectFromWsdl($wsdlFile, $originalClassName, $mockClassName, $methods, $callOriginalConstructor, $options); + assert($mockObject instanceof MockObject); $this->registerMockObject($mockObject); return $mockObject; } @@ -58411,12 +62773,14 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr * * @psalm-param trait-string $traitName * - * @throws \PHPUnit\Framework\MockObject\Exception * @throws InvalidArgumentException + * @throws MockObjectException + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5243 */ protected function getMockForTrait(string $traitName, array $arguments = [], string $mockClassName = '', bool $callOriginalConstructor = \true, bool $callOriginalClone = \true, bool $callAutoload = \true, array $mockedMethods = [], bool $cloneArguments = \false) : MockObject { - $mockObject = $this->mockObjectGenerator()->getMockForTrait($traitName, $arguments, $mockClassName, $callOriginalConstructor, $callOriginalClone, $callAutoload, $mockedMethods, $cloneArguments); + $mockObject = (new MockGenerator())->mockObjectForTrait($traitName, $arguments, $mockClassName, $callOriginalConstructor, $callOriginalClone, $callAutoload, $mockedMethods, $cloneArguments); $this->registerMockObject($mockObject); Event\Facade::emitter()->testCreatedMockObjectForTrait($traitName); return $mockObject; @@ -58426,11 +62790,17 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr * * @psalm-param trait-string $traitName * - * @throws \PHPUnit\Framework\MockObject\Exception + * @throws MockObjectException + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5244 */ protected function getObjectForTrait(string $traitName, array $arguments = [], string $traitClassName = '', bool $callOriginalConstructor = \true, bool $callOriginalClone = \true, bool $callAutoload = \true) : object { - return $this->mockObjectGenerator()->getObjectForTrait($traitName, $traitClassName, $callAutoload, $callOriginalConstructor, $arguments); + return (new MockGenerator())->objectForTrait($traitName, $traitClassName, $callAutoload, $callOriginalConstructor, $arguments); + } + protected function transformException(Throwable $t) : Throwable + { + return $t; } /** * This method is called when a test method did not execute successfully. @@ -58540,13 +62910,6 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr Event\Facade::emitter()->testSkipped($this->valueObjectForEvents(), $message); $this->status = TestStatus::skipped($message); } - private function mockObjectGenerator() : MockGenerator - { - if ($this->mockObjectGenerator === null) { - $this->mockObjectGenerator = new MockGenerator(); - } - return $this->mockObjectGenerator; - } private function startOutputBuffering() : void { ob_start(); @@ -58558,11 +62921,16 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr */ private function stopOutputBuffering() : bool { - if (ob_get_level() !== $this->outputBufferingLevel) { - while (ob_get_level() >= $this->outputBufferingLevel) { + $bufferingLevel = ob_get_level(); + if ($bufferingLevel !== $this->outputBufferingLevel) { + if ($bufferingLevel > $this->outputBufferingLevel) { + $message = 'Test code or tested code did not close its own output buffers'; + } else { + $message = 'Test code or tested code closed output buffers other than its own'; + } + while (ob_get_level() >= $this->outputBufferingLevel) { ob_end_clean(); } - $message = 'Test code or tested code did not (only) close its own output buffers'; Event\Facade::emitter()->testConsideredRisky($this->valueObjectForEvents(), $message); $this->status = TestStatus::risky($message); return \false; @@ -58658,6 +63026,9 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr } return !in_array($mock, $enumerator->enumerate($this->testResult), \true); } + /** + * @deprecated + */ private function registerMockObjectsFromTestArguments(array $testArguments, Context $context = new Context()) : void { if ($this->registerMockObjectsFromTestArgumentsRecursively) { @@ -58667,13 +63038,14 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr } } } else { - foreach ($testArguments as $testArgument) { + foreach ($testArguments as &$testArgument) { if ($testArgument instanceof MockObject) { $testArgument = Cloner::clone($testArgument); $this->registerMockObject($testArgument); } elseif (is_array($testArgument) && !$context->contains($testArgument)) { + $testArgumentCopy = $testArgument; $context->add($testArgument); - $this->registerMockObjectsFromTestArguments($testArgument, $context); + $this->registerMockObjectsFromTestArguments($testArgumentCopy, $context); } } } @@ -58754,21 +63126,6 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr } return TestUtil::isTestMethod($class->getMethod($methodName)); } - /** - * @psalm-template RealInstanceType of object - * - * @psalm-param class-string $originalClassName - * - * @psalm-return MockObject&RealInstanceType - * - * @throws \PHPUnit\Framework\MockObject\Exception - * @throws InvalidArgumentException - * @throws NoPreviousThrowableException - */ - private function createTestDouble(string $originalClassName, bool $register = \true) : MockObject - { - return $this->getMockBuilder($originalClassName)->disableOriginalConstructor()->disableOriginalClone()->disableArgumentCloning()->disallowMockingUnknownTypes()->getMock($register); - } /** * @throws Exception * @throws ExpectationFailedException @@ -58781,7 +63138,7 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr if ($this->outputExpectedRegex !== null) { $this->assertMatchesRegularExpression($this->outputExpectedRegex, $this->output); } elseif ($this->outputExpectedString !== null) { - $this->assertEquals($this->outputExpectedString, $this->output); + $this->assertSame($this->outputExpectedString, $this->output); } } catch (\PHPUnit\Framework\ExpectationFailedException $e) { $this->status = TestStatus::failure($e->getMessage()); @@ -58789,26 +63146,44 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr throw $e; } } + /** + * @throws Throwable + */ private function invokeBeforeClassHookMethods(array $hookMethods, Event\Emitter $emitter) : void { $this->invokeHookMethods($hookMethods['beforeClass'], $emitter, 'testBeforeFirstTestMethodCalled', 'testBeforeFirstTestMethodFinished'); } + /** + * @throws Throwable + */ private function invokeBeforeTestHookMethods(array $hookMethods, Event\Emitter $emitter) : void { $this->invokeHookMethods($hookMethods['before'], $emitter, 'testBeforeTestMethodCalled', 'testBeforeTestMethodFinished'); } + /** + * @throws Throwable + */ private function invokePreConditionHookMethods(array $hookMethods, Event\Emitter $emitter) : void { $this->invokeHookMethods($hookMethods['preCondition'], $emitter, 'testPreConditionCalled', 'testPreConditionFinished'); } + /** + * @throws Throwable + */ private function invokePostConditionHookMethods(array $hookMethods, Event\Emitter $emitter) : void { $this->invokeHookMethods($hookMethods['postCondition'], $emitter, 'testPostConditionCalled', 'testPostConditionFinished'); } + /** + * @throws Throwable + */ private function invokeAfterTestHookMethods(array $hookMethods, Event\Emitter $emitter) : void { $this->invokeHookMethods($hookMethods['after'], $emitter, 'testAfterTestMethodCalled', 'testAfterTestMethodFinished'); } + /** + * @throws Throwable + */ private function invokeAfterClassHookMethods(array $hookMethods, Event\Emitter $emitter) : void { $this->invokeHookMethods($hookMethods['afterClass'], $emitter, 'testAfterLastTestMethodCalled', 'testAfterLastTestMethodFinished'); @@ -58817,6 +63192,8 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr * @psalm-param list $hookMethods * @psalm-param 'testBeforeFirstTestMethodCalled'|'testBeforeTestMethodCalled'|'testPreConditionCalled'|'testPostConditionCalled'|'testAfterTestMethodCalled'|'testAfterLastTestMethodCalled' $calledMethod * @psalm-param 'testBeforeFirstTestMethodFinished'|'testBeforeTestMethodFinished'|'testPreConditionFinished'|'testPostConditionFinished'|'testAfterTestMethodFinished'|'testAfterLastTestMethodFinished' $finishedMethod + * + * @throws Throwable */ private function invokeHookMethods(array $hookMethods, Event\Emitter $emitter, string $calledMethod, string $finishedMethod) : void { @@ -58825,14 +63202,23 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr if ($this->methodDoesNotExistOrIsDeclaredInTestCase($methodName)) { continue; } - $this->{$methodName}(); + try { + $this->{$methodName}(); + } catch (Throwable $t) { + } $methodInvoked = new Event\Code\ClassMethod(static::class, $methodName); $emitter->{$calledMethod}(static::class, $methodInvoked); $methodsInvoked[] = $methodInvoked; + if (isset($t)) { + break; + } } if (!empty($methodsInvoked)) { $emitter->{$finishedMethod}(static::class, ...$methodsInvoked); } + if (isset($t)) { + throw $t; + } } private function methodDoesNotExistOrIsDeclaredInTestCase(string $methodName) : bool { @@ -58842,7 +63228,7 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr /** * @throws ExpectationFailedException */ - private function verifyExceptionExpectations(Throwable|\Exception $exception) : void + private function verifyExceptionExpectations(\Exception|Throwable $exception) : void { if ($this->expectedException !== null) { $this->assertThat($exception, new ExceptionConstraint($this->expectedException)); @@ -58875,6 +63261,75 @@ abstract class TestCase extends \PHPUnit\Framework\Assert implements \PHPUnit\Fr throw new \PHPUnit\Framework\AssertionFailedError(sprintf('Failed asserting that exception with code "%s" is thrown', $this->expectedExceptionCode)); } } + private function isRegisteredFailure(Throwable $t) : bool + { + foreach (array_keys($this->failureTypes) as $failureType) { + if ($t instanceof $failureType) { + return \true; + } + } + return \false; + } + /** + * @internal This method is not covered by the backward compatibility promise for PHPUnit + */ + private function hasExpectationOnOutput() : bool + { + return is_string($this->outputExpectedString) || is_string($this->outputExpectedRegex); + } + /** + * Creates a test stub for the specified interface or class. + * + * @psalm-template RealInstanceType of object + * + * @psalm-param class-string $originalClassName + * + * @psalm-return Stub&RealInstanceType + * + * @throws InvalidArgumentException + * @throws MockObjectException + * @throws NoPreviousThrowableException + */ + protected static function createStub(string $originalClassName) : Stub + { + $stub = (new MockGenerator())->testDouble($originalClassName, \true, callOriginalConstructor: \false, callOriginalClone: \false, cloneArguments: \false, allowMockingUnknownTypes: \false); + Event\Facade::emitter()->testCreatedStub($originalClassName); + assert($stub instanceof $originalClassName); + assert($stub instanceof Stub); + return $stub; + } + /** + * @psalm-param list $interfaces + * + * @throws MockObjectException + */ + protected static function createStubForIntersectionOfInterfaces(array $interfaces) : Stub + { + $stub = (new MockGenerator())->testDoubleForInterfaceIntersection($interfaces, \false); + Event\Facade::emitter()->testCreatedStubForIntersectionOfInterfaces($interfaces); + return $stub; + } + /** + * Creates (and configures) a test stub for the specified interface or class. + * + * @psalm-template RealInstanceType of object + * + * @psalm-param class-string $originalClassName + * + * @psalm-return Stub&RealInstanceType + * + * @throws InvalidArgumentException + * @throws MockObjectException + * @throws NoPreviousThrowableException + */ + protected static final function createConfiguredStub(string $originalClassName, array $configuration) : Stub + { + $o = self::createStub($originalClassName); + foreach ($configuration as $method => $return) { + $o->method($method)->willReturn($return); + } + return $o; + } } enable(); + error_clear_last(); + if ($this->shouldErrorHandlerBeUsed($test)) { + ErrorHandler::instance()->enable(); + } $collectCodeCoverage = CodeCoverage::instance()->isActive() && $shouldCodeCoverageBeCollected; if ($collectCodeCoverage) { CodeCoverage::instance()->start($test); @@ -58983,7 +63440,7 @@ final class TestRunner $error = \true; } $test->addToAssertionCount(\PHPUnit\Framework\Assert::getCount()); - if ($this->configuration->reportUselessTests() && $test->numberOfAssertionsPerformed() === 0) { + if ($this->configuration->reportUselessTests() && !$test->doesNotPerformAssertions() && $test->numberOfAssertionsPerformed() === 0) { $risky = \true; } if (!$error && !$failure && !$incomplete && !$skipped && !$risky && $this->configuration->requireCoverageMetadata() && !$this->hasCoverageMetadata($test::class, $test->name())) { @@ -59012,17 +63469,11 @@ final class TestRunner } } ErrorHandler::instance()->disable(); - if (isset($e)) { - if ($test->wasPrepared()) { - Event\Facade::emitter()->testFinished($test->valueObjectForEvents(), $test->numberOfAssertionsPerformed()); - } - return; - } - if ($this->configuration->reportUselessTests() && !$test->doesNotPerformAssertions() && $test->numberOfAssertionsPerformed() === 0) { + if (!$error && !$incomplete && !$skipped && $this->configuration->reportUselessTests() && !$test->doesNotPerformAssertions() && $test->numberOfAssertionsPerformed() === 0) { Event\Facade::emitter()->testConsideredRisky($test->valueObjectForEvents(), 'This test did not perform any assertions'); } if ($test->doesNotPerformAssertions() && $test->numberOfAssertionsPerformed() > 0) { - Event\Facade::emitter()->testConsideredRisky($test->valueObjectForEvents(), sprintf('This test is not expected to perform assertions but performed %d assertions', $test->numberOfAssertionsPerformed())); + Event\Facade::emitter()->testConsideredRisky($test->valueObjectForEvents(), sprintf('This test is not expected to perform assertions but performed %d assertion%s', $test->numberOfAssertionsPerformed(), $test->numberOfAssertionsPerformed() > 1 ? 's' : '')); } if ($test->hasUnexpectedOutput()) { Event\Facade::emitter()->testPrintedUnexpectedOutput($test->output()); @@ -59066,7 +63517,9 @@ final class TestRunner $includedFiles = GlobalState::getIncludedFilesAsString(); $iniSettings = GlobalState::getIniSettingsAsString(); } + $exportObjects = Event\Facade::emitter()->exportsObjects() ? 'true' : 'false'; $coverage = CodeCoverage::instance()->isActive() ? 'true' : 'false'; + $linesToBeIgnored = var_export(CodeCoverage::instance()->linesToBeIgnored(), \true); if (defined('PHPUNIT_COMPOSER_INSTALL')) { $composerAutoload = var_export(PHPUNIT_COMPOSER_INSTALL, \true); } else { @@ -59089,13 +63542,14 @@ final class TestRunner $includePath = "'." . $includePath . ".'"; $offset = hrtime(); $serializedConfiguration = $this->saveConfigurationForChildProcess(); - $var = ['bootstrap' => $bootstrap, 'composerAutoload' => $composerAutoload, 'phar' => $phar, 'filename' => $class->getFileName(), 'className' => $class->getName(), 'collectCodeCoverageInformation' => $coverage, 'data' => $data, 'dataName' => $dataName, 'dependencyInput' => $dependencyInput, 'constants' => $constants, 'globals' => $globals, 'include_path' => $includePath, 'included_files' => $includedFiles, 'iniSettings' => $iniSettings, 'name' => $test->name(), 'offsetSeconds' => $offset[0], 'offsetNanoseconds' => $offset[1], 'serializedConfiguration' => $serializedConfiguration]; + $processResultFile = tempnam(sys_get_temp_dir(), 'phpunit_'); + $var = ['bootstrap' => $bootstrap, 'composerAutoload' => $composerAutoload, 'phar' => $phar, 'filename' => $class->getFileName(), 'className' => $class->getName(), 'collectCodeCoverageInformation' => $coverage, 'linesToBeIgnored' => $linesToBeIgnored, 'data' => $data, 'dataName' => $dataName, 'dependencyInput' => $dependencyInput, 'constants' => $constants, 'globals' => $globals, 'include_path' => $includePath, 'included_files' => $includedFiles, 'iniSettings' => $iniSettings, 'name' => $test->name(), 'offsetSeconds' => $offset[0], 'offsetNanoseconds' => $offset[1], 'serializedConfiguration' => $serializedConfiguration, 'processResultFile' => $processResultFile, 'exportObjects' => $exportObjects]; if (!$runEntireClass) { $var['methodName'] = $test->name(); } $template->setVar($var); $php = AbstractPhpProcess::factory(); - $php->runTestJob($template->render(), $test); + $php->runTestJob($template->render(), $test, $processResultFile); @unlink($serializedConfiguration); } /** @@ -59170,7 +63624,7 @@ final class TestRunner */ private function saveConfigurationForChildProcess() : string { - $path = tempnam(sys_get_temp_dir(), 'PHPUnit'); + $path = tempnam(sys_get_temp_dir(), 'phpunit_'); if (!$path) { throw new \PHPUnit\Framework\ProcessIsolationException(); } @@ -59179,6 +63633,13 @@ final class TestRunner } return $path; } + private function shouldErrorHandlerBeUsed(\PHPUnit\Framework\TestCase $test) : bool + { + if (MetadataRegistry::parser()->forMethod($test::class, $test->name())->isWithoutErrorHandler()->isNotEmpty()) { + return \false; + } + return \true; + } } > */ - protected array $groups = []; - protected ?array $requiredTests = null; + private array $groups = []; + private ?array $requiredTests = null; /** * @psalm-var list */ private array $tests = []; private ?array $providedTests = null; private ?Factory $iteratorFilter = null; - private readonly bool $stopOnError; - private readonly bool $stopOnFailure; - private readonly bool $stopOnWarning; - private readonly bool $stopOnRisky; - private readonly bool $stopOnIncomplete; - private readonly bool $stopOnSkipped; - private readonly bool $stopOnDefect; - public static function empty(string $name = null) : static + /** + * @psalm-param non-empty-string $name + */ + public static function empty(string $name) : static { - if ($name === null) { - $name = ''; - } return new static($name); } /** @@ -60079,7 +64535,7 @@ class TestSuite implements IteratorAggregate, \PHPUnit\Framework\Reorderable, \P Event\Facade::emitter()->testRunnerTriggeredWarning(sprintf('Class "%s" has no public constructor.', $class->getName())); return $testSuite; } - foreach ((new Reflection())->publicMethodsInTestClass($class) as $method) { + foreach (Reflection::publicMethodsInTestClass($class) as $method) { if ($method->getDeclaringClass()->getName() === \PHPUnit\Framework\Assert::class) { continue; } @@ -60096,24 +64552,19 @@ class TestSuite implements IteratorAggregate, \PHPUnit\Framework\Reorderable, \P } return $testSuite; } + /** + * @psalm-param non-empty-string $name + */ private final function __construct(string $name) { $this->name = $name; - $configuration = Registry::get(); - $this->stopOnError = $configuration->stopOnError(); - $this->stopOnFailure = $configuration->stopOnFailure(); - $this->stopOnWarning = $configuration->stopOnWarning(); - $this->stopOnRisky = $configuration->stopOnRisky(); - $this->stopOnIncomplete = $configuration->stopOnIncomplete(); - $this->stopOnSkipped = $configuration->stopOnSkipped(); - $this->stopOnDefect = $configuration->stopOnDefect(); } /** * Returns a string representation of the test suite. */ public function toString() : string { - return $this->getName(); + return $this->name(); } /** * Adds a test to the suite. @@ -60125,7 +64576,7 @@ class TestSuite implements IteratorAggregate, \PHPUnit\Framework\Reorderable, \P $this->tests[] = $test; $this->clearCaches(); if ($test instanceof self && empty($groups)) { - $groups = $test->getGroups(); + $groups = $test->groups(); } if ($this->containsOnlyVirtualGroups($groups)) { $groups[] = 'default'; @@ -60210,9 +64661,9 @@ class TestSuite implements IteratorAggregate, \PHPUnit\Framework\Reorderable, \P return empty($this->tests); } /** - * Returns the name of the suite. + * @psalm-return non-empty-string */ - public function getName() : string + public function name() : string { return $this->name; } @@ -60221,11 +64672,11 @@ class TestSuite implements IteratorAggregate, \PHPUnit\Framework\Reorderable, \P * * @psalm-return list */ - public function getGroups() : array + public function groups() : array { return array_map('strval', array_keys($this->groups)); } - public function getGroupDetails() : array + public function groupDetails() : array { return $this->groups; } @@ -60249,7 +64700,8 @@ class TestSuite implements IteratorAggregate, \PHPUnit\Framework\Reorderable, \P return; } foreach ($this as $test) { - if ($this->shouldStop()) { + if (TestResultFacade::shouldStop()) { + $emitter->testRunnerExecutionAborted(); break; } $test->run(); @@ -60316,9 +64768,7 @@ class TestSuite implements IteratorAggregate, \PHPUnit\Framework\Reorderable, \P } foreach ($this->tests as $test) { if (!$test instanceof \PHPUnit\Framework\Reorderable) { - // @codeCoverageIgnoreStart continue; - // @codeCoverageIgnoreEnd } $this->providedTests = \PHPUnit\Framework\ExecutionOrderDependency::mergeUnique($this->providedTests, $test->provides()); } @@ -60334,9 +64784,7 @@ class TestSuite implements IteratorAggregate, \PHPUnit\Framework\Reorderable, \P $this->requiredTests = []; foreach ($this->tests as $test) { if (!$test instanceof \PHPUnit\Framework\Reorderable) { - // @codeCoverageIgnoreStart continue; - // @codeCoverageIgnoreEnd } $this->requiredTests = \PHPUnit\Framework\ExecutionOrderDependency::mergeUnique(\PHPUnit\Framework\ExecutionOrderDependency::filterInvalid($this->requiredTests), $test->requires()); } @@ -60346,7 +64794,7 @@ class TestSuite implements IteratorAggregate, \PHPUnit\Framework\Reorderable, \P } public function sortId() : string { - return $this->getName() . '::class'; + return $this->name() . '::class'; } /** * @psalm-assert-if-true class-string $this->name @@ -60356,7 +64804,7 @@ class TestSuite implements IteratorAggregate, \PHPUnit\Framework\Reorderable, \P return class_exists($this->name, \false) && is_subclass_of($this->name, \PHPUnit\Framework\TestCase::class); } /** - * @throws \PHPUnit\Event\TestData\MoreThanOneDataSetFromDataProviderException + * @throws Event\TestData\MoreThanOneDataSetFromDataProviderException * @throws Exception */ protected function addTestMethod(ReflectionClass $class, ReflectionMethod $method) : void @@ -60394,28 +64842,6 @@ class TestSuite implements IteratorAggregate, \PHPUnit\Framework\Reorderable, \P $reflector = new ReflectionClass($this->name); return !$reflector->hasMethod($methodName) || $reflector->getMethod($methodName)->getDeclaringClass()->getName() === \PHPUnit\Framework\TestCase::class; } - private function shouldStop() : bool - { - if (($this->stopOnDefect || $this->stopOnError) && Facade::hasTestErroredEvents()) { - return \true; - } - if (($this->stopOnDefect || $this->stopOnFailure) && Facade::hasTestFailedEvents()) { - return \true; - } - if (($this->stopOnDefect || $this->stopOnWarning) && Facade::hasWarningEvents()) { - return \true; - } - if (($this->stopOnDefect || $this->stopOnRisky) && Facade::hasTestConsideredRiskyEvents()) { - return \true; - } - if ($this->stopOnSkipped && Facade::hasTestSkippedEvents()) { - return \true; - } - if ($this->stopOnIncomplete && Facade::hasTestMarkedIncompleteEvents()) { - return \true; - } - return \false; - } /** * @throws Exception */ @@ -60454,7 +64880,7 @@ class TestSuite implements IteratorAggregate, \PHPUnit\Framework\Reorderable, \P $methodsCalledBeforeFirstTest[] = $methodCalledBeforeFirstTest; call_user_func([$this->name, $beforeClassMethod]); } - } catch (\PHPUnit\Framework\SkippedTestSuiteError|\PHPUnit\Framework\SkippedTest $e) { + } catch (\PHPUnit\Framework\SkippedTest|\PHPUnit\Framework\SkippedTestSuiteError $e) { $emitter->testSuiteSkipped($testSuiteValueObjectForEvents, $e->getMessage()); return \false; } catch (Throwable $t) { @@ -60580,9 +65006,9 @@ namespace PHPUnit\Logging; use const FILE_APPEND; use const LOCK_EX; use const PHP_EOL; -use function explode; use function file_put_contents; use function implode; +use function preg_split; use function str_repeat; use function strlen; use PHPUnit\Event\Event; @@ -60603,7 +65029,7 @@ final class EventLogger implements Tracer { $telemetryInfo = $this->telemetryInfo($event); $indentation = PHP_EOL . str_repeat(' ', strlen($telemetryInfo)); - $lines = explode(PHP_EOL, $event->asString()); + $lines = preg_split('/\\r\\n|\\r|\\n/', $event->asString()); file_put_contents($this->path, $telemetryInfo . implode($indentation, $lines) . PHP_EOL, FILE_APPEND | LOCK_EX); } private function telemetryInfo(Event $event) : string @@ -60666,9 +65092,9 @@ use PHPUnit\Event\Test\Errored; use PHPUnit\Event\Test\Failed; use PHPUnit\Event\Test\Finished; use PHPUnit\Event\Test\MarkedIncomplete; +use PHPUnit\Event\Test\PreparationStarted; use PHPUnit\Event\Test\Prepared; use PHPUnit\Event\Test\Skipped; -use PHPUnit\Event\TestData\NoDataSetFromDataProviderException; use PHPUnit\Event\TestSuite\Started; use PHPUnit\Event\UnknownSubscriberTypeException; use PHPUnit\TextUI\Output\Printer; @@ -60713,14 +65139,15 @@ final class JunitXmlLogger private ?DOMElement $currentTestCase = null; private ?HRTime $time = null; private bool $prepared = \false; + private bool $preparationFailed = \false; /** * @throws EventFacadeIsSealedException * @throws UnknownSubscriberTypeException */ - public function __construct(Printer $printer) + public function __construct(Printer $printer, Facade $facade) { $this->printer = $printer; - $this->registerSubscribers(); + $this->registerSubscribers($facade); $this->createDocument(); } public function flush() : void @@ -60769,11 +65196,23 @@ final class JunitXmlLogger } /** * @throws InvalidArgumentException - * @throws NoDataSetFromDataProviderException */ - public function testPrepared(Prepared $event) : void + public function testPreparationStarted(PreparationStarted $event) : void { $this->createTestCase($event); + } + /** + * @throws InvalidArgumentException + */ + public function testPreparationFailed() : void + { + $this->preparationFailed = \true; + } + /** + * @throws InvalidArgumentException + */ + public function testPrepared() : void + { $this->prepared = \true; } /** @@ -60781,11 +65220,13 @@ final class JunitXmlLogger */ public function testFinished(Finished $event) : void { + if ($this->preparationFailed) { + return; + } $this->handleFinish($event->telemetryInfo(), $event->numberOfAssertionsPerformed()); } /** * @throws InvalidArgumentException - * @throws NoDataSetFromDataProviderException */ public function testMarkedIncomplete(MarkedIncomplete $event) : void { @@ -60793,7 +65234,6 @@ final class JunitXmlLogger } /** * @throws InvalidArgumentException - * @throws NoDataSetFromDataProviderException */ public function testSkipped(Skipped $event) : void { @@ -60801,7 +65241,6 @@ final class JunitXmlLogger } /** * @throws InvalidArgumentException - * @throws NoDataSetFromDataProviderException */ public function testErrored(Errored $event) : void { @@ -60810,7 +65249,6 @@ final class JunitXmlLogger } /** * @throws InvalidArgumentException - * @throws NoDataSetFromDataProviderException */ public function testFailed(Failed $event) : void { @@ -60839,9 +65277,9 @@ final class JunitXmlLogger * @throws EventFacadeIsSealedException * @throws UnknownSubscriberTypeException */ - private function registerSubscribers() : void + private function registerSubscribers(Facade $facade) : void { - Facade::registerSubscribers(new \PHPUnit\Logging\JUnit\TestSuiteStartedSubscriber($this), new \PHPUnit\Logging\JUnit\TestSuiteFinishedSubscriber($this), new \PHPUnit\Logging\JUnit\TestPreparedSubscriber($this), new \PHPUnit\Logging\JUnit\TestFinishedSubscriber($this), new \PHPUnit\Logging\JUnit\TestErroredSubscriber($this), new \PHPUnit\Logging\JUnit\TestFailedSubscriber($this), new \PHPUnit\Logging\JUnit\TestMarkedIncompleteSubscriber($this), new \PHPUnit\Logging\JUnit\TestSkippedSubscriber($this), new \PHPUnit\Logging\JUnit\TestRunnerExecutionFinishedSubscriber($this)); + $facade->registerSubscribers(new \PHPUnit\Logging\JUnit\TestSuiteStartedSubscriber($this), new \PHPUnit\Logging\JUnit\TestSuiteFinishedSubscriber($this), new \PHPUnit\Logging\JUnit\TestPreparationStartedSubscriber($this), new \PHPUnit\Logging\JUnit\TestPreparationFailedSubscriber($this), new \PHPUnit\Logging\JUnit\TestPreparedSubscriber($this), new \PHPUnit\Logging\JUnit\TestFinishedSubscriber($this), new \PHPUnit\Logging\JUnit\TestErroredSubscriber($this), new \PHPUnit\Logging\JUnit\TestFailedSubscriber($this), new \PHPUnit\Logging\JUnit\TestMarkedIncompleteSubscriber($this), new \PHPUnit\Logging\JUnit\TestSkippedSubscriber($this), new \PHPUnit\Logging\JUnit\TestRunnerExecutionFinishedSubscriber($this)); } private function createDocument() : void { @@ -60852,7 +65290,6 @@ final class JunitXmlLogger } /** * @throws InvalidArgumentException - * @throws NoDataSetFromDataProviderException */ private function handleFault(Errored|Failed $event, string $type) : void { @@ -60872,7 +65309,6 @@ final class JunitXmlLogger } /** * @throws InvalidArgumentException - * @throws NoDataSetFromDataProviderException */ private function handleIncompleteOrSkipped(MarkedIncomplete|Skipped $event) : void { @@ -60889,7 +65325,6 @@ final class JunitXmlLogger } /** * @throws InvalidArgumentException - * @throws NoDataSetFromDataProviderException */ private function testAsString(Test $test) : string { @@ -60901,7 +65336,6 @@ final class JunitXmlLogger } /** * @throws InvalidArgumentException - * @throws NoDataSetFromDataProviderException */ private function name(Test $test) : string { @@ -60920,11 +65354,10 @@ final class JunitXmlLogger } /** * @throws InvalidArgumentException - * @throws NoDataSetFromDataProviderException * * @psalm-assert !null $this->currentTestCase */ - private function createTestCase(Prepared|MarkedIncomplete|Skipped|Errored|Failed $event) : void + private function createTestCase(Errored|Failed|MarkedIncomplete|PreparationStarted|Prepared|Skipped $event) : void { $testCase = $this->document->createElement('testcase'); $test = $event->test(); @@ -60984,7 +65417,6 @@ namespace PHPUnit\Logging\JUnit; use PHPUnit\Event\InvalidArgumentException; use PHPUnit\Event\Test\Errored; use PHPUnit\Event\Test\ErroredSubscriber; -use PHPUnit\Event\TestData\NoDataSetFromDataProviderException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ @@ -60992,7 +65424,6 @@ final class TestErroredSubscriber extends \PHPUnit\Logging\JUnit\Subscriber impl { /** * @throws InvalidArgumentException - * @throws NoDataSetFromDataProviderException */ public function notify(Errored $event) : void { @@ -61015,7 +65446,6 @@ namespace PHPUnit\Logging\JUnit; use PHPUnit\Event\InvalidArgumentException; use PHPUnit\Event\Test\Failed; use PHPUnit\Event\Test\FailedSubscriber; -use PHPUnit\Event\TestData\NoDataSetFromDataProviderException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ @@ -61023,7 +65453,6 @@ final class TestFailedSubscriber extends \PHPUnit\Logging\JUnit\Subscriber imple { /** * @throws InvalidArgumentException - * @throws NoDataSetFromDataProviderException */ public function notify(Failed $event) : void { @@ -61046,7 +65475,6 @@ namespace PHPUnit\Logging\JUnit; use PHPUnit\Event\InvalidArgumentException; use PHPUnit\Event\Test\Finished; use PHPUnit\Event\Test\FinishedSubscriber; -use PHPUnit\Event\TestData\NoDataSetFromDataProviderException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ @@ -61054,7 +65482,6 @@ final class TestFinishedSubscriber extends \PHPUnit\Logging\JUnit\Subscriber imp { /** * @throws InvalidArgumentException - * @throws NoDataSetFromDataProviderException */ public function notify(Finished $event) : void { @@ -61077,7 +65504,6 @@ namespace PHPUnit\Logging\JUnit; use PHPUnit\Event\InvalidArgumentException; use PHPUnit\Event\Test\MarkedIncomplete; use PHPUnit\Event\Test\MarkedIncompleteSubscriber; -use PHPUnit\Event\TestData\NoDataSetFromDataProviderException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ @@ -61085,7 +65511,6 @@ final class TestMarkedIncompleteSubscriber extends \PHPUnit\Logging\JUnit\Subscr { /** * @throws InvalidArgumentException - * @throws NoDataSetFromDataProviderException */ public function notify(MarkedIncomplete $event) : void { @@ -61105,10 +65530,67 @@ declare (strict_types=1); */ namespace PHPUnit\Logging\JUnit; +use PHPUnit\Event\InvalidArgumentException; +use PHPUnit\Event\Test\PreparationFailed; +use PHPUnit\Event\Test\PreparationFailedSubscriber; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class TestPreparationFailedSubscriber extends \PHPUnit\Logging\JUnit\Subscriber implements PreparationFailedSubscriber +{ + /** + * @throws InvalidArgumentException + */ + public function notify(PreparationFailed $event) : void + { + $this->logger()->testPreparationFailed(); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Logging\JUnit; + +use PHPUnit\Event\InvalidArgumentException; +use PHPUnit\Event\Test\PreparationStarted; +use PHPUnit\Event\Test\PreparationStartedSubscriber; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class TestPreparationStartedSubscriber extends \PHPUnit\Logging\JUnit\Subscriber implements PreparationStartedSubscriber +{ + /** + * @throws InvalidArgumentException + */ + public function notify(PreparationStarted $event) : void + { + $this->logger()->testPreparationStarted($event); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Logging\JUnit; + use PHPUnit\Event\InvalidArgumentException; use PHPUnit\Event\Test\Prepared; use PHPUnit\Event\Test\PreparedSubscriber; -use PHPUnit\Event\TestData\NoDataSetFromDataProviderException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ @@ -61116,11 +65598,10 @@ final class TestPreparedSubscriber extends \PHPUnit\Logging\JUnit\Subscriber imp { /** * @throws InvalidArgumentException - * @throws NoDataSetFromDataProviderException */ public function notify(Prepared $event) : void { - $this->logger()->testPrepared($event); + $this->logger()->testPrepared(); } } printer = $printer; - $this->registerSubscribers(); + $this->registerSubscribers($facade); $this->setFlowId(); } public function testSuiteStarted(TestSuiteStarted $event) : void @@ -61599,9 +66078,6 @@ final class TeamCityLogger $this->isSummaryTestCountPrinted = \true; $this->writeMessage('testCount', ['count' => $testSuite->count()]); } - if ($testSuite->isWithName() && $testSuite->name() === '') { - return; - } $parameters = ['name' => $testSuite->name()]; if ($testSuite->isForTestClass()) { assert($testSuite instanceof TestSuiteForTestClass); @@ -61616,9 +66092,6 @@ final class TeamCityLogger public function testSuiteFinished(TestSuiteFinished $event) : void { $testSuite = $event->testSuite(); - if ($testSuite->isWithName() && $testSuite->name() === '') { - return; - } $parameters = ['name' => $testSuite->name()]; if ($testSuite->isForTestMethodWithDataProvider()) { assert($testSuite instanceof TestSuiteForTestMethodWithDataProvider); @@ -61632,7 +66105,7 @@ final class TeamCityLogger $parameters = ['name' => $test->name()]; if ($test->isTestMethod()) { assert($test instanceof TestMethod); - $parameters['locationHint'] = sprintf('php_qn://%s::\\%s::%s', $test->file(), $test->className(), $test->methodName()); + $parameters['locationHint'] = sprintf('php_qn://%s::\\%s::%s', $test->file(), $test->className(), $test->name()); } $this->writeMessage('testStarted', $parameters); $this->time = $event->telemetryInfo()->time(); @@ -61711,9 +66184,9 @@ final class TeamCityLogger * @throws EventFacadeIsSealedException * @throws UnknownSubscriberTypeException */ - private function registerSubscribers() : void + private function registerSubscribers(Facade $facade) : void { - Facade::registerSubscribers(new \PHPUnit\Logging\TeamCity\TestSuiteStartedSubscriber($this), new \PHPUnit\Logging\TeamCity\TestSuiteFinishedSubscriber($this), new \PHPUnit\Logging\TeamCity\TestPreparedSubscriber($this), new \PHPUnit\Logging\TeamCity\TestFinishedSubscriber($this), new \PHPUnit\Logging\TeamCity\TestErroredSubscriber($this), new \PHPUnit\Logging\TeamCity\TestFailedSubscriber($this), new \PHPUnit\Logging\TeamCity\TestMarkedIncompleteSubscriber($this), new \PHPUnit\Logging\TeamCity\TestSkippedSubscriber($this), new \PHPUnit\Logging\TeamCity\TestConsideredRiskySubscriber($this), new \PHPUnit\Logging\TeamCity\TestRunnerExecutionFinishedSubscriber($this)); + $facade->registerSubscribers(new \PHPUnit\Logging\TeamCity\TestSuiteStartedSubscriber($this), new \PHPUnit\Logging\TeamCity\TestSuiteFinishedSubscriber($this), new \PHPUnit\Logging\TeamCity\TestPreparedSubscriber($this), new \PHPUnit\Logging\TeamCity\TestFinishedSubscriber($this), new \PHPUnit\Logging\TeamCity\TestErroredSubscriber($this), new \PHPUnit\Logging\TeamCity\TestFailedSubscriber($this), new \PHPUnit\Logging\TeamCity\TestMarkedIncompleteSubscriber($this), new \PHPUnit\Logging\TeamCity\TestSkippedSubscriber($this), new \PHPUnit\Logging\TeamCity\TestConsideredRiskySubscriber($this), new \PHPUnit\Logging\TeamCity\TestRunnerExecutionFinishedSubscriber($this)); } private function setFlowId() : void { @@ -61951,6 +66424,7 @@ use PHPUnit\Framework\TestCase; use PHPUnit\Metadata\Parser\Registry as MetadataRegistry; use PHPUnit\Metadata\TestDox; use PHPUnit\Util\Color; +use ReflectionEnum; use ReflectionMethod; use ReflectionObject; use PHPUnit\SebastianBergmann\Exporter\Exporter; @@ -62093,7 +66567,12 @@ final class NamePrettifier if (is_object($value)) { $reflector = new ReflectionObject($value); if ($reflector->isEnum()) { - $value = $value->value; + $enumReflector = new ReflectionEnum($value); + if ($enumReflector->isBacked()) { + $value = $value->value; + } else { + $value = $value->name; + } } elseif ($reflector->hasMethod('__toString')) { $value = (string) $value; } else { @@ -62102,6 +66581,9 @@ final class NamePrettifier } if (!is_scalar($value)) { $value = gettype($value); + if ($value === 'NULL') { + $value = 'null'; + } } if (is_bool($value) || is_int($value) || is_float($value)) { $value = (new Exporter())->export($value); @@ -62163,11 +66645,15 @@ final class PlainTextRenderer $result = []; foreach ($tests as $test) { $prettifiedMethodName = $test->test()->testDox()->prettifiedMethodName(); + $success = \true; + if ($test->status()->isError() || $test->status()->isFailure() || $test->status()->isIncomplete() || $test->status()->isSkipped()) { + $success = \false; + } if (!isset($result[$prettifiedMethodName])) { - $result[$prettifiedMethodName] = $test->status()->isSuccess() ? 'x' : ' '; + $result[$prettifiedMethodName] = $success ? 'x' : ' '; continue; } - if ($test->status()->isSuccess()) { + if ($success) { continue; } $result[$prettifiedMethodName] = ' '; @@ -62241,16 +66727,16 @@ declare (strict_types=1); */ namespace PHPUnit\Logging\TestDox; -use PHPUnit\Event\Test\MockObjectForAbstractClassCreated; -use PHPUnit\Event\Test\MockObjectForAbstractClassCreatedSubscriber; +use PHPUnit\Event\Test\Errored; +use PHPUnit\Event\Test\ErroredSubscriber; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ -final class TestCreatedMockObjectForAbstractClassSubscriber extends \PHPUnit\Logging\TestDox\Subscriber implements MockObjectForAbstractClassCreatedSubscriber +final class TestErroredSubscriber extends \PHPUnit\Logging\TestDox\Subscriber implements ErroredSubscriber { - public function notify(MockObjectForAbstractClassCreated $event) : void + public function notify(Errored $event) : void { - $this->collector()->testCreatedTestDouble($event); + $this->collector()->testErrored($event); } } collector()->testCreatedTestDouble($event); + $this->collector()->testFailed($event); } } collector()->testCreatedTestDouble($event); + $this->collector()->testFinished($event); } } collector()->testCreatedTestDouble($event); + $this->collector()->testMarkedIncomplete($event); } } collector()->testCreatedTestDouble($event); + $this->collector()->testPassed($event); } } collector()->testCreatedTestDouble($event); + $this->collector()->testPrepared($event); } } collector()->testCreatedTestDouble($event); + $this->collector()->testSkipped($event); } } collector()->testErrored($event); + $this->collector()->testTriggeredDeprecation($event); } } collector()->testFailed($event); + $this->collector()->testTriggeredNotice($event); } } collector()->testFinished($event); + $this->collector()->testTriggeredPhpDeprecation($event); } } collector()->testMarkedIncomplete($event); + $this->collector()->testTriggeredPhpNotice($event); } } collector()->testPassed($event); + $this->collector()->testTriggeredPhpWarning($event); } } collector()->testPrepared($event); + $this->collector()->testTriggeredPhpunitDeprecation($event); } } collector()->testSkipped($event); + $this->collector()->testTriggeredPhpunitError($event); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Logging\TestDox; + +use PHPUnit\Event\Test\PhpunitWarningTriggered; +use PHPUnit\Event\Test\PhpunitWarningTriggeredSubscriber; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class TestTriggeredPhpunitWarningSubscriber extends \PHPUnit\Logging\TestDox\Subscriber implements PhpunitWarningTriggeredSubscriber +{ + public function notify(PhpunitWarningTriggered $event) : void + { + $this->collector()->testTriggeredPhpunitWarning($event); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Logging\TestDox; + +use PHPUnit\Event\Test\WarningTriggered; +use PHPUnit\Event\Test\WarningTriggeredSubscriber; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class TestTriggeredWarningSubscriber extends \PHPUnit\Logging\TestDox\Subscriber implements WarningTriggeredSubscriber +{ + public function notify(WarningTriggered $event) : void + { + $this->collector()->testTriggeredWarning($event); } } - */ - private readonly array $testDoubles; - /** - * @psalm-param list $testDoubles - */ - public function __construct(TestMethod $test, Duration $duration, TestStatus $status, ?Throwable $throwable, array $testDoubles) + public function __construct(TestMethod $test, TestStatus $status, ?Throwable $throwable) { $this->test = $test; - $this->duration = $duration; $this->status = $status; $this->throwable = $throwable; - $this->testDoubles = $testDoubles; } public function test() : TestMethod { return $this->test; } - public function duration() : Duration - { - return $this->duration; - } public function status() : TestStatus { return $this->status; @@ -62648,13 +67169,6 @@ final class TestResult { return $this->throwable; } - /** - * @psalm-return list - */ - public function testDoubles() : array - { - return $this->testDoubles; - } } > */ private array $tests = []; - private ?HRTime $time = null; private ?TestStatus $status = null; private ?Throwable $throwable = null; - /** - * @psalm-var list - */ - private array $testDoubles = []; /** * @throws EventFacadeIsSealedException * @throws UnknownSubscriberTypeException */ - public function __construct() + public function __construct(Facade $facade) { - $this->registerSubscribers(); + $this->registerSubscribers($facade); } /** * @psalm-return array @@ -62828,8 +67344,42 @@ final class TestResultCollector { $result = []; foreach ($this->tests as $prettifiedClassName => $tests) { + $testsByDeclaringClass = []; + foreach ($tests as $test) { + $declaringClassName = (new ReflectionMethod($test->test()->className(), $test->test()->methodName()))->getDeclaringClass()->getName(); + if (!isset($testsByDeclaringClass[$declaringClassName])) { + $testsByDeclaringClass[$declaringClassName] = []; + } + $testsByDeclaringClass[$declaringClassName][] = $test; + } + foreach (array_keys($testsByDeclaringClass) as $declaringClassName) { + usort($testsByDeclaringClass[$declaringClassName], static function (TestDoxTestMethod $a, TestDoxTestMethod $b) : int { + return $a->test()->line() <=> $b->test()->line(); + }); + } + uksort( + $testsByDeclaringClass, + /** + * @psalm-param class-string $a + * @psalm-param class-string $b + */ + static function (string $a, string $b) : int { + if (is_subclass_of($b, $a)) { + return -1; + } + if (is_subclass_of($a, $b)) { + return 1; + } + return 0; + } + ); + $tests = []; + foreach ($testsByDeclaringClass as $_tests) { + $tests = array_merge($tests, $_tests); + } $result[$prettifiedClassName] = \PHPUnit\Logging\TestDox\TestResultCollection::fromArray($tests); } + ksort($result); return $result; } public function testPrepared(Prepared $event) : void @@ -62837,10 +67387,8 @@ final class TestResultCollector if (!$event->test()->isTestMethod()) { return; } - $this->time = $event->telemetryInfo()->time(); $this->status = TestStatus::unknown(); $this->throwable = null; - $this->testDoubles = []; } public function testErrored(Errored $event) : void { @@ -62863,32 +67411,92 @@ final class TestResultCollector if (!$event->test()->isTestMethod()) { return; } - $this->status = TestStatus::success(); + $this->updateTestStatus(TestStatus::success()); } public function testSkipped(Skipped $event) : void { - $this->status = TestStatus::skipped($event->message()); + if (!$event->test()->isTestMethod()) { + return; + } + $this->updateTestStatus(TestStatus::skipped($event->message())); } public function testMarkedIncomplete(MarkedIncomplete $event) : void { - $this->status = TestStatus::incomplete($event->throwable()->message()); + if (!$event->test()->isTestMethod()) { + return; + } + $this->updateTestStatus(TestStatus::incomplete($event->throwable()->message())); $this->throwable = $event->throwable(); } public function testConsideredRisky(ConsideredRisky $event) : void { - $this->status = TestStatus::risky($event->message()); + if (!$event->test()->isTestMethod()) { + return; + } + $this->updateTestStatus(TestStatus::risky()); + } + public function testTriggeredDeprecation(DeprecationTriggered $event) : void + { + if (!$event->test()->isTestMethod()) { + return; + } + $this->updateTestStatus(TestStatus::deprecation()); + } + public function testTriggeredNotice(NoticeTriggered $event) : void + { + if (!$event->test()->isTestMethod()) { + return; + } + $this->updateTestStatus(TestStatus::notice()); + } + public function testTriggeredWarning(WarningTriggered $event) : void + { + if (!$event->test()->isTestMethod()) { + return; + } + $this->updateTestStatus(TestStatus::warning()); + } + public function testTriggeredPhpDeprecation(PhpDeprecationTriggered $event) : void + { + if (!$event->test()->isTestMethod()) { + return; + } + $this->updateTestStatus(TestStatus::deprecation()); + } + public function testTriggeredPhpNotice(PhpNoticeTriggered $event) : void + { + if (!$event->test()->isTestMethod()) { + return; + } + $this->updateTestStatus(TestStatus::notice()); + } + public function testTriggeredPhpWarning(PhpWarningTriggered $event) : void + { + if (!$event->test()->isTestMethod()) { + return; + } + $this->updateTestStatus(TestStatus::warning()); + } + public function testTriggeredPhpunitDeprecation(PhpunitDeprecationTriggered $event) : void + { + if (!$event->test()->isTestMethod()) { + return; + } + $this->updateTestStatus(TestStatus::deprecation()); } - public function testCreatedTestDouble(MockObjectCreated|MockObjectForAbstractClassCreated|MockObjectForTraitCreated|MockObjectFromWsdlCreated|PartialMockObjectCreated|TestProxyCreated|TestStubCreated $event) : void + public function testTriggeredPhpunitError(PhpunitErrorTriggered $event) : void { - if ($event instanceof MockObjectForTraitCreated) { - $this->testDoubles[] = $event->traitName(); + if (!$event->test()->isTestMethod()) { return; } - if ($event instanceof MockObjectFromWsdlCreated) { - $this->testDoubles[] = SoapClient::class; + $this->updateTestStatus(TestStatus::error()); + } + public function testTriggeredPhpunitWarning(PhpunitWarningTriggered $event) : void + { + if (!$event->test()->isTestMethod()) { return; } - $this->testDoubles[] = $event->className(); + $this->updateTestStatus(TestStatus::warning()); } /** * @throws InvalidArgumentException @@ -62903,19 +67511,24 @@ final class TestResultCollector if (!isset($this->tests[$test->testDox()->prettifiedClassName()])) { $this->tests[$test->testDox()->prettifiedClassName()] = []; } - $this->tests[$test->testDox()->prettifiedClassName()][] = new TestDoxTestMethod($test, $event->telemetryInfo()->time()->duration($this->time), $this->status, $this->throwable, $this->testDoubles); - $this->time = null; + $this->tests[$test->testDox()->prettifiedClassName()][] = new TestDoxTestMethod($test, $this->status, $this->throwable); $this->status = null; $this->throwable = null; - $this->testDoubles = []; } /** * @throws EventFacadeIsSealedException * @throws UnknownSubscriberTypeException */ - private function registerSubscribers() : void + private function registerSubscribers(Facade $facade) : void + { + $facade->registerSubscribers(new \PHPUnit\Logging\TestDox\TestConsideredRiskySubscriber($this), new \PHPUnit\Logging\TestDox\TestErroredSubscriber($this), new \PHPUnit\Logging\TestDox\TestFailedSubscriber($this), new \PHPUnit\Logging\TestDox\TestFinishedSubscriber($this), new \PHPUnit\Logging\TestDox\TestMarkedIncompleteSubscriber($this), new \PHPUnit\Logging\TestDox\TestPassedSubscriber($this), new \PHPUnit\Logging\TestDox\TestPreparedSubscriber($this), new \PHPUnit\Logging\TestDox\TestSkippedSubscriber($this), new \PHPUnit\Logging\TestDox\TestTriggeredDeprecationSubscriber($this), new \PHPUnit\Logging\TestDox\TestTriggeredNoticeSubscriber($this), new \PHPUnit\Logging\TestDox\TestTriggeredPhpDeprecationSubscriber($this), new \PHPUnit\Logging\TestDox\TestTriggeredPhpNoticeSubscriber($this), new \PHPUnit\Logging\TestDox\TestTriggeredPhpunitDeprecationSubscriber($this), new \PHPUnit\Logging\TestDox\TestTriggeredPhpunitErrorSubscriber($this), new \PHPUnit\Logging\TestDox\TestTriggeredPhpunitWarningSubscriber($this), new \PHPUnit\Logging\TestDox\TestTriggeredPhpWarningSubscriber($this), new \PHPUnit\Logging\TestDox\TestTriggeredWarningSubscriber($this)); + } + private function updateTestStatus(TestStatus $status) : void { - Facade::registerSubscribers(new \PHPUnit\Logging\TestDox\TestConsideredRiskySubscriber($this), new \PHPUnit\Logging\TestDox\TestCreatedMockObjectForAbstractClassSubscriber($this), new \PHPUnit\Logging\TestDox\TestCreatedMockObjectForTraitSubscriber($this), new \PHPUnit\Logging\TestDox\TestCreatedMockObjectFromWsdlSubscriber($this), new \PHPUnit\Logging\TestDox\TestCreatedMockObjectSubscriber($this), new \PHPUnit\Logging\TestDox\TestCreatedPartialMockObjectSubscriber($this), new \PHPUnit\Logging\TestDox\TestCreatedTestProxySubscriber($this), new \PHPUnit\Logging\TestDox\TestCreatedTestStubSubscriber($this), new \PHPUnit\Logging\TestDox\TestErroredSubscriber($this), new \PHPUnit\Logging\TestDox\TestFailedSubscriber($this), new \PHPUnit\Logging\TestDox\TestFinishedSubscriber($this), new \PHPUnit\Logging\TestDox\TestMarkedIncompleteSubscriber($this), new \PHPUnit\Logging\TestDox\TestPassedSubscriber($this), new \PHPUnit\Logging\TestDox\TestPreparedSubscriber($this), new \PHPUnit\Logging\TestDox\TestSkippedSubscriber($this)); + if ($this->status !== null && $this->status->isMoreImportantThan($status)) { + return; + } + $this->status = $status; } } codeUnitsToSourceLines($codeUnits); } + /** + * @psalm-return array> + */ + public function linesToBeIgnored(TestSuite $testSuite) : array + { + $codeUnits = CodeUnitCollection::fromList(); + $mapper = new Mapper(); + foreach ($this->testCaseClassesIn($testSuite) as $testCaseClassName) { + $codeUnits = $codeUnits->mergeWith($this->codeUnitsIgnoredBy($testCaseClassName)); + } + return $mapper->codeUnitsToSourceLines($codeUnits); + } /** * @psalm-param class-string $className * @psalm-param non-empty-string $methodName @@ -63130,6 +67768,37 @@ final class CodeCoverage } return \true; } + /** + * @psalm-return list + */ + private function testCaseClassesIn(TestSuite $testSuite) : array + { + $classNames = []; + foreach (new RecursiveIteratorIterator($testSuite) as $test) { + $classNames[] = $test::class; + } + return array_values(array_unique($classNames)); + } + /** + * @psalm-param class-string $className + */ + private function codeUnitsIgnoredBy(string $className) : CodeUnitCollection + { + $codeUnits = CodeUnitCollection::fromList(); + $mapper = new Mapper(); + foreach (Registry::parser()->forClass($className) as $metadata) { + if ($metadata instanceof IgnoreClassForCodeCoverage) { + $codeUnits = $codeUnits->mergeWith($mapper->stringToCodeUnits($metadata->className())); + } + if ($metadata instanceof IgnoreMethodForCodeCoverage) { + $codeUnits = $codeUnits->mergeWith($mapper->stringToCodeUnits($metadata->className() . '::' . $metadata->methodName())); + } + if ($metadata instanceof IgnoreFunctionForCodeCoverage) { + $codeUnits = $codeUnits->mergeWith($mapper->stringToCodeUnits('::' . $metadata->functionName())); + } + } + return $codeUnits; + } } className(), $_dataProvider->methodName()); + Event\Facade::emitter()->dataProviderMethodCalled($testMethod, $dataProviderMethod); + $methodsCalled[] = $dataProviderMethod; try { $class = new ReflectionClass($_dataProvider->className()); $method = $class->getMethod($_dataProvider->methodName()); @@ -63237,6 +67911,7 @@ final class DataProvider $data = $method->invoke($object, $_dataProvider->methodName()); } } catch (Throwable $e) { + Event\Facade::emitter()->dataProviderMethodFinished($testMethod, ...$methodsCalled); throw new InvalidDataProviderException($e->getMessage(), $e->getCode(), $e); } if ($data instanceof Traversable) { @@ -63246,6 +67921,7 @@ final class DataProvider if (is_int($key)) { $data[] = $value; } elseif (array_key_exists($key, $data)) { + Event\Facade::emitter()->dataProviderMethodFinished($testMethod, ...$methodsCalled); throw new InvalidDataProviderException(sprintf('The key "%s" has already been defined by a previous data provider', $key)); } else { $data[$key] = $value; @@ -63256,6 +67932,7 @@ final class DataProvider $result = array_merge($result, $data); } } + Event\Facade::emitter()->dataProviderMethodFinished($testMethod, ...$methodsCalled); return $result; } private function dataProvidedByMetadata(MetadataCollection $testWith) : array @@ -63279,13 +67956,13 @@ final class DataProvider return null; } $docComment = str_replace("\r\n", "\n", $docComment); - $docComment = preg_replace('/' . '\\n' . '\\s*' . '\\*' . '\\s?' . '/', "\n", $docComment); + $docComment = preg_replace('/\\n\\s*\\*\\s?/', "\n", $docComment); $docComment = substr($docComment, 0, -1); $docComment = rtrim($docComment, "\n"); if (!preg_match('/@testWith\\s+/', $docComment, $matches, \PREG_OFFSET_CAPTURE)) { return null; } - $offset = strlen($matches[0][0]) + $matches[0][1]; + $offset = strlen($matches[0][0]) + (int) $matches[0][1]; $annotationContent = substr($docComment, $offset); $data = []; foreach (explode("\n", $annotationContent) as $candidateRow) { @@ -63313,7 +67990,7 @@ final class DataProvider private function valueObjectForTestMethodWithoutTestData(string $className, string $methodName) : TestMethod { $location = Reflection::sourceLocationFor($className, $methodName); - return new TestMethod($className, $methodName, $location['file'], $location['line'], Event\Code\TestDoxBuilder::fromClassNameAndMethodName($className, $methodName), MetadataRegistry::parser()->for($className, $methodName), TestDataCollection::fromArray([])); + return new TestMethod($className, $methodName, $location['file'], $location['line'], Event\Code\TestDoxBuilder::fromClassNameAndMethodName($className, $methodName), MetadataRegistry::parser()->forClassAndMethod($className, $methodName), TestDataCollection::fromArray([])); } } methodsInTestClass(new ReflectionClass($className)) as $method) { + foreach (Reflection::methodsInTestClass(new ReflectionClass($className)) as $method) { $methodName = $method->getName(); assert(!empty($methodName)); $metadata = Registry::parser()->forMethod($className, $methodName); @@ -63662,11 +68339,17 @@ namespace PHPUnit\Metadata; final class BackupGlobals extends \PHPUnit\Metadata\Metadata { private readonly bool $enabled; + /** + * @psalm-param 0|1 $level + */ protected function __construct(int $level, bool $enabled) { parent::__construct($level); $this->enabled = $enabled; } + /** + * @psalm-assert-if-true BackupGlobals $this + */ public function isBackupGlobals() : bool { return \true; @@ -63697,11 +68380,17 @@ namespace PHPUnit\Metadata; final class BackupStaticProperties extends \PHPUnit\Metadata\Metadata { private readonly bool $enabled; + /** + * @psalm-param 0|1 $level + */ protected function __construct(int $level, bool $enabled) { parent::__construct($level); $this->enabled = $enabled; } + /** + * @psalm-assert-if-true BackupStaticProperties $this + */ public function isBackupStaticProperties() : bool { return \true; @@ -63731,6 +68420,9 @@ namespace PHPUnit\Metadata; */ final class Before extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-assert-if-true Before $this + */ public function isBefore() : bool { return \true; @@ -63756,6 +68448,9 @@ namespace PHPUnit\Metadata; */ final class BeforeClass extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-assert-if-true BeforeClass $this + */ public function isBeforeClass() : bool { return \true; @@ -63781,16 +68476,29 @@ namespace PHPUnit\Metadata; */ final class Covers extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-var non-empty-string + */ private readonly string $target; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $target + */ protected function __construct(int $level, string $target) { parent::__construct($level); $this->target = $target; } + /** + * @psalm-assert-if-true Covers $this + */ public function isCovers() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function target() : string { return $this->target; @@ -63821,6 +68529,7 @@ final class CoversClass extends \PHPUnit\Metadata\Metadata */ private readonly string $className; /** + * @psalm-param 0|1 $level * @psalm-param class-string $className */ protected function __construct(int $level, string $className) @@ -63828,6 +68537,9 @@ final class CoversClass extends \PHPUnit\Metadata\Metadata parent::__construct($level); $this->className = $className; } + /** + * @psalm-assert-if-true CoversClass $this + */ public function isCoversClass() : bool { return \true; @@ -63874,6 +68586,7 @@ final class CoversDefaultClass extends \PHPUnit\Metadata\Metadata */ private readonly string $className; /** + * @psalm-param 0|1 $level * @psalm-param class-string $className */ protected function __construct(int $level, string $className) @@ -63881,6 +68594,9 @@ final class CoversDefaultClass extends \PHPUnit\Metadata\Metadata parent::__construct($level); $this->className = $className; } + /** + * @psalm-assert-if-true CoversDefaultClass $this + */ public function isCoversDefaultClass() : bool { return \true; @@ -63913,16 +68629,29 @@ namespace PHPUnit\Metadata; */ final class CoversFunction extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-var non-empty-string + */ private readonly string $functionName; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $functionName + */ protected function __construct(int $level, string $functionName) { parent::__construct($level); $this->functionName = $functionName; } + /** + * @psalm-assert-if-true CoversFunction $this + */ public function isCoversFunction() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function functionName() : string { return $this->functionName; @@ -63955,6 +68684,9 @@ namespace PHPUnit\Metadata; */ final class CoversNothing extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-assert-if-true CoversNothing $this + */ public function isCoversNothing() : bool { return \true; @@ -63984,9 +68716,14 @@ final class DataProvider extends \PHPUnit\Metadata\Metadata * @psalm-var class-string */ private readonly string $className; + /** + * @psalm-var non-empty-string + */ private readonly string $methodName; /** + * @psalm-param 0|1 $level * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName */ protected function __construct(int $level, string $className, string $methodName) { @@ -63994,6 +68731,9 @@ final class DataProvider extends \PHPUnit\Metadata\Metadata $this->className = $className; $this->methodName = $methodName; } + /** + * @psalm-assert-if-true DataProvider $this + */ public function isDataProvider() : bool { return \true; @@ -64005,6 +68745,9 @@ final class DataProvider extends \PHPUnit\Metadata\Metadata { return $this->className; } + /** + * @psalm-return non-empty-string + */ public function methodName() : string { return $this->methodName; @@ -64037,6 +68780,7 @@ final class DependsOnClass extends \PHPUnit\Metadata\Metadata private readonly bool $deepClone; private readonly bool $shallowClone; /** + * @psalm-param 0|1 $level * @psalm-param class-string $className */ protected function __construct(int $level, string $className, bool $deepClone, bool $shallowClone) @@ -64046,6 +68790,9 @@ final class DependsOnClass extends \PHPUnit\Metadata\Metadata $this->deepClone = $deepClone; $this->shallowClone = $shallowClone; } + /** + * @psalm-assert-if-true DependsOnClass $this + */ public function isDependsOnClass() : bool { return \true; @@ -64090,11 +68837,16 @@ final class DependsOnMethod extends \PHPUnit\Metadata\Metadata * @psalm-var class-string */ private readonly string $className; + /** + * @psalm-var non-empty-string + */ private readonly string $methodName; private readonly bool $deepClone; private readonly bool $shallowClone; /** + * @psalm-param 0|1 $level * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName */ protected function __construct(int $level, string $className, string $methodName, bool $deepClone, bool $shallowClone) { @@ -64104,6 +68856,9 @@ final class DependsOnMethod extends \PHPUnit\Metadata\Metadata $this->deepClone = $deepClone; $this->shallowClone = $shallowClone; } + /** + * @psalm-assert-if-true DependsOnMethod $this + */ public function isDependsOnMethod() : bool { return \true; @@ -64115,6 +68870,9 @@ final class DependsOnMethod extends \PHPUnit\Metadata\Metadata { return $this->className; } + /** + * @psalm-return non-empty-string + */ public function methodName() : string { return $this->methodName; @@ -64148,6 +68906,9 @@ namespace PHPUnit\Metadata; */ final class DoesNotPerformAssertions extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-assert-if-true DoesNotPerformAssertions $this + */ public function isDoesNotPerformAssertions() : bool { return \true; @@ -64271,16 +69032,29 @@ namespace PHPUnit\Metadata; */ final class ExcludeGlobalVariableFromBackup extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-var non-empty-string + */ private readonly string $globalVariableName; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $globalVariableName + */ protected function __construct(int $level, string $globalVariableName) { parent::__construct($level); $this->globalVariableName = $globalVariableName; } + /** + * @psalm-assert-if-true ExcludeGlobalVariableFromBackup $this + */ public function isExcludeGlobalVariableFromBackup() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function globalVariableName() : string { return $this->globalVariableName; @@ -64310,9 +69084,14 @@ final class ExcludeStaticPropertyFromBackup extends \PHPUnit\Metadata\Metadata * @psalm-var class-string */ private readonly string $className; + /** + * @psalm-var non-empty-string + */ private readonly string $propertyName; /** + * @psalm-param 0|1 $level * @psalm-param class-string $className + * @psalm-param non-empty-string $propertyName */ protected function __construct(int $level, string $className, string $propertyName) { @@ -64320,6 +69099,9 @@ final class ExcludeStaticPropertyFromBackup extends \PHPUnit\Metadata\Metadata $this->className = $className; $this->propertyName = $propertyName; } + /** + * @psalm-assert-if-true ExcludeStaticPropertyFromBackup $this + */ public function isExcludeStaticPropertyFromBackup() : bool { return \true; @@ -64331,6 +69113,9 @@ final class ExcludeStaticPropertyFromBackup extends \PHPUnit\Metadata\Metadata { return $this->className; } + /** + * @psalm-return non-empty-string + */ public function propertyName() : string { return $this->propertyName; @@ -64356,16 +69141,29 @@ namespace PHPUnit\Metadata; */ final class Group extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-var non-empty-string + */ private readonly string $groupName; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $groupName + */ protected function __construct(int $level, string $groupName) { parent::__construct($level); $this->groupName = $groupName; } + /** + * @psalm-assert-if-true Group $this + */ public function isGroup() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function groupName() : string { return $this->groupName; @@ -64384,6 +69182,197 @@ declare (strict_types=1); */ namespace PHPUnit\Metadata; +/** + * @psalm-immutable + * + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5513 + */ +final class IgnoreClassForCodeCoverage extends \PHPUnit\Metadata\Metadata +{ + /** + * @psalm-var class-string + */ + private readonly string $className; + /** + * @psalm-param 0|1 $level + * @psalm-param class-string $className + */ + protected function __construct(int $level, string $className) + { + parent::__construct($level); + $this->className = $className; + } + /** + * @psalm-assert-if-true IgnoreClassForCodeCoverage $this + */ + public function isIgnoreClassForCodeCoverage() : bool + { + return \true; + } + /** + * @psalm-return class-string + */ + public function className() : string + { + return $this->className; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Metadata; + +/** + * @psalm-immutable + * + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +final class IgnoreDeprecations extends \PHPUnit\Metadata\Metadata +{ + /** + * @psalm-assert-if-true IgnoreDeprecations $this + */ + public function isIgnoreDeprecations() : bool + { + return \true; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Metadata; + +/** + * @psalm-immutable + * + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5513 + */ +final class IgnoreFunctionForCodeCoverage extends \PHPUnit\Metadata\Metadata +{ + /** + * @psalm-var non-empty-string + */ + private readonly string $functionName; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $functionName + */ + protected function __construct(int $level, string $functionName) + { + parent::__construct($level); + $this->functionName = $functionName; + } + /** + * @psalm-assert-if-true IgnoreFunctionForCodeCoverage $this + */ + public function isIgnoreFunctionForCodeCoverage() : bool + { + return \true; + } + /** + * @psalm-return non-empty-string + */ + public function functionName() : string + { + return $this->functionName; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Metadata; + +/** + * @psalm-immutable + * + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + * + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5513 + */ +final class IgnoreMethodForCodeCoverage extends \PHPUnit\Metadata\Metadata +{ + /** + * @psalm-var class-string + */ + private readonly string $className; + /** + * @psalm-var non-empty-string + */ + private readonly string $methodName; + /** + * @psalm-param 0|1 $level + * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName + */ + protected function __construct(int $level, string $className, string $methodName) + { + parent::__construct($level); + $this->className = $className; + $this->methodName = $methodName; + } + /** + * @psalm-assert-if-true IgnoreMethodForCodeCoverage $this + */ + public function isIgnoreMethodForCodeCoverage() : bool + { + return \true; + } + /** + * @psalm-return class-string + */ + public function className() : string + { + return $this->className; + } + /** + * @psalm-return non-empty-string + */ + public function methodName() : string + { + return $this->methodName; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Metadata; + use PHPUnit\Metadata\Version\Requirement; /** * @psalm-immutable @@ -64394,6 +69383,9 @@ abstract class Metadata { private const CLASS_LEVEL = 0; private const METHOD_LEVEL = 1; + /** + * @psalm-var 0|1 + */ private readonly int $level; public static function after() : \PHPUnit\Metadata\After { @@ -64434,14 +69426,23 @@ abstract class Metadata { return new \PHPUnit\Metadata\CoversClass(self::CLASS_LEVEL, $className); } + /** + * @psalm-param non-empty-string $functionName + */ public static function coversFunction(string $functionName) : \PHPUnit\Metadata\CoversFunction { return new \PHPUnit\Metadata\CoversFunction(self::CLASS_LEVEL, $functionName); } + /** + * @psalm-param non-empty-string $target + */ public static function coversOnClass(string $target) : \PHPUnit\Metadata\Covers { return new \PHPUnit\Metadata\Covers(self::CLASS_LEVEL, $target); } + /** + * @psalm-param non-empty-string $target + */ public static function coversOnMethod(string $target) : \PHPUnit\Metadata\Covers { return new \PHPUnit\Metadata\Covers(self::METHOD_LEVEL, $target); @@ -64463,15 +69464,23 @@ abstract class Metadata } /** * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName */ public static function dataProvider(string $className, string $methodName) : \PHPUnit\Metadata\DataProvider { return new \PHPUnit\Metadata\DataProvider(self::METHOD_LEVEL, $className, $methodName); } + /** + * @psalm-param class-string $className + */ public static function dependsOnClass(string $className, bool $deepClone, bool $shallowClone) : \PHPUnit\Metadata\DependsOnClass { return new \PHPUnit\Metadata\DependsOnClass(self::METHOD_LEVEL, $className, $deepClone, $shallowClone); } + /** + * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName + */ public static function dependsOnMethod(string $className, string $methodName, bool $deepClone, bool $shallowClone) : \PHPUnit\Metadata\DependsOnMethod { return new \PHPUnit\Metadata\DependsOnMethod(self::METHOD_LEVEL, $className, $methodName, $deepClone, $shallowClone); @@ -64484,16 +69493,23 @@ abstract class Metadata { return new \PHPUnit\Metadata\DoesNotPerformAssertions(self::METHOD_LEVEL); } + /** + * @psalm-param non-empty-string $globalVariableName + */ public static function excludeGlobalVariableFromBackupOnClass(string $globalVariableName) : \PHPUnit\Metadata\ExcludeGlobalVariableFromBackup { return new \PHPUnit\Metadata\ExcludeGlobalVariableFromBackup(self::CLASS_LEVEL, $globalVariableName); } + /** + * @psalm-param non-empty-string $globalVariableName + */ public static function excludeGlobalVariableFromBackupOnMethod(string $globalVariableName) : \PHPUnit\Metadata\ExcludeGlobalVariableFromBackup { return new \PHPUnit\Metadata\ExcludeGlobalVariableFromBackup(self::METHOD_LEVEL, $globalVariableName); } /** * @psalm-param class-string $className + * @psalm-param non-empty-string $propertyName */ public static function excludeStaticPropertyFromBackupOnClass(string $className, string $propertyName) : \PHPUnit\Metadata\ExcludeStaticPropertyFromBackup { @@ -64501,19 +69517,56 @@ abstract class Metadata } /** * @psalm-param class-string $className + * @psalm-param non-empty-string $propertyName */ public static function excludeStaticPropertyFromBackupOnMethod(string $className, string $propertyName) : \PHPUnit\Metadata\ExcludeStaticPropertyFromBackup { return new \PHPUnit\Metadata\ExcludeStaticPropertyFromBackup(self::METHOD_LEVEL, $className, $propertyName); } + /** + * @psalm-param non-empty-string $groupName + */ public static function groupOnClass(string $groupName) : \PHPUnit\Metadata\Group { return new \PHPUnit\Metadata\Group(self::CLASS_LEVEL, $groupName); } + /** + * @psalm-param non-empty-string $groupName + */ public static function groupOnMethod(string $groupName) : \PHPUnit\Metadata\Group { return new \PHPUnit\Metadata\Group(self::METHOD_LEVEL, $groupName); } + public static function ignoreDeprecationsOnClass() : \PHPUnit\Metadata\IgnoreDeprecations + { + return new \PHPUnit\Metadata\IgnoreDeprecations(self::CLASS_LEVEL); + } + public static function ignoreDeprecationsOnMethod() : \PHPUnit\Metadata\IgnoreDeprecations + { + return new \PHPUnit\Metadata\IgnoreDeprecations(self::METHOD_LEVEL); + } + /** + * @psalm-param class-string $className + */ + public static function ignoreClassForCodeCoverage(string $className) : \PHPUnit\Metadata\IgnoreClassForCodeCoverage + { + return new \PHPUnit\Metadata\IgnoreClassForCodeCoverage(self::CLASS_LEVEL, $className); + } + /** + * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName + */ + public static function ignoreMethodForCodeCoverage(string $className, string $methodName) : \PHPUnit\Metadata\IgnoreMethodForCodeCoverage + { + return new \PHPUnit\Metadata\IgnoreMethodForCodeCoverage(self::CLASS_LEVEL, $className, $methodName); + } + /** + * @psalm-param non-empty-string $functionName + */ + public static function ignoreFunctionForCodeCoverage(string $functionName) : \PHPUnit\Metadata\IgnoreFunctionForCodeCoverage + { + return new \PHPUnit\Metadata\IgnoreFunctionForCodeCoverage(self::CLASS_LEVEL, $functionName); + } public static function postCondition() : \PHPUnit\Metadata\PostCondition { return new \PHPUnit\Metadata\PostCondition(self::METHOD_LEVEL); @@ -64530,16 +69583,23 @@ abstract class Metadata { return new \PHPUnit\Metadata\PreserveGlobalState(self::METHOD_LEVEL, $enabled); } + /** + * @psalm-param non-empty-string $functionName + */ public static function requiresFunctionOnClass(string $functionName) : \PHPUnit\Metadata\RequiresFunction { return new \PHPUnit\Metadata\RequiresFunction(self::CLASS_LEVEL, $functionName); } + /** + * @psalm-param non-empty-string $functionName + */ public static function requiresFunctionOnMethod(string $functionName) : \PHPUnit\Metadata\RequiresFunction { return new \PHPUnit\Metadata\RequiresFunction(self::METHOD_LEVEL, $functionName); } /** * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName */ public static function requiresMethodOnClass(string $className, string $methodName) : \PHPUnit\Metadata\RequiresMethod { @@ -64547,23 +69607,36 @@ abstract class Metadata } /** * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName */ public static function requiresMethodOnMethod(string $className, string $methodName) : \PHPUnit\Metadata\RequiresMethod { return new \PHPUnit\Metadata\RequiresMethod(self::METHOD_LEVEL, $className, $methodName); } + /** + * @psalm-param non-empty-string $operatingSystem + */ public static function requiresOperatingSystemOnClass(string $operatingSystem) : \PHPUnit\Metadata\RequiresOperatingSystem { return new \PHPUnit\Metadata\RequiresOperatingSystem(self::CLASS_LEVEL, $operatingSystem); } + /** + * @psalm-param non-empty-string $operatingSystem + */ public static function requiresOperatingSystemOnMethod(string $operatingSystem) : \PHPUnit\Metadata\RequiresOperatingSystem { return new \PHPUnit\Metadata\RequiresOperatingSystem(self::METHOD_LEVEL, $operatingSystem); } + /** + * @psalm-param non-empty-string $operatingSystemFamily + */ public static function requiresOperatingSystemFamilyOnClass(string $operatingSystemFamily) : \PHPUnit\Metadata\RequiresOperatingSystemFamily { return new \PHPUnit\Metadata\RequiresOperatingSystemFamily(self::CLASS_LEVEL, $operatingSystemFamily); } + /** + * @psalm-param non-empty-string $operatingSystemFamily + */ public static function requiresOperatingSystemFamilyOnMethod(string $operatingSystemFamily) : \PHPUnit\Metadata\RequiresOperatingSystemFamily { return new \PHPUnit\Metadata\RequiresOperatingSystemFamily(self::METHOD_LEVEL, $operatingSystemFamily); @@ -64576,10 +69649,16 @@ abstract class Metadata { return new \PHPUnit\Metadata\RequiresPhp(self::METHOD_LEVEL, $versionRequirement); } + /** + * @psalm-param non-empty-string $extension + */ public static function requiresPhpExtensionOnClass(string $extension, ?Requirement $versionRequirement) : \PHPUnit\Metadata\RequiresPhpExtension { return new \PHPUnit\Metadata\RequiresPhpExtension(self::CLASS_LEVEL, $extension, $versionRequirement); } + /** + * @psalm-param non-empty-string $extension + */ public static function requiresPhpExtensionOnMethod(string $extension, ?Requirement $versionRequirement) : \PHPUnit\Metadata\RequiresPhpExtension { return new \PHPUnit\Metadata\RequiresPhpExtension(self::METHOD_LEVEL, $extension, $versionRequirement); @@ -64592,10 +69671,18 @@ abstract class Metadata { return new \PHPUnit\Metadata\RequiresPhpunit(self::METHOD_LEVEL, $versionRequirement); } + /** + * @psalm-param non-empty-string $setting + * @psalm-param non-empty-string $value + */ public static function requiresSettingOnClass(string $setting, string $value) : \PHPUnit\Metadata\RequiresSetting { return new \PHPUnit\Metadata\RequiresSetting(self::CLASS_LEVEL, $setting, $value); } + /** + * @psalm-param non-empty-string $setting + * @psalm-param non-empty-string $value + */ public static function requiresSettingOnMethod(string $setting, string $value) : \PHPUnit\Metadata\RequiresSetting { return new \PHPUnit\Metadata\RequiresSetting(self::METHOD_LEVEL, $setting, $value); @@ -64616,10 +69703,16 @@ abstract class Metadata { return new \PHPUnit\Metadata\Test(self::METHOD_LEVEL); } + /** + * @psalm-param non-empty-string $text + */ public static function testDoxOnClass(string $text) : \PHPUnit\Metadata\TestDox { return new \PHPUnit\Metadata\TestDox(self::CLASS_LEVEL, $text); } + /** + * @psalm-param non-empty-string $text + */ public static function testDoxOnMethod(string $text) : \PHPUnit\Metadata\TestDox { return new \PHPUnit\Metadata\TestDox(self::METHOD_LEVEL, $text); @@ -64635,14 +69728,23 @@ abstract class Metadata { return new \PHPUnit\Metadata\UsesClass(self::CLASS_LEVEL, $className); } + /** + * @psalm-param non-empty-string $functionName + */ public static function usesFunction(string $functionName) : \PHPUnit\Metadata\UsesFunction { return new \PHPUnit\Metadata\UsesFunction(self::CLASS_LEVEL, $functionName); } + /** + * @psalm-param non-empty-string $target + */ public static function usesOnClass(string $target) : \PHPUnit\Metadata\Uses { return new \PHPUnit\Metadata\Uses(self::CLASS_LEVEL, $target); } + /** + * @psalm-param non-empty-string $target + */ public static function usesOnMethod(string $target) : \PHPUnit\Metadata\Uses { return new \PHPUnit\Metadata\Uses(self::METHOD_LEVEL, $target); @@ -64654,6 +69756,13 @@ abstract class Metadata { return new \PHPUnit\Metadata\UsesDefaultClass(self::CLASS_LEVEL, $className); } + public static function withoutErrorHandler() : \PHPUnit\Metadata\WithoutErrorHandler + { + return new \PHPUnit\Metadata\WithoutErrorHandler(self::METHOD_LEVEL); + } + /** + * @psalm-param 0|1 $level + */ protected function __construct(int $level) { $this->level = $level; @@ -64771,10 +69880,16 @@ abstract class Metadata { return \false; } + /** + * @psalm-assert-if-true ExcludeGlobalVariableFromBackup $this + */ public function isExcludeGlobalVariableFromBackup() : bool { return \false; } + /** + * @psalm-assert-if-true ExcludeStaticPropertyFromBackup $this + */ public function isExcludeStaticPropertyFromBackup() : bool { return \false; @@ -64786,6 +69901,34 @@ abstract class Metadata { return \false; } + /** + * @psalm-assert-if-true IgnoreDeprecations $this + */ + public function isIgnoreDeprecations() : bool + { + return \false; + } + /** + * @psalm-assert-if-true IgnoreClassForCodeCoverage $this + */ + public function isIgnoreClassForCodeCoverage() : bool + { + return \false; + } + /** + * @psalm-assert-if-true IgnoreMethodForCodeCoverage $this + */ + public function isIgnoreMethodForCodeCoverage() : bool + { + return \false; + } + /** + * @psalm-assert-if-true IgnoreFunctionForCodeCoverage $this + */ + public function isIgnoreFunctionForCodeCoverage() : bool + { + return \false; + } /** * @psalm-assert-if-true RunClassInSeparateProcess $this */ @@ -64933,6 +70076,13 @@ abstract class Metadata { return \false; } + /** + * @psalm-assert-if-true WithoutErrorHandler $this + */ + public function isWithoutErrorHandler() : bool + { + return \false; + } } metadata, static fn(\PHPUnit\Metadata\Metadata $metadata): bool => $metadata->isGroup())); } + public function isIgnoreDeprecations() : self + { + return new self(...array_filter($this->metadata, static fn(\PHPUnit\Metadata\Metadata $metadata): bool => $metadata->isIgnoreDeprecations())); + } + /** + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5513 + */ + public function isIgnoreClassForCodeCoverage() : self + { + return new self(...array_filter($this->metadata, static fn(\PHPUnit\Metadata\Metadata $metadata): bool => $metadata->isIgnoreClassForCodeCoverage())); + } + /** + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5513 + */ + public function isIgnoreMethodForCodeCoverage() : self + { + return new self(...array_filter($this->metadata, static fn(\PHPUnit\Metadata\Metadata $metadata): bool => $metadata->isIgnoreMethodForCodeCoverage())); + } + /** + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5513 + */ + public function isIgnoreFunctionForCodeCoverage() : self + { + return new self(...array_filter($this->metadata, static fn(\PHPUnit\Metadata\Metadata $metadata): bool => $metadata->isIgnoreFunctionForCodeCoverage())); + } public function isRunClassInSeparateProcess() : self { return new self(...array_filter($this->metadata, static fn(\PHPUnit\Metadata\Metadata $metadata): bool => $metadata->isRunClassInSeparateProcess())); @@ -65171,6 +70346,10 @@ final class MetadataCollection implements Countable, IteratorAggregate { return new self(...array_filter($this->metadata, static fn(\PHPUnit\Metadata\Metadata $metadata): bool => $metadata->isUsesFunction())); } + public function isWithoutErrorHandler() : self + { + return new self(...array_filter($this->metadata, static fn(\PHPUnit\Metadata\Metadata $metadata): bool => $metadata->isWithoutErrorHandler())); + } } className()); + break; + case IgnoreDeprecations::class: + assert($attributeInstance instanceof IgnoreDeprecations); + $result[] = Metadata::ignoreDeprecationsOnClass(); + break; + case IgnoreMethodForCodeCoverage::class: + assert($attributeInstance instanceof IgnoreMethodForCodeCoverage); + $result[] = Metadata::ignoreMethodForCodeCoverage($attributeInstance->className(), $attributeInstance->methodName()); + break; + case IgnoreFunctionForCodeCoverage::class: + assert($attributeInstance instanceof IgnoreFunctionForCodeCoverage); + $result[] = Metadata::ignoreFunctionForCodeCoverage($attributeInstance->functionName()); + break; case PreserveGlobalState::class: assert($attributeInstance instanceof PreserveGlobalState); $result[] = Metadata::preserveGlobalStateOnClass($attributeInstance->enabled()); @@ -66171,6 +71376,10 @@ final class AttributeParser implements \PHPUnit\Metadata\Parser\Parser assert($attributeInstance instanceof Group); $result[] = Metadata::groupOnMethod($attributeInstance->name()); break; + case IgnoreDeprecations::class: + assert($attributeInstance instanceof IgnoreDeprecations); + $result[] = Metadata::ignoreDeprecationsOnMethod(); + break; case PostCondition::class: $result[] = Metadata::postCondition(); break; @@ -66240,6 +71449,10 @@ final class AttributeParser implements \PHPUnit\Metadata\Parser\Parser assert($attributeInstance instanceof Ticket); $result[] = Metadata::groupOnMethod($attributeInstance->text()); break; + case WithoutErrorHandler::class: + assert($attributeInstance instanceof WithoutErrorHandler); + $result[] = Metadata::withoutErrorHandler(); + break; } } return MetadataCollection::fromArray($result); @@ -66266,8 +71479,6 @@ declare (strict_types=1); */ namespace PHPUnit\Metadata\Parser; -use function class_exists; -use function method_exists; use PHPUnit\Metadata\MetadataCollection; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit @@ -66319,20 +71530,6 @@ final class CachingParser implements \PHPUnit\Metadata\Parser\Parser $this->classAndMethodCache[$key] = $this->forClass($className)->mergeWith($this->forMethod($className, $methodName)); return $this->classAndMethodCache[$key]; } - /** - * @psalm-param class-string $className - * @psalm-param non-empty-string $methodName - */ - public function for(string $className, string $methodName) : MetadataCollection - { - if (!class_exists($className)) { - return MetadataCollection::fromArray([]); - } - if (method_exists($className, $methodName)) { - return $this->forClassAndMethod($className, $methodName); - } - return $this->forClass($className); - } } enabled = $enabled; } + /** + * @psalm-assert-if-true PreserveGlobalState $this + */ public function isPreserveGlobalState() : bool { return \true; @@ -66565,16 +71774,29 @@ namespace PHPUnit\Metadata; */ final class RequiresFunction extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-var non-empty-string + */ private readonly string $functionName; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $functionName + */ protected function __construct(int $level, string $functionName) { parent::__construct($level); $this->functionName = $functionName; } + /** + * @psalm-assert-if-true RequiresFunction $this + */ public function isRequiresFunction() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function functionName() : string { return $this->functionName; @@ -66604,9 +71826,14 @@ final class RequiresMethod extends \PHPUnit\Metadata\Metadata * @psalm-var class-string */ private readonly string $className; + /** + * @psalm-var non-empty-string + */ private readonly string $methodName; /** + * @psalm-param 0|1 $level * @psalm-param class-string $className + * @psalm-param non-empty-string $methodName */ protected function __construct(int $level, string $className, string $methodName) { @@ -66614,7 +71841,10 @@ final class RequiresMethod extends \PHPUnit\Metadata\Metadata $this->className = $className; $this->methodName = $methodName; } - public function isrequiresMethod() : bool + /** + * @psalm-assert-if-true RequiresMethod $this + */ + public function isRequiresMethod() : bool { return \true; } @@ -66625,6 +71855,9 @@ final class RequiresMethod extends \PHPUnit\Metadata\Metadata { return $this->className; } + /** + * @psalm-return non-empty-string + */ public function methodName() : string { return $this->methodName; @@ -66650,16 +71883,29 @@ namespace PHPUnit\Metadata; */ final class RequiresOperatingSystem extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-var non-empty-string + */ private readonly string $operatingSystem; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $operatingSystem + */ public function __construct(int $level, string $operatingSystem) { parent::__construct($level); $this->operatingSystem = $operatingSystem; } + /** + * @psalm-assert-if-true RequiresOperatingSystem $this + */ public function isRequiresOperatingSystem() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function operatingSystem() : string { return $this->operatingSystem; @@ -66685,16 +71931,29 @@ namespace PHPUnit\Metadata; */ final class RequiresOperatingSystemFamily extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-var non-empty-string + */ private readonly string $operatingSystemFamily; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $operatingSystemFamily + */ protected function __construct(int $level, string $operatingSystemFamily) { parent::__construct($level); $this->operatingSystemFamily = $operatingSystemFamily; } + /** + * @psalm-assert-if-true RequiresOperatingSystemFamily $this + */ public function isRequiresOperatingSystemFamily() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function operatingSystemFamily() : string { return $this->operatingSystemFamily; @@ -66722,11 +71981,17 @@ use PHPUnit\Metadata\Version\Requirement; final class RequiresPhp extends \PHPUnit\Metadata\Metadata { private readonly Requirement $versionRequirement; + /** + * @psalm-param 0|1 $level + */ protected function __construct(int $level, Requirement $versionRequirement) { parent::__construct($level); $this->versionRequirement = $versionRequirement; } + /** + * @psalm-assert-if-true RequiresPhp $this + */ public function isRequiresPhp() : bool { return \true; @@ -66757,18 +72022,31 @@ use PHPUnit\Metadata\Version\Requirement; */ final class RequiresPhpExtension extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-var non-empty-string + */ private readonly string $extension; private readonly ?Requirement $versionRequirement; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $extension + */ protected function __construct(int $level, string $extension, ?Requirement $versionRequirement) { parent::__construct($level); $this->extension = $extension; $this->versionRequirement = $versionRequirement; } + /** + * @psalm-assert-if-true RequiresPhpExtension $this + */ public function isRequiresPhpExtension() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function extension() : string { return $this->extension; @@ -66813,11 +72091,17 @@ use PHPUnit\Metadata\Version\Requirement; final class RequiresPhpunit extends \PHPUnit\Metadata\Metadata { private readonly Requirement $versionRequirement; + /** + * @psalm-param 0|1 $level + */ protected function __construct(int $level, Requirement $versionRequirement) { parent::__construct($level); $this->versionRequirement = $versionRequirement; } + /** + * @psalm-assert-if-true RequiresPhpunit $this + */ public function isRequiresPhpunit() : bool { return \true; @@ -66847,22 +72131,42 @@ namespace PHPUnit\Metadata; */ final class RequiresSetting extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-var non-empty-string + */ private readonly string $setting; + /** + * @psalm-var non-empty-string + */ private readonly string $value; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $setting + * @psalm-param non-empty-string $value + */ protected function __construct(int $level, string $setting, string $value) { parent::__construct($level); $this->setting = $setting; $this->value = $value; } + /** + * @psalm-assert-if-true RequiresSetting $this + */ public function isRequiresSetting() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function setting() : string { return $this->setting; } + /** + * @psalm-return non-empty-string + */ public function value() : string { return $this->value; @@ -66888,6 +72192,9 @@ namespace PHPUnit\Metadata; */ final class RunClassInSeparateProcess extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-assert-if-true RunClassInSeparateProcess $this + */ public function isRunClassInSeparateProcess() : bool { return \true; @@ -66913,6 +72220,9 @@ namespace PHPUnit\Metadata; */ final class RunInSeparateProcess extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-assert-if-true RunInSeparateProcess $this + */ public function isRunInSeparateProcess() : bool { return \true; @@ -66938,6 +72248,9 @@ namespace PHPUnit\Metadata; */ final class RunTestsInSeparateProcesses extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-assert-if-true RunTestsInSeparateProcesses $this + */ public function isRunTestsInSeparateProcesses() : bool { return \true; @@ -66963,6 +72276,9 @@ namespace PHPUnit\Metadata; */ final class Test extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-assert-if-true Test $this + */ public function isTest() : bool { return \true; @@ -66988,16 +72304,29 @@ namespace PHPUnit\Metadata; */ final class TestDox extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-var non-empty-string + */ private readonly string $text; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $text + */ protected function __construct(int $level, string $text) { parent::__construct($level); $this->text = $text; } + /** + * @psalm-assert-if-true TestDox $this + */ public function isTestDox() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function text() : string { return $this->text; @@ -67024,11 +72353,17 @@ namespace PHPUnit\Metadata; final class TestWith extends \PHPUnit\Metadata\Metadata { private readonly array $data; + /** + * @psalm-param 0|1 $level + */ protected function __construct(int $level, array $data) { parent::__construct($level); $this->data = $data; } + /** + * @psalm-assert-if-true TestWith $this + */ public function isTestWith() : bool { return \true; @@ -67058,16 +72393,29 @@ namespace PHPUnit\Metadata; */ final class Uses extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-var non-empty-string + */ private readonly string $target; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $target + */ protected function __construct(int $level, string $target) { parent::__construct($level); $this->target = $target; } + /** + * @psalm-assert-if-true Uses $this + */ public function isUses() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function target() : string { return $this->target; @@ -67098,6 +72446,7 @@ final class UsesClass extends \PHPUnit\Metadata\Metadata */ private readonly string $className; /** + * @psalm-param 0|1 $level * @psalm-param class-string $className */ protected function __construct(int $level, string $className) @@ -67105,6 +72454,9 @@ final class UsesClass extends \PHPUnit\Metadata\Metadata parent::__construct($level); $this->className = $className; } + /** + * @psalm-assert-if-true UsesClass $this + */ public function isUsesClass() : bool { return \true; @@ -67151,6 +72503,7 @@ final class UsesDefaultClass extends \PHPUnit\Metadata\Metadata */ private readonly string $className; /** + * @psalm-param 0|1 $level * @psalm-param class-string $className */ protected function __construct(int $level, string $className) @@ -67158,6 +72511,9 @@ final class UsesDefaultClass extends \PHPUnit\Metadata\Metadata parent::__construct($level); $this->className = $className; } + /** + * @psalm-assert-if-true UsesDefaultClass $this + */ public function isUsesDefaultClass() : bool { return \true; @@ -67190,16 +72546,29 @@ namespace PHPUnit\Metadata; */ final class UsesFunction extends \PHPUnit\Metadata\Metadata { + /** + * @psalm-var non-empty-string + */ private readonly string $functionName; + /** + * @psalm-param 0|1 $level + * @psalm-param non-empty-string $functionName + */ public function __construct(int $level, string $functionName) { parent::__construct($level); $this->functionName = $functionName; } + /** + * @psalm-assert-if-true UsesFunction $this + */ public function isUsesFunction() : bool { return \true; } + /** + * @psalm-return non-empty-string + */ public function functionName() : string { return $this->functionName; @@ -67353,278 +72722,74 @@ declare (strict_types=1); * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace PHPUnit\Runner; +namespace PHPUnit\Metadata; -use function file_put_contents; -use function sprintf; -use PHPUnit\Event\Facade as EventFacade; -use PHPUnit\Event\TestData\MoreThanOneDataSetFromDataProviderException; -use PHPUnit\Event\TestData\NoDataSetFromDataProviderException; -use PHPUnit\Framework\TestCase; -use PHPUnit\TextUI\Configuration\CodeCoverageFilterRegistry; -use PHPUnit\TextUI\Configuration\Configuration; -use PHPUnit\TextUI\Output\Printer; -use PHPUnit\SebastianBergmann\CodeCoverage\Driver\Driver; -use PHPUnit\SebastianBergmann\CodeCoverage\Driver\Selector; -use PHPUnit\SebastianBergmann\CodeCoverage\Exception as CodeCoverageException; -use PHPUnit\SebastianBergmann\CodeCoverage\Filter; -use PHPUnit\SebastianBergmann\CodeCoverage\Report\Clover as CloverReport; -use PHPUnit\SebastianBergmann\CodeCoverage\Report\Cobertura as CoberturaReport; -use PHPUnit\SebastianBergmann\CodeCoverage\Report\Crap4j as Crap4jReport; -use PHPUnit\SebastianBergmann\CodeCoverage\Report\Html\Colors; -use PHPUnit\SebastianBergmann\CodeCoverage\Report\Html\CustomCssFile; -use PHPUnit\SebastianBergmann\CodeCoverage\Report\Html\Facade as HtmlReport; -use PHPUnit\SebastianBergmann\CodeCoverage\Report\PHP as PhpReport; -use PHPUnit\SebastianBergmann\CodeCoverage\Report\Text as TextReport; -use PHPUnit\SebastianBergmann\CodeCoverage\Report\Thresholds; -use PHPUnit\SebastianBergmann\CodeCoverage\Report\Xml\Facade as XmlReport; -use PHPUnit\SebastianBergmann\CodeCoverage\Test\TestSize\TestSize; -use PHPUnit\SebastianBergmann\CodeCoverage\Test\TestStatus\TestStatus; -use PHPUnit\SebastianBergmann\Comparator\Comparator; -use PHPUnit\SebastianBergmann\Timer\NoActiveTimerException; -use PHPUnit\SebastianBergmann\Timer\Timer; /** - * @internal This class is not covered by the backward compatibility promise for PHPUnit + * @psalm-immutable + * + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit */ -final class CodeCoverage +final class WithoutErrorHandler extends \PHPUnit\Metadata\Metadata { - private static ?self $instance = null; - private ?\PHPUnit\SebastianBergmann\CodeCoverage\CodeCoverage $codeCoverage = null; - private ?Driver $driver = null; - private bool $collecting = \false; - private ?TestCase $test = null; - private ?Timer $timer = null; - public static function instance() : self - { - if (self::$instance === null) { - self::$instance = new self(); - } - return self::$instance; - } - public function init(Configuration $configuration, CodeCoverageFilterRegistry $codeCoverageFilterRegistry) : void - { - $codeCoverageFilterRegistry->init($configuration); - if (!$configuration->hasCoverageReport()) { - return; - } - $this->activate($codeCoverageFilterRegistry->get(), $configuration->pathCoverage()); - if (!$this->isActive()) { - return; - } - if ($configuration->hasCoverageCacheDirectory()) { - $this->codeCoverage()->cacheStaticAnalysis($configuration->coverageCacheDirectory()); - } - $this->codeCoverage()->excludeSubclassesOfThisClassFromUnintentionallyCoveredCodeCheck(Comparator::class); - if ($configuration->strictCoverage()) { - $this->codeCoverage()->enableCheckForUnintentionallyCoveredCode(); - } - if ($configuration->ignoreDeprecatedCodeUnitsFromCodeCoverage()) { - $this->codeCoverage()->ignoreDeprecatedCode(); - } else { - $this->codeCoverage()->doNotIgnoreDeprecatedCode(); - } - if ($configuration->disableCodeCoverageIgnore()) { - $this->codeCoverage()->disableAnnotationsForIgnoringCode(); - } else { - $this->codeCoverage()->enableAnnotationsForIgnoringCode(); - } - if ($configuration->includeUncoveredFiles()) { - $this->codeCoverage()->includeUncoveredFiles(); - } else { - $this->codeCoverage()->excludeUncoveredFiles(); - } - if ($codeCoverageFilterRegistry->get()->isEmpty()) { - if (!$codeCoverageFilterRegistry->configured()) { - EventFacade::emitter()->testRunnerTriggeredWarning('No filter is configured, code coverage will not be processed'); - } else { - EventFacade::emitter()->testRunnerTriggeredWarning('Incorrect filter configuration, code coverage will not be processed'); - } - $this->deactivate(); - } - } /** - * @psalm-assert-if-true !null $this->instance + * @psalm-assert-if-true WithoutErrorHandler $this */ - public function isActive() : bool - { - return $this->codeCoverage !== null; - } - public function codeCoverage() : \PHPUnit\SebastianBergmann\CodeCoverage\CodeCoverage - { - return $this->codeCoverage; - } - public function driver() : Driver + public function isWithoutErrorHandler() : bool { - return $this->driver; + return \true; } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\Baseline; + +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class Baseline +{ + public const VERSION = 1; /** - * @throws MoreThanOneDataSetFromDataProviderException - * @throws NoDataSetFromDataProviderException + * @psalm-var array>> */ - public function start(TestCase $test) : void - { - if ($this->collecting) { - return; - } - $size = TestSize::unknown(); - if ($test->size()->isSmall()) { - $size = TestSize::small(); - } elseif ($test->size()->isMedium()) { - $size = TestSize::medium(); - } elseif ($test->size()->isLarge()) { - $size = TestSize::large(); - } - $this->test = $test; - $this->codeCoverage->start($test->valueObjectForEvents()->id(), $size); - $this->collecting = \true; - } - public function stop(bool $append = \true, array|false $linesToBeCovered = [], array $linesToBeUsed = []) : void + private array $issues = []; + public function add(\PHPUnit\Runner\Baseline\Issue $issue) : void { - if (!$this->collecting) { - return; + if (!isset($this->issues[$issue->file()])) { + $this->issues[$issue->file()] = []; } - $status = TestStatus::unknown(); - if ($this->test !== null) { - if ($this->test->status()->isSuccess()) { - $status = TestStatus::success(); - } else { - $status = TestStatus::failure(); - } + if (!isset($this->issues[$issue->file()][$issue->line()])) { + $this->issues[$issue->file()][$issue->line()] = []; } - /* @noinspection UnusedFunctionResultInspection */ - $this->codeCoverage->stop($append, $status, $linesToBeCovered, $linesToBeUsed); - $this->test = null; - $this->collecting = \false; - } - public function deactivate() : void - { - $this->driver = null; - $this->codeCoverage = null; - $this->test = null; + $this->issues[$issue->file()][$issue->line()][] = $issue; } - public function generateReports(Printer $printer, Configuration $configuration) : void + public function has(\PHPUnit\Runner\Baseline\Issue $issue) : bool { - if (!$this->isActive()) { - return; - } - if ($configuration->hasCoverageClover()) { - $this->codeCoverageGenerationStart($printer, 'Clover XML'); - try { - $writer = new CloverReport(); - $writer->process($this->codeCoverage(), $configuration->coverageClover()); - $this->codeCoverageGenerationSucceeded($printer); - unset($writer); - } catch (CodeCoverageException $e) { - $this->codeCoverageGenerationFailed($printer, $e); - } - } - if ($configuration->hasCoverageCobertura()) { - $this->codeCoverageGenerationStart($printer, 'Cobertura XML'); - try { - $writer = new CoberturaReport(); - $writer->process($this->codeCoverage(), $configuration->coverageCobertura()); - $this->codeCoverageGenerationSucceeded($printer); - unset($writer); - } catch (CodeCoverageException $e) { - $this->codeCoverageGenerationFailed($printer, $e); - } - } - if ($configuration->hasCoverageCrap4j()) { - $this->codeCoverageGenerationStart($printer, 'Crap4J XML'); - try { - $writer = new Crap4jReport($configuration->coverageCrap4jThreshold()); - $writer->process($this->codeCoverage(), $configuration->coverageCrap4j()); - $this->codeCoverageGenerationSucceeded($printer); - unset($writer); - } catch (CodeCoverageException $e) { - $this->codeCoverageGenerationFailed($printer, $e); - } - } - if ($configuration->hasCoverageHtml()) { - $this->codeCoverageGenerationStart($printer, 'HTML'); - try { - $customCssFile = CustomCssFile::default(); - if ($configuration->hasCoverageHtmlCustomCssFile()) { - $customCssFile = CustomCssFile::from($configuration->coverageHtmlCustomCssFile()); - } - $writer = new HtmlReport(sprintf(' and
PHPUnit %s', \PHPUnit\Runner\Version::id()), Colors::from($configuration->coverageHtmlColorSuccessLow(), $configuration->coverageHtmlColorSuccessMedium(), $configuration->coverageHtmlColorSuccessHigh(), $configuration->coverageHtmlColorWarning(), $configuration->coverageHtmlColorDanger()), Thresholds::from($configuration->coverageHtmlLowUpperBound(), $configuration->coverageHtmlHighLowerBound()), $customCssFile); - $writer->process($this->codeCoverage(), $configuration->coverageHtml()); - $this->codeCoverageGenerationSucceeded($printer); - unset($writer); - } catch (CodeCoverageException $e) { - $this->codeCoverageGenerationFailed($printer, $e); - } - } - if ($configuration->hasCoveragePhp()) { - $this->codeCoverageGenerationStart($printer, 'PHP'); - try { - $writer = new PhpReport(); - $writer->process($this->codeCoverage(), $configuration->coveragePhp()); - $this->codeCoverageGenerationSucceeded($printer); - unset($writer); - } catch (CodeCoverageException $e) { - $this->codeCoverageGenerationFailed($printer, $e); - } - } - if ($configuration->hasCoverageText()) { - $processor = new TextReport(Thresholds::default(), $configuration->coverageTextShowUncoveredFiles(), $configuration->coverageTextShowOnlySummary()); - $textReport = $processor->process($this->codeCoverage(), $configuration->colors()); - if ($configuration->coverageText() === 'php://stdout') { - $printer->print($textReport); - } else { - file_put_contents($configuration->coverageText(), $textReport); - } - } - if ($configuration->hasCoverageXml()) { - $this->codeCoverageGenerationStart($printer, 'PHPUnit XML'); - try { - $writer = new XmlReport(\PHPUnit\Runner\Version::id()); - $writer->process($this->codeCoverage(), $configuration->coverageXml()); - $this->codeCoverageGenerationSucceeded($printer); - unset($writer); - } catch (CodeCoverageException $e) { - $this->codeCoverageGenerationFailed($printer, $e); - } + if (!isset($this->issues[$issue->file()][$issue->line()])) { + return \false; } - } - private function activate(Filter $filter, bool $pathCoverage) : void - { - try { - if ($pathCoverage) { - $this->driver = (new Selector())->forLineAndPathCoverage($filter); - } else { - $this->driver = (new Selector())->forLineCoverage($filter); + foreach ($this->issues[$issue->file()][$issue->line()] as $_issue) { + if ($_issue->equals($issue)) { + return \true; } - $this->codeCoverage = new \PHPUnit\SebastianBergmann\CodeCoverage\CodeCoverage($this->driver, $filter); - } catch (CodeCoverageException $e) { - EventFacade::emitter()->testRunnerTriggeredWarning($e->getMessage()); } - } - private function codeCoverageGenerationStart(Printer $printer, string $format) : void - { - $printer->print(sprintf("\nGenerating code coverage report in %s format ... ", $format)); - $this->timer()->start(); - } - /** - * @throws NoActiveTimerException - */ - private function codeCoverageGenerationSucceeded(Printer $printer) : void - { - $printer->print(sprintf("done [%s]\n", $this->timer()->stop()->asString())); + return \false; } /** - * @throws NoActiveTimerException + * @psalm-return array>> */ - private function codeCoverageGenerationFailed(Printer $printer, CodeCoverageException $e) : void - { - $printer->print(sprintf("failed [%s]\n%s\n", $this->timer()->stop()->asString(), $e->getMessage())); - } - private function timer() : Timer + public function groupedByFileAndLine() : array { - if ($this->timer === null) { - $this->timer = new Timer(); - } - return $this->timer; + return $this->issues; } } getMessage()), $previous->getCode(), $previous); + parent::__construct(sprintf('File "%s" does not have line %d', $file, $line)); } } registerSubscribers(new \PHPUnit\Runner\Baseline\TestTriggeredDeprecationSubscriber($this), new \PHPUnit\Runner\Baseline\TestTriggeredNoticeSubscriber($this), new \PHPUnit\Runner\Baseline\TestTriggeredPhpDeprecationSubscriber($this), new \PHPUnit\Runner\Baseline\TestTriggeredPhpNoticeSubscriber($this), new \PHPUnit\Runner\Baseline\TestTriggeredPhpWarningSubscriber($this), new \PHPUnit\Runner\Baseline\TestTriggeredWarningSubscriber($this)); + $this->baseline = new \PHPUnit\Runner\Baseline\Baseline(); + $this->source = $source; + } + public function baseline() : \PHPUnit\Runner\Baseline\Baseline + { + return $this->baseline; + } + /** + * @throws FileDoesNotExistException + * @throws FileDoesNotHaveLineException + */ + public function testTriggeredIssue(DeprecationTriggered|NoticeTriggered|PhpDeprecationTriggered|PhpNoticeTriggered|PhpWarningTriggered|WarningTriggered $event) : void + { + if (!$this->source->ignoreSuppressionOfPhpWarnings() && $event->wasSuppressed()) { + return; + } + if ($this->source->restrictWarnings() && !(new SourceFilter())->includes($this->source, $event->file())) { + return; + } + $this->baseline->add(\PHPUnit\Runner\Baseline\Issue::from($event->file(), $event->line(), null, $event->message())); } } file = $file; + $this->line = $line; + $this->hash = $hash; + $this->description = $description; + } + /** + * @psalm-return non-empty-string + */ + public function file() : string + { + return $this->file; + } + /** + * @psalm-return positive-int + */ + public function line() : int { - parent::__construct(sprintf('Class "%s" does not implement interface %s', $className, Extension::class)); + return $this->line; + } + /** + * @psalm-return non-empty-string + */ + public function hash() : string + { + return $this->hash; + } + /** + * @psalm-return non-empty-string + */ + public function description() : string + { + return $this->description; + } + public function equals(self $other) : bool + { + return $this->file() === $other->file() && $this->line() === $other->line() && $this->hash() === $other->hash() && $this->description() === $other->description(); + } + /** + * @psalm-param non-empty-string $file + * @psalm-param positive-int $line + * + * @psalm-return non-empty-string + * + * @throws FileDoesNotExistException + * @throws FileDoesNotHaveLineException + */ + private static function calculateHash(string $file, int $line) : string + { + if (!is_file($file)) { + throw new FileDoesNotExistException($file); + } + $lines = file($file, \FILE_IGNORE_NEW_LINES); + $key = $line - 1; + if (!isset($lines[$key])) { + throw new \PHPUnit\Runner\Baseline\FileDoesNotHaveLineException($file, $line); + } + $hash = sha1($lines[$key]); + assert(!empty($hash)); + return $hash; } } loadFile($baselineFile); + } catch (XmlException $e) { + throw new \PHPUnit\Runner\Baseline\CannotLoadBaselineException(sprintf('Cannot read baseline: %s', trim($e->getMessage()))); + } + $version = (int) $document->documentElement->getAttribute('version'); + if ($version !== \PHPUnit\Runner\Baseline\Baseline::VERSION) { + throw new \PHPUnit\Runner\Baseline\CannotLoadBaselineException(sprintf('Cannot read baseline %s, version %d is not supported', $baselineFile, $version)); + } + $baseline = new \PHPUnit\Runner\Baseline\Baseline(); + $baselineDirectory = dirname(realpath($baselineFile)); + $xpath = new DOMXPath($document); + foreach ($xpath->query('file') as $fileElement) { + assert($fileElement instanceof DOMElement); + $file = $baselineDirectory . \DIRECTORY_SEPARATOR . str_replace('/', \DIRECTORY_SEPARATOR, $fileElement->getAttribute('path')); + foreach ($xpath->query('line', $fileElement) as $lineElement) { + assert($lineElement instanceof DOMElement); + $line = (int) $lineElement->getAttribute('number'); + $hash = $lineElement->getAttribute('hash'); + foreach ($xpath->query('issue', $lineElement) as $issueElement) { + assert($issueElement instanceof DOMElement); + $description = $issueElement->textContent; + assert(!empty($file)); + assert($line > 0); + assert(!empty($hash)); + assert(!empty($description)); + $baseline->add(\PHPUnit\Runner\Baseline\Issue::from($file, $line, $hash, $description)); + } + } + } + return $baseline; } } baselineDirectory = $baselineDirectory; + } + /** + * @psalm-param non-empty-string $filename + * + * @psalm-return non-empty-string + */ + public function calculate(string $filename) : string + { + $result = implode('/', $this->parts($filename)); + assert($result !== ''); + return $result; + } + /** + * @psalm-param non-empty-string $filename + * + * @psalm-return list + */ + public function parts(string $filename) : array + { + $schemePosition = strpos($filename, '://'); + if ($schemePosition !== \false) { + $filename = substr($filename, $schemePosition + 3); + assert($filename !== ''); + } + $parentParts = explode('/', trim(str_replace('\\', '/', $this->baselineDirectory), '/')); + $parentPartsCount = count($parentParts); + $filenameParts = explode('/', trim(str_replace('\\', '/', $filename), '/')); + $filenamePartsCount = count($filenameParts); + $i = 0; + for (; $i < $filenamePartsCount; $i++) { + if ($parentPartsCount < $i + 1) { + break; + } + $parentPath = implode('/', array_slice($parentParts, 0, $i + 1)); + $filenamePath = implode('/', array_slice($filenameParts, 0, $i + 1)); + if ($parentPath !== $filenamePath) { + break; + } + } + if ($i === 0) { + return [$filename]; + } + $dotsCount = $parentPartsCount - $i; + assert($dotsCount >= 0); + return array_merge(array_fill(0, $dotsCount, '..'), array_slice($filenameParts, $i)); } } generator = $generator; + } + protected function generator() : \PHPUnit\Runner\Baseline\Generator + { + return $this->generator; + } } generator()->testTriggeredIssue($event); } } generator()->testTriggeredIssue($event); + } } generator()->testTriggeredIssue($event); + } } generator()->testTriggeredIssue($event); + } } generator()->testTriggeredIssue($event); } } generator()->testTriggeredIssue($event); } } openMemory(); + $writer->setIndent(\true); + $writer->startDocument(); + $writer->startElement('files'); + $writer->writeAttribute('version', (string) \PHPUnit\Runner\Baseline\Baseline::VERSION); + foreach ($baseline->groupedByFileAndLine() as $file => $lines) { + assert(!empty($file)); + $writer->startElement('file'); + $writer->writeAttribute('path', $pathCalculator->calculate($file)); + foreach ($lines as $line => $issues) { + $writer->startElement('line'); + $writer->writeAttribute('number', (string) $line); + $writer->writeAttribute('hash', $issues[0]->hash()); + foreach ($issues as $issue) { + $writer->startElement('issue'); + $writer->writeCData($issue->description()); + $writer->endElement(); + } + $writer->endElement(); + } + $writer->endElement(); + } + $writer->endElement(); + file_put_contents($baselineFile, $writer->outputMemory()); + } } > + */ + private array $linesToBeIgnored = []; + public static function instance() : self { - parent::__construct(sprintf('PHPUnit does not support PHPT %s sections', $section)); + if (self::$instance === null) { + self::$instance = new self(); + } + return self::$instance; + } + public function init(Configuration $configuration, CodeCoverageFilterRegistry $codeCoverageFilterRegistry, bool $extensionRequiresCodeCoverageCollection) : void + { + $codeCoverageFilterRegistry->init($configuration); + if (!$configuration->hasCoverageReport() && !$extensionRequiresCodeCoverageCollection) { + return; + } + $this->activate($codeCoverageFilterRegistry->get(), $configuration->pathCoverage()); + if (!$this->isActive()) { + return; + } + if ($configuration->hasCoverageCacheDirectory()) { + $this->codeCoverage()->cacheStaticAnalysis($configuration->coverageCacheDirectory()); + } + $this->codeCoverage()->excludeSubclassesOfThisClassFromUnintentionallyCoveredCodeCheck(Comparator::class); + if ($configuration->strictCoverage()) { + $this->codeCoverage()->enableCheckForUnintentionallyCoveredCode(); + } + if ($configuration->ignoreDeprecatedCodeUnitsFromCodeCoverage()) { + $this->codeCoverage()->ignoreDeprecatedCode(); + } else { + $this->codeCoverage()->doNotIgnoreDeprecatedCode(); + } + if ($configuration->disableCodeCoverageIgnore()) { + $this->codeCoverage()->disableAnnotationsForIgnoringCode(); + } else { + $this->codeCoverage()->enableAnnotationsForIgnoringCode(); + } + if ($configuration->includeUncoveredFiles()) { + $this->codeCoverage()->includeUncoveredFiles(); + } else { + $this->codeCoverage()->excludeUncoveredFiles(); + } + if ($codeCoverageFilterRegistry->get()->isEmpty()) { + if (!$codeCoverageFilterRegistry->configured()) { + EventFacade::emitter()->testRunnerTriggeredWarning('No filter is configured, code coverage will not be processed'); + } else { + EventFacade::emitter()->testRunnerTriggeredWarning('Incorrect filter configuration, code coverage will not be processed'); + } + $this->deactivate(); + } + } + /** + * @psalm-assert-if-true !null $this->instance + */ + public function isActive() : bool + { + return $this->codeCoverage !== null; + } + public function codeCoverage() : \PHPUnit\SebastianBergmann\CodeCoverage\CodeCoverage + { + return $this->codeCoverage; + } + public function driver() : Driver + { + return $this->driver; + } + /** + * @throws MoreThanOneDataSetFromDataProviderException + */ + public function start(TestCase $test) : void + { + if ($this->collecting) { + return; + } + $size = TestSize::unknown(); + if ($test->size()->isSmall()) { + $size = TestSize::small(); + } elseif ($test->size()->isMedium()) { + $size = TestSize::medium(); + } elseif ($test->size()->isLarge()) { + $size = TestSize::large(); + } + $this->test = $test; + $this->codeCoverage->start($test->valueObjectForEvents()->id(), $size); + $this->collecting = \true; + } + public function stop(bool $append = \true, array|false $linesToBeCovered = [], array $linesToBeUsed = []) : void + { + if (!$this->collecting) { + return; + } + $status = TestStatus::unknown(); + if ($this->test !== null) { + if ($this->test->status()->isSuccess()) { + $status = TestStatus::success(); + } else { + $status = TestStatus::failure(); + } + } + /* @noinspection UnusedFunctionResultInspection */ + $this->codeCoverage->stop($append, $status, $linesToBeCovered, $linesToBeUsed, $this->linesToBeIgnored); + $this->test = null; + $this->collecting = \false; + } + public function deactivate() : void + { + $this->driver = null; + $this->codeCoverage = null; + $this->test = null; + } + public function generateReports(Printer $printer, Configuration $configuration) : void + { + if (!$this->isActive()) { + return; + } + if ($configuration->hasCoveragePhp()) { + $this->codeCoverageGenerationStart($printer, 'PHP'); + try { + $writer = new PhpReport(); + $writer->process($this->codeCoverage(), $configuration->coveragePhp()); + $this->codeCoverageGenerationSucceeded($printer); + unset($writer); + } catch (CodeCoverageException $e) { + $this->codeCoverageGenerationFailed($printer, $e); + } + } + if ($configuration->hasCoverageClover()) { + $this->codeCoverageGenerationStart($printer, 'Clover XML'); + try { + $writer = new CloverReport(); + $writer->process($this->codeCoverage(), $configuration->coverageClover()); + $this->codeCoverageGenerationSucceeded($printer); + unset($writer); + } catch (CodeCoverageException $e) { + $this->codeCoverageGenerationFailed($printer, $e); + } + } + if ($configuration->hasCoverageCobertura()) { + $this->codeCoverageGenerationStart($printer, 'Cobertura XML'); + try { + $writer = new CoberturaReport(); + $writer->process($this->codeCoverage(), $configuration->coverageCobertura()); + $this->codeCoverageGenerationSucceeded($printer); + unset($writer); + } catch (CodeCoverageException $e) { + $this->codeCoverageGenerationFailed($printer, $e); + } + } + if ($configuration->hasCoverageCrap4j()) { + $this->codeCoverageGenerationStart($printer, 'Crap4J XML'); + try { + $writer = new Crap4jReport($configuration->coverageCrap4jThreshold()); + $writer->process($this->codeCoverage(), $configuration->coverageCrap4j()); + $this->codeCoverageGenerationSucceeded($printer); + unset($writer); + } catch (CodeCoverageException $e) { + $this->codeCoverageGenerationFailed($printer, $e); + } + } + if ($configuration->hasCoverageHtml()) { + $this->codeCoverageGenerationStart($printer, 'HTML'); + try { + $customCssFile = CustomCssFile::default(); + if ($configuration->hasCoverageHtmlCustomCssFile()) { + $customCssFile = CustomCssFile::from($configuration->coverageHtmlCustomCssFile()); + } + $writer = new HtmlReport(sprintf(' and PHPUnit %s', \PHPUnit\Runner\Version::id()), Colors::from($configuration->coverageHtmlColorSuccessLow(), $configuration->coverageHtmlColorSuccessMedium(), $configuration->coverageHtmlColorSuccessHigh(), $configuration->coverageHtmlColorWarning(), $configuration->coverageHtmlColorDanger()), Thresholds::from($configuration->coverageHtmlLowUpperBound(), $configuration->coverageHtmlHighLowerBound()), $customCssFile); + $writer->process($this->codeCoverage(), $configuration->coverageHtml()); + $this->codeCoverageGenerationSucceeded($printer); + unset($writer); + } catch (CodeCoverageException $e) { + $this->codeCoverageGenerationFailed($printer, $e); + } + } + if ($configuration->hasCoverageText()) { + $processor = new TextReport(Thresholds::default(), $configuration->coverageTextShowUncoveredFiles(), $configuration->coverageTextShowOnlySummary()); + $textReport = $processor->process($this->codeCoverage(), $configuration->colors()); + if ($configuration->coverageText() === 'php://stdout') { + $printer->print($textReport); + } else { + file_put_contents($configuration->coverageText(), $textReport); + } + } + if ($configuration->hasCoverageXml()) { + $this->codeCoverageGenerationStart($printer, 'PHPUnit XML'); + try { + $writer = new XmlReport(\PHPUnit\Runner\Version::id()); + $writer->process($this->codeCoverage(), $configuration->coverageXml()); + $this->codeCoverageGenerationSucceeded($printer); + unset($writer); + } catch (CodeCoverageException $e) { + $this->codeCoverageGenerationFailed($printer, $e); + } + } + } + /** + * @psalm-param array> $linesToBeIgnored + */ + public function ignoreLines(array $linesToBeIgnored) : void + { + $this->linesToBeIgnored = $linesToBeIgnored; + } + /** + * @psalm-return array> + */ + public function linesToBeIgnored() : array + { + return $this->linesToBeIgnored; + } + private function activate(Filter $filter, bool $pathCoverage) : void + { + try { + if ($pathCoverage) { + $this->driver = (new Selector())->forLineAndPathCoverage($filter); + } else { + $this->driver = (new Selector())->forLineCoverage($filter); + } + $this->codeCoverage = new \PHPUnit\SebastianBergmann\CodeCoverage\CodeCoverage($this->driver, $filter); + } catch (CodeCoverageException $e) { + EventFacade::emitter()->testRunnerTriggeredWarning($e->getMessage()); + } + } + private function codeCoverageGenerationStart(Printer $printer, string $format) : void + { + $printer->print(sprintf("\nGenerating code coverage report in %s format ... ", $format)); + $this->timer()->start(); + } + /** + * @throws NoActiveTimerException + */ + private function codeCoverageGenerationSucceeded(Printer $printer) : void + { + $printer->print(sprintf("done [%s]\n", $this->timer()->stop()->asString())); + } + /** + * @throws NoActiveTimerException + */ + private function codeCoverageGenerationFailed(Printer $printer, CodeCoverageException $e) : void + { + $printer->print(sprintf("failed [%s]\n%s\n", $this->timer()->stop()->asString(), $e->getMessage())); + } + private function timer() : Timer + { + if ($this->timer === null) { + $this->timer = new Timer(); + } + return $this->timer; } } isExcluded($errorFile)) { + return \false; + } + $test = Event\Code\TestMethodBuilder::fromCallStack(); + $ignoredByBaseline = $this->ignoredByBaseline($errorFile, $errorLine, $errorString); + $ignoredByTest = $test->metadata()->isIgnoreDeprecations()->isNotEmpty(); + switch ($errorNumber) { + case E_NOTICE: + case E_STRICT: + Event\Facade::emitter()->testTriggeredPhpNotice($test, $errorString, $errorFile, $errorLine, $suppressed, $ignoredByBaseline); + break; + case E_USER_NOTICE: + Event\Facade::emitter()->testTriggeredNotice($test, $errorString, $errorFile, $errorLine, $suppressed, $ignoredByBaseline); + break; + case E_WARNING: + Event\Facade::emitter()->testTriggeredPhpWarning($test, $errorString, $errorFile, $errorLine, $suppressed, $ignoredByBaseline); + break; + case E_USER_WARNING: + Event\Facade::emitter()->testTriggeredWarning($test, $errorString, $errorFile, $errorLine, $suppressed, $ignoredByBaseline); + break; + case E_DEPRECATED: + Event\Facade::emitter()->testTriggeredPhpDeprecation($test, $errorString, $errorFile, $errorLine, $suppressed, $ignoredByBaseline, $ignoredByTest); + break; + case E_USER_DEPRECATED: + Event\Facade::emitter()->testTriggeredDeprecation($test, $errorString, $errorFile, $errorLine, $suppressed, $ignoredByBaseline, $ignoredByTest); + break; + case E_USER_ERROR: + Event\Facade::emitter()->testTriggeredError($test, $errorString, $errorFile, $errorLine, $suppressed); + throw new \PHPUnit\Runner\ErrorException('E_USER_ERROR was triggered'); + default: + return \false; + } + return \false; + } + public function enable() : void + { + if ($this->enabled) { + return; + } + set_error_handler($this); + $this->enabled = \true; + $this->originalErrorReportingLevel = error_reporting(); + error_reporting($this->originalErrorReportingLevel & self::UNHANDLEABLE_LEVELS); + } + public function disable() : void + { + if (!$this->enabled) { + return; + } + restore_error_handler(); + error_reporting(error_reporting() | $this->originalErrorReportingLevel); + $this->enabled = \false; + $this->originalErrorReportingLevel = null; + } + public function use(Baseline $baseline) : void + { + $this->baseline = $baseline; + } + /** + * @psalm-param non-empty-string $file + * @psalm-param positive-int $line + * @psalm-param non-empty-string $description + */ + private function ignoredByBaseline(string $file, int $line, string $description) : bool + { + if ($this->baseline === null) { + return \false; + } + return $this->baseline->has(Issue::from($file, $line, null, $description)); + } } configuration = $configuration; - $this->facade = $facade; - } - /** - * @psalm-param class-string $className - * @psalm-param array $parameters - * - * @throws Exception - */ - public function bootstrap(string $className, array $parameters) : void + public function __construct(string $className, string $file) { - if (!class_exists($className)) { - throw new ClassDoesNotExistException($className); - } - if (!in_array(\PHPUnit\Runner\Extension\Extension::class, class_implements($className), \true)) { - throw new ClassDoesNotImplementExtensionInterfaceException($className); - } - try { - $instance = (new ReflectionClass($className))->newInstance(); - } catch (ReflectionException $e) { - throw new ClassCannotBeInstantiatedException($className, $e); - } - assert($instance instanceof \PHPUnit\Runner\Extension\Extension); - $instance->bootstrap($this->configuration, $this->facade, \PHPUnit\Runner\Extension\ParameterCollection::fromArray($parameters)); - Event\Facade::emitter()->testRunnerBootstrappedExtension($className, $parameters); + parent::__construct(sprintf('Class %s cannot be found in %s', $className, $file)); } } + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner; + +use function sprintf; +use RuntimeException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class DirectoryCannotBeCreatedException extends RuntimeException implements \PHPUnit\Runner\Exception +{ + public function __construct(string $directory) + { + parent::__construct(sprintf('Cannot create directory "%s"', $directory)); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner; + +use Error; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class ErrorException extends Error implements \PHPUnit\Runner\Exception +{ +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner; + +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +interface Exception extends \PHPUnit\Exception +{ +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner; + +use function sprintf; +use RuntimeException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class FileDoesNotExistException extends RuntimeException implements \PHPUnit\Runner\Exception +{ + public function __construct(string $file) + { + parent::__construct(sprintf('File "%s" does not exist', $file)); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner; + +use RuntimeException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class InvalidOrderException extends RuntimeException implements \PHPUnit\Runner\Exception +{ +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner; + +use RuntimeException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class InvalidPhptFileException extends RuntimeException implements \PHPUnit\Runner\Exception +{ +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner; + +use RuntimeException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class NoIgnoredEventException extends RuntimeException implements \PHPUnit\Runner\Exception +{ +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner; + +use function sprintf; +use RuntimeException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class ParameterDoesNotExistException extends RuntimeException implements \PHPUnit\Runner\Exception +{ + public function __construct(string $name) + { + parent::__construct(sprintf('Parameter "%s" does not exist', $name)); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner; + +use function sprintf; +use RuntimeException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class PhptExternalFileCannotBeLoadedException extends RuntimeException implements \PHPUnit\Runner\Exception +{ + public function __construct(string $section, string $file) + { + parent::__construct(sprintf('Could not load --%s-- %s for PHPT file', $section . '_EXTERNAL', $file)); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner; + +use RuntimeException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class ReflectionException extends RuntimeException implements \PHPUnit\Runner\Exception +{ +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner; + +use function sprintf; +use RuntimeException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class UnsupportedPhptSectionException extends RuntimeException implements \PHPUnit\Runner\Exception +{ + public function __construct(string $section) + { + parent::__construct(sprintf('PHPUnit does not support PHPT %s sections', $section)); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\Extension; + +use PHPUnit\TextUI\Configuration\Configuration; +/** + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +interface Extension +{ + public function bootstrap(Configuration $configuration, \PHPUnit\Runner\Extension\Facade $facade, \PHPUnit\Runner\Extension\ParameterCollection $parameters) : void; +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\Extension; + +use function assert; +use function class_exists; +use function class_implements; +use function in_array; +use function sprintf; +use PHPUnit\Event\Facade as EventFacade; +use PHPUnit\TextUI\Configuration\Configuration; +use ReflectionClass; +use Throwable; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class ExtensionBootstrapper +{ + private readonly Configuration $configuration; + private readonly \PHPUnit\Runner\Extension\Facade $facade; + public function __construct(Configuration $configuration, \PHPUnit\Runner\Extension\Facade $facade) + { + $this->configuration = $configuration; + $this->facade = $facade; + } + /** + * @psalm-param class-string $className + * @psalm-param array $parameters + */ + public function bootstrap(string $className, array $parameters) : void + { + if (!class_exists($className)) { + EventFacade::emitter()->testRunnerTriggeredWarning(sprintf('Cannot bootstrap extension because class %s does not exist', $className)); + return; + } + if (!in_array(\PHPUnit\Runner\Extension\Extension::class, class_implements($className), \true)) { + EventFacade::emitter()->testRunnerTriggeredWarning(sprintf('Cannot bootstrap extension because class %s does not implement interface %s', $className, \PHPUnit\Runner\Extension\Extension::class)); + return; + } + try { + $instance = (new ReflectionClass($className))->newInstance(); + assert($instance instanceof \PHPUnit\Runner\Extension\Extension); + $instance->bootstrap($this->configuration, $this->facade, \PHPUnit\Runner\Extension\ParameterCollection::fromArray($parameters)); + } catch (Throwable $t) { + EventFacade::emitter()->testRunnerTriggeredWarning(sprintf('Bootstrapping of extension %s failed: %s%s%s', $className, $t->getMessage(), \PHP_EOL, $t->getTraceAsString())); + return; + } + EventFacade::emitter()->testRunnerBootstrappedExtension($className, $parameters); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\Extension; + +use PHPUnit\Event\EventFacadeIsSealedException; +use PHPUnit\Event\Facade as EventFacade; +use PHPUnit\Event\Subscriber; +use PHPUnit\Event\Tracer\Tracer; +use PHPUnit\Event\UnknownSubscriberTypeException; +/** + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + */ +final class Facade +{ + private bool $replacesOutput = \false; + private bool $replacesProgressOutput = \false; + private bool $replacesResultOutput = \false; + private bool $requiresCodeCoverageCollection = \false; + private bool $requiresExportOfObjects = \false; + /** + * @throws EventFacadeIsSealedException + * @throws UnknownSubscriberTypeException + */ + public function registerSubscribers(Subscriber ...$subscribers) : void + { + EventFacade::instance()->registerSubscribers(...$subscribers); + } + /** + * @throws EventFacadeIsSealedException + * @throws UnknownSubscriberTypeException + */ + public function registerSubscriber(Subscriber $subscriber) : void + { + EventFacade::instance()->registerSubscriber($subscriber); + } + /** + * @throws EventFacadeIsSealedException + */ + public function registerTracer(Tracer $tracer) : void + { + EventFacade::instance()->registerTracer($tracer); + } + public function replaceOutput() : void + { + $this->replacesOutput = \true; + } + public function replacesOutput() : bool + { + return $this->replacesOutput; + } + public function replaceProgressOutput() : void + { + $this->replacesProgressOutput = \true; + } + public function replacesProgressOutput() : bool + { + return $this->replacesOutput || $this->replacesProgressOutput; + } + public function replaceResultOutput() : void + { + $this->replacesResultOutput = \true; + } + public function replacesResultOutput() : bool + { + return $this->replacesOutput || $this->replacesResultOutput; + } + public function requireCodeCoverageCollection() : void + { + $this->requiresCodeCoverageCollection = \true; + } + public function requiresCodeCoverageCollection() : bool + { + return $this->requiresCodeCoverageCollection; + } + /** + * @deprecated + */ + public function requireExportOfObjects() : void + { + $this->requiresExportOfObjects = \true; + } + /** + * @deprecated + */ + public function requiresExportOfObjects() : bool + { + return $this->requiresExportOfObjects; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\Extension; + +use function array_key_exists; +use PHPUnit\Runner\ParameterDoesNotExistException; /** * @psalm-immutable * @@ -68169,8 +74435,13 @@ declare (strict_types=1); */ namespace PHPUnit\Runner\Extension; +use function count; +use function explode; use function extension_loaded; +use function implode; use function is_file; +use function sprintf; +use function str_contains; use PHPUnit\PharIo\Manifest\ApplicationName; use PHPUnit\PharIo\Manifest\Exception as ManifestException; use PHPUnit\PharIo\Manifest\ManifestLoader; @@ -68178,55 +74449,69 @@ use PHPUnit\PharIo\Version\Version as PharIoVersion; use PHPUnit\Event; use PHPUnit\Runner\Version; use PHPUnit\SebastianBergmann\FileIterator\Facade as FileIteratorFacade; +use Throwable; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class PharLoader { /** - * @psalm-return array{loadedExtensions: list, notLoadedExtensions: list} + * @psalm-param non-empty-string $directory + * + * @psalm-return list */ public function loadPharExtensionsInDirectory(string $directory) : array { $pharExtensionLoaded = extension_loaded('phar'); - if (!$pharExtensionLoaded) { - Event\Facade::emitter()->testRunnerTriggeredWarning('Loading PHPUnit extension(s) from PHP archive(s) failed, PHAR extension not loaded'); - } $loadedExtensions = []; - $notLoadedExtensions = []; foreach ((new FileIteratorFacade())->getFilesAsArray($directory, '.phar') as $file) { if (!$pharExtensionLoaded) { - $notLoadedExtensions[] = $file . ' cannot be loaded'; + Event\Facade::emitter()->testRunnerTriggeredWarning(sprintf('Cannot load extension from %s because the PHAR extension is not available', $file)); continue; } if (!is_file('phar://' . $file . '/manifest.xml')) { - $notLoadedExtensions[] = $file . ' is not an extension for PHPUnit'; + Event\Facade::emitter()->testRunnerTriggeredWarning(sprintf('%s is not an extension for PHPUnit', $file)); continue; } try { $applicationName = new ApplicationName('phpunit/phpunit'); - $version = new PharIoVersion(Version::series()); + $version = new PharIoVersion($this->phpunitVersion()); $manifest = ManifestLoader::fromFile('phar://' . $file . '/manifest.xml'); if (!$manifest->isExtensionFor($applicationName)) { - $notLoadedExtensions[] = $file . ' is not an extension for PHPUnit'; + Event\Facade::emitter()->testRunnerTriggeredWarning(sprintf('%s is not an extension for PHPUnit', $file)); continue; } if (!$manifest->isExtensionFor($applicationName, $version)) { - $notLoadedExtensions[] = $file . ' is not compatible with this version of PHPUnit'; + Event\Facade::emitter()->testRunnerTriggeredWarning(sprintf('%s is not compatible with PHPUnit %s', $file, Version::series())); continue; } } catch (ManifestException $e) { - $notLoadedExtensions[] = $file . ': ' . $e->getMessage(); + Event\Facade::emitter()->testRunnerTriggeredWarning(sprintf('Cannot load extension from %s: %s', $file, $e->getMessage())); + continue; + } + try { + /** @psalm-suppress UnresolvableInclude */ + @(require $file); + } catch (Throwable $t) { + Event\Facade::emitter()->testRunnerTriggeredWarning(sprintf('Cannot load extension from %s: %s', $file, $t->getMessage())); continue; } - /** - * @psalm-suppress UnresolvableInclude - */ - require $file; $loadedExtensions[] = $manifest->getName()->asString() . ' ' . $manifest->getVersion()->getVersionString(); Event\Facade::emitter()->testRunnerLoadedExtensionFromPhar($file, $manifest->getName()->asString(), $manifest->getVersion()->getVersionString()); } - return ['loadedExtensions' => $loadedExtensions, 'notLoadedExtensions' => $notLoadedExtensions]; + return $loadedExtensions; + } + private function phpunitVersion() : string + { + $version = Version::id(); + if (!str_contains($version, '-')) { + return $version; + } + $parts = explode('.', explode('-', $version)[0]); + if (count($parts) === 2) { + $parts[] = 0; + } + return implode('.', $parts); } } */ private array $filters = []; + /** + * @psalm-param list $testIds + */ + public function addTestIdFilter(array $testIds) : void + { + $this->filters[] = [new ReflectionClass(\PHPUnit\Runner\Filter\TestIdFilterIterator::class), $testIds]; + } + /** + * @psalm-param list $groups + */ public function addExcludeGroupFilter(array $groups) : void { $this->filters[] = [new ReflectionClass(\PHPUnit\Runner\Filter\ExcludeGroupFilterIterator::class), $groups]; } + /** + * @psalm-param list $groups + */ public function addIncludeGroupFilter(array $groups) : void { $this->filters[] = [new ReflectionClass(\PHPUnit\Runner\Filter\IncludeGroupFilterIterator::class), $groups]; } + /** + * @psalm-param non-empty-string $name + */ public function addNameFilter(string $name) : void { $this->filters[] = [new ReflectionClass(\PHPUnit\Runner\Filter\NameFilterIterator::class), $name]; @@ -68319,6 +74620,7 @@ use function array_map; use function array_push; use function in_array; use function spl_object_id; +use PHPUnit\Framework\Test; use PHPUnit\Framework\TestSuite; use RecursiveFilterIterator; use RecursiveIterator; @@ -68331,10 +74633,14 @@ abstract class GroupFilterIterator extends RecursiveFilterIterator * @psalm-var list */ protected array $groupTests = []; + /** + * @psalm-param RecursiveIterator $iterator + * @psalm-param list $groups + */ public function __construct(RecursiveIterator $iterator, array $groups, TestSuite $suite) { parent::__construct($iterator); - foreach ($suite->getGroupDetails() as $group => $tests) { + foreach ($suite->groupDetails() as $group => $tests) { if (in_array((string) $group, $groups, \true)) { $testHashes = array_map('spl_object_id', $tests); array_push($this->groupTests, ...$testHashes); @@ -68409,6 +74715,9 @@ final class NameFilterIterator extends RecursiveFilterIterator private ?int $filterMin = null; private ?int $filterMax = null; /** + * @psalm-param RecursiveIterator $iterator + * @psalm-param non-empty-string $filter + * * @throws Exception */ public function __construct(RecursiveIterator $iterator, string $filter) @@ -68486,74 +74795,322 @@ declare (strict_types=1); * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace PHPUnit\Runner; +namespace PHPUnit\Runner\Filter; -use const DEBUG_BACKTRACE_IGNORE_ARGS; -use const DIRECTORY_SEPARATOR; -use function array_merge; -use function basename; -use function debug_backtrace; -use function defined; -use function dirname; -use function explode; -use function extension_loaded; -use function file; -use function file_get_contents; -use function file_put_contents; -use function is_array; -use function is_file; -use function is_readable; -use function is_string; -use function ltrim; -use function preg_match; -use function preg_replace; -use function preg_split; -use function realpath; -use function rtrim; -use function str_contains; -use function str_replace; -use function str_starts_with; -use function strncasecmp; -use function substr; -use function trim; -use function unlink; -use function unserialize; -use function var_export; -use PHPUnit\Event\Code\Phpt; -use PHPUnit\Event\Code\ThrowableBuilder; -use PHPUnit\Event\Facade as EventFacade; -use PHPUnit\Event\NoPreviousThrowableException; -use PHPUnit\Framework\Assert; -use PHPUnit\Framework\AssertionFailedError; -use PHPUnit\Framework\ExecutionOrderDependency; -use PHPUnit\Framework\ExpectationFailedException; -use PHPUnit\Framework\IncompleteTestError; -use PHPUnit\Framework\PhptAssertionFailedError; -use PHPUnit\Framework\Reorderable; -use PHPUnit\Framework\SelfDescribing; +use function in_array; +use PHPUnit\Event\TestData\MoreThanOneDataSetFromDataProviderException; +use PHPUnit\Event\TestData\NoDataSetFromDataProviderException; use PHPUnit\Framework\Test; -use PHPUnit\TextUI\Configuration\Registry as ConfigurationRegistry; -use PHPUnit\Util\PHP\AbstractPhpProcess; -use PHPUnit\SebastianBergmann\CodeCoverage\Data\RawCodeCoverageData; -use PHPUnit\SebastianBergmann\CodeCoverage\InvalidArgumentException; -use PHPUnit\SebastianBergmann\CodeCoverage\StaticAnalysisCacheNotConfiguredException; -use PHPUnit\SebastianBergmann\CodeCoverage\Test\TestSize\TestSize; -use PHPUnit\SebastianBergmann\CodeCoverage\Test\TestStatus\TestStatus; -use PHPUnit\SebastianBergmann\CodeCoverage\TestIdMissingException; -use PHPUnit\SebastianBergmann\CodeCoverage\UnintentionallyCoveredCodeException; -use PHPUnit\SebastianBergmann\Template\Template; -use Throwable; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ +use PHPUnit\Framework\TestCase; +use PHPUnit\Framework\TestSuite; +use PHPUnit\Runner\PhptTestCase; +use RecursiveFilterIterator; +use RecursiveIterator; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class TestIdFilterIterator extends RecursiveFilterIterator +{ + /** + * @psalm-var non-empty-list + */ + private readonly array $testIds; + /** + * @psalm-param RecursiveIterator $iterator + * @psalm-param non-empty-list $testIds + */ + public function __construct(RecursiveIterator $iterator, array $testIds) + { + parent::__construct($iterator); + $this->testIds = $testIds; + } + public function accept() : bool + { + $test = $this->getInnerIterator()->current(); + if ($test instanceof TestSuite) { + return \true; + } + if (!$test instanceof TestCase && !$test instanceof PhptTestCase) { + return \false; + } + try { + return in_array($test->valueObjectForEvents()->id(), $this->testIds, \true); + } catch (MoreThanOneDataSetFromDataProviderException|NoDataSetFromDataProviderException) { + return \false; + } + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\GarbageCollection; + +use function gc_collect_cycles; +use function gc_disable; +use function gc_enable; +use PHPUnit\Event\EventFacadeIsSealedException; +use PHPUnit\Event\Facade; +use PHPUnit\Event\UnknownSubscriberTypeException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class GarbageCollectionHandler +{ + private readonly Facade $facade; + private readonly int $threshold; + private int $tests = 0; + /** + * @throws EventFacadeIsSealedException + * @throws UnknownSubscriberTypeException + */ + public function __construct(Facade $facade, int $threshold) + { + $this->facade = $facade; + $this->threshold = $threshold; + $this->registerSubscribers(); + } + public function executionStarted() : void + { + gc_disable(); + $this->facade->emitter()->testRunnerDisabledGarbageCollection(); + gc_collect_cycles(); + $this->facade->emitter()->testRunnerTriggeredGarbageCollection(); + } + public function executionFinished() : void + { + gc_collect_cycles(); + $this->facade->emitter()->testRunnerTriggeredGarbageCollection(); + gc_enable(); + $this->facade->emitter()->testRunnerEnabledGarbageCollection(); + } + public function testFinished() : void + { + $this->tests++; + if ($this->tests === $this->threshold) { + gc_collect_cycles(); + $this->facade->emitter()->testRunnerTriggeredGarbageCollection(); + $this->tests = 0; + } + } + /** + * @throws EventFacadeIsSealedException + * @throws UnknownSubscriberTypeException + */ + private function registerSubscribers() : void + { + $this->facade->registerSubscribers(new \PHPUnit\Runner\GarbageCollection\ExecutionStartedSubscriber($this), new \PHPUnit\Runner\GarbageCollection\ExecutionFinishedSubscriber($this), new \PHPUnit\Runner\GarbageCollection\TestFinishedSubscriber($this)); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\GarbageCollection; + +use PHPUnit\Event\InvalidArgumentException; +use PHPUnit\Event\TestRunner\ExecutionFinished; +use PHPUnit\Event\TestRunner\ExecutionFinishedSubscriber as TestRunnerExecutionFinishedSubscriber; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class ExecutionFinishedSubscriber extends \PHPUnit\Runner\GarbageCollection\Subscriber implements TestRunnerExecutionFinishedSubscriber +{ + /** + * @throws \PHPUnit\Framework\InvalidArgumentException + * @throws InvalidArgumentException + */ + public function notify(ExecutionFinished $event) : void + { + $this->handler()->executionFinished(); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\GarbageCollection; + +use PHPUnit\Event\InvalidArgumentException; +use PHPUnit\Event\TestRunner\ExecutionStarted; +use PHPUnit\Event\TestRunner\ExecutionStartedSubscriber as TestRunnerExecutionStartedSubscriber; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class ExecutionStartedSubscriber extends \PHPUnit\Runner\GarbageCollection\Subscriber implements TestRunnerExecutionStartedSubscriber +{ + /** + * @throws \PHPUnit\Framework\InvalidArgumentException + * @throws InvalidArgumentException + */ + public function notify(ExecutionStarted $event) : void + { + $this->handler()->executionStarted(); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\GarbageCollection; + +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +abstract class Subscriber +{ + private readonly \PHPUnit\Runner\GarbageCollection\GarbageCollectionHandler $handler; + public function __construct(\PHPUnit\Runner\GarbageCollection\GarbageCollectionHandler $handler) + { + $this->handler = $handler; + } + protected function handler() : \PHPUnit\Runner\GarbageCollection\GarbageCollectionHandler + { + return $this->handler; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner\GarbageCollection; + +use PHPUnit\Event\InvalidArgumentException; +use PHPUnit\Event\Test\Finished; +use PHPUnit\Event\Test\FinishedSubscriber; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class TestFinishedSubscriber extends \PHPUnit\Runner\GarbageCollection\Subscriber implements FinishedSubscriber +{ + /** + * @throws \PHPUnit\Framework\InvalidArgumentException + * @throws InvalidArgumentException + */ + public function notify(Finished $event) : void + { + $this->handler()->testFinished(); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Runner; + +use const DEBUG_BACKTRACE_IGNORE_ARGS; +use const DIRECTORY_SEPARATOR; +use function array_merge; +use function basename; +use function debug_backtrace; +use function defined; +use function dirname; +use function explode; +use function extension_loaded; +use function file; +use function file_get_contents; +use function file_put_contents; +use function is_array; +use function is_file; +use function is_readable; +use function is_string; +use function ltrim; +use function preg_match; +use function preg_replace; +use function preg_split; +use function realpath; +use function rtrim; +use function str_contains; +use function str_replace; +use function str_starts_with; +use function strncasecmp; +use function substr; +use function trim; +use function unlink; +use function unserialize; +use function var_export; +use PHPUnit\Event\Code\Phpt; +use PHPUnit\Event\Code\ThrowableBuilder; +use PHPUnit\Event\Facade as EventFacade; +use PHPUnit\Event\NoPreviousThrowableException; +use PHPUnit\Framework\Assert; +use PHPUnit\Framework\AssertionFailedError; +use PHPUnit\Framework\ExecutionOrderDependency; +use PHPUnit\Framework\ExpectationFailedException; +use PHPUnit\Framework\IncompleteTestError; +use PHPUnit\Framework\PhptAssertionFailedError; +use PHPUnit\Framework\Reorderable; +use PHPUnit\Framework\SelfDescribing; +use PHPUnit\Framework\Test; +use PHPUnit\TextUI\Configuration\Registry as ConfigurationRegistry; +use PHPUnit\Util\PHP\AbstractPhpProcess; +use PHPUnit\SebastianBergmann\CodeCoverage\Data\RawCodeCoverageData; +use PHPUnit\SebastianBergmann\CodeCoverage\InvalidArgumentException; +use PHPUnit\SebastianBergmann\CodeCoverage\StaticAnalysisCacheNotConfiguredException; +use PHPUnit\SebastianBergmann\CodeCoverage\Test\TestSize\TestSize; +use PHPUnit\SebastianBergmann\CodeCoverage\Test\TestStatus\TestStatus; +use PHPUnit\SebastianBergmann\CodeCoverage\TestIdMissingException; +use PHPUnit\SebastianBergmann\CodeCoverage\UnintentionallyCoveredCodeException; +use PHPUnit\SebastianBergmann\Template\Template; +use Throwable; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ final class PhptTestCase implements Reorderable, SelfDescribing, Test { + /** + * @psalm-var non-empty-string + */ private readonly string $filename; private readonly AbstractPhpProcess $phpUtil; private string $output = ''; /** * Constructs a test case with the given filename. * + * @psalm-param non-empty-string $filename + * * @throws Exception */ public function __construct(string $filename, AbstractPhpProcess $phpUtil = null) @@ -68610,9 +75167,6 @@ final class PhptTestCase implements Reorderable, SelfDescribing, Test $this->phpUtil->setEnv($env); } $this->phpUtil->setUseStderrRedirection(\true); - if (ConfigurationRegistry::get()->enforceTimeLimit()) { - $this->phpUtil->setTimeout(ConfigurationRegistry::get()->timeoutForLargeTests()); - } if ($this->shouldTestBeSkipped($sections, $settings)) { return; } @@ -68636,7 +75190,7 @@ final class PhptTestCase implements Reorderable, SelfDescribing, Test $this->output = $jobResult['stdout'] ?? ''; if (\PHPUnit\Runner\CodeCoverage::instance()->isActive() && ($coverage = $this->cleanupForCoverage())) { \PHPUnit\Runner\CodeCoverage::instance()->codeCoverage()->start($this->filename, TestSize::large()); - \PHPUnit\Runner\CodeCoverage::instance()->codeCoverage()->append($coverage, $this->filename, \true, TestStatus::unknown(), [], []); + \PHPUnit\Runner\CodeCoverage::instance()->codeCoverage()->append($coverage, $this->filename, \true, TestStatus::unknown()); } try { $this->assertPhptExpectation($sections, $this->output); @@ -69260,10 +75814,10 @@ final class ResultCacheHandler * @throws EventFacadeIsSealedException * @throws UnknownSubscriberTypeException */ - public function __construct(\PHPUnit\Runner\ResultCache\ResultCache $cache) + public function __construct(\PHPUnit\Runner\ResultCache\ResultCache $cache, Facade $facade) { $this->cache = $cache; - $this->registerSubscribers(); + $this->registerSubscribers($facade); } public function testSuiteStarted() : void { @@ -69329,9 +75883,9 @@ final class ResultCacheHandler * @throws EventFacadeIsSealedException * @throws UnknownSubscriberTypeException */ - private function registerSubscribers() : void + private function registerSubscribers(Facade $facade) : void { - Facade::registerSubscribers(new \PHPUnit\Runner\ResultCache\TestSuiteStartedSubscriber($this), new \PHPUnit\Runner\ResultCache\TestSuiteFinishedSubscriber($this), new \PHPUnit\Runner\ResultCache\TestPreparedSubscriber($this), new \PHPUnit\Runner\ResultCache\TestMarkedIncompleteSubscriber($this), new \PHPUnit\Runner\ResultCache\TestConsideredRiskySubscriber($this), new \PHPUnit\Runner\ResultCache\TestErroredSubscriber($this), new \PHPUnit\Runner\ResultCache\TestFailedSubscriber($this), new \PHPUnit\Runner\ResultCache\TestSkippedSubscriber($this), new \PHPUnit\Runner\ResultCache\TestFinishedSubscriber($this)); + $facade->registerSubscribers(new \PHPUnit\Runner\ResultCache\TestSuiteStartedSubscriber($this), new \PHPUnit\Runner\ResultCache\TestSuiteFinishedSubscriber($this), new \PHPUnit\Runner\ResultCache\TestPreparedSubscriber($this), new \PHPUnit\Runner\ResultCache\TestMarkedIncompleteSubscriber($this), new \PHPUnit\Runner\ResultCache\TestConsideredRiskySubscriber($this), new \PHPUnit\Runner\ResultCache\TestErroredSubscriber($this), new \PHPUnit\Runner\ResultCache\TestFailedSubscriber($this), new \PHPUnit\Runner\ResultCache\TestSkippedSubscriber($this), new \PHPUnit\Runner\ResultCache\TestFinishedSubscriber($this)); } } */ @@ -69677,95 +76240,65 @@ final class Collector */ private array $testConsideredRiskyEvents = []; /** - * @psalm-var array> + * @psalm-var array> */ - private array $testTriggeredDeprecationEvents = []; + private array $testTriggeredPhpunitDeprecationEvents = []; /** - * @psalm-var array> + * @psalm-var array> */ - private array $testTriggeredPhpDeprecationEvents = []; + private array $testTriggeredPhpunitErrorEvents = []; /** - * @psalm-var array> + * @psalm-var array> */ - private array $testTriggeredPhpunitDeprecationEvents = []; + private array $testTriggeredPhpunitWarningEvents = []; /** - * @psalm-var array> + * @psalm-var list */ - private array $testTriggeredErrorEvents = []; + private array $testRunnerTriggeredWarningEvents = []; /** - * @psalm-var array> + * @psalm-var list */ - private array $testTriggeredNoticeEvents = []; + private array $testRunnerTriggeredDeprecationEvents = []; /** - * @psalm-var array> + * @psalm-var array */ - private array $testTriggeredPhpNoticeEvents = []; + private array $errors = []; /** - * @psalm-var array> + * @psalm-var array */ - private array $testTriggeredWarningEvents = []; + private array $deprecations = []; /** - * @psalm-var array> + * @psalm-var array */ - private array $testTriggeredPhpWarningEvents = []; + private array $notices = []; /** - * @psalm-var array> + * @psalm-var array */ - private array $testTriggeredPhpunitErrorEvents = []; + private array $warnings = []; /** - * @psalm-var array> + * @psalm-var array */ - private array $testTriggeredPhpunitWarningEvents = []; + private array $phpDeprecations = []; /** - * @psalm-var list + * @psalm-var array */ - private array $testRunnerTriggeredWarningEvents = []; + private array $phpNotices = []; /** - * @psalm-var list + * @psalm-var array */ - private array $testRunnerTriggeredDeprecationEvents = []; + private array $phpWarnings = []; /** * @throws EventFacadeIsSealedException * @throws UnknownSubscriberTypeException */ - public function __construct() + public function __construct(Facade $facade, Source $source) { - Facade::registerSubscribers(new \PHPUnit\TestRunner\TestResult\ExecutionStartedSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestSuiteSkippedSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestSuiteStartedSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestSuiteFinishedSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestPreparedSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestFinishedSubscriber($this), new \PHPUnit\TestRunner\TestResult\BeforeTestClassMethodErroredSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestErroredSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestFailedSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestMarkedIncompleteSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestSkippedSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestConsideredRiskySubscriber($this), new \PHPUnit\TestRunner\TestResult\TestTriggeredDeprecationSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestTriggeredErrorSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestTriggeredNoticeSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestTriggeredPhpDeprecationSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestTriggeredPhpNoticeSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestTriggeredPhpunitDeprecationSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestTriggeredPhpunitErrorSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestTriggeredPhpunitWarningSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestTriggeredPhpWarningSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestTriggeredWarningSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestRunnerTriggeredDeprecationSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestRunnerTriggeredWarningSubscriber($this)); + $facade->registerSubscribers(new \PHPUnit\TestRunner\TestResult\ExecutionStartedSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestSuiteSkippedSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestSuiteStartedSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestSuiteFinishedSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestPreparedSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestFinishedSubscriber($this), new \PHPUnit\TestRunner\TestResult\BeforeTestClassMethodErroredSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestErroredSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestFailedSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestMarkedIncompleteSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestSkippedSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestConsideredRiskySubscriber($this), new \PHPUnit\TestRunner\TestResult\TestTriggeredDeprecationSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestTriggeredErrorSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestTriggeredNoticeSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestTriggeredPhpDeprecationSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestTriggeredPhpNoticeSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestTriggeredPhpunitDeprecationSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestTriggeredPhpunitErrorSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestTriggeredPhpunitWarningSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestTriggeredPhpWarningSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestTriggeredWarningSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestRunnerTriggeredDeprecationSubscriber($this), new \PHPUnit\TestRunner\TestResult\TestRunnerTriggeredWarningSubscriber($this)); + $this->source = $source; } public function result() : \PHPUnit\TestRunner\TestResult\TestResult { - return new \PHPUnit\TestRunner\TestResult\TestResult($this->numberOfTests, $this->numberOfTestsRun, $this->numberOfAssertions, $this->testErroredEvents, $this->testFailedEvents, $this->testConsideredRiskyEvents, $this->testSuiteSkippedEvents, $this->testSkippedEvents, $this->testMarkedIncompleteEvents, $this->testTriggeredDeprecationEvents, $this->testTriggeredPhpDeprecationEvents, $this->testTriggeredPhpunitDeprecationEvents, $this->testTriggeredErrorEvents, $this->testTriggeredNoticeEvents, $this->testTriggeredPhpNoticeEvents, $this->testTriggeredWarningEvents, $this->testTriggeredPhpWarningEvents, $this->testTriggeredPhpunitErrorEvents, $this->testTriggeredPhpunitWarningEvents, $this->testRunnerTriggeredDeprecationEvents, $this->testRunnerTriggeredWarningEvents); - } - public function hasTestErroredEvents() : bool - { - return !empty($this->testErroredEvents); - } - public function hasTestFailedEvents() : bool - { - return !empty($this->testFailedEvents); - } - public function hasTestConsideredRiskyEvents() : bool - { - return !empty($this->testConsideredRiskyEvents); - } - public function hasTestSkippedEvents() : bool - { - return !empty($this->testSkippedEvents); - } - public function hasTestMarkedIncompleteEvents() : bool - { - return !empty($this->testMarkedIncompleteEvents); - } - public function hasTestRunnerTriggeredWarningEvents() : bool - { - return !empty($this->testRunnerTriggeredWarningEvents); - } - /** - * @psalm-return list - */ - public function testRunnerTriggeredWarningEvents() : array - { - return $this->testRunnerTriggeredWarningEvents; + return new \PHPUnit\TestRunner\TestResult\TestResult($this->numberOfTests, $this->numberOfTestsRun, $this->numberOfAssertions, $this->testErroredEvents, $this->testFailedEvents, $this->testConsideredRiskyEvents, $this->testSuiteSkippedEvents, $this->testSkippedEvents, $this->testMarkedIncompleteEvents, $this->testTriggeredPhpunitDeprecationEvents, $this->testTriggeredPhpunitErrorEvents, $this->testTriggeredPhpunitWarningEvents, $this->testRunnerTriggeredDeprecationEvents, $this->testRunnerTriggeredWarningEvents, array_values($this->errors), array_values($this->deprecations), array_values($this->notices), array_values($this->warnings), array_values($this->phpDeprecations), array_values($this->phpNotices), array_values($this->phpWarnings), $this->numberOfIssuesIgnoredByBaseline); } public function executionStarted(ExecutionStarted $event) : void { @@ -69787,9 +76320,6 @@ final class Collector } $this->currentTestSuiteForTestClassFailed = \false; } - /** - * @throws NoDataSetFromDataProviderException - */ public function testSuiteFinished(TestSuiteFinished $event) : void { if ($this->currentTestSuiteForTestClassFailed) { @@ -69863,17 +76393,47 @@ final class Collector } public function testTriggeredDeprecation(DeprecationTriggered $event) : void { - if (!isset($this->testTriggeredDeprecationEvents[$event->test()->id()])) { - $this->testTriggeredDeprecationEvents[$event->test()->id()] = []; + if ($event->ignoredByTest()) { + return; + } + if ($event->ignoredByBaseline()) { + $this->numberOfIssuesIgnoredByBaseline++; + return; + } + if (!$this->source->ignoreSuppressionOfDeprecations() && $event->wasSuppressed()) { + return; + } + if ($this->source->restrictDeprecations() && !(new SourceFilter())->includes($this->source, $event->file())) { + return; } - $this->testTriggeredDeprecationEvents[$event->test()->id()][] = $event; + $id = $this->issueId($event); + if (!isset($this->deprecations[$id])) { + $this->deprecations[$id] = Issue::from($event->file(), $event->line(), $event->message(), $event->test()); + return; + } + $this->deprecations[$id]->triggeredBy($event->test()); } public function testTriggeredPhpDeprecation(PhpDeprecationTriggered $event) : void { - if (!isset($this->testTriggeredPhpDeprecationEvents[$event->test()->id()])) { - $this->testTriggeredPhpDeprecationEvents[$event->test()->id()] = []; + if ($event->ignoredByTest()) { + return; + } + if ($event->ignoredByBaseline()) { + $this->numberOfIssuesIgnoredByBaseline++; + return; + } + if (!$this->source->ignoreSuppressionOfPhpDeprecations() && $event->wasSuppressed()) { + return; + } + if ($this->source->restrictDeprecations() && !(new SourceFilter())->includes($this->source, $event->file())) { + return; + } + $id = $this->issueId($event); + if (!isset($this->phpDeprecations[$id])) { + $this->phpDeprecations[$id] = Issue::from($event->file(), $event->line(), $event->message(), $event->test()); + return; } - $this->testTriggeredPhpDeprecationEvents[$event->test()->id()][] = $event; + $this->phpDeprecations[$id]->triggeredBy($event->test()); } public function testTriggeredPhpunitDeprecation(PhpunitDeprecationTriggered $event) : void { @@ -69884,38 +76444,91 @@ final class Collector } public function testTriggeredError(ErrorTriggered $event) : void { - if (!isset($this->testTriggeredErrorEvents[$event->test()->id()])) { - $this->testTriggeredErrorEvents[$event->test()->id()] = []; + if (!$this->source->ignoreSuppressionOfErrors() && $event->wasSuppressed()) { + return; } - $this->testTriggeredErrorEvents[$event->test()->id()][] = $event; + $id = $this->issueId($event); + if (!isset($this->errors[$id])) { + $this->errors[$id] = Issue::from($event->file(), $event->line(), $event->message(), $event->test()); + return; + } + $this->errors[$id]->triggeredBy($event->test()); } public function testTriggeredNotice(NoticeTriggered $event) : void { - if (!isset($this->testTriggeredNoticeEvents[$event->test()->id()])) { - $this->testTriggeredNoticeEvents[$event->test()->id()] = []; + if ($event->ignoredByBaseline()) { + $this->numberOfIssuesIgnoredByBaseline++; + return; + } + if (!$this->source->ignoreSuppressionOfNotices() && $event->wasSuppressed()) { + return; + } + if ($this->source->restrictNotices() && !(new SourceFilter())->includes($this->source, $event->file())) { + return; + } + $id = $this->issueId($event); + if (!isset($this->notices[$id])) { + $this->notices[$id] = Issue::from($event->file(), $event->line(), $event->message(), $event->test()); + return; } - $this->testTriggeredNoticeEvents[$event->test()->id()][] = $event; + $this->notices[$id]->triggeredBy($event->test()); } public function testTriggeredPhpNotice(PhpNoticeTriggered $event) : void { - if (!isset($this->testTriggeredPhpNoticeEvents[$event->test()->id()])) { - $this->testTriggeredPhpNoticeEvents[$event->test()->id()] = []; + if ($event->ignoredByBaseline()) { + $this->numberOfIssuesIgnoredByBaseline++; + return; + } + if (!$this->source->ignoreSuppressionOfPhpNotices() && $event->wasSuppressed()) { + return; } - $this->testTriggeredPhpNoticeEvents[$event->test()->id()][] = $event; + if ($this->source->restrictNotices() && !(new SourceFilter())->includes($this->source, $event->file())) { + return; + } + $id = $this->issueId($event); + if (!isset($this->phpNotices[$id])) { + $this->phpNotices[$id] = Issue::from($event->file(), $event->line(), $event->message(), $event->test()); + return; + } + $this->phpNotices[$id]->triggeredBy($event->test()); } public function testTriggeredWarning(WarningTriggered $event) : void { - if (!isset($this->testTriggeredWarningEvents[$event->test()->id()])) { - $this->testTriggeredWarningEvents[$event->test()->id()] = []; + if ($event->ignoredByBaseline()) { + $this->numberOfIssuesIgnoredByBaseline++; + return; + } + if (!$this->source->ignoreSuppressionOfWarnings() && $event->wasSuppressed()) { + return; + } + if ($this->source->restrictWarnings() && !(new SourceFilter())->includes($this->source, $event->file())) { + return; + } + $id = $this->issueId($event); + if (!isset($this->warnings[$id])) { + $this->warnings[$id] = Issue::from($event->file(), $event->line(), $event->message(), $event->test()); + return; } - $this->testTriggeredWarningEvents[$event->test()->id()][] = $event; + $this->warnings[$id]->triggeredBy($event->test()); } public function testTriggeredPhpWarning(PhpWarningTriggered $event) : void { - if (!isset($this->testTriggeredPhpWarningEvents[$event->test()->id()])) { - $this->testTriggeredPhpWarningEvents[$event->test()->id()] = []; + if ($event->ignoredByBaseline()) { + $this->numberOfIssuesIgnoredByBaseline++; + return; + } + if (!$this->source->ignoreSuppressionOfPhpWarnings() && $event->wasSuppressed()) { + return; + } + if ($this->source->restrictWarnings() && !(new SourceFilter())->includes($this->source, $event->file())) { + return; } - $this->testTriggeredPhpWarningEvents[$event->test()->id()][] = $event; + $id = $this->issueId($event); + if (!isset($this->phpWarnings[$id])) { + $this->phpWarnings[$id] = Issue::from($event->file(), $event->line(), $event->message(), $event->test()); + return; + } + $this->phpWarnings[$id]->triggeredBy($event->test()); } public function testTriggeredPhpunitError(PhpunitErrorTriggered $event) : void { @@ -69939,9 +76552,44 @@ final class Collector { $this->testRunnerTriggeredWarningEvents[] = $event; } - public function hasWarningEvents() : bool + public function hasErroredTests() : bool + { + return !empty($this->testErroredEvents); + } + public function hasFailedTests() : bool + { + return !empty($this->testFailedEvents); + } + public function hasRiskyTests() : bool + { + return !empty($this->testConsideredRiskyEvents); + } + public function hasSkippedTests() : bool + { + return !empty($this->testSkippedEvents); + } + public function hasIncompleteTests() : bool + { + return !empty($this->testMarkedIncompleteEvents); + } + public function hasDeprecations() : bool + { + return !empty($this->deprecations) || !empty($this->phpDeprecations) || !empty($this->testTriggeredPhpunitDeprecationEvents) || !empty($this->testRunnerTriggeredDeprecationEvents); + } + public function hasNotices() : bool + { + return !empty($this->notices) || !empty($this->phpNotices); + } + public function hasWarnings() : bool + { + return !empty($this->warnings) || !empty($this->phpWarnings) || !empty($this->testTriggeredPhpunitWarningEvents) || !empty($this->testRunnerTriggeredWarningEvents); + } + /** + * @psalm-return non-empty-string + */ + private function issueId(DeprecationTriggered|ErrorTriggered|NoticeTriggered|PhpDeprecationTriggered|PhpNoticeTriggered|PhpWarningTriggered|WarningTriggered $event) : string { - return !empty($this->testTriggeredWarningEvents) || !empty($this->testTriggeredPhpWarningEvents) || !empty($this->testTriggeredPhpunitWarningEvents) || !empty($this->testRunnerTriggeredWarningEvents); + return implode(':', [$event->file(), $event->line(), $event->message()]); } } hasTestErroredEvents(); + $configuration = ConfigurationRegistry::get(); + $collector = self::collector(); + if (($configuration->stopOnDefect() || $configuration->stopOnError()) && $collector->hasErroredTests()) { + return \true; + } + if (($configuration->stopOnDefect() || $configuration->stopOnFailure()) && $collector->hasFailedTests()) { + return \true; + } + if (($configuration->stopOnDefect() || $configuration->stopOnWarning()) && $collector->hasWarnings()) { + return \true; + } + if (($configuration->stopOnDefect() || $configuration->stopOnRisky()) && $collector->hasRiskyTests()) { + return \true; + } + if ($configuration->stopOnDeprecation() && $collector->hasDeprecations()) { + return \true; + } + if ($configuration->stopOnNotice() && $collector->hasNotices()) { + return \true; + } + if ($configuration->stopOnIncomplete() && $collector->hasIncompleteTests()) { + return \true; + } + if ($configuration->stopOnSkipped() && $collector->hasSkippedTests()) { + return \true; + } + return \false; } /** * @throws EventFacadeIsSealedException * @throws UnknownSubscriberTypeException */ - public static function hasTestFailedEvents() : bool + private static function collector() : \PHPUnit\TestRunner\TestResult\Collector { - return self::collector()->hasTestFailedEvents(); + if (self::$collector === null) { + $configuration = ConfigurationRegistry::get(); + self::$collector = new \PHPUnit\TestRunner\TestResult\Collector(EventFacade::instance(), $configuration->source()); + } + return self::$collector; } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TestRunner\TestResult\Issues; + +use PHPUnit\Event\Code\Test; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class Issue +{ /** - * @throws EventFacadeIsSealedException - * @throws UnknownSubscriberTypeException + * @psalm-var non-empty-string + */ + private readonly string $file; + /** + * @psalm-var positive-int + */ + private readonly int $line; + /** + * @psalm-var non-empty-string + */ + private readonly string $description; + /** + * @psalm-var non-empty-array */ - public static function hasWarningEvents() : bool + private array $triggeringTests; + /** + * @psalm-param non-empty-string $file + * @psalm-param positive-int $line + * @psalm-param non-empty-string $description + */ + public static function from(string $file, int $line, string $description, Test $triggeringTest) : self { - return self::collector()->hasWarningEvents(); + return new self($file, $line, $description, $triggeringTest); } /** - * @throws EventFacadeIsSealedException - * @throws UnknownSubscriberTypeException + * @psalm-param non-empty-string $file + * @psalm-param positive-int $line + * @psalm-param non-empty-string $description */ - public static function hasTestConsideredRiskyEvents() : bool + private function __construct(string $file, int $line, string $description, Test $triggeringTest) { - return self::collector()->hasTestConsideredRiskyEvents(); + $this->file = $file; + $this->line = $line; + $this->description = $description; + $this->triggeringTests = [$triggeringTest->id() => ['test' => $triggeringTest, 'count' => 1]]; + } + public function triggeredBy(Test $test) : void + { + if (isset($this->triggeringTests[$test->id()])) { + $this->triggeringTests[$test->id()]['count']++; + return; + } + $this->triggeringTests[$test->id()] = ['test' => $test, 'count' => 1]; } /** - * @throws EventFacadeIsSealedException - * @throws UnknownSubscriberTypeException + * @psalm-return non-empty-string */ - public static function hasTestSkippedEvents() : bool + public function file() : string { - return self::collector()->hasTestSkippedEvents(); + return $this->file; } /** - * @throws EventFacadeIsSealedException - * @throws UnknownSubscriberTypeException + * @psalm-return positive-int */ - public static function hasTestMarkedIncompleteEvents() : bool + public function line() : int { - return self::collector()->hasTestMarkedIncompleteEvents(); + return $this->line; } /** - * @throws EventFacadeIsSealedException - * @throws UnknownSubscriberTypeException + * @psalm-return non-empty-string */ - private static function collector() : \PHPUnit\TestRunner\TestResult\Collector + public function description() : string { - if (self::$collector === null) { - self::$collector = new \PHPUnit\TestRunner\TestResult\Collector(); - } - return self::$collector; + return $this->description; + } + /** + * @psalm-return non-empty-array + */ + public function triggeringTests() : array + { + return $this->triggeringTests; } } passedTestClasses[] = $className; } - /** - * @throws NoDataSetFromDataProviderException - */ public function testMethodPassed(TestMethod $test, mixed $returnValue) : void { $size = (new Groups())->size($test->className(), $test->methodName()); @@ -70452,7 +77178,6 @@ declare (strict_types=1); */ namespace PHPUnit\TestRunner\TestResult; -use PHPUnit\Event\TestData\NoDataSetFromDataProviderException; use PHPUnit\Event\TestSuite\Finished; use PHPUnit\Event\TestSuite\FinishedSubscriber; /** @@ -70460,9 +77185,6 @@ use PHPUnit\Event\TestSuite\FinishedSubscriber; */ final class TestSuiteFinishedSubscriber extends \PHPUnit\TestRunner\TestResult\Subscriber implements FinishedSubscriber { - /** - * @throws NoDataSetFromDataProviderException - */ public function notify(Finished $event) : void { $this->collector()->testSuiteFinished($event); @@ -70784,23 +77506,17 @@ namespace PHPUnit\TestRunner\TestResult; use function count; use PHPUnit\Event\Test\BeforeFirstTestMethodErrored; use PHPUnit\Event\Test\ConsideredRisky; -use PHPUnit\Event\Test\DeprecationTriggered; use PHPUnit\Event\Test\Errored; -use PHPUnit\Event\Test\ErrorTriggered; use PHPUnit\Event\Test\Failed; use PHPUnit\Event\Test\MarkedIncomplete; -use PHPUnit\Event\Test\NoticeTriggered; -use PHPUnit\Event\Test\PhpDeprecationTriggered; -use PHPUnit\Event\Test\PhpNoticeTriggered; use PHPUnit\Event\Test\PhpunitDeprecationTriggered; use PHPUnit\Event\Test\PhpunitErrorTriggered; use PHPUnit\Event\Test\PhpunitWarningTriggered; -use PHPUnit\Event\Test\PhpWarningTriggered; use PHPUnit\Event\Test\Skipped as TestSkipped; -use PHPUnit\Event\Test\WarningTriggered; use PHPUnit\Event\TestRunner\DeprecationTriggered as TestRunnerDeprecationTriggered; use PHPUnit\Event\TestRunner\WarningTriggered as TestRunnerWarningTriggered; use PHPUnit\Event\TestSuite\Skipped as TestSuiteSkipped; +use PHPUnit\TestRunner\TestResult\Issues\Issue; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ @@ -70834,53 +77550,57 @@ final class TestResult */ private readonly array $testConsideredRiskyEvents; /** - * @psalm-var array> + * @psalm-var array> */ - private readonly array $testTriggeredDeprecationEvents; + private readonly array $testTriggeredPhpunitDeprecationEvents; /** - * @psalm-var array> + * @psalm-var array> */ - private readonly array $testTriggeredPhpDeprecationEvents; + private readonly array $testTriggeredPhpunitErrorEvents; /** - * @psalm-var array> + * @psalm-var array> */ - private readonly array $testTriggeredPhpunitDeprecationEvents; + private readonly array $testTriggeredPhpunitWarningEvents; /** - * @psalm-var array> + * @psalm-var list */ - private readonly array $testTriggeredErrorEvents; + private readonly array $testRunnerTriggeredDeprecationEvents; /** - * @psalm-var array> + * @psalm-var list */ - private readonly array $testTriggeredNoticeEvents; + private readonly array $testRunnerTriggeredWarningEvents; /** - * @psalm-var array> + * @psalm-var list */ - private readonly array $testTriggeredPhpNoticeEvents; + private readonly array $errors; /** - * @psalm-var array> + * @psalm-var list */ - private readonly array $testTriggeredWarningEvents; + private readonly array $deprecations; /** - * @psalm-var array> + * @psalm-var list */ - private readonly array $testTriggeredPhpWarningEvents; + private readonly array $notices; /** - * @psalm-var array> + * @psalm-var list */ - private readonly array $testTriggeredPhpunitErrorEvents; + private readonly array $warnings; /** - * @psalm-var array> + * @psalm-var list */ - private readonly array $testTriggeredPhpunitWarningEvents; + private readonly array $phpDeprecations; /** - * @psalm-var list + * @psalm-var list */ - private readonly array $testRunnerTriggeredDeprecationEvents; + private readonly array $phpNotices; /** - * @psalm-var list + * @psalm-var list */ - private readonly array $testRunnerTriggeredWarningEvents; + private readonly array $phpWarnings; + /** + * @psalm-var non-negative-int + */ + private readonly int $numberOfIssuesIgnoredByBaseline; /** * @psalm-param list $testErroredEvents * @psalm-param list $testFailedEvents @@ -70888,20 +77608,21 @@ final class TestResult * @psalm-param list $testSuiteSkippedEvents * @psalm-param list $testSkippedEvents * @psalm-param list $testMarkedIncompleteEvents - * @psalm-param array> $testTriggeredDeprecationEvents - * @psalm-param array> $testTriggeredPhpDeprecationEvents * @psalm-param array> $testTriggeredPhpunitDeprecationEvents - * @psalm-param array> $testTriggeredErrorEvents - * @psalm-param array> $testTriggeredNoticeEvents - * @psalm-param array> $testTriggeredPhpNoticeEvents - * @psalm-param array> $testTriggeredWarningEvents - * @psalm-param array> $testTriggeredPhpWarningEvents * @psalm-param array> $testTriggeredPhpunitErrorEvents * @psalm-param array> $testTriggeredPhpunitWarningEvents * @psalm-param list $testRunnerTriggeredDeprecationEvents * @psalm-param list $testRunnerTriggeredWarningEvents + * @psalm-param list $errors + * @psalm-param list $deprecations + * @psalm-param list $notices + * @psalm-param list $warnings + * @psalm-param list $phpDeprecations + * @psalm-param list $phpNotices + * @psalm-param list $phpWarnings + * @psalm-param non-negative-int $numberOfIssuesIgnoredByBaseline */ - public function __construct(int $numberOfTests, int $numberOfTestsRun, int $numberOfAssertions, array $testErroredEvents, array $testFailedEvents, array $testConsideredRiskyEvents, array $testSuiteSkippedEvents, array $testSkippedEvents, array $testMarkedIncompleteEvents, array $testTriggeredDeprecationEvents, array $testTriggeredPhpDeprecationEvents, array $testTriggeredPhpunitDeprecationEvents, array $testTriggeredErrorEvents, array $testTriggeredNoticeEvents, array $testTriggeredPhpNoticeEvents, array $testTriggeredWarningEvents, array $testTriggeredPhpWarningEvents, array $testTriggeredPhpunitErrorEvents, array $testTriggeredPhpunitWarningEvents, array $testRunnerTriggeredDeprecationEvents, array $testRunnerTriggeredWarningEvents) + public function __construct(int $numberOfTests, int $numberOfTestsRun, int $numberOfAssertions, array $testErroredEvents, array $testFailedEvents, array $testConsideredRiskyEvents, array $testSuiteSkippedEvents, array $testSkippedEvents, array $testMarkedIncompleteEvents, array $testTriggeredPhpunitDeprecationEvents, array $testTriggeredPhpunitErrorEvents, array $testTriggeredPhpunitWarningEvents, array $testRunnerTriggeredDeprecationEvents, array $testRunnerTriggeredWarningEvents, array $errors, array $deprecations, array $notices, array $warnings, array $phpDeprecations, array $phpNotices, array $phpWarnings, int $numberOfIssuesIgnoredByBaseline) { $this->numberOfTests = $numberOfTests; $this->numberOfTestsRun = $numberOfTestsRun; @@ -70912,22 +77633,19 @@ final class TestResult $this->testSuiteSkippedEvents = $testSuiteSkippedEvents; $this->testSkippedEvents = $testSkippedEvents; $this->testMarkedIncompleteEvents = $testMarkedIncompleteEvents; - $this->testTriggeredDeprecationEvents = $testTriggeredDeprecationEvents; - $this->testTriggeredPhpDeprecationEvents = $testTriggeredPhpDeprecationEvents; $this->testTriggeredPhpunitDeprecationEvents = $testTriggeredPhpunitDeprecationEvents; - $this->testTriggeredErrorEvents = $testTriggeredErrorEvents; - $this->testTriggeredNoticeEvents = $testTriggeredNoticeEvents; - $this->testTriggeredPhpNoticeEvents = $testTriggeredPhpNoticeEvents; - $this->testTriggeredWarningEvents = $testTriggeredWarningEvents; - $this->testTriggeredPhpWarningEvents = $testTriggeredPhpWarningEvents; $this->testTriggeredPhpunitErrorEvents = $testTriggeredPhpunitErrorEvents; $this->testTriggeredPhpunitWarningEvents = $testTriggeredPhpunitWarningEvents; $this->testRunnerTriggeredDeprecationEvents = $testRunnerTriggeredDeprecationEvents; $this->testRunnerTriggeredWarningEvents = $testRunnerTriggeredWarningEvents; - } - public function numberOfTests() : int - { - return $this->numberOfTests; + $this->errors = $errors; + $this->deprecations = $deprecations; + $this->notices = $notices; + $this->warnings = $warnings; + $this->phpDeprecations = $phpDeprecations; + $this->phpNotices = $phpNotices; + $this->phpWarnings = $phpWarnings; + $this->numberOfIssuesIgnoredByBaseline = $numberOfIssuesIgnoredByBaseline; } public function numberOfTestsRun() : int { @@ -71027,36 +77745,6 @@ final class TestResult { return $this->numberOfTestMarkedIncompleteEvents() > 0; } - /** - * @psalm-return array> - */ - public function testTriggeredDeprecationEvents() : array - { - return $this->testTriggeredDeprecationEvents; - } - public function numberOfTestsWithTestTriggeredDeprecationEvents() : int - { - return count($this->testTriggeredDeprecationEvents); - } - public function hasTestTriggeredDeprecationEvents() : bool - { - return $this->numberOfTestsWithTestTriggeredDeprecationEvents() > 0; - } - /** - * @psalm-return array> - */ - public function testTriggeredPhpDeprecationEvents() : array - { - return $this->testTriggeredPhpDeprecationEvents; - } - public function numberOfTestsWithTestTriggeredPhpDeprecationEvents() : int - { - return count($this->testTriggeredPhpDeprecationEvents); - } - public function hasTestTriggeredPhpDeprecationEvents() : bool - { - return $this->numberOfTestsWithTestTriggeredPhpDeprecationEvents() > 0; - } /** * @psalm-return array> */ @@ -71073,179 +77761,188 @@ final class TestResult return $this->numberOfTestsWithTestTriggeredPhpunitDeprecationEvents() > 0; } /** - * @psalm-return array> + * @psalm-return array> */ - public function testTriggeredErrorEvents() : array + public function testTriggeredPhpunitErrorEvents() : array { - return $this->testTriggeredErrorEvents; + return $this->testTriggeredPhpunitErrorEvents; } - public function numberOfTestsWithTestTriggeredErrorEvents() : int + public function numberOfTestsWithTestTriggeredPhpunitErrorEvents() : int { - return count($this->testTriggeredErrorEvents); + return count($this->testTriggeredPhpunitErrorEvents); } - public function hasTestTriggeredErrorEvents() : bool + public function hasTestTriggeredPhpunitErrorEvents() : bool { - return $this->numberOfTestsWithTestTriggeredErrorEvents() > 0; + return $this->numberOfTestsWithTestTriggeredPhpunitErrorEvents() > 0; } /** - * @psalm-return array> + * @psalm-return array> */ - public function testTriggeredNoticeEvents() : array + public function testTriggeredPhpunitWarningEvents() : array { - return $this->testTriggeredNoticeEvents; + return $this->testTriggeredPhpunitWarningEvents; } - public function numberOfTestsWithTestTriggeredNoticeEvents() : int + public function numberOfTestsWithTestTriggeredPhpunitWarningEvents() : int { - return count($this->testTriggeredNoticeEvents); + return count($this->testTriggeredPhpunitWarningEvents); } - public function hasTestTriggeredNoticeEvents() : bool + public function hasTestTriggeredPhpunitWarningEvents() : bool { - return $this->numberOfTestsWithTestTriggeredNoticeEvents() > 0; + return $this->numberOfTestsWithTestTriggeredPhpunitWarningEvents() > 0; } /** - * @psalm-return array> + * @psalm-return list */ - public function testTriggeredPhpNoticeEvents() : array + public function testRunnerTriggeredDeprecationEvents() : array { - return $this->testTriggeredPhpNoticeEvents; + return $this->testRunnerTriggeredDeprecationEvents; } - public function numberOfTestsWithTestTriggeredPhpNoticeEvents() : int + public function numberOfTestRunnerTriggeredDeprecationEvents() : int { - return count($this->testTriggeredPhpNoticeEvents); + return count($this->testRunnerTriggeredDeprecationEvents); } - public function hasTestTriggeredPhpNoticeEvents() : bool + public function hasTestRunnerTriggeredDeprecationEvents() : bool { - return $this->numberOfTestsWithTestTriggeredPhpNoticeEvents() > 0; + return $this->numberOfTestRunnerTriggeredDeprecationEvents() > 0; } /** - * @psalm-return array> + * @psalm-return list */ - public function testTriggeredWarningEvents() : array + public function testRunnerTriggeredWarningEvents() : array + { + return $this->testRunnerTriggeredWarningEvents; + } + public function numberOfTestRunnerTriggeredWarningEvents() : int { - return $this->testTriggeredWarningEvents; + return count($this->testRunnerTriggeredWarningEvents); } - public function numberOfTestsWithTestTriggeredWarningEvents() : int + public function hasTestRunnerTriggeredWarningEvents() : bool { - return count($this->testTriggeredWarningEvents); + return $this->numberOfTestRunnerTriggeredWarningEvents() > 0; } - public function hasTestTriggeredWarningEvents() : bool + public function wasSuccessful() : bool { - return $this->numberOfTestsWithTestTriggeredWarningEvents() > 0; + return $this->wasSuccessfulIgnoringPhpunitWarnings() && !$this->hasTestTriggeredPhpunitErrorEvents() && !$this->hasTestRunnerTriggeredWarningEvents() && !$this->hasTestTriggeredPhpunitWarningEvents(); } - /** - * @psalm-return array> - */ - public function testTriggeredPhpWarningEvents() : array + public function wasSuccessfulIgnoringPhpunitWarnings() : bool { - return $this->testTriggeredPhpWarningEvents; + return !$this->hasTestErroredEvents() && !$this->hasTestFailedEvents(); } - public function numberOfTestsWithTestTriggeredPhpWarningEvents() : int + public function wasSuccessfulAndNoTestHasIssues() : bool { - return count($this->testTriggeredPhpWarningEvents); + return $this->wasSuccessful() && !$this->hasTestsWithIssues(); } - public function hasTestTriggeredPhpWarningEvents() : bool + public function hasTestsWithIssues() : bool { - return $this->numberOfTestsWithTestTriggeredPhpWarningEvents() > 0; + return $this->hasRiskyTests() || $this->hasIncompleteTests() || $this->hasDeprecations() || !empty($this->errors) || $this->hasNotices() || $this->hasWarnings(); } /** - * @psalm-return array> + * @psalm-return list */ - public function testTriggeredPhpunitErrorEvents() : array - { - return $this->testTriggeredPhpunitErrorEvents; - } - public function numberOfTestsWithTestTriggeredPhpunitErrorEvents() : int + public function errors() : array { - return count($this->testTriggeredPhpunitErrorEvents); + return $this->errors; } - public function hasTestTriggeredPhpunitErrorEvents() : bool + /** + * @psalm-return list + */ + public function deprecations() : array { - return $this->numberOfTestsWithTestTriggeredPhpunitErrorEvents() > 0; + return $this->deprecations; } /** - * @psalm-return array> + * @psalm-return list */ - public function testTriggeredPhpunitWarningEvents() : array + public function notices() : array { - return $this->testTriggeredPhpunitWarningEvents; + return $this->notices; } - public function numberOfTestsWithTestTriggeredPhpunitWarningEvents() : int + /** + * @psalm-return list + */ + public function warnings() : array { - return count($this->testTriggeredPhpunitWarningEvents); + return $this->warnings; } - public function hasTestTriggeredPhpunitWarningEvents() : bool + /** + * @psalm-return list + */ + public function phpDeprecations() : array { - return $this->numberOfTestsWithTestTriggeredPhpunitWarningEvents() > 0; + return $this->phpDeprecations; } /** - * @psalm-return list + * @psalm-return list */ - public function testRunnerTriggeredDeprecationEvents() : array + public function phpNotices() : array { - return $this->testRunnerTriggeredDeprecationEvents; + return $this->phpNotices; } - public function numberOfTestRunnerTriggeredDeprecationEvents() : int + /** + * @psalm-return list + */ + public function phpWarnings() : array { - return count($this->testRunnerTriggeredDeprecationEvents); + return $this->phpWarnings; } - public function hasTestRunnerTriggeredDeprecationEvents() : bool + public function hasTests() : bool { - return $this->numberOfTestRunnerTriggeredDeprecationEvents() > 0; + return $this->numberOfTests > 0; } - /** - * @psalm-return list - */ - public function testRunnerTriggeredWarningEvents() : array + public function hasErrors() : bool { - return $this->testRunnerTriggeredWarningEvents; + return $this->numberOfErrors() > 0; } - public function numberOfTestRunnerTriggeredWarningEvents() : int + public function numberOfErrors() : int { - return count($this->testRunnerTriggeredWarningEvents); + return $this->numberOfTestErroredEvents() + count($this->errors) + $this->numberOfTestsWithTestTriggeredPhpunitErrorEvents(); } - public function hasTestRunnerTriggeredWarningEvents() : bool + public function hasDeprecations() : bool { - return $this->numberOfTestRunnerTriggeredWarningEvents() > 0; + return $this->numberOfDeprecations() > 0; } - public function hasDeprecationEvents() : bool + public function numberOfDeprecations() : int { - return $this->numberOfDeprecationEvents() > 0; + return count($this->deprecations) + count($this->phpDeprecations) + count($this->testTriggeredPhpunitDeprecationEvents) + count($this->testRunnerTriggeredDeprecationEvents); } - public function numberOfDeprecationEvents() : int + public function hasNotices() : bool { - return $this->numberOfTestsWithTestTriggeredDeprecationEvents() + $this->numberOfTestsWithTestTriggeredPhpDeprecationEvents() + $this->numberOfTestRunnerTriggeredDeprecationEvents() + $this->numberOfTestsWithTestTriggeredPhpunitDeprecationEvents(); + return $this->numberOfNotices() > 0; } - public function hasNoticeEvents() : bool + public function numberOfNotices() : int { - return $this->numberOfNoticeEvents() > 0; + return count($this->notices) + count($this->phpNotices); } - public function numberOfNoticeEvents() : int + public function hasWarnings() : bool { - return $this->numberOfTestsWithTestTriggeredNoticeEvents() + $this->numberOfTestsWithTestTriggeredPhpNoticeEvents(); + return $this->numberOfWarnings() > 0; } - public function hasWarningEvents() : bool + public function numberOfWarnings() : int { - return $this->numberOfWarningEvents() > 0; + return count($this->warnings) + count($this->phpWarnings) + count($this->testTriggeredPhpunitWarningEvents) + count($this->testRunnerTriggeredWarningEvents); } - public function numberOfWarningEvents() : int + public function hasIncompleteTests() : bool { - return $this->numberOfTestsWithTestTriggeredWarningEvents() + $this->numberOfTestsWithTestTriggeredPhpWarningEvents() + $this->numberOfTestsWithTestTriggeredPhpunitWarningEvents() + $this->numberOfTestRunnerTriggeredWarningEvents(); + return !empty($this->testMarkedIncompleteEvents); } - public function wasSuccessful() : bool + public function hasRiskyTests() : bool { - return $this->wasSuccessfulIgnoringPhpunitWarnings() && !$this->hasTestRunnerTriggeredWarningEvents() && !$this->hasTestTriggeredPhpunitWarningEvents(); + return !empty($this->testConsideredRiskyEvents); } - public function wasSuccessfulIgnoringPhpunitWarnings() : bool + public function hasSkippedTests() : bool { - return !$this->hasTestErroredEvents() && !$this->hasTestFailedEvents(); + return !empty($this->testSkippedEvents); } - public function wasSuccessfulAndNoTestHasIssues() : bool + public function hasIssuesIgnoredByBaseline() : bool { - return $this->wasSuccessful() && !$this->hasTestsWithIssues(); + return $this->numberOfIssuesIgnoredByBaseline > 0; } - public function hasTestsWithIssues() : bool + /** + * @psalm-return non-negative-int + */ + public function numberOfIssuesIgnoredByBaseline() : int { - return $this->hasTestConsideredRiskyEvents() || $this->hasTestMarkedIncompleteEvents() || $this->hasDeprecationEvents() || $this->hasTestTriggeredErrorEvents() || $this->hasNoticeEvents() || $this->hasWarningEvents(); + return $this->numberOfIssuesIgnoredByBaseline; } } */ - private static array $loadedClasses = []; + private static array $declaredClasses = []; /** - * @psalm-var list + * @psalm-var array> */ - private static array $declaredClasses = []; - public function __construct() - { - if (empty(self::$declaredClasses)) { - self::$declaredClasses = get_declared_classes(); - } - } + private static array $fileToClassesMap = []; /** * @throws Exception */ public function load(string $suiteClassFile) : ReflectionClass { + $suiteClassFile = realpath($suiteClassFile); $suiteClassName = $this->classNameFromFileName($suiteClassFile); - if (!class_exists($suiteClassName, \false)) { - include_once $suiteClassFile; - $loadedClasses = array_values(array_diff(get_declared_classes(), array_merge(self::$declaredClasses, self::$loadedClasses))); - self::$loadedClasses = array_merge($loadedClasses, self::$loadedClasses); - if (empty(self::$loadedClasses)) { - throw new \PHPUnit\Runner\ClassCannotBeFoundException($suiteClassName, $suiteClassFile); - } - } - if (!class_exists($suiteClassName, \false)) { - $offset = 0 - strlen($suiteClassName); - foreach (self::$loadedClasses as $loadedClass) { - if (stripos(substr($loadedClass, $offset - 1), '\\' . $suiteClassName) === 0 || stripos(substr($loadedClass, $offset - 1), '_' . $suiteClassName) === 0) { - $suiteClassName = $loadedClass; - break; - } + $loadedClasses = $this->loadSuiteClassFile($suiteClassFile); + foreach ($loadedClasses as $className) { + /** @noinspection PhpUnhandledExceptionInspection */ + $class = new ReflectionClass($className); + if ($class->isAnonymous()) { + continue; + } + if ($class->getFileName() !== $suiteClassFile) { + continue; + } + if (!$class->isSubclassOf(TestCase::class)) { + continue; } + if (!str_ends_with(strtolower($class->getShortName()), strtolower($suiteClassName))) { + continue; + } + if (!$class->isAbstract()) { + return $class; + } + $e = new \PHPUnit\Runner\ClassIsAbstractException($class->getName(), $suiteClassFile); } - if (!class_exists($suiteClassName, \false)) { - throw new \PHPUnit\Runner\ClassCannotBeFoundException($suiteClassName, $suiteClassFile); + if (isset($e)) { + throw $e; } - $class = new ReflectionClass($suiteClassName); - if ($class->isSubclassOf(TestCase::class)) { - if ($class->isAbstract()) { - throw new \PHPUnit\Runner\ClassIsAbstractException($suiteClassName, $suiteClassFile); - } - return $class; + if (!class_exists($suiteClassName)) { + throw new \PHPUnit\Runner\ClassCannotBeFoundException($suiteClassName, $suiteClassFile); } - throw new \PHPUnit\Runner\ClassCannotBeFoundException($suiteClassName, $suiteClassFile); + throw new \PHPUnit\Runner\ClassDoesNotExtendTestCaseException($suiteClassName, $suiteClassFile); } private function classNameFromFileName(string $suiteClassFile) : string { @@ -71336,6 +78028,33 @@ final class TestSuiteLoader } return $className; } + /** + * @psalm-return list + */ + private function loadSuiteClassFile(string $suiteClassFile) : array + { + if (isset(self::$fileToClassesMap[$suiteClassFile])) { + return self::$fileToClassesMap[$suiteClassFile]; + } + if (empty(self::$declaredClasses)) { + self::$declaredClasses = get_declared_classes(); + } + require_once $suiteClassFile; + $loadedClasses = array_values(array_diff(get_declared_classes(), self::$declaredClasses)); + foreach ($loadedClasses as $loadedClass) { + /** @noinspection PhpUnhandledExceptionInspection */ + $class = new ReflectionClass($loadedClass); + if (!isset(self::$fileToClassesMap[$class->getFileName()])) { + self::$fileToClassesMap[$class->getFileName()] = []; + } + self::$fileToClassesMap[$class->getFileName()][] = $class->getName(); + } + self::$declaredClasses = get_declared_classes(); + if (empty($loadedClasses)) { + return self::$declaredClasses; + } + return $loadedClasses; + } } setTests($this->reverse($suite->tests())); } elseif ($order === self::ORDER_RANDOMIZED) { $suite->setTests($this->randomize($suite->tests())); - } elseif ($order === self::ORDER_DURATION && $this->cache !== null) { + } elseif ($order === self::ORDER_DURATION) { $suite->setTests($this->sortByDuration($suite->tests())); } elseif ($order === self::ORDER_SIZE) { $suite->setTests($this->sortBySize($suite->tests())); } - if ($orderDefects === self::ORDER_DEFECTS_FIRST && $this->cache !== null) { + if ($orderDefects === self::ORDER_DEFECTS_FIRST) { $suite->setTests($this->sortDefectsFirst($suite->tests())); } if ($resolveDependencies && !$suite instanceof DataProviderTestSuite) { @@ -71634,7 +78353,7 @@ final class Version return self::$pharVersion; } if (self::$version === '') { - self::$version = (new VersionId('10.0.16', dirname(__DIR__, 2)))->asString(); + self::$version = (new VersionId('10.5.8', dirname(__DIR__, 2)))->asString(); } return self::$version; } @@ -71673,7 +78392,9 @@ use function realpath; use function sprintf; use function trim; use function unlink; +use PHPUnit\Event\EventFacadeIsSealedException; use PHPUnit\Event\Facade as EventFacade; +use PHPUnit\Event\UnknownSubscriberTypeException; use PHPUnit\Framework\TestSuite; use PHPUnit\Logging\EventLogger; use PHPUnit\Logging\JUnit\JunitXmlLogger; @@ -71681,10 +78402,17 @@ use PHPUnit\Logging\TeamCity\TeamCityLogger; use PHPUnit\Logging\TestDox\HtmlRenderer as TestDoxHtmlRenderer; use PHPUnit\Logging\TestDox\PlainTextRenderer as TestDoxTextRenderer; use PHPUnit\Logging\TestDox\TestResultCollector as TestDoxResultCollector; +use PHPUnit\Metadata\Api\CodeCoverage as CodeCoverageMetadataApi; +use PHPUnit\Runner\Baseline\CannotLoadBaselineException; +use PHPUnit\Runner\Baseline\Generator as BaselineGenerator; +use PHPUnit\Runner\Baseline\Reader; +use PHPUnit\Runner\Baseline\Writer; use PHPUnit\Runner\CodeCoverage; +use PHPUnit\Runner\ErrorHandler; use PHPUnit\Runner\Extension\ExtensionBootstrapper; use PHPUnit\Runner\Extension\Facade as ExtensionFacade; use PHPUnit\Runner\Extension\PharLoader; +use PHPUnit\Runner\GarbageCollection\GarbageCollectionHandler; use PHPUnit\Runner\ResultCache\DefaultResultCache; use PHPUnit\Runner\ResultCache\NullResultCache; use PHPUnit\Runner\ResultCache\ResultCache; @@ -71744,23 +78472,48 @@ final class Application $this->executeCommandsThatRequireCliConfigurationAndTestSuite($cliConfiguration, $testSuite); $this->executeHelpCommandWhenThereIsNothingElseToDo($configuration, $testSuite); $pharExtensions = null; + $extensionRequiresCodeCoverageCollection = \false; + $extensionReplacesOutput = \false; + $extensionReplacesProgressOutput = \false; + $extensionReplacesResultOutput = \false; + $extensionRequiresExportOfObjects = \false; if (!$configuration->noExtensions()) { if ($configuration->hasPharExtensionDirectory()) { $pharExtensions = (new PharLoader())->loadPharExtensionsInDirectory($configuration->pharExtensionDirectory()); } - $this->bootstrapExtensions($configuration); - } - CodeCoverage::instance()->init($configuration, CodeCoverageFilterRegistry::instance()); - $printer = OutputFacade::init($configuration); - $this->writeRuntimeInformation($printer, $configuration); - $this->writePharExtensionInformation($printer, $pharExtensions); - $this->writeRandomSeedInformation($printer, $configuration); - $printer->print(PHP_EOL); + $bootstrappedExtensions = $this->bootstrapExtensions($configuration); + $extensionRequiresCodeCoverageCollection = $bootstrappedExtensions['requiresCodeCoverageCollection']; + $extensionReplacesOutput = $bootstrappedExtensions['replacesOutput']; + $extensionReplacesProgressOutput = $bootstrappedExtensions['replacesProgressOutput']; + $extensionReplacesResultOutput = $bootstrappedExtensions['replacesResultOutput']; + $extensionRequiresExportOfObjects = $bootstrappedExtensions['requiresExportOfObjects']; + } + if ($extensionRequiresExportOfObjects) { + EventFacade::emitter()->exportObjects(); + } + CodeCoverage::instance()->init($configuration, CodeCoverageFilterRegistry::instance(), $extensionRequiresCodeCoverageCollection); + if (CodeCoverage::instance()->isActive()) { + CodeCoverage::instance()->ignoreLines((new CodeCoverageMetadataApi())->linesToBeIgnored($testSuite)); + } + $printer = OutputFacade::init($configuration, $extensionReplacesProgressOutput, $extensionReplacesResultOutput); + if (!$configuration->debug() && !$extensionReplacesOutput) { + $this->writeRuntimeInformation($printer, $configuration); + $this->writePharExtensionInformation($printer, $pharExtensions); + $this->writeRandomSeedInformation($printer, $configuration); + $printer->print(PHP_EOL); + } + if ($configuration->debug()) { + EventFacade::instance()->registerTracer(new EventLogger('php://stdout', \false)); + } $this->registerLogfileWriters($configuration); $testDoxResultCollector = $this->testDoxResultCollector($configuration); TestResultFacade::init(); $resultCache = $this->initializeTestResultCache($configuration); - EventFacade::seal(); + if ($configuration->controlGarbageCollector()) { + new GarbageCollectionHandler(EventFacade::instance(), $configuration->numberOfTestsBeforeGarbageCollection()); + } + $baselineGenerator = $this->configureBaseline($configuration); + EventFacade::instance()->seal(); $timer = new Timer(); $timer->start(); $runner = new \PHPUnit\TextUI\TestRunner(); @@ -71777,33 +78530,22 @@ final class Application OutputFacade::printerFor($configuration->logfileTestdoxText())->print((new TestDoxTextRenderer())->render($testDoxResult)); } $result = TestResultFacade::result(); - OutputFacade::printResult($result, $testDoxResult, $duration); + if (!$extensionReplacesResultOutput) { + OutputFacade::printResult($result, $testDoxResult, $duration); + } CodeCoverage::instance()->generateReports($printer, $configuration); - $shellExitCode = (new \PHPUnit\TextUI\ShellExitCodeCalculator())->calculate($configuration->failOnEmptyTestSuite(), $configuration->failOnRisky(), $configuration->failOnWarning(), $configuration->failOnIncomplete(), $configuration->failOnSkipped(), $result); + if (isset($baselineGenerator)) { + (new Writer())->write($configuration->generateBaseline(), $baselineGenerator->baseline()); + $printer->print(sprintf(PHP_EOL . 'Baseline written to %s.' . PHP_EOL, realpath($configuration->generateBaseline()))); + } + $shellExitCode = (new \PHPUnit\TextUI\ShellExitCodeCalculator())->calculate($configuration->failOnDeprecation(), $configuration->failOnEmptyTestSuite(), $configuration->failOnIncomplete(), $configuration->failOnNotice(), $configuration->failOnRisky(), $configuration->failOnSkipped(), $configuration->failOnWarning(), $result); EventFacade::emitter()->applicationFinished($shellExitCode); return $shellExitCode; + // @codeCoverageIgnoreStart } catch (Throwable $t) { $this->exitWithCrashMessage($t); } - } - private function exitWithCrashMessage(Throwable $t) : never - { - $message = $t->getMessage(); - if (empty(trim($message))) { - $message = '(no message)'; - } - printf('%s%sAn error occurred inside PHPUnit.%s%sMessage: %s', PHP_EOL, PHP_EOL, PHP_EOL, PHP_EOL, $message); - $first = \true; - do { - printf('%s%s: %s:%d%s%s%s%s', PHP_EOL, $first ? 'Location' : 'Caused by', $t->getFile(), $t->getLine(), PHP_EOL, PHP_EOL, $t->getTraceAsString(), PHP_EOL); - $first = \false; - } while ($t = $t->getPrevious()); - exit(Result::CRASH); - } - private function exitWithErrorMessage(string $message) : never - { - print Version::getVersionString() . PHP_EOL . PHP_EOL . $message . PHP_EOL; - exit(Result::EXCEPTION); + // @codeCoverageIgnoreEnd } private function execute(\PHPUnit\TextUI\Command\Command $command) : never { @@ -71820,7 +78562,11 @@ final class Application try { include_once $filename; } catch (Throwable $t) { - $this->exitWithErrorMessage(sprintf('Error in bootstrap script: %s:%s%s%s%s', $t::class, PHP_EOL, $t->getMessage(), PHP_EOL, $t->getTraceAsString())); + $message = sprintf('Error in bootstrap script: %s:%s%s%s%s', $t::class, PHP_EOL, $t->getMessage(), PHP_EOL, $t->getTraceAsString()); + while ($t = $t->getPrevious()) { + $message .= sprintf('%s%sPrevious error: %s:%s%s%s%s', PHP_EOL, PHP_EOL, $t::class, PHP_EOL, $t->getMessage(), PHP_EOL, $t->getTraceAsString()); + } + $this->exitWithErrorMessage($message); } EventFacade::emitter()->testRunnerBootstrapFinished($filename); } @@ -71833,7 +78579,7 @@ final class Application } return $cliConfiguration; } - private function loadXmlConfiguration(string|false $configurationFile) : XmlConfiguration + private function loadXmlConfiguration(false|string $configurationFile) : XmlConfiguration { if (!$configurationFile) { return DefaultConfiguration::create(); @@ -71852,18 +78598,19 @@ final class Application $this->exitWithErrorMessage($e->getMessage()); } } - private function bootstrapExtensions(Configuration $configuration) : void + /** + * @psalm-return array{requiresCodeCoverageCollection: bool, replacesOutput: bool, replacesProgressOutput: bool, replacesResultOutput: bool, requiresExportOfObjects: bool} + */ + private function bootstrapExtensions(Configuration $configuration) : array { - $extensionBootstrapper = new ExtensionBootstrapper($configuration, new ExtensionFacade()); + $facade = new ExtensionFacade(); + $extensionBootstrapper = new ExtensionBootstrapper($configuration, $facade); foreach ($configuration->extensionBootstrappers() as $bootstrapper) { - try { - $extensionBootstrapper->bootstrap($bootstrapper['className'], $bootstrapper['parameters']); - } catch (\PHPUnit\Runner\Exception $e) { - $this->exitWithErrorMessage(sprintf('Error while bootstrapping extension: %s', $e->getMessage())); - } + $extensionBootstrapper->bootstrap($bootstrapper['className'], $bootstrapper['parameters']); } + return ['requiresCodeCoverageCollection' => $facade->requiresCodeCoverageCollection(), 'replacesOutput' => $facade->replacesOutput(), 'replacesProgressOutput' => $facade->replacesProgressOutput(), 'replacesResultOutput' => $facade->replacesResultOutput(), 'requiresExportOfObjects' => $facade->requiresExportOfObjects()]; } - private function executeCommandsThatOnlyRequireCliConfiguration(CliConfiguration $cliConfiguration, string|false $configurationFile) : void + private function executeCommandsThatOnlyRequireCliConfiguration(CliConfiguration $cliConfiguration, false|string $configurationFile) : void { if ($cliConfiguration->generateConfiguration()) { $this->execute(new GenerateConfigurationCommand()); @@ -71910,7 +78657,7 @@ final class Application } private function executeHelpCommandWhenThereIsNothingElseToDo(Configuration $configuration, TestSuite $testSuite) : void { - if ($testSuite->isEmpty() && !$configuration->hasCliArgument() && $configuration->testSuite()->isEmpty()) { + if ($testSuite->isEmpty() && !$configuration->hasCliArguments() && $configuration->testSuite()->isEmpty()) { $this->execute(new ShowHelpCommand(Result::FAILURE)); } } @@ -71927,17 +78674,14 @@ final class Application } } /** - * @psalm-param ?array{loadedExtensions: list, notLoadedExtensions: list} $pharExtensions + * @psalm-param ?list $pharExtensions */ private function writePharExtensionInformation(Printer $printer, ?array $pharExtensions) : void { if ($pharExtensions === null) { return; } - foreach ($pharExtensions['loadedExtensions'] as $extension) { - $this->writeMessage($printer, 'Extension', $extension); - } - foreach ($pharExtensions['notLoadedExtensions'] as $extension) { + foreach ($pharExtensions as $extension) { $this->writeMessage($printer, 'Extension', $extension); } } @@ -71951,43 +78695,105 @@ final class Application $this->writeMessage($printer, 'Random Seed', (string) $configuration->randomOrderSeed()); } } + /** + * @throws EventFacadeIsSealedException + * @throws UnknownSubscriberTypeException + */ private function registerLogfileWriters(Configuration $configuration) : void { if ($configuration->hasLogEventsText()) { if (is_file($configuration->logEventsText())) { unlink($configuration->logEventsText()); } - EventFacade::registerTracer(new EventLogger($configuration->logEventsText(), \false)); + EventFacade::instance()->registerTracer(new EventLogger($configuration->logEventsText(), \false)); } if ($configuration->hasLogEventsVerboseText()) { if (is_file($configuration->logEventsVerboseText())) { unlink($configuration->logEventsVerboseText()); } - EventFacade::registerTracer(new EventLogger($configuration->logEventsVerboseText(), \true)); + EventFacade::instance()->registerTracer(new EventLogger($configuration->logEventsVerboseText(), \true)); + EventFacade::emitter()->exportObjects(); } if ($configuration->hasLogfileJunit()) { - new JunitXmlLogger(OutputFacade::printerFor($configuration->logfileJunit())); + new JunitXmlLogger(OutputFacade::printerFor($configuration->logfileJunit()), EventFacade::instance()); } if ($configuration->hasLogfileTeamcity()) { - new TeamCityLogger(DefaultPrinter::from($configuration->logfileTeamcity())); + new TeamCityLogger(DefaultPrinter::from($configuration->logfileTeamcity()), EventFacade::instance()); } } + /** + * @throws EventFacadeIsSealedException + * @throws UnknownSubscriberTypeException + */ private function testDoxResultCollector(Configuration $configuration) : ?TestDoxResultCollector { if ($configuration->hasLogfileTestdoxHtml() || $configuration->hasLogfileTestdoxText() || $configuration->outputIsTestDox()) { - return new TestDoxResultCollector(); + return new TestDoxResultCollector(EventFacade::instance()); } return null; } + /** + * @throws EventFacadeIsSealedException + * @throws UnknownSubscriberTypeException + */ private function initializeTestResultCache(Configuration $configuration) : ResultCache { if ($configuration->cacheResult()) { $cache = new DefaultResultCache($configuration->testResultCacheFile()); - new ResultCacheHandler($cache); + new ResultCacheHandler($cache, EventFacade::instance()); return $cache; } return new NullResultCache(); } + /** + * @throws EventFacadeIsSealedException + * @throws UnknownSubscriberTypeException + */ + private function configureBaseline(Configuration $configuration) : ?BaselineGenerator + { + if ($configuration->hasGenerateBaseline()) { + return new BaselineGenerator(EventFacade::instance(), $configuration->source()); + } + if ($configuration->source()->useBaseline()) { + /** @psalm-suppress MissingThrowsDocblock */ + $baselineFile = $configuration->source()->baseline(); + $baseline = null; + try { + $baseline = (new Reader())->read($baselineFile); + } catch (CannotLoadBaselineException $e) { + EventFacade::emitter()->testRunnerTriggeredWarning($e->getMessage()); + } + if ($baseline !== null) { + ErrorHandler::instance()->use($baseline); + } + } + return null; + } + /** + * @codeCoverageIgnore + */ + private function exitWithCrashMessage(Throwable $t) : never + { + $message = $t->getMessage(); + if (empty(trim($message))) { + $message = '(no message)'; + } + printf('%s%sAn error occurred inside PHPUnit.%s%sMessage: %s', PHP_EOL, PHP_EOL, PHP_EOL, PHP_EOL, $message); + $first = \true; + if ($t->getPrevious()) { + $t = $t->getPrevious(); + } + do { + printf('%s%s: %s:%d%s%s%s%s', PHP_EOL, $first ? 'Location' : 'Caused by', $t->getFile(), $t->getLine(), PHP_EOL, PHP_EOL, $t->getTraceAsString(), PHP_EOL); + $first = \false; + } while ($t = $t->getPrevious()); + exit(Result::CRASH); + } + private function exitWithErrorMessage(string $message) : never + { + print Version::getVersionString() . PHP_EOL . PHP_EOL . $message . PHP_EOL; + exit(Result::EXCEPTION); + } } warnAboutConflictingOptions(); $buffer .= 'Available test group(s):' . \PHP_EOL; - $groups = $this->suite->getGroups(); + $groups = $this->suite->groups(); sort($groups); foreach ($groups as $group) { if (str_starts_with($group, '__phpunit_')) { @@ -72342,13 +79148,19 @@ final class ListTestsAsXmlCommand implements \PHPUnit\TextUI\Command\Command $currentTestCase = $test::class; } $writer->startElement('testCaseMethod'); + $writer->writeAttribute('id', $test->valueObjectForEvents()->id()); $writer->writeAttribute('name', $test->name()); $writer->writeAttribute('groups', implode(',', $test->groups())); + /** + * @deprecated https://github.com/sebastianbergmann/phpunit/issues/5481 + */ if (!empty($test->dataSetAsString())) { $writer->writeAttribute('dataSet', str_replace(' with data set ', '', $test->dataSetAsString())); } $writer->endElement(); - } elseif ($test instanceof PhptTestCase) { + continue; + } + if ($test instanceof PhptTestCase) { if ($currentTestCase !== null) { $writer->endElement(); $currentTestCase = null; @@ -72400,6 +79212,7 @@ namespace PHPUnit\TextUI\Command; use function copy; use function file_put_contents; +use function sprintf; use PHPUnit\TextUI\XmlConfiguration\Migrator; use Throwable; /** @@ -72414,17 +79227,14 @@ final class MigrateConfigurationCommand implements \PHPUnit\TextUI\Command\Comma } public function execute() : \PHPUnit\TextUI\Command\Result { - copy($this->filename, $this->filename . '.bak'); - $buffer = 'Created backup: ' . $this->filename . '.bak' . \PHP_EOL; - $shellExitCode = \PHPUnit\TextUI\Command\Result::SUCCESS; try { - file_put_contents($this->filename, (new Migrator())->migrate($this->filename)); - $buffer .= 'Migrated configuration: ' . $this->filename . \PHP_EOL; + $migrated = (new Migrator())->migrate($this->filename); + copy($this->filename, $this->filename . '.bak'); + file_put_contents($this->filename, $migrated); + return \PHPUnit\TextUI\Command\Result::from(sprintf('Created backup: %s.bak%sMigrated configuration: %s%s', $this->filename, \PHP_EOL, $this->filename, \PHP_EOL)); } catch (Throwable $t) { - $buffer .= 'Migration failed: ' . $t->getMessage() . \PHP_EOL; - $shellExitCode = \PHPUnit\TextUI\Command\Result::FAILURE; + return \PHPUnit\TextUI\Command\Result::from(sprintf('Migration of %s failed:%s%s%s', $this->filename, \PHP_EOL, $t->getMessage(), \PHP_EOL), \PHPUnit\TextUI\Command\Result::FAILURE); } - return \PHPUnit\TextUI\Command\Result::from($buffer, $shellExitCode); } } configuration->hasCoverageCacheDirectory()) { - return \PHPUnit\TextUI\Command\Result::from('Cache for static analysis has not been configured' . \PHP_EOL, \PHPUnit\TextUI\Command\Result::FAILURE); + return \PHPUnit\TextUI\Command\Result::from('Cache for static analysis has not been configured' . PHP_EOL, \PHPUnit\TextUI\Command\Result::FAILURE); } - $this->codeCoverageFilterRegistry->init($this->configuration); + $this->codeCoverageFilterRegistry->init($this->configuration, \true); if (!$this->codeCoverageFilterRegistry->configured()) { - return \PHPUnit\TextUI\Command\Result::from('Filter for code coverage has not been configured' . \PHP_EOL, \PHPUnit\TextUI\Command\Result::FAILURE); + return \PHPUnit\TextUI\Command\Result::from('Filter for code coverage has not been configured' . PHP_EOL, \PHPUnit\TextUI\Command\Result::FAILURE); } $timer = new Timer(); $timer->start(); print 'Warming cache for static analysis ... '; (new CacheWarmer())->warmCache($this->configuration->coverageCacheDirectory(), !$this->configuration->disableCodeCoverageIgnore(), $this->configuration->ignoreDeprecatedCodeUnitsFromCodeCoverage(), $this->codeCoverageFilterRegistry->get()); - printf('[%s]%s', $timer->stop()->asString(), \PHP_EOL); + printf('[%s]%s', $timer->stop()->asString(), PHP_EOL); return \PHPUnit\TextUI\Command\Result::from(); } } @@ -72629,6 +79442,8 @@ use PHPUnit\TextUI\XmlConfiguration\Exception as XmlConfigurationException; use PHPUnit\TextUI\XmlConfiguration\Loader; /** * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + * + * @codeCoverageIgnore */ final class Builder { @@ -72664,10 +79479,14 @@ declare (strict_types=1); namespace PHPUnit\TextUI\CliArguments; use function array_map; +use function basename; use function explode; +use function getcwd; +use function is_file; use function is_numeric; use function sprintf; use PHPUnit\Runner\TestSuiteSorter; +use PHPUnit\Util\Filesystem; use PHPUnit\SebastianBergmann\CliParser\Exception as CliParserException; use PHPUnit\SebastianBergmann\CliParser\Parser as CliParser; /** @@ -72675,8 +79494,8 @@ use PHPUnit\SebastianBergmann\CliParser\Parser as CliParser; */ final class Builder { - private const LONG_OPTIONS = ['atleast-version=', 'bootstrap=', 'cache-result', 'do-not-cache-result', 'cache-directory=', 'cache-result-file=', 'check-version', 'colors==', 'columns=', 'configuration=', 'coverage-cache=', 'warm-coverage-cache', 'coverage-filter=', 'coverage-clover=', 'coverage-cobertura=', 'coverage-crap4j=', 'coverage-html=', 'coverage-php=', 'coverage-text==', 'coverage-xml=', 'path-coverage', 'disallow-test-output', 'display-incomplete', 'display-skipped', 'display-deprecations', 'display-errors', 'display-notices', 'display-warnings', 'default-time-limit=', 'enforce-time-limit', 'exclude-group=', 'filter=', 'generate-configuration', 'globals-backup', 'group=', 'covers=', 'uses=', 'help', 'resolve-dependencies', 'ignore-dependencies', 'include-path=', 'list-groups', 'list-suites', 'list-tests', 'list-tests-xml=', 'log-junit=', 'log-teamcity=', 'migrate-configuration', 'no-configuration', 'no-coverage', 'no-logging', 'no-extensions', 'no-output', 'no-progress', 'no-results', 'order-by=', 'process-isolation', 'dont-report-useless-tests', 'random-order', 'random-order-seed=', 'reverse-order', 'reverse-list', 'static-backup', 'stderr', 'stop-on-defect', 'stop-on-error', 'stop-on-failure', 'stop-on-warning', 'stop-on-incomplete', 'stop-on-risky', 'stop-on-skipped', 'fail-on-empty-test-suite', 'fail-on-incomplete', 'fail-on-risky', 'fail-on-skipped', 'fail-on-warning', 'strict-coverage', 'disable-coverage-ignore', 'strict-global-state', 'teamcity', 'testdox', 'testdox-html=', 'testdox-text=', 'test-suffix=', 'testsuite=', 'exclude-testsuite=', 'log-events-text=', 'log-events-verbose-text=', 'version']; - private const SHORT_OPTIONS = 'd:c:hv'; + private const LONG_OPTIONS = ['atleast-version=', 'bootstrap=', 'cache-result', 'do-not-cache-result', 'cache-directory=', 'cache-result-file=', 'check-version', 'colors==', 'columns=', 'configuration=', 'coverage-cache=', 'warm-coverage-cache', 'coverage-filter=', 'coverage-clover=', 'coverage-cobertura=', 'coverage-crap4j=', 'coverage-html=', 'coverage-php=', 'coverage-text==', 'coverage-xml=', 'path-coverage', 'disallow-test-output', 'display-incomplete', 'display-skipped', 'display-deprecations', 'display-errors', 'display-notices', 'display-warnings', 'default-time-limit=', 'enforce-time-limit', 'exclude-group=', 'filter=', 'generate-baseline=', 'use-baseline=', 'ignore-baseline', 'generate-configuration', 'globals-backup', 'group=', 'covers=', 'uses=', 'help', 'resolve-dependencies', 'ignore-dependencies', 'include-path=', 'list-groups', 'list-suites', 'list-tests', 'list-tests-xml=', 'log-junit=', 'log-teamcity=', 'migrate-configuration', 'no-configuration', 'no-coverage', 'no-logging', 'no-extensions', 'no-output', 'no-progress', 'no-results', 'order-by=', 'process-isolation', 'dont-report-useless-tests', 'random-order', 'random-order-seed=', 'reverse-order', 'reverse-list', 'static-backup', 'stderr', 'fail-on-deprecation', 'fail-on-empty-test-suite', 'fail-on-incomplete', 'fail-on-notice', 'fail-on-risky', 'fail-on-skipped', 'fail-on-warning', 'stop-on-defect', 'stop-on-deprecation', 'stop-on-error', 'stop-on-failure', 'stop-on-incomplete', 'stop-on-notice', 'stop-on-risky', 'stop-on-skipped', 'stop-on-warning', 'strict-coverage', 'disable-coverage-ignore', 'strict-global-state', 'teamcity', 'testdox', 'testdox-html=', 'testdox-text=', 'test-suffix=', 'testsuite=', 'exclude-testsuite=', 'log-events-text=', 'log-events-verbose-text=', 'version', 'debug']; + private const SHORT_OPTIONS = 'd:c:h'; /** * @throws Exception */ @@ -72687,7 +79506,6 @@ final class Builder } catch (CliParserException $e) { throw new \PHPUnit\TextUI\CliArguments\Exception($e->getMessage(), $e->getCode(), $e); } - $argument = null; $atLeastVersion = null; $backupGlobals = null; $backupStaticProperties = null; @@ -72726,12 +79544,26 @@ final class Builder $excludeGroups = null; $executionOrder = null; $executionOrderDefects = null; + $failOnDeprecation = null; $failOnEmptyTestSuite = null; $failOnIncomplete = null; + $failOnNotice = null; $failOnRisky = null; $failOnSkipped = null; $failOnWarning = null; + $stopOnDefect = null; + $stopOnDeprecation = null; + $stopOnError = null; + $stopOnFailure = null; + $stopOnIncomplete = null; + $stopOnNotice = null; + $stopOnRisky = null; + $stopOnSkipped = null; + $stopOnWarning = null; $filter = null; + $generateBaseline = null; + $useBaseline = null; + $ignoreBaseline = \false; $generateConfiguration = \false; $migrateConfiguration = \false; $groups = null; @@ -72758,13 +79590,6 @@ final class Builder $reverseList = null; $stderr = null; $strictCoverage = null; - $stopOnDefect = null; - $stopOnError = null; - $stopOnFailure = null; - $stopOnIncomplete = null; - $stopOnRisky = null; - $stopOnSkipped = null; - $stopOnWarning = null; $teamcityLogfile = null; $testdoxHtmlFile = null; $testdoxTextFile = null; @@ -72777,9 +79602,7 @@ final class Builder $logEventsVerboseText = null; $printerTeamCity = null; $printerTestDox = null; - if (isset($options[1][0])) { - $argument = $options[1][0]; - } + $debug = \false; foreach ($options[0] as $option) { switch ($option[0]) { case '--colors': @@ -72869,6 +79692,21 @@ final class Builder case '--exclude-testsuite': $excludeTestSuite = $option[1]; break; + case '--generate-baseline': + $generateBaseline = $option[1]; + if (basename($generateBaseline) === $generateBaseline) { + $generateBaseline = getcwd() . \DIRECTORY_SEPARATOR . $generateBaseline; + } + break; + case '--use-baseline': + $useBaseline = $option[1]; + if (!is_file($useBaseline) && basename($useBaseline) === $useBaseline) { + $useBaseline = getcwd() . \DIRECTORY_SEPARATOR . $useBaseline; + } + break; + case '--ignore-baseline': + $ignoreBaseline = \true; + break; case '--generate-configuration': $generateConfiguration = \true; break; @@ -72951,41 +79789,53 @@ final class Builder case '--stderr': $stderr = \true; break; + case '--fail-on-deprecation': + $failOnDeprecation = \true; + break; + case '--fail-on-empty-test-suite': + $failOnEmptyTestSuite = \true; + break; + case '--fail-on-incomplete': + $failOnIncomplete = \true; + break; + case '--fail-on-notice': + $failOnNotice = \true; + break; + case '--fail-on-risky': + $failOnRisky = \true; + break; + case '--fail-on-skipped': + $failOnSkipped = \true; + break; + case '--fail-on-warning': + $failOnWarning = \true; + break; case '--stop-on-defect': $stopOnDefect = \true; break; + case '--stop-on-deprecation': + $stopOnDeprecation = \true; + break; case '--stop-on-error': $stopOnError = \true; break; case '--stop-on-failure': $stopOnFailure = \true; break; - case '--stop-on-warning': - $stopOnWarning = \true; - break; case '--stop-on-incomplete': $stopOnIncomplete = \true; break; + case '--stop-on-notice': + $stopOnNotice = \true; + break; case '--stop-on-risky': $stopOnRisky = \true; break; case '--stop-on-skipped': $stopOnSkipped = \true; break; - case '--fail-on-empty-test-suite': - $failOnEmptyTestSuite = \true; - break; - case '--fail-on-incomplete': - $failOnIncomplete = \true; - break; - case '--fail-on-risky': - $failOnRisky = \true; - break; - case '--fail-on-skipped': - $failOnSkipped = \true; - break; - case '--fail-on-warning': - $failOnWarning = \true; + case '--stop-on-warning': + $stopOnWarning = \true; break; case '--teamcity': $printerTeamCity = \true; @@ -73099,10 +79949,19 @@ final class Builder $executionOrder = TestSuiteSorter::ORDER_REVERSED; break; case '--log-events-text': - $logEventsText = $option[1]; + $logEventsText = Filesystem::resolvePathOrStream($option[1]); + if (!$logEventsText) { + throw new \PHPUnit\TextUI\CliArguments\Exception(sprintf('The path "%s" specified for the --log-events-text option could not be resolved', $option[1])); + } break; case '--log-events-verbose-text': - $logEventsVerboseText = $option[1]; + $logEventsVerboseText = Filesystem::resolvePathOrStream($option[1]); + if (!$logEventsVerboseText) { + throw new \PHPUnit\TextUI\CliArguments\Exception(sprintf('The path "%s" specified for the --log-events-verbose-text option could not be resolved', $option[1])); + } + break; + case '--debug': + $debug = \true; break; } } @@ -73112,7 +79971,7 @@ final class Builder if (empty($coverageFilter)) { $coverageFilter = null; } - return new \PHPUnit\TextUI\CliArguments\Configuration($argument, $atLeastVersion, $backupGlobals, $backupStaticProperties, $beStrictAboutChangesToGlobalState, $bootstrap, $cacheDirectory, $cacheResult, $cacheResultFile, $checkVersion, $colors, $columns, $configuration, $coverageClover, $coverageCobertura, $coverageCrap4J, $coverageHtml, $coveragePhp, $coverageText, $coverageTextShowUncoveredFiles, $coverageTextShowOnlySummary, $coverageXml, $pathCoverage, $coverageCacheDirectory, $warmCoverageCache, $defaultTimeLimit, $disableCodeCoverageIgnore, $disallowTestOutput, $enforceTimeLimit, $excludeGroups, $executionOrder, $executionOrderDefects, $failOnEmptyTestSuite, $failOnIncomplete, $failOnRisky, $failOnSkipped, $failOnWarning, $filter, $generateConfiguration, $migrateConfiguration, $groups, $testsCovering, $testsUsing, $help, $includePath, $iniSettings, $junitLogfile, $listGroups, $listSuites, $listTests, $listTestsXml, $noCoverage, $noExtensions, $noOutput, $noProgress, $noResults, $noLogging, $processIsolation, $randomOrderSeed, $reportUselessTests, $resolveDependencies, $reverseList, $stderr, $strictCoverage, $stopOnDefect, $stopOnError, $stopOnFailure, $stopOnIncomplete, $stopOnRisky, $stopOnSkipped, $stopOnWarning, $teamcityLogfile, $testdoxHtmlFile, $testdoxTextFile, $testSuffixes, $testSuite, $excludeTestSuite, $useDefaultConfiguration, $displayIncomplete, $displaySkipped, $displayDeprecations, $displayErrors, $displayNotices, $displayWarnings, $version, $coverageFilter, $logEventsText, $logEventsVerboseText, $printerTeamCity, $printerTestDox); + return new \PHPUnit\TextUI\CliArguments\Configuration($options[1], $atLeastVersion, $backupGlobals, $backupStaticProperties, $beStrictAboutChangesToGlobalState, $bootstrap, $cacheDirectory, $cacheResult, $cacheResultFile, $checkVersion, $colors, $columns, $configuration, $coverageClover, $coverageCobertura, $coverageCrap4J, $coverageHtml, $coveragePhp, $coverageText, $coverageTextShowUncoveredFiles, $coverageTextShowOnlySummary, $coverageXml, $pathCoverage, $coverageCacheDirectory, $warmCoverageCache, $defaultTimeLimit, $disableCodeCoverageIgnore, $disallowTestOutput, $enforceTimeLimit, $excludeGroups, $executionOrder, $executionOrderDefects, $failOnDeprecation, $failOnEmptyTestSuite, $failOnIncomplete, $failOnNotice, $failOnRisky, $failOnSkipped, $failOnWarning, $stopOnDefect, $stopOnDeprecation, $stopOnError, $stopOnFailure, $stopOnIncomplete, $stopOnNotice, $stopOnRisky, $stopOnSkipped, $stopOnWarning, $filter, $generateBaseline, $useBaseline, $ignoreBaseline, $generateConfiguration, $migrateConfiguration, $groups, $testsCovering, $testsUsing, $help, $includePath, $iniSettings, $junitLogfile, $listGroups, $listSuites, $listTests, $listTestsXml, $noCoverage, $noExtensions, $noOutput, $noProgress, $noResults, $noLogging, $processIsolation, $randomOrderSeed, $reportUselessTests, $resolveDependencies, $reverseList, $stderr, $strictCoverage, $teamcityLogfile, $testdoxHtmlFile, $testdoxTextFile, $testSuffixes, $testSuite, $excludeTestSuite, $useDefaultConfiguration, $displayIncomplete, $displaySkipped, $displayDeprecations, $displayErrors, $displayNotices, $displayWarnings, $version, $coverageFilter, $logEventsText, $logEventsVerboseText, $printerTeamCity, $printerTestDox, $debug); } } + */ + private readonly array $arguments; private readonly ?string $atLeastVersion; private readonly ?bool $backupGlobals; private readonly ?bool $backupStaticProperties; @@ -73168,12 +80030,26 @@ final class Configuration private readonly ?array $excludeGroups; private readonly ?int $executionOrder; private readonly ?int $executionOrderDefects; + private readonly ?bool $failOnDeprecation; private readonly ?bool $failOnEmptyTestSuite; private readonly ?bool $failOnIncomplete; + private readonly ?bool $failOnNotice; private readonly ?bool $failOnRisky; private readonly ?bool $failOnSkipped; private readonly ?bool $failOnWarning; + private readonly ?bool $stopOnDefect; + private readonly ?bool $stopOnDeprecation; + private readonly ?bool $stopOnError; + private readonly ?bool $stopOnFailure; + private readonly ?bool $stopOnIncomplete; + private readonly ?bool $stopOnNotice; + private readonly ?bool $stopOnRisky; + private readonly ?bool $stopOnSkipped; + private readonly ?bool $stopOnWarning; private readonly ?string $filter; + private readonly ?string $generateBaseline; + private readonly ?string $useBaseline; + private readonly bool $ignoreBaseline; private readonly bool $generateConfiguration; private readonly bool $migrateConfiguration; private readonly ?array $groups; @@ -73200,20 +80076,13 @@ final class Configuration private readonly ?bool $reverseList; private readonly ?bool $stderr; private readonly ?bool $strictCoverage; - private readonly ?bool $stopOnDefect; - private readonly ?bool $stopOnError; - private readonly ?bool $stopOnFailure; - private readonly ?bool $stopOnIncomplete; - private readonly ?bool $stopOnRisky; - private readonly ?bool $stopOnSkipped; - private readonly ?bool $stopOnWarning; private readonly ?string $teamcityLogfile; private readonly ?bool $teamCityPrinter; private readonly ?string $testdoxHtmlFile; private readonly ?string $testdoxTextFile; private readonly ?bool $testdoxPrinter; /** - * @psalm-var ?non-empty-list + * @psalm-var ?non-empty-list */ private readonly ?array $testSuffixes; private readonly ?string $testSuite; @@ -73228,12 +80097,14 @@ final class Configuration private readonly bool $version; private readonly ?string $logEventsText; private readonly ?string $logEventsVerboseText; + private readonly bool $debug; /** - * @psalm-param ?non-empty-list $testSuffixes + * @psalm-param list $arguments + * @psalm-param ?non-empty-list $testSuffixes */ - public function __construct(?string $argument, ?string $atLeastVersion, ?bool $backupGlobals, ?bool $backupStaticProperties, ?bool $beStrictAboutChangesToGlobalState, ?string $bootstrap, ?string $cacheDirectory, ?bool $cacheResult, ?string $cacheResultFile, bool $checkVersion, ?string $colors, null|int|string $columns, ?string $configurationFile, ?string $coverageClover, ?string $coverageCobertura, ?string $coverageCrap4J, ?string $coverageHtml, ?string $coveragePhp, ?string $coverageText, ?bool $coverageTextShowUncoveredFiles, ?bool $coverageTextShowOnlySummary, ?string $coverageXml, ?bool $pathCoverage, ?string $coverageCacheDirectory, bool $warmCoverageCache, ?int $defaultTimeLimit, ?bool $disableCodeCoverageIgnore, ?bool $disallowTestOutput, ?bool $enforceTimeLimit, ?array $excludeGroups, ?int $executionOrder, ?int $executionOrderDefects, ?bool $failOnEmptyTestSuite, ?bool $failOnIncomplete, ?bool $failOnRisky, ?bool $failOnSkipped, ?bool $failOnWarning, ?string $filter, bool $generateConfiguration, bool $migrateConfiguration, ?array $groups, ?array $testsCovering, ?array $testsUsing, bool $help, ?string $includePath, ?array $iniSettings, ?string $junitLogfile, bool $listGroups, bool $listSuites, bool $listTests, ?string $listTestsXml, ?bool $noCoverage, ?bool $noExtensions, ?bool $noOutput, ?bool $noProgress, ?bool $noResults, ?bool $noLogging, ?bool $processIsolation, ?int $randomOrderSeed, ?bool $reportUselessTests, ?bool $resolveDependencies, ?bool $reverseList, ?bool $stderr, ?bool $strictCoverage, ?bool $stopOnDefect, ?bool $stopOnError, ?bool $stopOnFailure, ?bool $stopOnIncomplete, ?bool $stopOnRisky, ?bool $stopOnSkipped, ?bool $stopOnWarning, ?string $teamcityLogfile, ?string $testdoxHtmlFile, ?string $testdoxTextFile, ?array $testSuffixes, ?string $testSuite, ?string $excludeTestSuite, bool $useDefaultConfiguration, ?bool $displayDetailsOnIncompleteTests, ?bool $displayDetailsOnSkippedTests, ?bool $displayDetailsOnTestsThatTriggerDeprecations, ?bool $displayDetailsOnTestsThatTriggerErrors, ?bool $displayDetailsOnTestsThatTriggerNotices, ?bool $displayDetailsOnTestsThatTriggerWarnings, bool $version, ?array $coverageFilter, ?string $logEventsText, ?string $logEventsVerboseText, ?bool $printerTeamCity, ?bool $printerTestDox) + public function __construct(array $arguments, ?string $atLeastVersion, ?bool $backupGlobals, ?bool $backupStaticProperties, ?bool $beStrictAboutChangesToGlobalState, ?string $bootstrap, ?string $cacheDirectory, ?bool $cacheResult, ?string $cacheResultFile, bool $checkVersion, ?string $colors, null|int|string $columns, ?string $configurationFile, ?string $coverageClover, ?string $coverageCobertura, ?string $coverageCrap4J, ?string $coverageHtml, ?string $coveragePhp, ?string $coverageText, ?bool $coverageTextShowUncoveredFiles, ?bool $coverageTextShowOnlySummary, ?string $coverageXml, ?bool $pathCoverage, ?string $coverageCacheDirectory, bool $warmCoverageCache, ?int $defaultTimeLimit, ?bool $disableCodeCoverageIgnore, ?bool $disallowTestOutput, ?bool $enforceTimeLimit, ?array $excludeGroups, ?int $executionOrder, ?int $executionOrderDefects, ?bool $failOnDeprecation, ?bool $failOnEmptyTestSuite, ?bool $failOnIncomplete, ?bool $failOnNotice, ?bool $failOnRisky, ?bool $failOnSkipped, ?bool $failOnWarning, ?bool $stopOnDefect, ?bool $stopOnDeprecation, ?bool $stopOnError, ?bool $stopOnFailure, ?bool $stopOnIncomplete, ?bool $stopOnNotice, ?bool $stopOnRisky, ?bool $stopOnSkipped, ?bool $stopOnWarning, ?string $filter, ?string $generateBaseline, ?string $useBaseline, bool $ignoreBaseline, bool $generateConfiguration, bool $migrateConfiguration, ?array $groups, ?array $testsCovering, ?array $testsUsing, bool $help, ?string $includePath, ?array $iniSettings, ?string $junitLogfile, bool $listGroups, bool $listSuites, bool $listTests, ?string $listTestsXml, ?bool $noCoverage, ?bool $noExtensions, ?bool $noOutput, ?bool $noProgress, ?bool $noResults, ?bool $noLogging, ?bool $processIsolation, ?int $randomOrderSeed, ?bool $reportUselessTests, ?bool $resolveDependencies, ?bool $reverseList, ?bool $stderr, ?bool $strictCoverage, ?string $teamcityLogfile, ?string $testdoxHtmlFile, ?string $testdoxTextFile, ?array $testSuffixes, ?string $testSuite, ?string $excludeTestSuite, bool $useDefaultConfiguration, ?bool $displayDetailsOnIncompleteTests, ?bool $displayDetailsOnSkippedTests, ?bool $displayDetailsOnTestsThatTriggerDeprecations, ?bool $displayDetailsOnTestsThatTriggerErrors, ?bool $displayDetailsOnTestsThatTriggerNotices, ?bool $displayDetailsOnTestsThatTriggerWarnings, bool $version, ?array $coverageFilter, ?string $logEventsText, ?string $logEventsVerboseText, ?bool $printerTeamCity, ?bool $printerTestDox, bool $debug) { - $this->argument = $argument; + $this->arguments = $arguments; $this->atLeastVersion = $atLeastVersion; $this->backupGlobals = $backupGlobals; $this->backupStaticProperties = $backupStaticProperties; @@ -73266,12 +80137,26 @@ final class Configuration $this->excludeGroups = $excludeGroups; $this->executionOrder = $executionOrder; $this->executionOrderDefects = $executionOrderDefects; + $this->failOnDeprecation = $failOnDeprecation; $this->failOnEmptyTestSuite = $failOnEmptyTestSuite; $this->failOnIncomplete = $failOnIncomplete; + $this->failOnNotice = $failOnNotice; $this->failOnRisky = $failOnRisky; $this->failOnSkipped = $failOnSkipped; $this->failOnWarning = $failOnWarning; + $this->stopOnDefect = $stopOnDefect; + $this->stopOnDeprecation = $stopOnDeprecation; + $this->stopOnError = $stopOnError; + $this->stopOnFailure = $stopOnFailure; + $this->stopOnIncomplete = $stopOnIncomplete; + $this->stopOnNotice = $stopOnNotice; + $this->stopOnRisky = $stopOnRisky; + $this->stopOnSkipped = $stopOnSkipped; + $this->stopOnWarning = $stopOnWarning; $this->filter = $filter; + $this->generateBaseline = $generateBaseline; + $this->useBaseline = $useBaseline; + $this->ignoreBaseline = $ignoreBaseline; $this->generateConfiguration = $generateConfiguration; $this->migrateConfiguration = $migrateConfiguration; $this->groups = $groups; @@ -73298,13 +80183,6 @@ final class Configuration $this->reverseList = $reverseList; $this->stderr = $stderr; $this->strictCoverage = $strictCoverage; - $this->stopOnDefect = $stopOnDefect; - $this->stopOnError = $stopOnError; - $this->stopOnFailure = $stopOnFailure; - $this->stopOnIncomplete = $stopOnIncomplete; - $this->stopOnRisky = $stopOnRisky; - $this->stopOnSkipped = $stopOnSkipped; - $this->stopOnWarning = $stopOnWarning; $this->teamcityLogfile = $teamcityLogfile; $this->testdoxHtmlFile = $testdoxHtmlFile; $this->testdoxTextFile = $testdoxTextFile; @@ -73323,23 +80201,14 @@ final class Configuration $this->logEventsVerboseText = $logEventsVerboseText; $this->teamCityPrinter = $printerTeamCity; $this->testdoxPrinter = $printerTestDox; + $this->debug = $debug; } /** - * @psalm-assert-if-true !null $this->argument - */ - public function hasArgument() : bool - { - return $this->argument !== null; - } - /** - * @throws Exception + * @psalm-return list */ - public function argument() : string + public function arguments() : array { - if (!$this->hasArgument()) { - throw new \PHPUnit\TextUI\CliArguments\Exception(); - } - return $this->argument; + return $this->arguments; } /** * @psalm-assert-if-true !null $this->atLeastVersion @@ -73462,6 +80331,8 @@ final class Configuration } /** * @psalm-assert-if-true !null $this->cacheResultFile + * + * @deprecated */ public function hasCacheResultFile() : bool { @@ -73469,6 +80340,8 @@ final class Configuration } /** * @throws Exception + * + * @deprecated */ public function cacheResultFile() : string { @@ -73721,6 +80594,8 @@ final class Configuration } /** * @psalm-assert-if-true !null $this->coverageCacheDirectory + * + * @deprecated */ public function hasCoverageCacheDirectory() : bool { @@ -73728,6 +80603,8 @@ final class Configuration } /** * @throws Exception + * + * @deprecated */ public function coverageCacheDirectory() : string { @@ -73859,6 +80736,23 @@ final class Configuration } return $this->executionOrderDefects; } + /** + * @psalm-assert-if-true !null $this->failOnDeprecation + */ + public function hasFailOnDeprecation() : bool + { + return $this->failOnDeprecation !== null; + } + /** + * @throws Exception + */ + public function failOnDeprecation() : bool + { + if (!$this->hasFailOnDeprecation()) { + throw new \PHPUnit\TextUI\CliArguments\Exception(); + } + return $this->failOnDeprecation; + } /** * @psalm-assert-if-true !null $this->failOnEmptyTestSuite */ @@ -73893,6 +80787,23 @@ final class Configuration } return $this->failOnIncomplete; } + /** + * @psalm-assert-if-true !null $this->failOnNotice + */ + public function hasFailOnNotice() : bool + { + return $this->failOnNotice !== null; + } + /** + * @throws Exception + */ + public function failOnNotice() : bool + { + if (!$this->hasFailOnNotice()) { + throw new \PHPUnit\TextUI\CliArguments\Exception(); + } + return $this->failOnNotice; + } /** * @psalm-assert-if-true !null $this->failOnRisky */ @@ -73944,6 +80855,159 @@ final class Configuration } return $this->failOnWarning; } + /** + * @psalm-assert-if-true !null $this->stopOnDefect + */ + public function hasStopOnDefect() : bool + { + return $this->stopOnDefect !== null; + } + /** + * @throws Exception + */ + public function stopOnDefect() : bool + { + if (!$this->hasStopOnDefect()) { + throw new \PHPUnit\TextUI\CliArguments\Exception(); + } + return $this->stopOnDefect; + } + /** + * @psalm-assert-if-true !null $this->stopOnDeprecation + */ + public function hasStopOnDeprecation() : bool + { + return $this->stopOnDeprecation !== null; + } + /** + * @throws Exception + */ + public function stopOnDeprecation() : bool + { + if (!$this->hasStopOnDeprecation()) { + throw new \PHPUnit\TextUI\CliArguments\Exception(); + } + return $this->stopOnDeprecation; + } + /** + * @psalm-assert-if-true !null $this->stopOnError + */ + public function hasStopOnError() : bool + { + return $this->stopOnError !== null; + } + /** + * @throws Exception + */ + public function stopOnError() : bool + { + if (!$this->hasStopOnError()) { + throw new \PHPUnit\TextUI\CliArguments\Exception(); + } + return $this->stopOnError; + } + /** + * @psalm-assert-if-true !null $this->stopOnFailure + */ + public function hasStopOnFailure() : bool + { + return $this->stopOnFailure !== null; + } + /** + * @throws Exception + */ + public function stopOnFailure() : bool + { + if (!$this->hasStopOnFailure()) { + throw new \PHPUnit\TextUI\CliArguments\Exception(); + } + return $this->stopOnFailure; + } + /** + * @psalm-assert-if-true !null $this->stopOnIncomplete + */ + public function hasStopOnIncomplete() : bool + { + return $this->stopOnIncomplete !== null; + } + /** + * @throws Exception + */ + public function stopOnIncomplete() : bool + { + if (!$this->hasStopOnIncomplete()) { + throw new \PHPUnit\TextUI\CliArguments\Exception(); + } + return $this->stopOnIncomplete; + } + /** + * @psalm-assert-if-true !null $this->stopOnNotice + */ + public function hasStopOnNotice() : bool + { + return $this->stopOnNotice !== null; + } + /** + * @throws Exception + */ + public function stopOnNotice() : bool + { + if (!$this->hasStopOnNotice()) { + throw new \PHPUnit\TextUI\CliArguments\Exception(); + } + return $this->stopOnNotice; + } + /** + * @psalm-assert-if-true !null $this->stopOnRisky + */ + public function hasStopOnRisky() : bool + { + return $this->stopOnRisky !== null; + } + /** + * @throws Exception + */ + public function stopOnRisky() : bool + { + if (!$this->hasStopOnRisky()) { + throw new \PHPUnit\TextUI\CliArguments\Exception(); + } + return $this->stopOnRisky; + } + /** + * @psalm-assert-if-true !null $this->stopOnSkipped + */ + public function hasStopOnSkipped() : bool + { + return $this->stopOnSkipped !== null; + } + /** + * @throws Exception + */ + public function stopOnSkipped() : bool + { + if (!$this->hasStopOnSkipped()) { + throw new \PHPUnit\TextUI\CliArguments\Exception(); + } + return $this->stopOnSkipped; + } + /** + * @psalm-assert-if-true !null $this->stopOnWarning + */ + public function hasStopOnWarning() : bool + { + return $this->stopOnWarning !== null; + } + /** + * @throws Exception + */ + public function stopOnWarning() : bool + { + if (!$this->hasStopOnWarning()) { + throw new \PHPUnit\TextUI\CliArguments\Exception(); + } + return $this->stopOnWarning; + } /** * @psalm-assert-if-true !null $this->filter */ @@ -73961,6 +81025,44 @@ final class Configuration } return $this->filter; } + /** + * @psalm-assert-if-true !null $this->generateBaseline + */ + public function hasGenerateBaseline() : bool + { + return $this->generateBaseline !== null; + } + /** + * @throws Exception + */ + public function generateBaseline() : string + { + if (!$this->hasGenerateBaseline()) { + throw new \PHPUnit\TextUI\CliArguments\Exception(); + } + return $this->generateBaseline; + } + /** + * @psalm-assert-if-true !null $this->useBaseline + */ + public function hasUseBaseline() : bool + { + return $this->useBaseline !== null; + } + /** + * @throws Exception + */ + public function useBaseline() : string + { + if (!$this->hasUseBaseline()) { + throw new \PHPUnit\TextUI\CliArguments\Exception(); + } + return $this->useBaseline; + } + public function ignoreBaseline() : bool + { + return $this->ignoreBaseline; + } public function generateConfiguration() : bool { return $this->generateConfiguration; @@ -74325,125 +81427,6 @@ final class Configuration } return $this->strictCoverage; } - /** - * @psalm-assert-if-true !null $this->stopOnDefect - */ - public function hasStopOnDefect() : bool - { - return $this->stopOnDefect !== null; - } - /** - * @throws Exception - */ - public function stopOnDefect() : bool - { - if (!$this->hasStopOnDefect()) { - throw new \PHPUnit\TextUI\CliArguments\Exception(); - } - return $this->stopOnDefect; - } - /** - * @psalm-assert-if-true !null $this->stopOnError - */ - public function hasStopOnError() : bool - { - return $this->stopOnError !== null; - } - /** - * @throws Exception - */ - public function stopOnError() : bool - { - if (!$this->hasStopOnError()) { - throw new \PHPUnit\TextUI\CliArguments\Exception(); - } - return $this->stopOnError; - } - /** - * @psalm-assert-if-true !null $this->stopOnFailure - */ - public function hasStopOnFailure() : bool - { - return $this->stopOnFailure !== null; - } - /** - * @throws Exception - */ - public function stopOnFailure() : bool - { - if (!$this->hasStopOnFailure()) { - throw new \PHPUnit\TextUI\CliArguments\Exception(); - } - return $this->stopOnFailure; - } - /** - * @psalm-assert-if-true !null $this->stopOnIncomplete - */ - public function hasStopOnIncomplete() : bool - { - return $this->stopOnIncomplete !== null; - } - /** - * @throws Exception - */ - public function stopOnIncomplete() : bool - { - if (!$this->hasStopOnIncomplete()) { - throw new \PHPUnit\TextUI\CliArguments\Exception(); - } - return $this->stopOnIncomplete; - } - /** - * @psalm-assert-if-true !null $this->stopOnRisky - */ - public function hasStopOnRisky() : bool - { - return $this->stopOnRisky !== null; - } - /** - * @throws Exception - */ - public function stopOnRisky() : bool - { - if (!$this->hasStopOnRisky()) { - throw new \PHPUnit\TextUI\CliArguments\Exception(); - } - return $this->stopOnRisky; - } - /** - * @psalm-assert-if-true !null $this->stopOnSkipped - */ - public function hasStopOnSkipped() : bool - { - return $this->stopOnSkipped !== null; - } - /** - * @throws Exception - */ - public function stopOnSkipped() : bool - { - if (!$this->hasStopOnSkipped()) { - throw new \PHPUnit\TextUI\CliArguments\Exception(); - } - return $this->stopOnSkipped; - } - /** - * @psalm-assert-if-true !null $this->stopOnWarning - */ - public function hasStopOnWarning() : bool - { - return $this->stopOnWarning !== null; - } - /** - * @throws Exception - */ - public function stopOnWarning() : bool - { - if (!$this->hasStopOnWarning()) { - throw new \PHPUnit\TextUI\CliArguments\Exception(); - } - return $this->stopOnWarning; - } /** * @psalm-assert-if-true !null $this->teamcityLogfile */ @@ -74537,7 +81520,7 @@ final class Configuration return $this->testSuffixes !== null; } /** - * @psalm-return non-empty-list + * @psalm-return non-empty-list * * @throws Exception */ @@ -74726,6 +81709,10 @@ final class Configuration } return $this->logEventsVerboseText; } + public function debug() : bool + { + return $this->debug; + } } useDefaultConfiguration(); if ($configuration->hasConfigurationFile()) { @@ -74790,7 +81777,7 @@ final class XmlConfigurationFileFinder } return \false; } - private function configurationFileInDirectory(string $directory) : string|false + private function configurationFileInDirectory(string $directory) : false|string { $candidates = [$directory . '/phpunit.xml', $directory . '/phpunit.dist.xml', $directory . '/phpunit.xml.dist']; foreach ($candidates as $candidate) { @@ -74814,6 +81801,7 @@ declare (strict_types=1); */ namespace PHPUnit\TextUI\Configuration; +use function array_keys; use function assert; use PHPUnit\SebastianBergmann\CodeCoverage\Filter; /** @@ -74839,28 +81827,17 @@ final class CodeCoverageFilterRegistry assert($this->filter !== null); return $this->filter; } - public function init(\PHPUnit\TextUI\Configuration\Configuration $configuration) : void + public function init(\PHPUnit\TextUI\Configuration\Configuration $configuration, bool $force = \false) : void { - if (!$configuration->hasCoverageReport()) { + if (!$configuration->hasCoverageReport() && !$force) { return; } - if ($this->configured) { + if ($this->configured && !$force) { return; } $this->filter = new Filter(); - if ($configuration->hasNonEmptyListOfFilesToBeIncludedInCodeCoverageReport()) { - foreach ($configuration->coverageIncludeDirectories() as $directory) { - $this->filter->includeDirectory($directory->path(), $directory->suffix(), $directory->prefix()); - } - foreach ($configuration->coverageIncludeFiles() as $file) { - $this->filter->includeFile($file->path()); - } - foreach ($configuration->coverageExcludeDirectories() as $directory) { - $this->filter->excludeDirectory($directory->path(), $directory->suffix(), $directory->prefix()); - } - foreach ($configuration->coverageExcludeFiles() as $file) { - $this->filter->excludeFile($file->path()); - } + if ($configuration->source()->notEmpty()) { + $this->filter->includeFiles(array_keys((new \PHPUnit\TextUI\Configuration\SourceMapper())->map($configuration->source()))); $this->configured = \true; } } @@ -74893,16 +81870,16 @@ final class Configuration public const COLOR_AUTO = 'auto'; public const COLOR_ALWAYS = 'always'; public const COLOR_DEFAULT = self::COLOR_NEVER; - private readonly ?string $cliArgument; + /** + * @psalm-var list + */ + private readonly array $cliArguments; private readonly ?string $configurationFile; private readonly ?string $bootstrap; private readonly bool $cacheResult; private readonly ?string $cacheDirectory; private readonly ?string $coverageCacheDirectory; - private readonly \PHPUnit\TextUI\Configuration\FilterDirectoryCollection $coverageIncludeDirectories; - private readonly \PHPUnit\TextUI\Configuration\FileCollection $coverageIncludeFiles; - private readonly \PHPUnit\TextUI\Configuration\FilterDirectoryCollection $coverageExcludeDirectories; - private readonly \PHPUnit\TextUI\Configuration\FileCollection $coverageExcludeFiles; + private readonly \PHPUnit\TextUI\Configuration\Source $source; private readonly bool $pathCoverage; private readonly ?string $coverageClover; private readonly ?string $coverageCobertura; @@ -74925,14 +81902,28 @@ final class Configuration private readonly string $testResultCacheFile; private readonly bool $ignoreDeprecatedCodeUnitsFromCodeCoverage; private readonly bool $disableCodeCoverageIgnore; + private readonly bool $failOnDeprecation; private readonly bool $failOnEmptyTestSuite; private readonly bool $failOnIncomplete; + private readonly bool $failOnNotice; private readonly bool $failOnRisky; private readonly bool $failOnSkipped; private readonly bool $failOnWarning; + private readonly bool $stopOnDefect; + private readonly bool $stopOnDeprecation; + private readonly bool $stopOnError; + private readonly bool $stopOnFailure; + private readonly bool $stopOnIncomplete; + private readonly bool $stopOnNotice; + private readonly bool $stopOnRisky; + private readonly bool $stopOnSkipped; + private readonly bool $stopOnWarning; private readonly bool $outputToStandardErrorStream; private readonly int $columns; private readonly bool $noExtensions; + /** + * @psalm-var ?non-empty-string + */ private readonly ?string $pharExtensionDirectory; /** * @psalm-var list}> @@ -74943,13 +81934,6 @@ final class Configuration private readonly bool $beStrictAboutChangesToGlobalState; private readonly bool $colors; private readonly bool $processIsolation; - private readonly bool $stopOnDefect; - private readonly bool $stopOnError; - private readonly bool $stopOnFailure; - private readonly bool $stopOnWarning; - private readonly bool $stopOnIncomplete; - private readonly bool $stopOnRisky; - private readonly bool $stopOnSkipped; private readonly bool $enforceTimeLimit; private readonly int $defaultTimeLimit; private readonly int $timeoutForSmallTests; @@ -74993,26 +81977,29 @@ final class Configuration private readonly string $excludeTestSuite; private readonly ?string $defaultTestSuite; /** - * @psalm-var non-empty-list + * @psalm-var non-empty-list */ private readonly array $testSuffixes; private readonly \PHPUnit\TextUI\Configuration\Php $php; - /** - * @psalm-param non-empty-list $testSuffixes + private readonly bool $controlGarbageCollector; + private readonly int $numberOfTestsBeforeGarbageCollection; + private readonly ?string $generateBaseline; + private readonly bool $debug; + /** + * @psalm-param list $cliArguments + * @psalm-param ?non-empty-string $pharExtensionDirectory + * @psalm-param non-empty-list $testSuffixes * @psalm-param list}> $extensionBootstrappers */ - public function __construct(?string $cliArgument, ?string $configurationFile, ?string $bootstrap, bool $cacheResult, ?string $cacheDirectory, ?string $coverageCacheDirectory, \PHPUnit\TextUI\Configuration\FilterDirectoryCollection $coverageIncludeDirectories, \PHPUnit\TextUI\Configuration\FileCollection $coverageIncludeFiles, \PHPUnit\TextUI\Configuration\FilterDirectoryCollection $coverageExcludeDirectories, \PHPUnit\TextUI\Configuration\FileCollection $coverageExcludeFiles, string $testResultCacheFile, ?string $coverageClover, ?string $coverageCobertura, ?string $coverageCrap4j, int $coverageCrap4jThreshold, ?string $coverageHtml, int $coverageHtmlLowUpperBound, int $coverageHtmlHighLowerBound, string $coverageHtmlColorSuccessLow, string $coverageHtmlColorSuccessMedium, string $coverageHtmlColorSuccessHigh, string $coverageHtmlColorWarning, string $coverageHtmlColorDanger, ?string $coverageHtmlCustomCssFile, ?string $coveragePhp, ?string $coverageText, bool $coverageTextShowUncoveredFiles, bool $coverageTextShowOnlySummary, ?string $coverageXml, bool $pathCoverage, bool $ignoreDeprecatedCodeUnitsFromCodeCoverage, bool $disableCodeCoverageIgnore, bool $failOnEmptyTestSuite, bool $failOnIncomplete, bool $failOnRisky, bool $failOnSkipped, bool $failOnWarning, bool $outputToStandardErrorStream, int|string $columns, bool $noExtensions, ?string $pharExtensionDirectory, array $extensionBootstrappers, bool $backupGlobals, bool $backupStaticProperties, bool $beStrictAboutChangesToGlobalState, bool $colors, bool $processIsolation, bool $stopOnDefect, bool $stopOnError, bool $stopOnFailure, bool $stopOnWarning, bool $stopOnIncomplete, bool $stopOnRisky, bool $stopOnSkipped, bool $enforceTimeLimit, int $defaultTimeLimit, int $timeoutForSmallTests, int $timeoutForMediumTests, int $timeoutForLargeTests, bool $reportUselessTests, bool $strictCoverage, bool $disallowTestOutput, bool $displayDetailsOnIncompleteTests, bool $displayDetailsOnSkippedTests, bool $displayDetailsOnTestsThatTriggerDeprecations, bool $displayDetailsOnTestsThatTriggerErrors, bool $displayDetailsOnTestsThatTriggerNotices, bool $displayDetailsOnTestsThatTriggerWarnings, bool $reverseDefectList, bool $requireCoverageMetadata, bool $registerMockObjectsFromTestArgumentsRecursively, bool $noProgress, bool $noResults, bool $noOutput, int $executionOrder, int $executionOrderDefects, bool $resolveDependencies, ?string $logfileTeamcity, ?string $logfileJunit, ?string $logfileTestdoxHtml, ?string $logfileTestdoxText, ?string $logEventsText, ?string $logEventsVerboseText, bool $teamCityOutput, bool $testDoxOutput, ?array $testsCovering, ?array $testsUsing, ?string $filter, ?array $groups, ?array $excludeGroups, int $randomOrderSeed, bool $includeUncoveredFiles, \PHPUnit\TextUI\Configuration\TestSuiteCollection $testSuite, string $includeTestSuite, string $excludeTestSuite, ?string $defaultTestSuite, array $testSuffixes, \PHPUnit\TextUI\Configuration\Php $php) + public function __construct(array $cliArguments, ?string $configurationFile, ?string $bootstrap, bool $cacheResult, ?string $cacheDirectory, ?string $coverageCacheDirectory, \PHPUnit\TextUI\Configuration\Source $source, string $testResultCacheFile, ?string $coverageClover, ?string $coverageCobertura, ?string $coverageCrap4j, int $coverageCrap4jThreshold, ?string $coverageHtml, int $coverageHtmlLowUpperBound, int $coverageHtmlHighLowerBound, string $coverageHtmlColorSuccessLow, string $coverageHtmlColorSuccessMedium, string $coverageHtmlColorSuccessHigh, string $coverageHtmlColorWarning, string $coverageHtmlColorDanger, ?string $coverageHtmlCustomCssFile, ?string $coveragePhp, ?string $coverageText, bool $coverageTextShowUncoveredFiles, bool $coverageTextShowOnlySummary, ?string $coverageXml, bool $pathCoverage, bool $ignoreDeprecatedCodeUnitsFromCodeCoverage, bool $disableCodeCoverageIgnore, bool $failOnDeprecation, bool $failOnEmptyTestSuite, bool $failOnIncomplete, bool $failOnNotice, bool $failOnRisky, bool $failOnSkipped, bool $failOnWarning, bool $stopOnDefect, bool $stopOnDeprecation, bool $stopOnError, bool $stopOnFailure, bool $stopOnIncomplete, bool $stopOnNotice, bool $stopOnRisky, bool $stopOnSkipped, bool $stopOnWarning, bool $outputToStandardErrorStream, int|string $columns, bool $noExtensions, ?string $pharExtensionDirectory, array $extensionBootstrappers, bool $backupGlobals, bool $backupStaticProperties, bool $beStrictAboutChangesToGlobalState, bool $colors, bool $processIsolation, bool $enforceTimeLimit, int $defaultTimeLimit, int $timeoutForSmallTests, int $timeoutForMediumTests, int $timeoutForLargeTests, bool $reportUselessTests, bool $strictCoverage, bool $disallowTestOutput, bool $displayDetailsOnIncompleteTests, bool $displayDetailsOnSkippedTests, bool $displayDetailsOnTestsThatTriggerDeprecations, bool $displayDetailsOnTestsThatTriggerErrors, bool $displayDetailsOnTestsThatTriggerNotices, bool $displayDetailsOnTestsThatTriggerWarnings, bool $reverseDefectList, bool $requireCoverageMetadata, bool $registerMockObjectsFromTestArgumentsRecursively, bool $noProgress, bool $noResults, bool $noOutput, int $executionOrder, int $executionOrderDefects, bool $resolveDependencies, ?string $logfileTeamcity, ?string $logfileJunit, ?string $logfileTestdoxHtml, ?string $logfileTestdoxText, ?string $logEventsText, ?string $logEventsVerboseText, bool $teamCityOutput, bool $testDoxOutput, ?array $testsCovering, ?array $testsUsing, ?string $filter, ?array $groups, ?array $excludeGroups, int $randomOrderSeed, bool $includeUncoveredFiles, \PHPUnit\TextUI\Configuration\TestSuiteCollection $testSuite, string $includeTestSuite, string $excludeTestSuite, ?string $defaultTestSuite, array $testSuffixes, \PHPUnit\TextUI\Configuration\Php $php, bool $controlGarbageCollector, int $numberOfTestsBeforeGarbageCollection, ?string $generateBaseline, bool $debug) { - $this->cliArgument = $cliArgument; + $this->cliArguments = $cliArguments; $this->configurationFile = $configurationFile; $this->bootstrap = $bootstrap; $this->cacheResult = $cacheResult; $this->cacheDirectory = $cacheDirectory; $this->coverageCacheDirectory = $coverageCacheDirectory; - $this->coverageIncludeDirectories = $coverageIncludeDirectories; - $this->coverageIncludeFiles = $coverageIncludeFiles; - $this->coverageExcludeDirectories = $coverageExcludeDirectories; - $this->coverageExcludeFiles = $coverageExcludeFiles; + $this->source = $source; $this->testResultCacheFile = $testResultCacheFile; $this->coverageClover = $coverageClover; $this->coverageCobertura = $coverageCobertura; @@ -75035,11 +82022,22 @@ final class Configuration $this->pathCoverage = $pathCoverage; $this->ignoreDeprecatedCodeUnitsFromCodeCoverage = $ignoreDeprecatedCodeUnitsFromCodeCoverage; $this->disableCodeCoverageIgnore = $disableCodeCoverageIgnore; + $this->failOnDeprecation = $failOnDeprecation; $this->failOnEmptyTestSuite = $failOnEmptyTestSuite; $this->failOnIncomplete = $failOnIncomplete; + $this->failOnNotice = $failOnNotice; $this->failOnRisky = $failOnRisky; $this->failOnSkipped = $failOnSkipped; $this->failOnWarning = $failOnWarning; + $this->stopOnDefect = $stopOnDefect; + $this->stopOnDeprecation = $stopOnDeprecation; + $this->stopOnError = $stopOnError; + $this->stopOnFailure = $stopOnFailure; + $this->stopOnIncomplete = $stopOnIncomplete; + $this->stopOnNotice = $stopOnNotice; + $this->stopOnRisky = $stopOnRisky; + $this->stopOnSkipped = $stopOnSkipped; + $this->stopOnWarning = $stopOnWarning; $this->outputToStandardErrorStream = $outputToStandardErrorStream; $this->columns = $columns; $this->noExtensions = $noExtensions; @@ -75050,13 +82048,6 @@ final class Configuration $this->beStrictAboutChangesToGlobalState = $beStrictAboutChangesToGlobalState; $this->colors = $colors; $this->processIsolation = $processIsolation; - $this->stopOnDefect = $stopOnDefect; - $this->stopOnError = $stopOnError; - $this->stopOnFailure = $stopOnFailure; - $this->stopOnWarning = $stopOnWarning; - $this->stopOnIncomplete = $stopOnIncomplete; - $this->stopOnRisky = $stopOnRisky; - $this->stopOnSkipped = $stopOnSkipped; $this->enforceTimeLimit = $enforceTimeLimit; $this->defaultTimeLimit = $defaultTimeLimit; $this->timeoutForSmallTests = $timeoutForSmallTests; @@ -75101,23 +82092,47 @@ final class Configuration $this->defaultTestSuite = $defaultTestSuite; $this->testSuffixes = $testSuffixes; $this->php = $php; + $this->controlGarbageCollector = $controlGarbageCollector; + $this->numberOfTestsBeforeGarbageCollection = $numberOfTestsBeforeGarbageCollection; + $this->generateBaseline = $generateBaseline; + $this->debug = $debug; + } + /** + * @psalm-assert-if-true !empty $this->cliArguments + */ + public function hasCliArguments() : bool + { + return !empty($this->cliArguments); } /** - * @psalm-assert-if-true !null $this->cliArgument + * @psalm-return list + */ + public function cliArguments() : array + { + return $this->cliArguments; + } + /** + * @psalm-assert-if-true !empty $this->cliArguments + * + * @deprecated Use hasCliArguments() instead */ public function hasCliArgument() : bool { - return $this->cliArgument !== null; + return !empty($this->cliArguments); } /** * @throws NoCliArgumentException + * + * @return non-empty-string + * + * @deprecated Use cliArguments()[0] instead */ public function cliArgument() : string { - if (!$this->hasCliArgument()) { + if (!$this->hasCliArguments()) { throw new \PHPUnit\TextUI\Configuration\NoCliArgumentException(); } - return $this->cliArgument; + return $this->cliArguments[0]; } /** * @psalm-assert-if-true !null $this->configurationFile @@ -75191,25 +82206,65 @@ final class Configuration } return $this->coverageCacheDirectory; } + public function source() : \PHPUnit\TextUI\Configuration\Source + { + return $this->source; + } + /** + * @deprecated Use source()->restrictDeprecations() instead + */ + public function restrictDeprecations() : bool + { + return $this->source()->restrictDeprecations(); + } + /** + * @deprecated Use source()->restrictNotices() instead + */ + public function restrictNotices() : bool + { + return $this->source()->restrictNotices(); + } + /** + * @deprecated Use source()->restrictWarnings() instead + */ + public function restrictWarnings() : bool + { + return $this->source()->restrictWarnings(); + } + /** + * @deprecated Use source()->notEmpty() instead + */ public function hasNonEmptyListOfFilesToBeIncludedInCodeCoverageReport() : bool { - return $this->coverageIncludeDirectories->notEmpty() || $this->coverageIncludeFiles->notEmpty(); + return $this->source->notEmpty(); } + /** + * @deprecated Use source()->includeDirectories() instead + */ public function coverageIncludeDirectories() : \PHPUnit\TextUI\Configuration\FilterDirectoryCollection { - return $this->coverageIncludeDirectories; + return $this->source()->includeDirectories(); } + /** + * @deprecated Use source()->includeFiles() instead + */ public function coverageIncludeFiles() : \PHPUnit\TextUI\Configuration\FileCollection { - return $this->coverageIncludeFiles; + return $this->source()->includeFiles(); } + /** + * @deprecated Use source()->excludeDirectories() instead + */ public function coverageExcludeDirectories() : \PHPUnit\TextUI\Configuration\FilterDirectoryCollection { - return $this->coverageExcludeDirectories; + return $this->source()->excludeDirectories(); } + /** + * @deprecated Use source()->excludeFiles() instead + */ public function coverageExcludeFiles() : \PHPUnit\TextUI\Configuration\FileCollection { - return $this->coverageExcludeFiles; + return $this->source()->excludeFiles(); } public function testResultCacheFile() : string { @@ -75407,6 +82462,10 @@ final class Configuration } return $this->coverageXml; } + public function failOnDeprecation() : bool + { + return $this->failOnDeprecation; + } public function failOnEmptyTestSuite() : bool { return $this->failOnEmptyTestSuite; @@ -75415,6 +82474,10 @@ final class Configuration { return $this->failOnIncomplete; } + public function failOnNotice() : bool + { + return $this->failOnNotice; + } public function failOnRisky() : bool { return $this->failOnRisky; @@ -75427,6 +82490,42 @@ final class Configuration { return $this->failOnWarning; } + public function stopOnDefect() : bool + { + return $this->stopOnDefect; + } + public function stopOnDeprecation() : bool + { + return $this->stopOnDeprecation; + } + public function stopOnError() : bool + { + return $this->stopOnError; + } + public function stopOnFailure() : bool + { + return $this->stopOnFailure; + } + public function stopOnIncomplete() : bool + { + return $this->stopOnIncomplete; + } + public function stopOnNotice() : bool + { + return $this->stopOnNotice; + } + public function stopOnRisky() : bool + { + return $this->stopOnRisky; + } + public function stopOnSkipped() : bool + { + return $this->stopOnSkipped; + } + public function stopOnWarning() : bool + { + return $this->stopOnWarning; + } public function outputToStandardErrorStream() : bool { return $this->outputToStandardErrorStream; @@ -75454,6 +82553,8 @@ final class Configuration return $this->pharExtensionDirectory !== null; } /** + * @psalm-return non-empty-string + * * @throws NoPharExtensionDirectoryException */ public function pharExtensionDirectory() : string @@ -75490,34 +82591,6 @@ final class Configuration { return $this->processIsolation; } - public function stopOnDefect() : bool - { - return $this->stopOnDefect; - } - public function stopOnError() : bool - { - return $this->stopOnError; - } - public function stopOnFailure() : bool - { - return $this->stopOnFailure; - } - public function stopOnWarning() : bool - { - return $this->stopOnWarning; - } - public function stopOnIncomplete() : bool - { - return $this->stopOnIncomplete; - } - public function stopOnRisky() : bool - { - return $this->stopOnRisky; - } - public function stopOnSkipped() : bool - { - return $this->stopOnSkipped; - } public function enforceTimeLimit() : bool { return $this->enforceTimeLimit; @@ -75582,6 +82655,9 @@ final class Configuration { return $this->requireCoverageMetadata; } + /** + * @deprecated + */ public function registerMockObjectsFromTestArgumentsRecursively() : bool { return $this->registerMockObjectsFromTestArgumentsRecursively; @@ -75847,7 +82923,7 @@ final class Configuration return $this->defaultTestSuite; } /** - * @psalm-return non-empty-list + * @psalm-return non-empty-list */ public function testSuffixes() : array { @@ -75857,6 +82933,56 @@ final class Configuration { return $this->php; } + public function controlGarbageCollector() : bool + { + return $this->controlGarbageCollector; + } + public function numberOfTestsBeforeGarbageCollection() : int + { + return $this->numberOfTestsBeforeGarbageCollection; + } + /** + * @psalm-assert-if-true !null $this->generateBaseline + */ + public function hasGenerateBaseline() : bool + { + return $this->generateBaseline !== null; + } + /** + * @throws NoBaselineException + */ + public function generateBaseline() : string + { + if (!$this->hasGenerateBaseline()) { + throw new \PHPUnit\TextUI\Configuration\NoBaselineException(); + } + return $this->generateBaseline; + } + public function debug() : bool + { + return $this->debug; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI\XmlConfiguration; + +use PHPUnit\TextUI\Configuration\Exception; +use RuntimeException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class CannotFindSchemaException extends RuntimeException implements Exception +{ } + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI\Configuration; + use RuntimeException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit @@ -76163,8 +83309,8 @@ use PHPUnit\Runner\TestSuiteSorter; use PHPUnit\TextUI\CliArguments\Configuration as CliConfiguration; use PHPUnit\TextUI\XmlConfiguration\Configuration as XmlConfiguration; use PHPUnit\TextUI\XmlConfiguration\LoadedFromFileConfiguration; +use PHPUnit\TextUI\XmlConfiguration\SchemaDetector; use PHPUnit\Util\Filesystem; -use PHPUnit\Util\Xml\SchemaDetector; use PHPUnit\SebastianBergmann\CodeCoverage\Report\Html\Colors; use PHPUnit\SebastianBergmann\CodeCoverage\Report\Thresholds; use PHPUnit\SebastianBergmann\Environment\Console; @@ -76181,10 +83327,6 @@ final class Merger */ public function merge(CliConfiguration $cliConfiguration, XmlConfiguration $xmlConfiguration) : \PHPUnit\TextUI\Configuration\Configuration { - $cliArgument = null; - if ($cliConfiguration->hasArgument()) { - $cliArgument = $cliConfiguration->argument(); - } $configurationFile = null; if ($xmlConfiguration->wasLoadedFromFile()) { assert($xmlConfiguration instanceof LoadedFromFileConfiguration); @@ -76240,6 +83382,11 @@ final class Merger } else { $disableCodeCoverageIgnore = $xmlConfiguration->codeCoverage()->disableCodeCoverageIgnore(); } + if ($cliConfiguration->hasFailOnDeprecation()) { + $failOnDeprecation = $cliConfiguration->failOnDeprecation(); + } else { + $failOnDeprecation = $xmlConfiguration->phpunit()->failOnDeprecation(); + } if ($cliConfiguration->hasFailOnEmptyTestSuite()) { $failOnEmptyTestSuite = $cliConfiguration->failOnEmptyTestSuite(); } else { @@ -76250,6 +83397,11 @@ final class Merger } else { $failOnIncomplete = $xmlConfiguration->phpunit()->failOnIncomplete(); } + if ($cliConfiguration->hasFailOnNotice()) { + $failOnNotice = $cliConfiguration->failOnNotice(); + } else { + $failOnNotice = $xmlConfiguration->phpunit()->failOnNotice(); + } if ($cliConfiguration->hasFailOnRisky()) { $failOnRisky = $cliConfiguration->failOnRisky(); } else { @@ -76265,27 +83417,68 @@ final class Merger } else { $failOnWarning = $xmlConfiguration->phpunit()->failOnWarning(); } + if ($cliConfiguration->hasStopOnDefect()) { + $stopOnDefect = $cliConfiguration->stopOnDefect(); + } else { + $stopOnDefect = $xmlConfiguration->phpunit()->stopOnDefect(); + } + if ($cliConfiguration->hasStopOnDeprecation()) { + $stopOnDeprecation = $cliConfiguration->stopOnDeprecation(); + } else { + $stopOnDeprecation = $xmlConfiguration->phpunit()->stopOnDeprecation(); + } + if ($cliConfiguration->hasStopOnError()) { + $stopOnError = $cliConfiguration->stopOnError(); + } else { + $stopOnError = $xmlConfiguration->phpunit()->stopOnError(); + } + if ($cliConfiguration->hasStopOnFailure()) { + $stopOnFailure = $cliConfiguration->stopOnFailure(); + } else { + $stopOnFailure = $xmlConfiguration->phpunit()->stopOnFailure(); + } + if ($cliConfiguration->hasStopOnIncomplete()) { + $stopOnIncomplete = $cliConfiguration->stopOnIncomplete(); + } else { + $stopOnIncomplete = $xmlConfiguration->phpunit()->stopOnIncomplete(); + } + if ($cliConfiguration->hasStopOnNotice()) { + $stopOnNotice = $cliConfiguration->stopOnNotice(); + } else { + $stopOnNotice = $xmlConfiguration->phpunit()->stopOnNotice(); + } + if ($cliConfiguration->hasStopOnRisky()) { + $stopOnRisky = $cliConfiguration->stopOnRisky(); + } else { + $stopOnRisky = $xmlConfiguration->phpunit()->stopOnRisky(); + } + if ($cliConfiguration->hasStopOnSkipped()) { + $stopOnSkipped = $cliConfiguration->stopOnSkipped(); + } else { + $stopOnSkipped = $xmlConfiguration->phpunit()->stopOnSkipped(); + } + if ($cliConfiguration->hasStopOnWarning()) { + $stopOnWarning = $cliConfiguration->stopOnWarning(); + } else { + $stopOnWarning = $xmlConfiguration->phpunit()->stopOnWarning(); + } if ($cliConfiguration->hasStderr() && $cliConfiguration->stderr()) { $outputToStandardErrorStream = \true; } else { $outputToStandardErrorStream = $xmlConfiguration->phpunit()->stderr(); } - $maxNumberOfColumns = (new Console())->getNumberOfColumns(); if ($cliConfiguration->hasColumns()) { $columns = $cliConfiguration->columns(); } else { $columns = $xmlConfiguration->phpunit()->columns(); } if ($columns === 'max') { - $columns = $maxNumberOfColumns; + $columns = (new Console())->getNumberOfColumns(); } if ($columns < 16) { $columns = 16; EventFacade::emitter()->testRunnerTriggeredWarning('Less than 16 columns requested, number of columns set to 16'); } - if ($columns > $maxNumberOfColumns) { - $columns = $maxNumberOfColumns; - } assert(is_int($columns)); $noExtensions = \false; if ($cliConfiguration->hasNoExtensions() && $cliConfiguration->noExtensions()) { @@ -76406,41 +83599,6 @@ final class Merger } else { $processIsolation = $xmlConfiguration->phpunit()->processIsolation(); } - if ($cliConfiguration->hasStopOnDefect()) { - $stopOnDefect = $cliConfiguration->stopOnDefect(); - } else { - $stopOnDefect = $xmlConfiguration->phpunit()->stopOnDefect(); - } - if ($cliConfiguration->hasStopOnError()) { - $stopOnError = $cliConfiguration->stopOnError(); - } else { - $stopOnError = $xmlConfiguration->phpunit()->stopOnError(); - } - if ($cliConfiguration->hasStopOnFailure()) { - $stopOnFailure = $cliConfiguration->stopOnFailure(); - } else { - $stopOnFailure = $xmlConfiguration->phpunit()->stopOnFailure(); - } - if ($cliConfiguration->hasStopOnWarning()) { - $stopOnWarning = $cliConfiguration->stopOnWarning(); - } else { - $stopOnWarning = $xmlConfiguration->phpunit()->stopOnWarning(); - } - if ($cliConfiguration->hasStopOnIncomplete()) { - $stopOnIncomplete = $cliConfiguration->stopOnIncomplete(); - } else { - $stopOnIncomplete = $xmlConfiguration->phpunit()->stopOnIncomplete(); - } - if ($cliConfiguration->hasStopOnRisky()) { - $stopOnRisky = $cliConfiguration->stopOnRisky(); - } else { - $stopOnRisky = $xmlConfiguration->phpunit()->stopOnRisky(); - } - if ($cliConfiguration->hasStopOnSkipped()) { - $stopOnSkipped = $cliConfiguration->stopOnSkipped(); - } else { - $stopOnSkipped = $xmlConfiguration->phpunit()->stopOnSkipped(); - } if ($cliConfiguration->hasEnforceTimeLimit()) { $enforceTimeLimit = $cliConfiguration->enforceTimeLimit(); } else { @@ -76625,7 +83783,7 @@ final class Merger } if ($xmlConfiguration->wasLoadedFromFile() && $xmlConfiguration->hasValidationErrors()) { if ((new SchemaDetector())->detect($xmlConfiguration->filename())->detected()) { - EventFacade::emitter()->testRunnerTriggeredWarning('Your XML configuration validates against a deprecated schema. Migrate your XML configuration using "--migrate-configuration"!'); + EventFacade::emitter()->testRunnerTriggeredDeprecation('Your XML configuration validates against a deprecated schema. Migrate your XML configuration using "--migrate-configuration"!'); } else { EventFacade::emitter()->testRunnerTriggeredWarning("Test results may not be as expected because the XML configuration file did not pass validation:\n" . $xmlConfiguration->validationErrors()); } @@ -76663,16 +83821,41 @@ final class Merger if ($cliConfiguration->hasTestSuffixes()) { $testSuffixes = $cliConfiguration->testSuffixes(); } - $coverageIncludeDirectories = []; + $sourceIncludeDirectories = []; if ($cliConfiguration->hasCoverageFilter()) { foreach ($cliConfiguration->coverageFilter() as $directory) { - $coverageIncludeDirectories[] = new \PHPUnit\TextUI\Configuration\FilterDirectory($directory, '', '.php'); + $sourceIncludeDirectories[] = new \PHPUnit\TextUI\Configuration\FilterDirectory($directory, '', '.php'); + } + } + if ($xmlConfiguration->codeCoverage()->hasNonEmptyListOfFilesToBeIncludedInCodeCoverageReport()) { + foreach ($xmlConfiguration->codeCoverage()->directories() as $directory) { + $sourceIncludeDirectories[] = $directory; + } + $sourceIncludeFiles = $xmlConfiguration->codeCoverage()->files(); + $sourceExcludeDirectories = $xmlConfiguration->codeCoverage()->excludeDirectories(); + $sourceExcludeFiles = $xmlConfiguration->codeCoverage()->excludeFiles(); + } else { + foreach ($xmlConfiguration->source()->includeDirectories() as $directory) { + $sourceIncludeDirectories[] = $directory; } + $sourceIncludeFiles = $xmlConfiguration->source()->includeFiles(); + $sourceExcludeDirectories = $xmlConfiguration->source()->excludeDirectories(); + $sourceExcludeFiles = $xmlConfiguration->source()->excludeFiles(); } - foreach ($xmlConfiguration->codeCoverage()->directories() as $directory) { - $coverageIncludeDirectories[] = $directory; + $useBaseline = null; + $generateBaseline = null; + if (!$cliConfiguration->hasGenerateBaseline()) { + if ($cliConfiguration->hasUseBaseline()) { + $useBaseline = $cliConfiguration->useBaseline(); + } elseif ($xmlConfiguration->source()->hasBaseline()) { + $useBaseline = $xmlConfiguration->source()->baseline(); + } + } else { + $generateBaseline = $cliConfiguration->generateBaseline(); } - return new \PHPUnit\TextUI\Configuration\Configuration($cliArgument, $configurationFile, $bootstrap, $cacheResult, $cacheDirectory, $coverageCacheDirectory, \PHPUnit\TextUI\Configuration\FilterDirectoryCollection::fromArray($coverageIncludeDirectories), $xmlConfiguration->codeCoverage()->files(), $xmlConfiguration->codeCoverage()->excludeDirectories(), $xmlConfiguration->codeCoverage()->excludeFiles(), $testResultCacheFile, $coverageClover, $coverageCobertura, $coverageCrap4j, $coverageCrap4jThreshold, $coverageHtml, $coverageHtmlLowUpperBound, $coverageHtmlHighLowerBound, $coverageHtmlColorSuccessLow, $coverageHtmlColorSuccessMedium, $coverageHtmlColorSuccessHigh, $coverageHtmlColorWarning, $coverageHtmlColorDanger, $coverageHtmlCustomCssFile, $coveragePhp, $coverageText, $coverageTextShowUncoveredFiles, $coverageTextShowOnlySummary, $coverageXml, $pathCoverage, $xmlConfiguration->codeCoverage()->ignoreDeprecatedCodeUnits(), $disableCodeCoverageIgnore, $failOnEmptyTestSuite, $failOnIncomplete, $failOnRisky, $failOnSkipped, $failOnWarning, $outputToStandardErrorStream, $columns, $noExtensions, $pharExtensionDirectory, $extensionBootstrappers, $backupGlobals, $backupStaticProperties, $beStrictAboutChangesToGlobalState, $colors, $processIsolation, $stopOnDefect, $stopOnError, $stopOnFailure, $stopOnWarning, $stopOnIncomplete, $stopOnRisky, $stopOnSkipped, $enforceTimeLimit, $defaultTimeLimit, $timeoutForSmallTests, $timeoutForMediumTests, $timeoutForLargeTests, $reportUselessTests, $strictCoverage, $disallowTestOutput, $displayDetailsOnIncompleteTests, $displayDetailsOnSkippedTests, $displayDetailsOnTestsThatTriggerDeprecations, $displayDetailsOnTestsThatTriggerErrors, $displayDetailsOnTestsThatTriggerNotices, $displayDetailsOnTestsThatTriggerWarnings, $reverseDefectList, $requireCoverageMetadata, $registerMockObjectsFromTestArgumentsRecursively, $noProgress, $noResults, $noOutput, $executionOrder, $executionOrderDefects, $resolveDependencies, $logfileTeamcity, $logfileJunit, $logfileTestdoxHtml, $logfileTestdoxText, $logEventsText, $logEventsVerboseText, $teamCityOutput, $testDoxOutput, $testsCovering, $testsUsing, $filter, $groups, $excludeGroups, $randomOrderSeed, $includeUncoveredFiles, $xmlConfiguration->testSuite(), $includeTestSuite, $excludeTestSuite, $xmlConfiguration->phpunit()->hasDefaultTestSuite() ? $xmlConfiguration->phpunit()->defaultTestSuite() : null, $testSuffixes, new \PHPUnit\TextUI\Configuration\Php(\PHPUnit\TextUI\Configuration\DirectoryCollection::fromArray($includePaths), \PHPUnit\TextUI\Configuration\IniSettingCollection::fromArray($iniSettings), $xmlConfiguration->php()->constants(), $xmlConfiguration->php()->globalVariables(), $xmlConfiguration->php()->envVariables(), $xmlConfiguration->php()->postVariables(), $xmlConfiguration->php()->getVariables(), $xmlConfiguration->php()->cookieVariables(), $xmlConfiguration->php()->serverVariables(), $xmlConfiguration->php()->filesVariables(), $xmlConfiguration->php()->requestVariables())); + assert($useBaseline !== ''); + assert($generateBaseline !== ''); + return new \PHPUnit\TextUI\Configuration\Configuration($cliConfiguration->arguments(), $configurationFile, $bootstrap, $cacheResult, $cacheDirectory, $coverageCacheDirectory, new \PHPUnit\TextUI\Configuration\Source($useBaseline, $cliConfiguration->ignoreBaseline(), \PHPUnit\TextUI\Configuration\FilterDirectoryCollection::fromArray($sourceIncludeDirectories), $sourceIncludeFiles, $sourceExcludeDirectories, $sourceExcludeFiles, $xmlConfiguration->source()->restrictDeprecations(), $xmlConfiguration->source()->restrictNotices(), $xmlConfiguration->source()->restrictWarnings(), $xmlConfiguration->source()->ignoreSuppressionOfDeprecations(), $xmlConfiguration->source()->ignoreSuppressionOfPhpDeprecations(), $xmlConfiguration->source()->ignoreSuppressionOfErrors(), $xmlConfiguration->source()->ignoreSuppressionOfNotices(), $xmlConfiguration->source()->ignoreSuppressionOfPhpNotices(), $xmlConfiguration->source()->ignoreSuppressionOfWarnings(), $xmlConfiguration->source()->ignoreSuppressionOfPhpWarnings()), $testResultCacheFile, $coverageClover, $coverageCobertura, $coverageCrap4j, $coverageCrap4jThreshold, $coverageHtml, $coverageHtmlLowUpperBound, $coverageHtmlHighLowerBound, $coverageHtmlColorSuccessLow, $coverageHtmlColorSuccessMedium, $coverageHtmlColorSuccessHigh, $coverageHtmlColorWarning, $coverageHtmlColorDanger, $coverageHtmlCustomCssFile, $coveragePhp, $coverageText, $coverageTextShowUncoveredFiles, $coverageTextShowOnlySummary, $coverageXml, $pathCoverage, $xmlConfiguration->codeCoverage()->ignoreDeprecatedCodeUnits(), $disableCodeCoverageIgnore, $failOnDeprecation, $failOnEmptyTestSuite, $failOnIncomplete, $failOnNotice, $failOnRisky, $failOnSkipped, $failOnWarning, $stopOnDefect, $stopOnDeprecation, $stopOnError, $stopOnFailure, $stopOnIncomplete, $stopOnNotice, $stopOnRisky, $stopOnSkipped, $stopOnWarning, $outputToStandardErrorStream, $columns, $noExtensions, $pharExtensionDirectory, $extensionBootstrappers, $backupGlobals, $backupStaticProperties, $beStrictAboutChangesToGlobalState, $colors, $processIsolation, $enforceTimeLimit, $defaultTimeLimit, $timeoutForSmallTests, $timeoutForMediumTests, $timeoutForLargeTests, $reportUselessTests, $strictCoverage, $disallowTestOutput, $displayDetailsOnIncompleteTests, $displayDetailsOnSkippedTests, $displayDetailsOnTestsThatTriggerDeprecations, $displayDetailsOnTestsThatTriggerErrors, $displayDetailsOnTestsThatTriggerNotices, $displayDetailsOnTestsThatTriggerWarnings, $reverseDefectList, $requireCoverageMetadata, $registerMockObjectsFromTestArgumentsRecursively, $noProgress, $noResults, $noOutput, $executionOrder, $executionOrderDefects, $resolveDependencies, $logfileTeamcity, $logfileJunit, $logfileTestdoxHtml, $logfileTestdoxText, $logEventsText, $logEventsVerboseText, $teamCityOutput, $testDoxOutput, $testsCovering, $testsUsing, $filter, $groups, $excludeGroups, $randomOrderSeed, $includeUncoveredFiles, $xmlConfiguration->testSuite(), $includeTestSuite, $excludeTestSuite, $xmlConfiguration->phpunit()->hasDefaultTestSuite() ? $xmlConfiguration->phpunit()->defaultTestSuite() : null, $testSuffixes, new \PHPUnit\TextUI\Configuration\Php(\PHPUnit\TextUI\Configuration\DirectoryCollection::fromArray($includePaths), \PHPUnit\TextUI\Configuration\IniSettingCollection::fromArray($iniSettings), $xmlConfiguration->php()->constants(), $xmlConfiguration->php()->globalVariables(), $xmlConfiguration->php()->envVariables(), $xmlConfiguration->php()->postVariables(), $xmlConfiguration->php()->getVariables(), $xmlConfiguration->php()->cookieVariables(), $xmlConfiguration->php()->serverVariables(), $xmlConfiguration->php()->filesVariables(), $xmlConfiguration->php()->requestVariables()), $xmlConfiguration->phpunit()->controlGarbageCollector(), $xmlConfiguration->phpunit()->numberOfTestsBeforeGarbageCollection(), $generateBaseline, $cliConfiguration->debug()); } } [\PHPUnit\TextUI\Configuration\Configuration::class, \PHPUnit\TextUI\Configuration\Php::class, \PHPUnit\TextUI\Configuration\ConstantCollection::class, \PHPUnit\TextUI\Configuration\Constant::class, \PHPUnit\TextUI\Configuration\IniSettingCollection::class, \PHPUnit\TextUI\Configuration\IniSetting::class, \PHPUnit\TextUI\Configuration\VariableCollection::class, \PHPUnit\TextUI\Configuration\Variable::class, \PHPUnit\TextUI\Configuration\DirectoryCollection::class, \PHPUnit\TextUI\Configuration\Directory::class, \PHPUnit\TextUI\Configuration\FileCollection::class, \PHPUnit\TextUI\Configuration\File::class, \PHPUnit\TextUI\Configuration\FilterDirectoryCollection::class, \PHPUnit\TextUI\Configuration\FilterDirectory::class, \PHPUnit\TextUI\Configuration\TestDirectoryCollection::class, \PHPUnit\TextUI\Configuration\TestDirectory::class, \PHPUnit\TextUI\Configuration\TestFileCollection::class, \PHPUnit\TextUI\Configuration\TestFile::class, \PHPUnit\TextUI\Configuration\TestSuiteCollection::class, \PHPUnit\TextUI\Configuration\TestSuite::class, VersionComparisonOperator::class]]); + self::$instance = unserialize(file_get_contents($path), ['allowed_classes' => [\PHPUnit\TextUI\Configuration\Configuration::class, \PHPUnit\TextUI\Configuration\Php::class, \PHPUnit\TextUI\Configuration\ConstantCollection::class, \PHPUnit\TextUI\Configuration\Constant::class, \PHPUnit\TextUI\Configuration\IniSettingCollection::class, \PHPUnit\TextUI\Configuration\IniSetting::class, \PHPUnit\TextUI\Configuration\VariableCollection::class, \PHPUnit\TextUI\Configuration\Variable::class, \PHPUnit\TextUI\Configuration\DirectoryCollection::class, \PHPUnit\TextUI\Configuration\Directory::class, \PHPUnit\TextUI\Configuration\FileCollection::class, \PHPUnit\TextUI\Configuration\File::class, \PHPUnit\TextUI\Configuration\FilterDirectoryCollection::class, \PHPUnit\TextUI\Configuration\FilterDirectory::class, \PHPUnit\TextUI\Configuration\TestDirectoryCollection::class, \PHPUnit\TextUI\Configuration\TestDirectory::class, \PHPUnit\TextUI\Configuration\TestFileCollection::class, \PHPUnit\TextUI\Configuration\TestFile::class, \PHPUnit\TextUI\Configuration\TestSuiteCollection::class, \PHPUnit\TextUI\Configuration\TestSuite::class, VersionComparisonOperator::class, \PHPUnit\TextUI\Configuration\Source::class]]); } public static function get() : \PHPUnit\TextUI\Configuration\Configuration { @@ -76856,6 +84039,111 @@ declare (strict_types=1); */ namespace PHPUnit\TextUI\Configuration; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class SourceFilter +{ + public function includes(\PHPUnit\TextUI\Configuration\Source $source, string $path) : bool + { + $files = (new \PHPUnit\TextUI\Configuration\SourceMapper())->map($source); + return isset($files[$path]); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI\Configuration; + +use function realpath; +use PHPUnit\SebastianBergmann\FileIterator\Facade as FileIteratorFacade; +use SplObjectStorage; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class SourceMapper +{ + /** + * @psalm-var SplObjectStorage> + */ + private static ?SplObjectStorage $files = null; + /** + * @psalm-return array + */ + public function map(\PHPUnit\TextUI\Configuration\Source $source) : array + { + if (self::$files === null) { + self::$files = new SplObjectStorage(); + } + if (isset(self::$files[$source])) { + return self::$files[$source]; + } + $files = []; + foreach ($source->includeDirectories() as $directory) { + foreach ((new FileIteratorFacade())->getFilesAsArray($directory->path(), $directory->suffix(), $directory->prefix()) as $file) { + $file = realpath($file); + if (!$file) { + continue; + } + $files[$file] = \true; + } + } + foreach ($source->includeFiles() as $file) { + $file = realpath($file->path()); + if (!$file) { + continue; + } + $files[$file] = \true; + } + foreach ($source->excludeDirectories() as $directory) { + foreach ((new FileIteratorFacade())->getFilesAsArray($directory->path(), $directory->suffix(), $directory->prefix()) as $file) { + $file = realpath($file); + if (!$file) { + continue; + } + if (!isset($files[$file])) { + continue; + } + unset($files[$file]); + } + } + foreach ($source->excludeFiles() as $file) { + $file = realpath($file->path()); + if (!$file) { + continue; + } + if (!isset($files[$file])) { + continue; + } + unset($files[$file]); + } + self::$files[$source] = $files; + return $files; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI\Configuration; + +use function assert; +use function count; use function is_dir; use function is_file; use function realpath; @@ -76882,34 +84170,46 @@ final class TestSuiteBuilder */ public function build(\PHPUnit\TextUI\Configuration\Configuration $configuration) : TestSuite { - if ($configuration->hasCliArgument()) { - $argument = realpath($configuration->cliArgument()); - if (!$argument) { - throw new TestFileNotFoundException($configuration->cliArgument()); + if ($configuration->hasCliArguments()) { + $arguments = []; + foreach ($configuration->cliArguments() as $cliArgument) { + $argument = realpath($cliArgument); + if (!$argument) { + throw new TestFileNotFoundException($cliArgument); + } + $arguments[] = $argument; + } + if (count($arguments) === 1) { + $testSuite = $this->testSuiteFromPath($arguments[0], $configuration->testSuffixes()); + } else { + $testSuite = $this->testSuiteFromPathList($arguments, $configuration->testSuffixes()); } - $testSuite = $this->testSuiteFromPath($argument, $configuration->testSuffixes()); } if (!isset($testSuite)) { - $testSuite = (new TestSuiteMapper())->map($configuration->testSuite(), $configuration->includeTestSuite(), $configuration->excludeTestSuite()); + $xmlConfigurationFile = $configuration->hasConfigurationFile() ? $configuration->configurationFile() : 'Root Test Suite'; + assert(!empty($xmlConfigurationFile)); + $testSuite = (new TestSuiteMapper())->map($xmlConfigurationFile, $configuration->testSuite(), $configuration->includeTestSuite(), $configuration->excludeTestSuite()); } EventFacade::emitter()->testSuiteLoaded(\PHPUnit\Event\TestSuite\TestSuiteBuilder::from($testSuite)); return $testSuite; } /** - * @psalm-param list $suffixes + * @psalm-param non-empty-string $path + * @psalm-param list $suffixes + * @psalm-param ?TestSuite $suite * * @throws \PHPUnit\Framework\Exception */ - private function testSuiteFromPath(string $path, array $suffixes) : TestSuite + private function testSuiteFromPath(string $path, array $suffixes, ?TestSuite $suite = null) : TestSuite { if (is_dir($path)) { $files = (new FileIteratorFacade())->getFilesAsArray($path, $suffixes); - $suite = TestSuite::empty($path); + $suite = $suite ?: TestSuite::empty('CLI Arguments'); $suite->addTestFiles($files); return $suite; } if (is_file($path) && str_ends_with($path, '.phpt')) { - $suite = TestSuite::empty(); + $suite = $suite ?: TestSuite::empty($path); $suite->addTestFile($path); return $suite; } @@ -76919,7 +84219,25 @@ final class TestSuiteBuilder print $e->getMessage() . \PHP_EOL; exit(1); } - return TestSuite::fromClassReflector($testClass); + if (!$suite) { + return TestSuite::fromClassReflector($testClass); + } + $suite->addTestSuite($testClass); + return $suite; + } + /** + * @psalm-param list $paths + * @psalm-param list $suffixes + * + * @throws \PHPUnit\Framework\Exception + */ + private function testSuiteFromPathList(array $paths, array $suffixes) : TestSuite + { + $suite = TestSuite::empty('CLI Arguments'); + foreach ($paths as $path) { + $this->testSuiteFromPath($path, $suffixes, $suite); + } + return $suite; } } name; } - public function value() : mixed + public function value() : bool|string { return $this->value; } @@ -77400,11 +84718,20 @@ namespace PHPUnit\TextUI\Configuration; */ final class File { + /** + * @psalm-var non-empty-string + */ private readonly string $path; + /** + * @psalm-param non-empty-string $path + */ public function __construct(string $path) { $this->path = $path; } + /** + * @psalm-return non-empty-string + */ public function path() : string { return $this->path; @@ -77548,15 +84875,24 @@ namespace PHPUnit\TextUI\Configuration; */ final class FilterDirectory { + /** + * @psalm-var non-empty-string + */ private readonly string $path; private readonly string $prefix; private readonly string $suffix; + /** + * @psalm-param non-empty-string $path + */ public function __construct(string $path, string $prefix, string $suffix) { $this->path = $path; $this->prefix = $prefix; $this->suffix = $suffix; } + /** + * @psalm-return non-empty-string + */ public function path() : string { return $this->path; @@ -78094,6 +85430,154 @@ declare (strict_types=1); */ namespace PHPUnit\TextUI\Configuration; +/** + * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit + * + * @psalm-immutable + */ +final class Source +{ + /** + * @psalm-var non-empty-string + */ + private readonly ?string $baseline; + private readonly bool $ignoreBaseline; + private readonly \PHPUnit\TextUI\Configuration\FilterDirectoryCollection $includeDirectories; + private readonly \PHPUnit\TextUI\Configuration\FileCollection $includeFiles; + private readonly \PHPUnit\TextUI\Configuration\FilterDirectoryCollection $excludeDirectories; + private readonly \PHPUnit\TextUI\Configuration\FileCollection $excludeFiles; + private readonly bool $restrictDeprecations; + private readonly bool $restrictNotices; + private readonly bool $restrictWarnings; + private readonly bool $ignoreSuppressionOfDeprecations; + private readonly bool $ignoreSuppressionOfPhpDeprecations; + private readonly bool $ignoreSuppressionOfErrors; + private readonly bool $ignoreSuppressionOfNotices; + private readonly bool $ignoreSuppressionOfPhpNotices; + private readonly bool $ignoreSuppressionOfWarnings; + private readonly bool $ignoreSuppressionOfPhpWarnings; + /** + * @psalm-param non-empty-string $baseline + */ + public function __construct(?string $baseline, bool $ignoreBaseline, \PHPUnit\TextUI\Configuration\FilterDirectoryCollection $includeDirectories, \PHPUnit\TextUI\Configuration\FileCollection $includeFiles, \PHPUnit\TextUI\Configuration\FilterDirectoryCollection $excludeDirectories, \PHPUnit\TextUI\Configuration\FileCollection $excludeFiles, bool $restrictDeprecations, bool $restrictNotices, bool $restrictWarnings, bool $ignoreSuppressionOfDeprecations, bool $ignoreSuppressionOfPhpDeprecations, bool $ignoreSuppressionOfErrors, bool $ignoreSuppressionOfNotices, bool $ignoreSuppressionOfPhpNotices, bool $ignoreSuppressionOfWarnings, bool $ignoreSuppressionOfPhpWarnings) + { + $this->baseline = $baseline; + $this->ignoreBaseline = $ignoreBaseline; + $this->includeDirectories = $includeDirectories; + $this->includeFiles = $includeFiles; + $this->excludeDirectories = $excludeDirectories; + $this->excludeFiles = $excludeFiles; + $this->restrictDeprecations = $restrictDeprecations; + $this->restrictNotices = $restrictNotices; + $this->restrictWarnings = $restrictWarnings; + $this->ignoreSuppressionOfDeprecations = $ignoreSuppressionOfDeprecations; + $this->ignoreSuppressionOfPhpDeprecations = $ignoreSuppressionOfPhpDeprecations; + $this->ignoreSuppressionOfErrors = $ignoreSuppressionOfErrors; + $this->ignoreSuppressionOfNotices = $ignoreSuppressionOfNotices; + $this->ignoreSuppressionOfPhpNotices = $ignoreSuppressionOfPhpNotices; + $this->ignoreSuppressionOfWarnings = $ignoreSuppressionOfWarnings; + $this->ignoreSuppressionOfPhpWarnings = $ignoreSuppressionOfPhpWarnings; + } + /** + * @psalm-assert-if-true !null $this->baseline + */ + public function useBaseline() : bool + { + return $this->hasBaseline() && !$this->ignoreBaseline; + } + /** + * @psalm-assert-if-true !null $this->baseline + */ + public function hasBaseline() : bool + { + return $this->baseline !== null; + } + /** + * @psalm-return non-empty-string + * + * @throws NoBaselineException + */ + public function baseline() : string + { + if (!$this->hasBaseline()) { + throw new \PHPUnit\TextUI\Configuration\NoBaselineException(); + } + return $this->baseline; + } + public function includeDirectories() : \PHPUnit\TextUI\Configuration\FilterDirectoryCollection + { + return $this->includeDirectories; + } + public function includeFiles() : \PHPUnit\TextUI\Configuration\FileCollection + { + return $this->includeFiles; + } + public function excludeDirectories() : \PHPUnit\TextUI\Configuration\FilterDirectoryCollection + { + return $this->excludeDirectories; + } + public function excludeFiles() : \PHPUnit\TextUI\Configuration\FileCollection + { + return $this->excludeFiles; + } + public function notEmpty() : bool + { + return $this->includeDirectories->notEmpty() || $this->includeFiles->notEmpty(); + } + public function restrictDeprecations() : bool + { + return $this->restrictDeprecations; + } + public function restrictNotices() : bool + { + return $this->restrictNotices; + } + public function restrictWarnings() : bool + { + return $this->restrictWarnings; + } + public function ignoreSuppressionOfDeprecations() : bool + { + return $this->ignoreSuppressionOfDeprecations; + } + public function ignoreSuppressionOfPhpDeprecations() : bool + { + return $this->ignoreSuppressionOfPhpDeprecations; + } + public function ignoreSuppressionOfErrors() : bool + { + return $this->ignoreSuppressionOfErrors; + } + public function ignoreSuppressionOfNotices() : bool + { + return $this->ignoreSuppressionOfNotices; + } + public function ignoreSuppressionOfPhpNotices() : bool + { + return $this->ignoreSuppressionOfPhpNotices; + } + public function ignoreSuppressionOfWarnings() : bool + { + return $this->ignoreSuppressionOfWarnings; + } + public function ignoreSuppressionOfPhpWarnings() : bool + { + return $this->ignoreSuppressionOfPhpWarnings; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI\Configuration; + use PHPUnit\Util\VersionComparisonOperator; /** * @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit @@ -78102,11 +85586,17 @@ use PHPUnit\Util\VersionComparisonOperator; */ final class TestDirectory { + /** + * @psalm-var non-empty-string + */ private readonly string $path; private readonly string $prefix; private readonly string $suffix; private readonly string $phpVersion; private readonly VersionComparisonOperator $phpVersionOperator; + /** + * @psalm-param non-empty-string $path + */ public function __construct(string $path, string $prefix, string $suffix, string $phpVersion, VersionComparisonOperator $phpVersionOperator) { $this->path = $path; @@ -78115,6 +85605,9 @@ final class TestDirectory $this->phpVersion = $phpVersion; $this->phpVersionOperator = $phpVersionOperator; } + /** + * @psalm-return non-empty-string + */ public function path() : string { return $this->path; @@ -78435,10 +85928,16 @@ namespace PHPUnit\TextUI\Configuration; */ final class TestSuite { + /** + * @psalm-var non-empty-string + */ private readonly string $name; private readonly \PHPUnit\TextUI\Configuration\TestDirectoryCollection $directories; private readonly \PHPUnit\TextUI\Configuration\TestFileCollection $files; private readonly \PHPUnit\TextUI\Configuration\FileCollection $exclude; + /** + * @psalm-param non-empty-string $name + */ public function __construct(string $name, \PHPUnit\TextUI\Configuration\TestDirectoryCollection $directories, \PHPUnit\TextUI\Configuration\TestFileCollection $files, \PHPUnit\TextUI\Configuration\FileCollection $exclude) { $this->name = $name; @@ -78446,6 +85945,9 @@ final class TestSuite $this->files = $files; $this->exclude = $exclude; } + /** + * @psalm-return non-empty-string + */ public function name() : string { return $this->name; @@ -79293,6 +86795,7 @@ namespace PHPUnit\TextUI\XmlConfiguration; use PHPUnit\TextUI\Configuration\ExtensionBootstrapCollection; use PHPUnit\TextUI\Configuration\Php; +use PHPUnit\TextUI\Configuration\Source; use PHPUnit\TextUI\Configuration\TestSuiteCollection; use PHPUnit\TextUI\XmlConfiguration\CodeCoverage\CodeCoverage; use PHPUnit\TextUI\XmlConfiguration\Logging\Logging; @@ -79304,15 +86807,17 @@ use PHPUnit\TextUI\XmlConfiguration\Logging\Logging; abstract class Configuration { private readonly ExtensionBootstrapCollection $extensions; + private readonly Source $source; private readonly CodeCoverage $codeCoverage; private readonly \PHPUnit\TextUI\XmlConfiguration\Groups $groups; private readonly Logging $logging; private readonly Php $php; private readonly \PHPUnit\TextUI\XmlConfiguration\PHPUnit $phpunit; private readonly TestSuiteCollection $testSuite; - public function __construct(ExtensionBootstrapCollection $extensions, CodeCoverage $codeCoverage, \PHPUnit\TextUI\XmlConfiguration\Groups $groups, Logging $logging, Php $php, \PHPUnit\TextUI\XmlConfiguration\PHPUnit $phpunit, TestSuiteCollection $testSuite) + public function __construct(ExtensionBootstrapCollection $extensions, Source $source, CodeCoverage $codeCoverage, \PHPUnit\TextUI\XmlConfiguration\Groups $groups, Logging $logging, Php $php, \PHPUnit\TextUI\XmlConfiguration\PHPUnit $phpunit, TestSuiteCollection $testSuite) { $this->extensions = $extensions; + $this->source = $source; $this->codeCoverage = $codeCoverage; $this->groups = $groups; $this->logging = $logging; @@ -79324,6 +86829,10 @@ abstract class Configuration { return $this->extensions; } + public function source() : Source + { + return $this->source; + } public function codeCoverage() : CodeCoverage { return $this->codeCoverage; @@ -79385,6 +86894,7 @@ use PHPUnit\TextUI\Configuration\FilterDirectoryCollection as CodeCoverageFilter use PHPUnit\TextUI\Configuration\GroupCollection; use PHPUnit\TextUI\Configuration\IniSettingCollection; use PHPUnit\TextUI\Configuration\Php; +use PHPUnit\TextUI\Configuration\Source; use PHPUnit\TextUI\Configuration\TestSuiteCollection; use PHPUnit\TextUI\Configuration\VariableCollection; use PHPUnit\TextUI\XmlConfiguration\CodeCoverage\CodeCoverage; @@ -79398,7 +86908,7 @@ final class DefaultConfiguration extends \PHPUnit\TextUI\XmlConfiguration\Config { public static function create() : self { - return new self(ExtensionBootstrapCollection::fromArray([]), new CodeCoverage(null, CodeCoverageFilterDirectoryCollection::fromArray([]), FileCollection::fromArray([]), CodeCoverageFilterDirectoryCollection::fromArray([]), FileCollection::fromArray([]), \false, \true, \false, \false, null, null, null, null, null, null, null), new \PHPUnit\TextUI\XmlConfiguration\Groups(GroupCollection::fromArray([]), GroupCollection::fromArray([])), new Logging(null, null, null, null), new Php(DirectoryCollection::fromArray([]), IniSettingCollection::fromArray([]), ConstantCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([])), new \PHPUnit\TextUI\XmlConfiguration\PHPUnit(null, \true, null, 80, \PHPUnit\TextUI\Configuration\Configuration::COLOR_DEFAULT, \false, \false, \false, \false, \false, \false, \false, \false, \false, null, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, null, \false, \false, \true, \false, \false, 1, 1, 10, 60, null, TestSuiteSorter::ORDER_DEFAULT, \true, \false, \false, \false, \false, \false), TestSuiteCollection::fromArray([])); + return new self(ExtensionBootstrapCollection::fromArray([]), new Source(null, \false, CodeCoverageFilterDirectoryCollection::fromArray([]), FileCollection::fromArray([]), CodeCoverageFilterDirectoryCollection::fromArray([]), FileCollection::fromArray([]), \false, \false, \false, \false, \false, \false, \false, \false, \false, \false), new CodeCoverage(null, CodeCoverageFilterDirectoryCollection::fromArray([]), FileCollection::fromArray([]), CodeCoverageFilterDirectoryCollection::fromArray([]), FileCollection::fromArray([]), \false, \true, \false, \false, null, null, null, null, null, null, null), new \PHPUnit\TextUI\XmlConfiguration\Groups(GroupCollection::fromArray([]), GroupCollection::fromArray([])), new Logging(null, null, null, null), new Php(DirectoryCollection::fromArray([]), IniSettingCollection::fromArray([]), ConstantCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([]), VariableCollection::fromArray([])), new \PHPUnit\TextUI\XmlConfiguration\PHPUnit(null, \true, null, 80, \PHPUnit\TextUI\Configuration\Configuration::COLOR_DEFAULT, \false, \false, \false, \false, \false, \false, \false, \false, \false, null, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, null, \false, \false, \true, \false, \false, 1, 1, 10, 60, null, TestSuiteSorter::ORDER_DEFAULT, \true, \false, \false, \false, \false, \false, \false, 100), TestSuiteCollection::fromArray([])); } public function isDefault() : bool { @@ -79465,11 +86975,11 @@ final class Generator - + - {src_directory} + {src_directory} - + EOT; @@ -79538,10 +87048,10 @@ namespace PHPUnit\TextUI\XmlConfiguration; use PHPUnit\TextUI\Configuration\ExtensionBootstrapCollection; use PHPUnit\TextUI\Configuration\Php; +use PHPUnit\TextUI\Configuration\Source; use PHPUnit\TextUI\Configuration\TestSuiteCollection; use PHPUnit\TextUI\XmlConfiguration\CodeCoverage\CodeCoverage; use PHPUnit\TextUI\XmlConfiguration\Logging\Logging; -use PHPUnit\Util\Xml\ValidationResult; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit * @@ -79550,12 +87060,12 @@ use PHPUnit\Util\Xml\ValidationResult; final class LoadedFromFileConfiguration extends \PHPUnit\TextUI\XmlConfiguration\Configuration { private readonly string $filename; - private readonly ValidationResult $validationResult; - public function __construct(string $filename, ValidationResult $validationResult, ExtensionBootstrapCollection $extensions, CodeCoverage $codeCoverage, \PHPUnit\TextUI\XmlConfiguration\Groups $groups, Logging $logging, Php $php, \PHPUnit\TextUI\XmlConfiguration\PHPUnit $phpunit, TestSuiteCollection $testSuite) + private readonly \PHPUnit\TextUI\XmlConfiguration\ValidationResult $validationResult; + public function __construct(string $filename, \PHPUnit\TextUI\XmlConfiguration\ValidationResult $validationResult, ExtensionBootstrapCollection $extensions, Source $source, CodeCoverage $codeCoverage, \PHPUnit\TextUI\XmlConfiguration\Groups $groups, Logging $logging, Php $php, \PHPUnit\TextUI\XmlConfiguration\PHPUnit $phpunit, TestSuiteCollection $testSuite) { $this->filename = $filename; $this->validationResult = $validationResult; - parent::__construct($extensions, $codeCoverage, $groups, $logging, $php, $phpunit, $testSuite); + parent::__construct($extensions, $source, $codeCoverage, $groups, $logging, $php, $phpunit, $testSuite); } public function filename() : string { @@ -79593,18 +87103,18 @@ use function assert; use function defined; use function dirname; use function explode; -use function is_file; use function is_numeric; use function preg_match; +use function realpath; use function str_contains; use function str_starts_with; -use function stream_resolve_include_path; use function strlen; use function strtolower; use function substr; use function trim; use DOMDocument; use DOMElement; +use DOMNode; use DOMXPath; use PHPUnit\Runner\TestSuiteSorter; use PHPUnit\Runner\Version; @@ -79623,6 +87133,7 @@ use PHPUnit\TextUI\Configuration\GroupCollection; use PHPUnit\TextUI\Configuration\IniSetting; use PHPUnit\TextUI\Configuration\IniSettingCollection; use PHPUnit\TextUI\Configuration\Php; +use PHPUnit\TextUI\Configuration\Source; use PHPUnit\TextUI\Configuration\TestDirectory; use PHPUnit\TextUI\Configuration\TestDirectoryCollection; use PHPUnit\TextUI\Configuration\TestFile; @@ -79646,8 +87157,6 @@ use PHPUnit\TextUI\XmlConfiguration\Logging\TestDox\Html as TestDoxHtml; use PHPUnit\TextUI\XmlConfiguration\Logging\TestDox\Text as TestDoxText; use PHPUnit\Util\VersionComparisonOperator; use PHPUnit\Util\Xml\Loader as XmlLoader; -use PHPUnit\Util\Xml\SchemaFinder; -use PHPUnit\Util\Xml\Validator; use PHPUnit\Util\Xml\XmlException; use PHPUnit\SebastianBergmann\CodeCoverage\Report\Html\Colors; use PHPUnit\SebastianBergmann\CodeCoverage\Report\Thresholds; @@ -79662,17 +87171,18 @@ final class Loader public function load(string $filename) : \PHPUnit\TextUI\XmlConfiguration\LoadedFromFileConfiguration { try { - $document = (new XmlLoader())->loadFile($filename, \false, \true, \true); + $document = (new XmlLoader())->loadFile($filename); } catch (XmlException $e) { throw new \PHPUnit\TextUI\XmlConfiguration\Exception($e->getMessage(), $e->getCode(), $e); } $xpath = new DOMXPath($document); try { - $xsdFilename = (new SchemaFinder())->find(Version::series()); - } catch (XmlException $e) { + $xsdFilename = (new \PHPUnit\TextUI\XmlConfiguration\SchemaFinder())->find(Version::series()); + } catch (\PHPUnit\TextUI\XmlConfiguration\CannotFindSchemaException $e) { throw new \PHPUnit\TextUI\XmlConfiguration\Exception($e->getMessage(), $e->getCode(), $e); } - return new \PHPUnit\TextUI\XmlConfiguration\LoadedFromFileConfiguration($filename, (new Validator())->validate($document, $xsdFilename), $this->extensions($xpath), $this->codeCoverage($filename, $xpath), $this->groups($xpath), $this->logging($filename, $xpath), $this->php($filename, $xpath), $this->phpunit($filename, $document), $this->testSuite($filename, $xpath)); + $configurationFileRealpath = realpath($filename); + return new \PHPUnit\TextUI\XmlConfiguration\LoadedFromFileConfiguration($configurationFileRealpath, (new \PHPUnit\TextUI\XmlConfiguration\Validator())->validate($document, $xsdFilename), $this->extensions($xpath), $this->source($configurationFileRealpath, $xpath), $this->codeCoverage($configurationFileRealpath, $xpath), $this->groups($xpath), $this->logging($configurationFileRealpath, $xpath), $this->php($configurationFileRealpath, $xpath), $this->phpunit($configurationFileRealpath, $document), $this->testSuite($configurationFileRealpath, $xpath)); } private function logging(string $filename, DOMXPath $xpath) : Logging { @@ -79712,7 +87222,10 @@ final class Loader } return ExtensionBootstrapCollection::fromArray($extensionBootstrappers); } - private function toAbsolutePath(string $filename, string $path, bool $useIncludePath = \false) : string + /** + * @psalm-return non-empty-string + */ + private function toAbsolutePath(string $filename, string $path) : string { $path = trim($path); if (str_starts_with($path, '/')) { @@ -79726,20 +87239,45 @@ final class Loader // - C:\windows // - C:/windows // - c:/windows - if (defined('PHP_WINDOWS_VERSION_BUILD') && ($path[0] === '\\' || strlen($path) >= 3 && preg_match('#^[A-Z]:[/\\\\]#i', substr($path, 0, 3)))) { + if (defined('PHP_WINDOWS_VERSION_BUILD') && !empty($path) && ($path[0] === '\\' || strlen($path) >= 3 && preg_match('#^[A-Z]:[/\\\\]#i', substr($path, 0, 3)))) { return $path; } if (str_contains($path, '://')) { return $path; } - $file = dirname($filename) . DIRECTORY_SEPARATOR . $path; - if ($useIncludePath && !is_file($file)) { - $includePathFile = stream_resolve_include_path($path); - if ($includePathFile) { - $file = $includePathFile; - } - } - return $file; + return dirname($filename) . DIRECTORY_SEPARATOR . $path; + } + private function source(string $filename, DOMXPath $xpath) : Source + { + $baseline = null; + $restrictDeprecations = \false; + $restrictNotices = \false; + $restrictWarnings = \false; + $ignoreSuppressionOfDeprecations = \false; + $ignoreSuppressionOfPhpDeprecations = \false; + $ignoreSuppressionOfErrors = \false; + $ignoreSuppressionOfNotices = \false; + $ignoreSuppressionOfPhpNotices = \false; + $ignoreSuppressionOfWarnings = \false; + $ignoreSuppressionOfPhpWarnings = \false; + $element = $this->element($xpath, 'source'); + if ($element) { + $baseline = $this->getStringAttribute($element, 'baseline'); + if ($baseline !== null) { + $baseline = $this->toAbsolutePath($filename, $baseline); + } + $restrictDeprecations = $this->getBooleanAttribute($element, 'restrictDeprecations', \false); + $restrictNotices = $this->getBooleanAttribute($element, 'restrictNotices', \false); + $restrictWarnings = $this->getBooleanAttribute($element, 'restrictWarnings', \false); + $ignoreSuppressionOfDeprecations = $this->getBooleanAttribute($element, 'ignoreSuppressionOfDeprecations', \false); + $ignoreSuppressionOfPhpDeprecations = $this->getBooleanAttribute($element, 'ignoreSuppressionOfPhpDeprecations', \false); + $ignoreSuppressionOfErrors = $this->getBooleanAttribute($element, 'ignoreSuppressionOfErrors', \false); + $ignoreSuppressionOfNotices = $this->getBooleanAttribute($element, 'ignoreSuppressionOfNotices', \false); + $ignoreSuppressionOfPhpNotices = $this->getBooleanAttribute($element, 'ignoreSuppressionOfPhpNotices', \false); + $ignoreSuppressionOfWarnings = $this->getBooleanAttribute($element, 'ignoreSuppressionOfWarnings', \false); + $ignoreSuppressionOfPhpWarnings = $this->getBooleanAttribute($element, 'ignoreSuppressionOfPhpWarnings', \false); + } + return new Source($baseline, \false, $this->readFilterDirectories($filename, $xpath, 'source/include/directory'), $this->readFilterFiles($filename, $xpath, 'source/include/file'), $this->readFilterDirectories($filename, $xpath, 'source/exclude/directory'), $this->readFilterFiles($filename, $xpath, 'source/exclude/file'), $restrictDeprecations, $restrictNotices, $restrictWarnings, $ignoreSuppressionOfDeprecations, $ignoreSuppressionOfPhpDeprecations, $ignoreSuppressionOfErrors, $ignoreSuppressionOfNotices, $ignoreSuppressionOfPhpNotices, $ignoreSuppressionOfWarnings, $ignoreSuppressionOfPhpWarnings); } private function codeCoverage(string $filename, DOMXPath $xpath) : CodeCoverage { @@ -79825,6 +87363,7 @@ final class Loader { $files = []; foreach ($xpath->query($query) as $file) { + assert($file instanceof DOMNode); $filePath = $file->textContent; if ($filePath) { $files[] = new File($this->toAbsolutePath($filename, $filePath)); @@ -79836,10 +87375,12 @@ final class Loader { $include = []; $exclude = []; - foreach ($xpath->query('groups' . '/include/group') as $group) { + foreach ($xpath->query('groups/include/group') as $group) { + assert($group instanceof DOMNode); $include[] = new Group($group->textContent); } - foreach ($xpath->query('groups' . '/exclude/group') as $group) { + foreach ($xpath->query('groups/exclude/group') as $group) { + assert($group instanceof DOMNode); $exclude[] = new Group($group->textContent); } return new \PHPUnit\TextUI\XmlConfiguration\Groups(GroupCollection::fromArray($include), GroupCollection::fromArray($exclude)); @@ -79883,6 +87424,7 @@ final class Loader { $includePaths = []; foreach ($xpath->query('php/includePath') as $includePath) { + assert($includePath instanceof DOMNode); $path = $includePath->textContent; if ($path) { $includePaths[] = new Directory($this->toAbsolutePath($filename, $path)); @@ -79992,7 +87534,7 @@ final class Loader } elseif ($document->documentElement->hasAttribute('forceCoversAnnotation')) { $beStrictAboutCoverageMetadata = $this->getBooleanAttribute($document->documentElement, 'beStrictAboutCoversAnnotation', \false); } - return new \PHPUnit\TextUI\XmlConfiguration\PHPUnit($cacheDirectory, $this->getBooleanAttribute($document->documentElement, 'cacheResult', \true), $cacheResultFile, $this->getColumns($document), $this->getColors($document), $this->getBooleanAttribute($document->documentElement, 'stderr', \false), $this->getBooleanAttribute($document->documentElement, 'displayDetailsOnIncompleteTests', \false), $this->getBooleanAttribute($document->documentElement, 'displayDetailsOnSkippedTests', \false), $this->getBooleanAttribute($document->documentElement, 'displayDetailsOnTestsThatTriggerDeprecations', \false), $this->getBooleanAttribute($document->documentElement, 'displayDetailsOnTestsThatTriggerErrors', \false), $this->getBooleanAttribute($document->documentElement, 'displayDetailsOnTestsThatTriggerNotices', \false), $this->getBooleanAttribute($document->documentElement, 'displayDetailsOnTestsThatTriggerWarnings', \false), $this->getBooleanAttribute($document->documentElement, 'reverseDefectList', \false), $requireCoverageMetadata, $bootstrap, $this->getBooleanAttribute($document->documentElement, 'processIsolation', \false), $this->getBooleanAttribute($document->documentElement, 'failOnEmptyTestSuite', \false), $this->getBooleanAttribute($document->documentElement, 'failOnIncomplete', \false), $this->getBooleanAttribute($document->documentElement, 'failOnRisky', \false), $this->getBooleanAttribute($document->documentElement, 'failOnSkipped', \false), $this->getBooleanAttribute($document->documentElement, 'failOnWarning', \false), $this->getBooleanAttribute($document->documentElement, 'stopOnDefect', \false), $this->getBooleanAttribute($document->documentElement, 'stopOnError', \false), $this->getBooleanAttribute($document->documentElement, 'stopOnFailure', \false), $this->getBooleanAttribute($document->documentElement, 'stopOnWarning', \false), $this->getBooleanAttribute($document->documentElement, 'stopOnIncomplete', \false), $this->getBooleanAttribute($document->documentElement, 'stopOnRisky', \false), $this->getBooleanAttribute($document->documentElement, 'stopOnSkipped', \false), $extensionsDirectory, $this->getBooleanAttribute($document->documentElement, 'beStrictAboutChangesToGlobalState', \false), $this->getBooleanAttribute($document->documentElement, 'beStrictAboutOutputDuringTests', \false), $this->getBooleanAttribute($document->documentElement, 'beStrictAboutTestsThatDoNotTestAnything', \true), $beStrictAboutCoverageMetadata, $this->getBooleanAttribute($document->documentElement, 'enforceTimeLimit', \false), $this->getIntegerAttribute($document->documentElement, 'defaultTimeLimit', 1), $this->getIntegerAttribute($document->documentElement, 'timeoutForSmallTests', 1), $this->getIntegerAttribute($document->documentElement, 'timeoutForMediumTests', 10), $this->getIntegerAttribute($document->documentElement, 'timeoutForLargeTests', 60), $this->getStringAttribute($document->documentElement, 'defaultTestSuite'), $executionOrder, $resolveDependencies, $defectsFirst, $this->getBooleanAttribute($document->documentElement, 'backupGlobals', \false), $backupStaticProperties, $this->getBooleanAttribute($document->documentElement, 'registerMockObjectsFromTestArgumentsRecursively', \false), $this->getBooleanAttribute($document->documentElement, 'testdox', \false)); + return new \PHPUnit\TextUI\XmlConfiguration\PHPUnit($cacheDirectory, $this->getBooleanAttribute($document->documentElement, 'cacheResult', \true), $cacheResultFile, $this->getColumns($document), $this->getColors($document), $this->getBooleanAttribute($document->documentElement, 'stderr', \false), $this->getBooleanAttribute($document->documentElement, 'displayDetailsOnIncompleteTests', \false), $this->getBooleanAttribute($document->documentElement, 'displayDetailsOnSkippedTests', \false), $this->getBooleanAttribute($document->documentElement, 'displayDetailsOnTestsThatTriggerDeprecations', \false), $this->getBooleanAttribute($document->documentElement, 'displayDetailsOnTestsThatTriggerErrors', \false), $this->getBooleanAttribute($document->documentElement, 'displayDetailsOnTestsThatTriggerNotices', \false), $this->getBooleanAttribute($document->documentElement, 'displayDetailsOnTestsThatTriggerWarnings', \false), $this->getBooleanAttribute($document->documentElement, 'reverseDefectList', \false), $requireCoverageMetadata, $bootstrap, $this->getBooleanAttribute($document->documentElement, 'processIsolation', \false), $this->getBooleanAttribute($document->documentElement, 'failOnDeprecation', \false), $this->getBooleanAttribute($document->documentElement, 'failOnEmptyTestSuite', \false), $this->getBooleanAttribute($document->documentElement, 'failOnIncomplete', \false), $this->getBooleanAttribute($document->documentElement, 'failOnNotice', \false), $this->getBooleanAttribute($document->documentElement, 'failOnRisky', \false), $this->getBooleanAttribute($document->documentElement, 'failOnSkipped', \false), $this->getBooleanAttribute($document->documentElement, 'failOnWarning', \false), $this->getBooleanAttribute($document->documentElement, 'stopOnDefect', \false), $this->getBooleanAttribute($document->documentElement, 'stopOnDeprecation', \false), $this->getBooleanAttribute($document->documentElement, 'stopOnError', \false), $this->getBooleanAttribute($document->documentElement, 'stopOnFailure', \false), $this->getBooleanAttribute($document->documentElement, 'stopOnIncomplete', \false), $this->getBooleanAttribute($document->documentElement, 'stopOnNotice', \false), $this->getBooleanAttribute($document->documentElement, 'stopOnRisky', \false), $this->getBooleanAttribute($document->documentElement, 'stopOnSkipped', \false), $this->getBooleanAttribute($document->documentElement, 'stopOnWarning', \false), $extensionsDirectory, $this->getBooleanAttribute($document->documentElement, 'beStrictAboutChangesToGlobalState', \false), $this->getBooleanAttribute($document->documentElement, 'beStrictAboutOutputDuringTests', \false), $this->getBooleanAttribute($document->documentElement, 'beStrictAboutTestsThatDoNotTestAnything', \true), $beStrictAboutCoverageMetadata, $this->getBooleanAttribute($document->documentElement, 'enforceTimeLimit', \false), $this->getIntegerAttribute($document->documentElement, 'defaultTimeLimit', 1), $this->getIntegerAttribute($document->documentElement, 'timeoutForSmallTests', 1), $this->getIntegerAttribute($document->documentElement, 'timeoutForMediumTests', 10), $this->getIntegerAttribute($document->documentElement, 'timeoutForLargeTests', 60), $this->getStringAttribute($document->documentElement, 'defaultTestSuite'), $executionOrder, $resolveDependencies, $defectsFirst, $this->getBooleanAttribute($document->documentElement, 'backupGlobals', \false), $backupStaticProperties, $this->getBooleanAttribute($document->documentElement, 'registerMockObjectsFromTestArgumentsRecursively', \false), $this->getBooleanAttribute($document->documentElement, 'testdox', \false), $this->getBooleanAttribute($document->documentElement, 'controlGarbageCollector', \false), $this->getIntegerAttribute($document->documentElement, 'numberOfTestsBeforeGarbageCollection', 100)); } private function getColors(DOMDocument $document) : string { @@ -80072,7 +87614,9 @@ final class Loader } $files[] = new TestFile($this->toAbsolutePath($filename, $file), $phpVersion, $phpVersionOperator); } - $testSuites[] = new TestSuiteConfiguration($element->getAttribute('name'), TestDirectoryCollection::fromArray($directories), TestFileCollection::fromArray($files), FileCollection::fromArray($exclude)); + $name = $element->getAttribute('name'); + assert(!empty($name)); + $testSuites[] = new TestSuiteConfiguration($name, TestDirectoryCollection::fromArray($directories), TestFileCollection::fromArray($files), FileCollection::fromArray($exclude)); } return TestSuiteCollection::fromArray($testSuites); } @@ -80337,23 +87881,18 @@ declare (strict_types=1); */ namespace PHPUnit\TextUI\XmlConfiguration; -use function array_key_exists; -use function sprintf; use function version_compare; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ final class MigrationBuilder { - private const AVAILABLE_MIGRATIONS = ['8.5' => [\PHPUnit\TextUI\XmlConfiguration\RemoveLogTypes::class], '9.2' => [\PHPUnit\TextUI\XmlConfiguration\RemoveCacheTokensAttribute::class, \PHPUnit\TextUI\XmlConfiguration\IntroduceCoverageElement::class, \PHPUnit\TextUI\XmlConfiguration\MoveAttributesFromRootToCoverage::class, \PHPUnit\TextUI\XmlConfiguration\MoveAttributesFromFilterWhitelistToCoverage::class, \PHPUnit\TextUI\XmlConfiguration\MoveWhitelistDirectoriesToCoverage::class, \PHPUnit\TextUI\XmlConfiguration\MoveWhitelistExcludesToCoverage::class, \PHPUnit\TextUI\XmlConfiguration\RemoveEmptyFilter::class, \PHPUnit\TextUI\XmlConfiguration\CoverageCloverToReport::class, \PHPUnit\TextUI\XmlConfiguration\CoverageCrap4jToReport::class, \PHPUnit\TextUI\XmlConfiguration\CoverageHtmlToReport::class, \PHPUnit\TextUI\XmlConfiguration\CoveragePhpToReport::class, \PHPUnit\TextUI\XmlConfiguration\CoverageTextToReport::class, \PHPUnit\TextUI\XmlConfiguration\CoverageXmlToReport::class, \PHPUnit\TextUI\XmlConfiguration\ConvertLogTypes::class], '9.5' => [\PHPUnit\TextUI\XmlConfiguration\RemoveListeners::class, \PHPUnit\TextUI\XmlConfiguration\RemoveTestSuiteLoaderAttributes::class, \PHPUnit\TextUI\XmlConfiguration\RemoveCacheResultFileAttribute::class, \PHPUnit\TextUI\XmlConfiguration\RemoveCoverageElementCacheDirectoryAttribute::class, \PHPUnit\TextUI\XmlConfiguration\RemoveCoverageElementProcessUncoveredFilesAttribute::class, \PHPUnit\TextUI\XmlConfiguration\IntroduceCacheDirectoryAttribute::class, \PHPUnit\TextUI\XmlConfiguration\RenameBackupStaticAttributesAttribute::class, \PHPUnit\TextUI\XmlConfiguration\RemoveBeStrictAboutResourceUsageDuringSmallTestsAttribute::class, \PHPUnit\TextUI\XmlConfiguration\RemoveBeStrictAboutTodoAnnotatedTestsAttribute::class, \PHPUnit\TextUI\XmlConfiguration\RemovePrinterAttributes::class, \PHPUnit\TextUI\XmlConfiguration\RemoveVerboseAttribute::class, \PHPUnit\TextUI\XmlConfiguration\RenameForceCoversAnnotationAttribute::class, \PHPUnit\TextUI\XmlConfiguration\RenameBeStrictAboutCoversAnnotationAttribute::class, \PHPUnit\TextUI\XmlConfiguration\RemoveConversionToExceptionsAttributes::class, \PHPUnit\TextUI\XmlConfiguration\RemoveNoInteractionAttribute::class, \PHPUnit\TextUI\XmlConfiguration\RemoveLoggingElements::class, \PHPUnit\TextUI\XmlConfiguration\RemoveTestDoxGroupsElement::class]]; + private const AVAILABLE_MIGRATIONS = ['8.5' => [\PHPUnit\TextUI\XmlConfiguration\RemoveLogTypes::class], '9.2' => [\PHPUnit\TextUI\XmlConfiguration\RemoveCacheTokensAttribute::class, \PHPUnit\TextUI\XmlConfiguration\IntroduceCoverageElement::class, \PHPUnit\TextUI\XmlConfiguration\MoveAttributesFromRootToCoverage::class, \PHPUnit\TextUI\XmlConfiguration\MoveAttributesFromFilterWhitelistToCoverage::class, \PHPUnit\TextUI\XmlConfiguration\MoveWhitelistIncludesToCoverage::class, \PHPUnit\TextUI\XmlConfiguration\MoveWhitelistExcludesToCoverage::class, \PHPUnit\TextUI\XmlConfiguration\RemoveEmptyFilter::class, \PHPUnit\TextUI\XmlConfiguration\CoverageCloverToReport::class, \PHPUnit\TextUI\XmlConfiguration\CoverageCrap4jToReport::class, \PHPUnit\TextUI\XmlConfiguration\CoverageHtmlToReport::class, \PHPUnit\TextUI\XmlConfiguration\CoveragePhpToReport::class, \PHPUnit\TextUI\XmlConfiguration\CoverageTextToReport::class, \PHPUnit\TextUI\XmlConfiguration\CoverageXmlToReport::class, \PHPUnit\TextUI\XmlConfiguration\ConvertLogTypes::class], '9.5' => [\PHPUnit\TextUI\XmlConfiguration\RemoveListeners::class, \PHPUnit\TextUI\XmlConfiguration\RemoveTestSuiteLoaderAttributes::class, \PHPUnit\TextUI\XmlConfiguration\RemoveCacheResultFileAttribute::class, \PHPUnit\TextUI\XmlConfiguration\RemoveCoverageElementCacheDirectoryAttribute::class, \PHPUnit\TextUI\XmlConfiguration\RemoveCoverageElementProcessUncoveredFilesAttribute::class, \PHPUnit\TextUI\XmlConfiguration\IntroduceCacheDirectoryAttribute::class, \PHPUnit\TextUI\XmlConfiguration\RenameBackupStaticAttributesAttribute::class, \PHPUnit\TextUI\XmlConfiguration\RemoveBeStrictAboutResourceUsageDuringSmallTestsAttribute::class, \PHPUnit\TextUI\XmlConfiguration\RemoveBeStrictAboutTodoAnnotatedTestsAttribute::class, \PHPUnit\TextUI\XmlConfiguration\RemovePrinterAttributes::class, \PHPUnit\TextUI\XmlConfiguration\RemoveVerboseAttribute::class, \PHPUnit\TextUI\XmlConfiguration\RenameForceCoversAnnotationAttribute::class, \PHPUnit\TextUI\XmlConfiguration\RenameBeStrictAboutCoversAnnotationAttribute::class, \PHPUnit\TextUI\XmlConfiguration\RemoveConversionToExceptionsAttributes::class, \PHPUnit\TextUI\XmlConfiguration\RemoveNoInteractionAttribute::class, \PHPUnit\TextUI\XmlConfiguration\RemoveLoggingElements::class, \PHPUnit\TextUI\XmlConfiguration\RemoveTestDoxGroupsElement::class], '10.0' => [\PHPUnit\TextUI\XmlConfiguration\MoveCoverageDirectoriesToSource::class]]; /** * @throws MigrationBuilderException */ public function build(string $fromVersion) : array { - if (!array_key_exists($fromVersion, self::AVAILABLE_MIGRATIONS)) { - throw new \PHPUnit\TextUI\XmlConfiguration\MigrationBuilderException(sprintf('Migration from schema version %s is not supported', $fromVersion)); - } $stack = [new \PHPUnit\TextUI\XmlConfiguration\UpdateSchemaLocation()]; foreach (self::AVAILABLE_MIGRATIONS as $version => $migrations) { if (version_compare($version, $fromVersion, '<')) { @@ -80869,35 +88408,43 @@ declare (strict_types=1); */ namespace PHPUnit\TextUI\XmlConfiguration; +use function assert; use DOMDocument; use DOMElement; -use PHPUnit\Util\Xml\SnapshotNodeList; +use DOMXPath; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ -final class MoveWhitelistDirectoriesToCoverage implements \PHPUnit\TextUI\XmlConfiguration\Migration +final class MoveCoverageDirectoriesToSource implements \PHPUnit\TextUI\XmlConfiguration\Migration { /** * @throws MigrationException */ public function migrate(DOMDocument $document) : void { - $whitelist = $document->getElementsByTagName('whitelist')->item(0); - if ($whitelist === null) { + $source = $document->getElementsByTagName('source')->item(0); + if ($source !== null) { return; } $coverage = $document->getElementsByTagName('coverage')->item(0); - if (!$coverage instanceof DOMElement) { - throw new \PHPUnit\TextUI\XmlConfiguration\MigrationException('Unexpected state - No coverage element'); + if ($coverage === null) { + return; } - $include = $document->createElement('include'); - $coverage->appendChild($include); - foreach (SnapshotNodeList::fromNodeList($whitelist->childNodes) as $child) { - if (!$child instanceof DOMElement || $child->nodeName !== 'directory') { - continue; + $root = $document->documentElement; + assert($root instanceof DOMElement); + $source = $document->createElement('source'); + $root->appendChild($source); + $xpath = new DOMXPath($document); + foreach (['include', 'exclude'] as $element) { + foreach (\PHPUnit\TextUI\XmlConfiguration\SnapshotNodeList::fromNodeList($xpath->query('//coverage/' . $element)) as $node) { + $source->appendChild($node); } - $include->appendChild($child); } + if ($coverage->childElementCount !== 0) { + return; + } + assert($coverage->parentNode !== null); + $coverage->parentNode->removeChild($coverage); } } getElementsByTagName('exclude')); + $excludeNodes = \PHPUnit\TextUI\XmlConfiguration\SnapshotNodeList::fromNodeList($whitelist->getElementsByTagName('exclude')); if ($excludeNodes->count() === 0) { return; } @@ -80946,7 +88492,7 @@ final class MoveWhitelistExcludesToCoverage implements \PHPUnit\TextUI\XmlConfig } foreach ($excludeNodes as $excludeNode) { assert($excludeNode instanceof DOMElement); - foreach (SnapshotNodeList::fromNodeList($excludeNode->childNodes) as $child) { + foreach (\PHPUnit\TextUI\XmlConfiguration\SnapshotNodeList::fromNodeList($excludeNode->childNodes) as $child) { if (!$child instanceof DOMElement || !in_array($child->nodeName, ['directory', 'file'], \true)) { continue; } @@ -80972,234 +88518,12 @@ declare (strict_types=1); */ namespace PHPUnit\TextUI\XmlConfiguration; -use function assert; -use DOMDocument; -use DOMElement; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class RemoveBeStrictAboutResourceUsageDuringSmallTestsAttribute implements \PHPUnit\TextUI\XmlConfiguration\Migration -{ - public function migrate(DOMDocument $document) : void - { - $root = $document->documentElement; - assert($root instanceof DOMElement); - if ($root->hasAttribute('beStrictAboutResourceUsageDuringSmallTests')) { - $root->removeAttribute('beStrictAboutResourceUsageDuringSmallTests'); - } - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\TextUI\XmlConfiguration; - -use function assert; -use DOMDocument; -use DOMElement; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class RemoveBeStrictAboutTodoAnnotatedTestsAttribute implements \PHPUnit\TextUI\XmlConfiguration\Migration -{ - public function migrate(DOMDocument $document) : void - { - $root = $document->documentElement; - assert($root instanceof DOMElement); - if ($root->hasAttribute('beStrictAboutTodoAnnotatedTests')) { - $root->removeAttribute('beStrictAboutTodoAnnotatedTests'); - } - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\TextUI\XmlConfiguration; - -use function assert; -use DOMDocument; -use DOMElement; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class RemoveCacheResultFileAttribute implements \PHPUnit\TextUI\XmlConfiguration\Migration -{ - public function migrate(DOMDocument $document) : void - { - $root = $document->documentElement; - assert($root instanceof DOMElement); - if ($root->hasAttribute('cacheResultFile')) { - $root->removeAttribute('cacheResultFile'); - } - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\TextUI\XmlConfiguration; - -use function assert; -use DOMDocument; -use DOMElement; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class RemoveCacheTokensAttribute implements \PHPUnit\TextUI\XmlConfiguration\Migration -{ - public function migrate(DOMDocument $document) : void - { - $root = $document->documentElement; - assert($root instanceof DOMElement); - if ($root->hasAttribute('cacheTokens')) { - $root->removeAttribute('cacheTokens'); - } - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\TextUI\XmlConfiguration; - -use function assert; use DOMDocument; use DOMElement; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ -final class RemoveConversionToExceptionsAttributes implements \PHPUnit\TextUI\XmlConfiguration\Migration -{ - public function migrate(DOMDocument $document) : void - { - $root = $document->documentElement; - assert($root instanceof DOMElement); - if ($root->hasAttribute('convertDeprecationsToExceptions')) { - $root->removeAttribute('convertDeprecationsToExceptions'); - } - if ($root->hasAttribute('convertErrorsToExceptions')) { - $root->removeAttribute('convertErrorsToExceptions'); - } - if ($root->hasAttribute('convertNoticesToExceptions')) { - $root->removeAttribute('convertNoticesToExceptions'); - } - if ($root->hasAttribute('convertWarningsToExceptions')) { - $root->removeAttribute('convertWarningsToExceptions'); - } - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\TextUI\XmlConfiguration; - -use DOMDocument; -use DOMElement; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class RemoveCoverageElementCacheDirectoryAttribute implements \PHPUnit\TextUI\XmlConfiguration\Migration -{ - public function migrate(DOMDocument $document) : void - { - $node = $document->getElementsByTagName('coverage')->item(0); - if (!$node instanceof DOMElement || $node->parentNode === null) { - return; - } - if ($node->hasAttribute('cacheDirectory')) { - $node->removeAttribute('cacheDirectory'); - } - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\TextUI\XmlConfiguration; - -use DOMDocument; -use DOMElement; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class RemoveCoverageElementProcessUncoveredFilesAttribute implements \PHPUnit\TextUI\XmlConfiguration\Migration -{ - public function migrate(DOMDocument $document) : void - { - $node = $document->getElementsByTagName('coverage')->item(0); - if (!$node instanceof DOMElement || $node->parentNode === null) { - return; - } - if ($node->hasAttribute('processUncoveredFiles')) { - $node->removeAttribute('processUncoveredFiles'); - } - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\TextUI\XmlConfiguration; - -use function sprintf; -use DOMDocument; -use DOMElement; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class RemoveEmptyFilter implements \PHPUnit\TextUI\XmlConfiguration\Migration +final class MoveWhitelistIncludesToCoverage implements \PHPUnit\TextUI\XmlConfiguration\Migration { /** * @throws MigrationException @@ -81207,26 +88531,23 @@ final class RemoveEmptyFilter implements \PHPUnit\TextUI\XmlConfiguration\Migrat public function migrate(DOMDocument $document) : void { $whitelist = $document->getElementsByTagName('whitelist')->item(0); - if ($whitelist instanceof DOMElement) { - $this->ensureEmpty($whitelist); - $whitelist->parentNode->removeChild($whitelist); - } - $filter = $document->getElementsByTagName('filter')->item(0); - if ($filter instanceof DOMElement) { - $this->ensureEmpty($filter); - $filter->parentNode->removeChild($filter); + if ($whitelist === null) { + return; } - } - /** - * @throws MigrationException - */ - private function ensureEmpty(DOMElement $element) : void - { - if ($element->attributes->length > 0) { - throw new \PHPUnit\TextUI\XmlConfiguration\MigrationException(sprintf('%s element has unexpected attributes', $element->nodeName)); + $coverage = $document->getElementsByTagName('coverage')->item(0); + if (!$coverage instanceof DOMElement) { + throw new \PHPUnit\TextUI\XmlConfiguration\MigrationException('Unexpected state - No coverage element'); } - if ($element->getElementsByTagName('*')->length > 0) { - throw new \PHPUnit\TextUI\XmlConfiguration\MigrationException(sprintf('%s element has unexpected children', $element->nodeName)); + $include = $document->createElement('include'); + $coverage->appendChild($include); + foreach (\PHPUnit\TextUI\XmlConfiguration\SnapshotNodeList::fromNodeList($whitelist->childNodes) as $child) { + if (!$child instanceof DOMElement) { + continue; + } + if (!($child->nodeName === 'directory' || $child->nodeName === 'file')) { + continue; + } + $include->appendChild($child); } } } @@ -81243,20 +88564,21 @@ declare (strict_types=1); */ namespace PHPUnit\TextUI\XmlConfiguration; +use function assert; use DOMDocument; use DOMElement; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ -final class RemoveListeners implements \PHPUnit\TextUI\XmlConfiguration\Migration +final class RemoveBeStrictAboutResourceUsageDuringSmallTestsAttribute implements \PHPUnit\TextUI\XmlConfiguration\Migration { public function migrate(DOMDocument $document) : void { - $node = $document->getElementsByTagName('listeners')->item(0); - if (!$node instanceof DOMElement || $node->parentNode === null) { - return; + $root = $document->documentElement; + assert($root instanceof DOMElement); + if ($root->hasAttribute('beStrictAboutResourceUsageDuringSmallTests')) { + $root->removeAttribute('beStrictAboutResourceUsageDuringSmallTests'); } - $node->parentNode->removeChild($node); } } documentElement; + assert($root instanceof DOMElement); + if ($root->hasAttribute('beStrictAboutTodoAnnotatedTests')) { + $root->removeAttribute('beStrictAboutTodoAnnotatedTests'); + } + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI\XmlConfiguration; + +use function assert; +use DOMDocument; +use DOMElement; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class RemoveCacheResultFileAttribute implements \PHPUnit\TextUI\XmlConfiguration\Migration +{ + public function migrate(DOMDocument $document) : void + { + $root = $document->documentElement; + assert($root instanceof DOMElement); + if ($root->hasAttribute('cacheResultFile')) { + $root->removeAttribute('cacheResultFile'); + } + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI\XmlConfiguration; + +use function assert; +use DOMDocument; +use DOMElement; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class RemoveCacheTokensAttribute implements \PHPUnit\TextUI\XmlConfiguration\Migration +{ + public function migrate(DOMDocument $document) : void + { + $root = $document->documentElement; + assert($root instanceof DOMElement); + if ($root->hasAttribute('cacheTokens')) { + $root->removeAttribute('cacheTokens'); + } + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI\XmlConfiguration; + +use function assert; +use DOMDocument; +use DOMElement; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class RemoveConversionToExceptionsAttributes implements \PHPUnit\TextUI\XmlConfiguration\Migration +{ + public function migrate(DOMDocument $document) : void + { + $root = $document->documentElement; + assert($root instanceof DOMElement); + if ($root->hasAttribute('convertDeprecationsToExceptions')) { + $root->removeAttribute('convertDeprecationsToExceptions'); + } + if ($root->hasAttribute('convertErrorsToExceptions')) { + $root->removeAttribute('convertErrorsToExceptions'); + } + if ($root->hasAttribute('convertNoticesToExceptions')) { + $root->removeAttribute('convertNoticesToExceptions'); + } + if ($root->hasAttribute('convertWarningsToExceptions')) { + $root->removeAttribute('convertWarningsToExceptions'); + } + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI\XmlConfiguration; + +use DOMDocument; +use DOMElement; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class RemoveCoverageElementCacheDirectoryAttribute implements \PHPUnit\TextUI\XmlConfiguration\Migration +{ + public function migrate(DOMDocument $document) : void + { + $node = $document->getElementsByTagName('coverage')->item(0); + if (!$node instanceof DOMElement || $node->parentNode === null) { + return; + } + if ($node->hasAttribute('cacheDirectory')) { + $node->removeAttribute('cacheDirectory'); + } + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI\XmlConfiguration; + +use DOMDocument; +use DOMElement; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class RemoveCoverageElementProcessUncoveredFilesAttribute implements \PHPUnit\TextUI\XmlConfiguration\Migration +{ + public function migrate(DOMDocument $document) : void + { + $node = $document->getElementsByTagName('coverage')->item(0); + if (!$node instanceof DOMElement || $node->parentNode === null) { + return; + } + if ($node->hasAttribute('processUncoveredFiles')) { + $node->removeAttribute('processUncoveredFiles'); + } + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI\XmlConfiguration; + +use function sprintf; +use DOMDocument; +use DOMElement; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class RemoveEmptyFilter implements \PHPUnit\TextUI\XmlConfiguration\Migration +{ + /** + * @throws MigrationException + */ + public function migrate(DOMDocument $document) : void + { + $whitelist = $document->getElementsByTagName('whitelist')->item(0); + if ($whitelist instanceof DOMElement) { + $this->ensureEmpty($whitelist); + $whitelist->parentNode->removeChild($whitelist); + } + $filter = $document->getElementsByTagName('filter')->item(0); + if ($filter instanceof DOMElement) { + $this->ensureEmpty($filter); + $filter->parentNode->removeChild($filter); + } + } + /** + * @throws MigrationException + */ + private function ensureEmpty(DOMElement $element) : void + { + if ($element->attributes->length > 0) { + throw new \PHPUnit\TextUI\XmlConfiguration\MigrationException(sprintf('%s element has unexpected attributes', $element->nodeName)); + } + if ($element->getElementsByTagName('*')->length > 0) { + throw new \PHPUnit\TextUI\XmlConfiguration\MigrationException(sprintf('%s element has unexpected children', $element->nodeName)); + } + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI\XmlConfiguration; + +use DOMDocument; +use DOMElement; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class RemoveListeners implements \PHPUnit\TextUI\XmlConfiguration\Migration +{ + public function migrate(DOMDocument $document) : void + { + $node = $document->getElementsByTagName('listeners')->item(0); + if (!$node instanceof DOMElement || $node->parentNode === null) { + return; + } + $node->parentNode->removeChild($node); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI\XmlConfiguration; + +use function assert; +use DOMDocument; +use DOMElement; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ @@ -81287,7 +88878,7 @@ final class RemoveLogTypes implements \PHPUnit\TextUI\XmlConfiguration\Migration if (!$logging instanceof DOMElement) { return; } - foreach (SnapshotNodeList::fromNodeList($logging->getElementsByTagName('log')) as $logNode) { + foreach (\PHPUnit\TextUI\XmlConfiguration\SnapshotNodeList::fromNodeList($logging->getElementsByTagName('log')) as $logNode) { assert($logNode instanceof DOMElement); switch ($logNode->getAttribute('type')) { case 'json': @@ -81642,9 +89233,8 @@ declare (strict_types=1); */ namespace PHPUnit\TextUI\XmlConfiguration; -use function sprintf; +use PHPUnit\Runner\Version; use PHPUnit\Util\Xml\Loader as XmlLoader; -use PHPUnit\Util\Xml\SchemaDetector; use PHPUnit\Util\Xml\XmlException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit @@ -81659,11 +89249,14 @@ final class Migrator */ public function migrate(string $filename) : string { - $origin = (new SchemaDetector())->detect($filename); + $origin = (new \PHPUnit\TextUI\XmlConfiguration\SchemaDetector())->detect($filename); if (!$origin->detected()) { - throw new \PHPUnit\TextUI\XmlConfiguration\Exception(sprintf('"%s" is not a valid PHPUnit XML configuration file that can be migrated', $filename)); + throw new \PHPUnit\TextUI\XmlConfiguration\Exception('The file does not validate against any know schema'); + } + if ($origin->version() === Version::series()) { + throw new \PHPUnit\TextUI\XmlConfiguration\Exception('The file does not need to be migrated'); } - $configurationDocument = (new XmlLoader())->loadFile($filename, \false, \true, \true); + $configurationDocument = (new XmlLoader())->loadFile($filename); foreach ((new \PHPUnit\TextUI\XmlConfiguration\MigrationBuilder())->build($origin->version()) as $migration) { $migration->migrate($configurationDocument); } @@ -81685,6 +89278,53 @@ declare (strict_types=1); */ namespace PHPUnit\TextUI\XmlConfiguration; +use function count; +use ArrayIterator; +use Countable; +use DOMNode; +use DOMNodeList; +use IteratorAggregate; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + * + * @template-implements IteratorAggregate + */ +final class SnapshotNodeList implements Countable, IteratorAggregate +{ + /** + * @psalm-var list + */ + private array $nodes = []; + public static function fromNodeList(DOMNodeList $list) : self + { + $snapshot = new self(); + foreach ($list as $node) { + $snapshot->nodes[] = $node; + } + return $snapshot; + } + public function count() : int + { + return count($this->nodes); + } + public function getIterator() : ArrayIterator + { + return new ArrayIterator($this->nodes); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI\XmlConfiguration; + /** * @internal This class is not covered by the backward compatibility promise for PHPUnit * @@ -81708,18 +89348,25 @@ final class PHPUnit private readonly bool $requireCoverageMetadata; private readonly ?string $bootstrap; private readonly bool $processIsolation; + private readonly bool $failOnDeprecation; private readonly bool $failOnEmptyTestSuite; private readonly bool $failOnIncomplete; + private readonly bool $failOnNotice; private readonly bool $failOnRisky; private readonly bool $failOnSkipped; private readonly bool $failOnWarning; private readonly bool $stopOnDefect; + private readonly bool $stopOnDeprecation; private readonly bool $stopOnError; private readonly bool $stopOnFailure; - private readonly bool $stopOnWarning; private readonly bool $stopOnIncomplete; + private readonly bool $stopOnNotice; private readonly bool $stopOnRisky; private readonly bool $stopOnSkipped; + private readonly bool $stopOnWarning; + /** + * @psalm-var ?non-empty-string + */ private readonly ?string $extensionsDirectory; private readonly bool $beStrictAboutChangesToGlobalState; private readonly bool $beStrictAboutOutputDuringTests; @@ -81738,7 +89385,12 @@ final class PHPUnit private readonly bool $backupStaticProperties; private readonly bool $registerMockObjectsFromTestArgumentsRecursively; private readonly bool $testdoxPrinter; - public function __construct(?string $cacheDirectory, bool $cacheResult, ?string $cacheResultFile, int|string $columns, string $colors, bool $stderr, bool $displayDetailsOnIncompleteTests, bool $displayDetailsOnSkippedTests, bool $displayDetailsOnTestsThatTriggerDeprecations, bool $displayDetailsOnTestsThatTriggerErrors, bool $displayDetailsOnTestsThatTriggerNotices, bool $displayDetailsOnTestsThatTriggerWarnings, bool $reverseDefectList, bool $requireCoverageMetadata, ?string $bootstrap, bool $processIsolation, bool $failOnEmptyTestSuite, bool $failOnIncomplete, bool $failOnRisky, bool $failOnSkipped, bool $failOnWarning, bool $stopOnDefect, bool $stopOnError, bool $stopOnFailure, bool $stopOnWarning, bool $stopOnIncomplete, bool $stopOnRisky, bool $stopOnSkipped, ?string $extensionsDirectory, bool $beStrictAboutChangesToGlobalState, bool $beStrictAboutOutputDuringTests, bool $beStrictAboutTestsThatDoNotTestAnything, bool $beStrictAboutCoverageMetadata, bool $enforceTimeLimit, int $defaultTimeLimit, int $timeoutForSmallTests, int $timeoutForMediumTests, int $timeoutForLargeTests, ?string $defaultTestSuite, int $executionOrder, bool $resolveDependencies, bool $defectsFirst, bool $backupGlobals, bool $backupStaticProperties, bool $registerMockObjectsFromTestArgumentsRecursively, bool $testdoxPrinter) + private readonly bool $controlGarbageCollector; + private readonly int $numberOfTestsBeforeGarbageCollection; + /** + * @psalm-param ?non-empty-string $extensionsDirectory + */ + public function __construct(?string $cacheDirectory, bool $cacheResult, ?string $cacheResultFile, int|string $columns, string $colors, bool $stderr, bool $displayDetailsOnIncompleteTests, bool $displayDetailsOnSkippedTests, bool $displayDetailsOnTestsThatTriggerDeprecations, bool $displayDetailsOnTestsThatTriggerErrors, bool $displayDetailsOnTestsThatTriggerNotices, bool $displayDetailsOnTestsThatTriggerWarnings, bool $reverseDefectList, bool $requireCoverageMetadata, ?string $bootstrap, bool $processIsolation, bool $failOnDeprecation, bool $failOnEmptyTestSuite, bool $failOnIncomplete, bool $failOnNotice, bool $failOnRisky, bool $failOnSkipped, bool $failOnWarning, bool $stopOnDefect, bool $stopOnDeprecation, bool $stopOnError, bool $stopOnFailure, bool $stopOnIncomplete, bool $stopOnNotice, bool $stopOnRisky, bool $stopOnSkipped, bool $stopOnWarning, ?string $extensionsDirectory, bool $beStrictAboutChangesToGlobalState, bool $beStrictAboutOutputDuringTests, bool $beStrictAboutTestsThatDoNotTestAnything, bool $beStrictAboutCoverageMetadata, bool $enforceTimeLimit, int $defaultTimeLimit, int $timeoutForSmallTests, int $timeoutForMediumTests, int $timeoutForLargeTests, ?string $defaultTestSuite, int $executionOrder, bool $resolveDependencies, bool $defectsFirst, bool $backupGlobals, bool $backupStaticProperties, bool $registerMockObjectsFromTestArgumentsRecursively, bool $testdoxPrinter, bool $controlGarbageCollector, int $numberOfTestsBeforeGarbageCollection) { $this->cacheDirectory = $cacheDirectory; $this->cacheResult = $cacheResult; @@ -81756,18 +89408,22 @@ final class PHPUnit $this->requireCoverageMetadata = $requireCoverageMetadata; $this->bootstrap = $bootstrap; $this->processIsolation = $processIsolation; + $this->failOnDeprecation = $failOnDeprecation; $this->failOnEmptyTestSuite = $failOnEmptyTestSuite; $this->failOnIncomplete = $failOnIncomplete; + $this->failOnNotice = $failOnNotice; $this->failOnRisky = $failOnRisky; $this->failOnSkipped = $failOnSkipped; $this->failOnWarning = $failOnWarning; $this->stopOnDefect = $stopOnDefect; + $this->stopOnDeprecation = $stopOnDeprecation; $this->stopOnError = $stopOnError; $this->stopOnFailure = $stopOnFailure; - $this->stopOnWarning = $stopOnWarning; $this->stopOnIncomplete = $stopOnIncomplete; + $this->stopOnNotice = $stopOnNotice; $this->stopOnRisky = $stopOnRisky; $this->stopOnSkipped = $stopOnSkipped; + $this->stopOnWarning = $stopOnWarning; $this->extensionsDirectory = $extensionsDirectory; $this->beStrictAboutChangesToGlobalState = $beStrictAboutChangesToGlobalState; $this->beStrictAboutOutputDuringTests = $beStrictAboutOutputDuringTests; @@ -81786,6 +89442,8 @@ final class PHPUnit $this->backupStaticProperties = $backupStaticProperties; $this->registerMockObjectsFromTestArgumentsRecursively = $registerMockObjectsFromTestArgumentsRecursively; $this->testdoxPrinter = $testdoxPrinter; + $this->controlGarbageCollector = $controlGarbageCollector; + $this->numberOfTestsBeforeGarbageCollection = $numberOfTestsBeforeGarbageCollection; } /** * @psalm-assert-if-true !null $this->cacheDirectory @@ -81894,6 +89552,10 @@ final class PHPUnit { return $this->processIsolation; } + public function failOnDeprecation() : bool + { + return $this->failOnDeprecation; + } public function failOnEmptyTestSuite() : bool { return $this->failOnEmptyTestSuite; @@ -81902,6 +89564,10 @@ final class PHPUnit { return $this->failOnIncomplete; } + public function failOnNotice() : bool + { + return $this->failOnNotice; + } public function failOnRisky() : bool { return $this->failOnRisky; @@ -81918,6 +89584,10 @@ final class PHPUnit { return $this->stopOnDefect; } + public function stopOnDeprecation() : bool + { + return $this->stopOnDeprecation; + } public function stopOnError() : bool { return $this->stopOnError; @@ -81926,14 +89596,14 @@ final class PHPUnit { return $this->stopOnFailure; } - public function stopOnWarning() : bool - { - return $this->stopOnWarning; - } public function stopOnIncomplete() : bool { return $this->stopOnIncomplete; } + public function stopOnNotice() : bool + { + return $this->stopOnNotice; + } public function stopOnRisky() : bool { return $this->stopOnRisky; @@ -81942,6 +89612,10 @@ final class PHPUnit { return $this->stopOnSkipped; } + public function stopOnWarning() : bool + { + return $this->stopOnWarning; + } /** * @psalm-assert-if-true !null $this->extensionsDirectory */ @@ -81950,6 +89624,8 @@ final class PHPUnit return $this->extensionsDirectory !== null; } /** + * @psalm-return non-empty-string + * * @throws Exception */ public function extensionsDirectory() : string @@ -82032,6 +89708,9 @@ final class PHPUnit { return $this->backupStaticProperties; } + /** + * @deprecated + */ public function registerMockObjectsFromTestArgumentsRecursively() : bool { return $this->registerMockObjectsFromTestArgumentsRecursively; @@ -82040,6 +89719,218 @@ final class PHPUnit { return $this->testdoxPrinter; } + public function controlGarbageCollector() : bool + { + return $this->controlGarbageCollector; + } + public function numberOfTestsBeforeGarbageCollection() : int + { + return $this->numberOfTestsBeforeGarbageCollection; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI\XmlConfiguration; + +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + * + * @psalm-immutable + */ +final class FailedSchemaDetectionResult extends \PHPUnit\TextUI\XmlConfiguration\SchemaDetectionResult +{ +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI\XmlConfiguration; + +use PHPUnit\Util\Xml\XmlException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + * + * @psalm-immutable + */ +abstract class SchemaDetectionResult +{ + /** + * @psalm-assert-if-true SuccessfulSchemaDetectionResult $this + */ + public function detected() : bool + { + return \false; + } + /** + * @throws XmlException + */ + public function version() : string + { + throw new XmlException('No supported schema was detected'); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI\XmlConfiguration; + +use PHPUnit\Util\Xml\Loader; +use PHPUnit\Util\Xml\XmlException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class SchemaDetector +{ + /** + * @throws XmlException + */ + public function detect(string $filename) : \PHPUnit\TextUI\XmlConfiguration\SchemaDetectionResult + { + $document = (new Loader())->loadFile($filename); + $schemaFinder = new \PHPUnit\TextUI\XmlConfiguration\SchemaFinder(); + foreach ($schemaFinder->available() as $candidate) { + $schema = (new \PHPUnit\TextUI\XmlConfiguration\SchemaFinder())->find($candidate); + if (!(new \PHPUnit\TextUI\XmlConfiguration\Validator())->validate($document, $schema)->hasValidationErrors()) { + return new \PHPUnit\TextUI\XmlConfiguration\SuccessfulSchemaDetectionResult($candidate); + } + } + return new \PHPUnit\TextUI\XmlConfiguration\FailedSchemaDetectionResult(); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI\XmlConfiguration; + +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + * + * @psalm-immutable + */ +final class SuccessfulSchemaDetectionResult extends \PHPUnit\TextUI\XmlConfiguration\SchemaDetectionResult +{ + /** + * @psalm-var non-empty-string + */ + private readonly string $version; + /** + * @psalm-param non-empty-string $version + */ + public function __construct(string $version) + { + $this->version = $version; + } + /** + * @psalm-assert-if-true SuccessfulSchemaDetectionResult $this + */ + public function detected() : bool + { + return \true; + } + /** + * @psalm-return non-empty-string + */ + public function version() : string + { + return $this->version; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI\XmlConfiguration; + +use function assert; +use function defined; +use function is_file; +use function rsort; +use function sprintf; +use DirectoryIterator; +use PHPUnit\Runner\Version; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class SchemaFinder +{ + /** + * @psalm-return non-empty-list + */ + public function available() : array + { + $result = [Version::series()]; + foreach (new DirectoryIterator($this->path() . 'schema') as $file) { + if ($file->isDot()) { + continue; + } + $version = $file->getBasename('.xsd'); + assert(!empty($version)); + $result[] = $version; + } + rsort($result); + return $result; + } + /** + * @throws CannotFindSchemaException + */ + public function find(string $version) : string + { + if ($version === Version::series()) { + $filename = $this->path() . 'phpunit.xsd'; + } else { + $filename = $this->path() . 'schema/' . $version . '.xsd'; + } + if (!is_file($filename)) { + throw new \PHPUnit\TextUI\XmlConfiguration\CannotFindSchemaException(sprintf('Schema for PHPUnit %s is not available', $version)); + } + return $filename; + } + private function path() : string + { + if (defined('__PHPUNIT_PHAR_ROOT__')) { + return __PHPUNIT_PHAR_ROOT__ . '/'; + } + return __DIR__ . '/../../../../'; + } } name(), $filterAsArray, \true)) { continue; @@ -82091,23 +89986,19 @@ final class TestSuiteMapper if (!empty($excludedFilterAsArray) && in_array($testSuiteConfiguration->name(), $excludedFilterAsArray, \true)) { continue; } - $testSuite = TestSuiteObject::empty($testSuiteConfiguration->name()); - $testSuiteEmpty = \true; $exclude = []; foreach ($testSuiteConfiguration->exclude()->asArray() as $file) { $exclude[] = $file->path(); } + $files = []; foreach ($testSuiteConfiguration->directories() as $directory) { + if (!str_contains($directory->path(), '*') && !is_dir($directory->path())) { + throw new TestDirectoryNotFoundException($directory->path()); + } if (!version_compare(PHP_VERSION, $directory->phpVersion(), $directory->phpVersionOperator()->asString())) { continue; } - $files = (new Facade())->getFilesAsArray($directory->path(), $directory->suffix(), $directory->prefix(), $exclude); - if (!empty($files)) { - $testSuite->addTestFiles($files); - $testSuiteEmpty = \false; - } elseif (!str_contains($directory->path(), '*') && !is_dir($directory->path())) { - throw new TestDirectoryNotFoundException($directory->path()); - } + $files = array_merge($files, (new Facade())->getFilesAsArray($directory->path(), $directory->suffix(), $directory->prefix(), $exclude)); } foreach ($testSuiteConfiguration->files() as $file) { if (!is_file($file->path())) { @@ -82116,10 +90007,11 @@ final class TestSuiteMapper if (!version_compare(PHP_VERSION, $file->phpVersion(), $file->phpVersionOperator()->asString())) { continue; } - $testSuite->addTestFile($file->path()); - $testSuiteEmpty = \false; + $files[] = $file->path(); } - if (!$testSuiteEmpty) { + if (!empty($files)) { + $testSuite = TestSuiteObject::empty($testSuiteConfiguration->name()); + $testSuite->addTestFiles(array_unique($files)); $result->addTest($testSuite); } } @@ -82131,6 +90023,125 @@ final class TestSuiteMapper } + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI\XmlConfiguration; + +use function sprintf; +use function trim; +use LibXMLError; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + * + * @psalm-immutable + */ +final class ValidationResult +{ + /** + * @psalm-var array> + */ + private readonly array $validationErrors; + /** + * @psalm-param array $errors + */ + public static function fromArray(array $errors) : self + { + $validationErrors = []; + foreach ($errors as $error) { + if (!isset($validationErrors[$error->line])) { + $validationErrors[$error->line] = []; + } + $validationErrors[$error->line][] = trim($error->message); + } + return new self($validationErrors); + } + private function __construct(array $validationErrors) + { + $this->validationErrors = $validationErrors; + } + public function hasValidationErrors() : bool + { + return !empty($this->validationErrors); + } + public function asString() : string + { + $buffer = ''; + foreach ($this->validationErrors as $line => $validationErrorsOnLine) { + $buffer .= sprintf(\PHP_EOL . ' Line %d:' . \PHP_EOL, $line); + foreach ($validationErrorsOnLine as $validationError) { + $buffer .= sprintf(' - %s' . \PHP_EOL, $validationError); + } + } + return $buffer; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI\XmlConfiguration; + +use function file_get_contents; +use function libxml_clear_errors; +use function libxml_get_errors; +use function libxml_use_internal_errors; +use DOMDocument; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class Validator +{ + public function validate(DOMDocument $document, string $xsdFilename) : \PHPUnit\TextUI\XmlConfiguration\ValidationResult + { + $originalErrorHandling = libxml_use_internal_errors(\true); + $document->schemaValidateSource(file_get_contents($xsdFilename)); + $errors = libxml_get_errors(); + libxml_clear_errors(); + libxml_use_internal_errors($originalErrorHandling); + return \PHPUnit\TextUI\XmlConfiguration\ValidationResult::fromArray($errors); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI; + +use function sprintf; +use RuntimeException; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + */ +final class DirectoryDoesNotExistException extends RuntimeException implements \PHPUnit\TextUI\Exception +{ + public function __construct(string $directory) + { + parent::__construct(sprintf('Directory "%s" does not exist and could not be created', $directory)); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI; + use RuntimeException; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit @@ -82288,7 +90324,7 @@ use PHPUnit\SebastianBergmann\Environment\Console; final class Help { private const LEFT_MARGIN = ' '; - private const HELP_TEXT = ['Usage' => [['text' => 'phpunit [options] UnitTest.php'], ['text' => 'phpunit [options] ']], 'Configuration' => [['arg' => '--bootstrap ', 'desc' => 'A PHP script that is included before the tests run'], ['arg' => '-c|--configuration ', 'desc' => 'Read configuration from XML file'], ['arg' => '--no-configuration', 'desc' => 'Ignore default configuration file (phpunit.xml)'], ['arg' => '--no-extensions', 'desc' => 'Do not load PHPUnit extensions'], ['arg' => '--include-path ', 'desc' => 'Prepend PHP\'s include_path with given path(s)'], ['arg' => '-d ', 'desc' => 'Sets a php.ini value'], ['arg' => '--cache-directory ', 'desc' => 'Specify cache directory'], ['arg' => '--generate-configuration', 'desc' => 'Generate configuration file with suggested settings'], ['arg' => '--migrate-configuration', 'desc' => 'Migrate configuration file to current format']], 'Selection' => [['arg' => '--list-suites', 'desc' => 'List available test suites'], ['arg' => '--testsuite ', 'desc' => 'Only run tests from the specified test suite(s)'], ['arg' => '--exclude-testsuite ', 'desc' => 'Exclude tests from the specified test suite(s)'], ['arg' => '--list-groups', 'desc' => 'List available test groups'], ['arg' => '--group ', 'desc' => 'Only run tests from the specified group(s)'], ['arg' => '--exclude-group ', 'desc' => 'Exclude tests from the specified group(s)'], ['arg' => '--covers ', 'desc' => 'Only run tests that intend to cover '], ['arg' => '--uses ', 'desc' => 'Only run tests that intend to use '], ['arg' => '--list-tests', 'desc' => 'List available tests'], ['arg' => '--list-tests-xml ', 'desc' => 'List available tests in XML format'], ['arg' => '--filter ', 'desc' => 'Filter which tests to run'], ['arg' => '--test-suffix ', 'desc' => 'Only search for test in files with specified suffix(es). Default: Test.php,.phpt']], 'Execution' => [['arg' => '--process-isolation', 'desc' => 'Run each test in a separate PHP process'], ['arg' => '--globals-backup', 'desc' => 'Backup and restore $GLOBALS for each test'], ['arg' => '--static-backup', 'desc' => 'Backup and restore static properties for each test'], ['spacer' => ''], ['arg' => '--strict-coverage', 'desc' => 'Be strict about code coverage metadata'], ['arg' => '--strict-global-state', 'desc' => 'Be strict about changes to global state'], ['arg' => '--disallow-test-output', 'desc' => 'Be strict about output during tests'], ['arg' => '--enforce-time-limit', 'desc' => 'Enforce time limit based on test size'], ['arg' => '--default-time-limit ', 'desc' => 'Timeout in seconds for tests that have no declared size'], ['arg' => '--dont-report-useless-tests', 'desc' => 'Do not report tests that do not test anything'], ['spacer' => ''], ['arg' => '--stop-on-defect', 'desc' => 'Stop execution upon first not-passed test'], ['arg' => '--stop-on-error', 'desc' => 'Stop execution upon first error'], ['arg' => '--stop-on-failure', 'desc' => 'Stop execution upon first error or failure'], ['arg' => '--stop-on-warning', 'desc' => 'Stop execution upon first warning'], ['arg' => '--stop-on-risky', 'desc' => 'Stop execution upon first risky test'], ['arg' => '--stop-on-skipped', 'desc' => 'Stop execution upon first skipped test'], ['arg' => '--stop-on-incomplete', 'desc' => 'Stop execution upon first incomplete test'], ['spacer' => ''], ['arg' => '--fail-on-incomplete', 'desc' => 'Treat incomplete tests as failures'], ['arg' => '--fail-on-risky', 'desc' => 'Treat risky tests as failures'], ['arg' => '--fail-on-skipped', 'desc' => 'Treat skipped tests as failures'], ['arg' => '--fail-on-warning', 'desc' => 'Treat tests with warnings as failures'], ['spacer' => ''], ['arg' => '--cache-result', 'desc' => 'Write test results to cache file'], ['arg' => '--do-not-cache-result', 'desc' => 'Do not write test results to cache file'], ['spacer' => ''], ['arg' => '--order-by ', 'desc' => 'Run tests in order: default|defects|depends|duration|no-depends|random|reverse|size'], ['arg' => '--random-order-seed ', 'desc' => 'Use the specified random seed when running tests in random order']], 'Reporting' => [['arg' => '--colors ', 'desc' => 'Use colors in output ("never", "auto" or "always")'], ['arg' => '--columns ', 'desc' => 'Number of columns to use for progress output'], ['arg' => '--columns max', 'desc' => 'Use maximum number of columns for progress output'], ['arg' => '--stderr', 'desc' => 'Write to STDERR instead of STDOUT'], ['spacer' => ''], ['arg' => '--no-progress', 'desc' => 'Disable output of test execution progress'], ['arg' => '--no-results', 'desc' => 'Disable output of test results'], ['arg' => '--no-output', 'desc' => 'Disable all output'], ['spacer' => ''], ['arg' => '--display-incomplete', 'desc' => 'Display details for incomplete tests'], ['arg' => '--display-skipped', 'desc' => 'Display details for skipped tests'], ['arg' => '--display-deprecations', 'desc' => 'Display details for deprecations triggered by tests'], ['arg' => '--display-errors', 'desc' => 'Display details for errors triggered by tests'], ['arg' => '--display-notices', 'desc' => 'Display details for notices triggered by tests'], ['arg' => '--display-warnings', 'desc' => 'Display details for warnings triggered by tests'], ['arg' => '--reverse-list', 'desc' => 'Print defects in reverse order'], ['spacer' => ''], ['arg' => '--teamcity', 'desc' => 'Replace default progress and result output with TeamCity format'], ['arg' => '--testdox', 'desc' => 'Replace default result output with TestDox format']], 'Logging' => [['arg' => '--log-junit ', 'desc' => 'Write test results in JUnit XML format to file'], ['arg' => '--log-teamcity ', 'desc' => 'Write test results in TeamCity format to file'], ['arg' => '--testdox-html ', 'desc' => 'Write test results in TestDox format (HTML) to file'], ['arg' => '--testdox-text ', 'desc' => 'Write test results in TestDox format (plain text) to file'], ['arg' => '--log-events-text ', 'desc' => 'Stream events as plain text to file'], ['arg' => '--log-events-verbose-text ', 'desc' => 'Stream events as plain text (with telemetry information) to file'], ['arg' => '--no-logging', 'desc' => 'Ignore logging configured in the XML configuration file']], 'Code Coverage' => [['arg' => '--coverage-clover ', 'desc' => 'Write code coverage report in Clover XML format to file'], ['arg' => '--coverage-cobertura ', 'desc' => 'Write code coverage report in Cobertura XML format to file'], ['arg' => '--coverage-crap4j ', 'desc' => 'Write code coverage report in Crap4J XML format to file'], ['arg' => '--coverage-html ', 'desc' => 'Write code coverage report in HTML format to directory'], ['arg' => '--coverage-php ', 'desc' => 'Write serialized code coverage data to file'], ['arg' => '--coverage-text=', 'desc' => 'Write code coverage report in text format to file [default: standard output]'], ['arg' => '--coverage-xml ', 'desc' => 'Write code coverage report in XML format to directory'], ['arg' => '--warm-coverage-cache', 'desc' => 'Warm static analysis cache'], ['arg' => '--coverage-filter ', 'desc' => 'Include in code coverage reporting'], ['arg' => '--path-coverage', 'desc' => 'Report path coverage in addition to line coverage'], ['arg' => '--disable-coverage-ignore', 'desc' => 'Disable metadata for ignoring code coverage'], ['arg' => '--no-coverage', 'desc' => 'Ignore code coverage reporting configured in the XML configuration file']], 'Miscellaneous' => [['arg' => '-h|--help', 'desc' => 'Prints this usage information'], ['arg' => '--version', 'desc' => 'Prints the version and exits'], ['arg' => '--atleast-version ', 'desc' => 'Checks that version is greater than and exits'], ['arg' => '--check-version', 'desc' => 'Check whether PHPUnit is the latest version and exits']]]; + private const HELP_TEXT = ['Usage' => [['text' => 'phpunit [options] ...']], 'Configuration' => [['arg' => '--bootstrap ', 'desc' => 'A PHP script that is included before the tests run'], ['arg' => '-c|--configuration ', 'desc' => 'Read configuration from XML file'], ['arg' => '--no-configuration', 'desc' => 'Ignore default configuration file (phpunit.xml)'], ['arg' => '--no-extensions', 'desc' => 'Do not load PHPUnit extensions'], ['arg' => '--include-path ', 'desc' => 'Prepend PHP\'s include_path with given path(s)'], ['arg' => '-d ', 'desc' => 'Sets a php.ini value'], ['arg' => '--cache-directory ', 'desc' => 'Specify cache directory'], ['arg' => '--generate-configuration', 'desc' => 'Generate configuration file with suggested settings'], ['arg' => '--migrate-configuration', 'desc' => 'Migrate configuration file to current format'], ['arg' => '--generate-baseline ', 'desc' => 'Generate baseline for issues'], ['arg' => '--use-baseline ', 'desc' => 'Use baseline to ignore issues'], ['arg' => '--ignore-baseline', 'desc' => 'Do not use baseline to ignore issues']], 'Selection' => [['arg' => '--list-suites', 'desc' => 'List available test suites'], ['arg' => '--testsuite ', 'desc' => 'Only run tests from the specified test suite(s)'], ['arg' => '--exclude-testsuite ', 'desc' => 'Exclude tests from the specified test suite(s)'], ['arg' => '--list-groups', 'desc' => 'List available test groups'], ['arg' => '--group ', 'desc' => 'Only run tests from the specified group(s)'], ['arg' => '--exclude-group ', 'desc' => 'Exclude tests from the specified group(s)'], ['arg' => '--covers ', 'desc' => 'Only run tests that intend to cover '], ['arg' => '--uses ', 'desc' => 'Only run tests that intend to use '], ['arg' => '--list-tests', 'desc' => 'List available tests'], ['arg' => '--list-tests-xml ', 'desc' => 'List available tests in XML format'], ['arg' => '--filter ', 'desc' => 'Filter which tests to run'], ['arg' => '--test-suffix ', 'desc' => 'Only search for test in files with specified suffix(es). Default: Test.php,.phpt']], 'Execution' => [['arg' => '--process-isolation', 'desc' => 'Run each test in a separate PHP process'], ['arg' => '--globals-backup', 'desc' => 'Backup and restore $GLOBALS for each test'], ['arg' => '--static-backup', 'desc' => 'Backup and restore static properties for each test'], ['spacer' => ''], ['arg' => '--strict-coverage', 'desc' => 'Be strict about code coverage metadata'], ['arg' => '--strict-global-state', 'desc' => 'Be strict about changes to global state'], ['arg' => '--disallow-test-output', 'desc' => 'Be strict about output during tests'], ['arg' => '--enforce-time-limit', 'desc' => 'Enforce time limit based on test size'], ['arg' => '--default-time-limit ', 'desc' => 'Timeout in seconds for tests that have no declared size'], ['arg' => '--dont-report-useless-tests', 'desc' => 'Do not report tests that do not test anything'], ['spacer' => ''], ['arg' => '--stop-on-defect', 'desc' => 'Stop after first error, failure, warning, or risky test'], ['arg' => '--stop-on-error', 'desc' => 'Stop after first error'], ['arg' => '--stop-on-failure', 'desc' => 'Stop after first failure'], ['arg' => '--stop-on-warning', 'desc' => 'Stop after first warning'], ['arg' => '--stop-on-risky', 'desc' => 'Stop after first risky test'], ['arg' => '--stop-on-deprecation', 'desc' => 'Stop after first test that triggered a deprecation'], ['arg' => '--stop-on-notice', 'desc' => 'Stop after first test that triggered a notice'], ['arg' => '--stop-on-skipped', 'desc' => 'Stop after first skipped test'], ['arg' => '--stop-on-incomplete', 'desc' => 'Stop after first incomplete test'], ['spacer' => ''], ['arg' => '--fail-on-warning', 'desc' => 'Signal failure using shell exit code when a warning was triggered'], ['arg' => '--fail-on-risky', 'desc' => 'Signal failure using shell exit code when a test was considered risky'], ['arg' => '--fail-on-deprecation', 'desc' => 'Signal failure using shell exit code when a deprecation was triggered'], ['arg' => '--fail-on-notice', 'desc' => 'Signal failure using shell exit code when a notice was triggered'], ['arg' => '--fail-on-skipped', 'desc' => 'Signal failure using shell exit code when a test was skipped'], ['arg' => '--fail-on-incomplete', 'desc' => 'Signal failure using shell exit code when a test was marked incomplete'], ['spacer' => ''], ['arg' => '--cache-result', 'desc' => 'Write test results to cache file'], ['arg' => '--do-not-cache-result', 'desc' => 'Do not write test results to cache file'], ['spacer' => ''], ['arg' => '--order-by ', 'desc' => 'Run tests in order: default|defects|depends|duration|no-depends|random|reverse|size'], ['arg' => '--random-order-seed ', 'desc' => 'Use the specified random seed when running tests in random order']], 'Reporting' => [['arg' => '--colors ', 'desc' => 'Use colors in output ("never", "auto" or "always")'], ['arg' => '--columns ', 'desc' => 'Number of columns to use for progress output'], ['arg' => '--columns max', 'desc' => 'Use maximum number of columns for progress output'], ['arg' => '--stderr', 'desc' => 'Write to STDERR instead of STDOUT'], ['spacer' => ''], ['arg' => '--no-progress', 'desc' => 'Disable output of test execution progress'], ['arg' => '--no-results', 'desc' => 'Disable output of test results'], ['arg' => '--no-output', 'desc' => 'Disable all output'], ['spacer' => ''], ['arg' => '--display-incomplete', 'desc' => 'Display details for incomplete tests'], ['arg' => '--display-skipped', 'desc' => 'Display details for skipped tests'], ['arg' => '--display-deprecations', 'desc' => 'Display details for deprecations triggered by tests'], ['arg' => '--display-errors', 'desc' => 'Display details for errors triggered by tests'], ['arg' => '--display-notices', 'desc' => 'Display details for notices triggered by tests'], ['arg' => '--display-warnings', 'desc' => 'Display details for warnings triggered by tests'], ['arg' => '--reverse-list', 'desc' => 'Print defects in reverse order'], ['spacer' => ''], ['arg' => '--teamcity', 'desc' => 'Replace default progress and result output with TeamCity format'], ['arg' => '--testdox', 'desc' => 'Replace default result output with TestDox format'], ['spacer' => ''], ['arg' => '--debug', 'desc' => 'Replace default progress and result output with debugging information']], 'Logging' => [['arg' => '--log-junit ', 'desc' => 'Write test results in JUnit XML format to file'], ['arg' => '--log-teamcity ', 'desc' => 'Write test results in TeamCity format to file'], ['arg' => '--testdox-html ', 'desc' => 'Write test results in TestDox format (HTML) to file'], ['arg' => '--testdox-text ', 'desc' => 'Write test results in TestDox format (plain text) to file'], ['arg' => '--log-events-text ', 'desc' => 'Stream events as plain text to file'], ['arg' => '--log-events-verbose-text ', 'desc' => 'Stream events as plain text with extended information to file'], ['arg' => '--no-logging', 'desc' => 'Ignore logging configured in the XML configuration file']], 'Code Coverage' => [['arg' => '--coverage-clover ', 'desc' => 'Write code coverage report in Clover XML format to file'], ['arg' => '--coverage-cobertura ', 'desc' => 'Write code coverage report in Cobertura XML format to file'], ['arg' => '--coverage-crap4j ', 'desc' => 'Write code coverage report in Crap4J XML format to file'], ['arg' => '--coverage-html ', 'desc' => 'Write code coverage report in HTML format to directory'], ['arg' => '--coverage-php ', 'desc' => 'Write serialized code coverage data to file'], ['arg' => '--coverage-text=', 'desc' => 'Write code coverage report in text format to file [default: standard output]'], ['arg' => '--coverage-xml ', 'desc' => 'Write code coverage report in XML format to directory'], ['arg' => '--warm-coverage-cache', 'desc' => 'Warm static analysis cache'], ['arg' => '--coverage-filter ', 'desc' => 'Include in code coverage reporting'], ['arg' => '--path-coverage', 'desc' => 'Report path coverage in addition to line coverage'], ['arg' => '--disable-coverage-ignore', 'desc' => 'Disable metadata for ignoring code coverage'], ['arg' => '--no-coverage', 'desc' => 'Ignore code coverage reporting configured in the XML configuration file']], 'Miscellaneous' => [['arg' => '-h|--help', 'desc' => 'Prints this usage information'], ['arg' => '--version', 'desc' => 'Prints the version and exits'], ['arg' => '--atleast-version ', 'desc' => 'Checks that version is greater than and exits'], ['arg' => '--check-version', 'desc' => 'Check whether PHPUnit is the latest version and exits']]]; private int $lengthOfLongestOptionName = 0; private readonly int $columnsAvailableForDescription; private ?bool $hasColor; @@ -82392,11 +90428,19 @@ use function str_repeat; use function strlen; use PHPUnit\Event\EventFacadeIsSealedException; use PHPUnit\Event\Facade; +use PHPUnit\Event\Test\DeprecationTriggered; use PHPUnit\Event\Test\Errored; -use PHPUnit\Event\Test\PrintedUnexpectedOutput; +use PHPUnit\Event\Test\ErrorTriggered; +use PHPUnit\Event\Test\NoticeTriggered; +use PHPUnit\Event\Test\PhpDeprecationTriggered; +use PHPUnit\Event\Test\PhpNoticeTriggered; +use PHPUnit\Event\Test\PhpWarningTriggered; +use PHPUnit\Event\Test\WarningTriggered; use PHPUnit\Event\TestRunner\ExecutionStarted; use PHPUnit\Event\UnknownSubscriberTypeException; use PHPUnit\Framework\TestStatus\TestStatus; +use PHPUnit\TextUI\Configuration\Source; +use PHPUnit\TextUI\Configuration\SourceFilter; use PHPUnit\TextUI\Output\Printer; use PHPUnit\Util\Color; /** @@ -82407,6 +90451,7 @@ final class ProgressPrinter private readonly Printer $printer; private readonly bool $colors; private readonly int $numberOfColumns; + private readonly Source $source; private int $column = 0; private int $numberOfTests = 0; private int $numberOfTestsWidth = 0; @@ -82418,12 +90463,13 @@ final class ProgressPrinter * @throws EventFacadeIsSealedException * @throws UnknownSubscriberTypeException */ - public function __construct(Printer $printer, bool $colors, int $numberOfColumns) + public function __construct(Printer $printer, Facade $facade, bool $colors, int $numberOfColumns, Source $source) { $this->printer = $printer; $this->colors = $colors; $this->numberOfColumns = $numberOfColumns; - $this->registerSubscribers(); + $this->source = $source; + $this->registerSubscribers($facade); } public function testRunnerExecutionStarted(ExecutionStarted $event) : void { @@ -82454,11 +90500,59 @@ final class ProgressPrinter { $this->updateTestStatus(TestStatus::incomplete()); } - public function testTriggeredNotice() : void + public function testTriggeredNotice(NoticeTriggered $event) : void + { + if ($event->ignoredByBaseline()) { + return; + } + if ($this->source->restrictNotices() && !(new SourceFilter())->includes($this->source, $event->file())) { + return; + } + if (!$this->source->ignoreSuppressionOfNotices() && $event->wasSuppressed()) { + return; + } + $this->updateTestStatus(TestStatus::notice()); + } + public function testTriggeredPhpNotice(PhpNoticeTriggered $event) : void { + if ($event->ignoredByBaseline()) { + return; + } + if ($this->source->restrictNotices() && !(new SourceFilter())->includes($this->source, $event->file())) { + return; + } + if (!$this->source->ignoreSuppressionOfPhpNotices() && $event->wasSuppressed()) { + return; + } $this->updateTestStatus(TestStatus::notice()); } - public function testTriggeredDeprecation() : void + public function testTriggeredDeprecation(DeprecationTriggered $event) : void + { + if ($event->ignoredByBaseline() || $event->ignoredByTest()) { + return; + } + if ($this->source->restrictDeprecations() && !(new SourceFilter())->includes($this->source, $event->file())) { + return; + } + if (!$this->source->ignoreSuppressionOfDeprecations() && $event->wasSuppressed()) { + return; + } + $this->updateTestStatus(TestStatus::deprecation()); + } + public function testTriggeredPhpDeprecation(PhpDeprecationTriggered $event) : void + { + if ($event->ignoredByBaseline() || $event->ignoredByTest()) { + return; + } + if ($this->source->restrictDeprecations() && !(new SourceFilter())->includes($this->source, $event->file())) { + return; + } + if (!$this->source->ignoreSuppressionOfPhpDeprecations() && $event->wasSuppressed()) { + return; + } + $this->updateTestStatus(TestStatus::deprecation()); + } + public function testTriggeredPhpunitDeprecation() : void { $this->updateTestStatus(TestStatus::deprecation()); } @@ -82466,10 +90560,43 @@ final class ProgressPrinter { $this->updateTestStatus(TestStatus::risky()); } - public function testTriggeredWarning() : void + public function testTriggeredWarning(WarningTriggered $event) : void { + if ($event->ignoredByBaseline()) { + return; + } + if ($this->source->restrictWarnings() && !(new SourceFilter())->includes($this->source, $event->file())) { + return; + } + if (!$this->source->ignoreSuppressionOfWarnings() && $event->wasSuppressed()) { + return; + } $this->updateTestStatus(TestStatus::warning()); } + public function testTriggeredPhpWarning(PhpWarningTriggered $event) : void + { + if ($event->ignoredByBaseline()) { + return; + } + if ($this->source->restrictWarnings() && !(new SourceFilter())->includes($this->source, $event->file())) { + return; + } + if (!$this->source->ignoreSuppressionOfPhpWarnings() && $event->wasSuppressed()) { + return; + } + $this->updateTestStatus(TestStatus::warning()); + } + public function testTriggeredPhpunitWarning() : void + { + $this->updateTestStatus(TestStatus::warning()); + } + public function testTriggeredError(ErrorTriggered $event) : void + { + if (!$this->source->ignoreSuppressionOfErrors() && $event->wasSuppressed()) { + return; + } + $this->updateTestStatus(TestStatus::error()); + } public function testFailed() : void { $this->updateTestStatus(TestStatus::failure()); @@ -82489,10 +90616,6 @@ final class ProgressPrinter $this->updateTestStatus(TestStatus::error()); } } - public function testPrintedOutput(PrintedUnexpectedOutput $event) : void - { - $this->printer->print($event->output()); - } public function testFinished() : void { if ($this->status === null) { @@ -82521,9 +90644,9 @@ final class ProgressPrinter * @throws EventFacadeIsSealedException * @throws UnknownSubscriberTypeException */ - private function registerSubscribers() : void + private function registerSubscribers(Facade $facade) : void { - Facade::registerSubscribers(new \PHPUnit\TextUI\Output\Default\ProgressPrinter\BeforeTestClassMethodErroredSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestConsideredRiskySubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestErroredSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestFailedSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestFinishedSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestMarkedIncompleteSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestPreparedSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestRunnerExecutionStartedSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestSkippedSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestTriggeredDeprecationSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestTriggeredNoticeSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestTriggeredPhpDeprecationSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestTriggeredPhpNoticeSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestTriggeredPhpunitDeprecationSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestTriggeredPhpunitWarningSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestTriggeredPhpWarningSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestTriggeredWarningSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestPrintedUnexpectedOutputSubscriber($this)); + $facade->registerSubscribers(new \PHPUnit\TextUI\Output\Default\ProgressPrinter\BeforeTestClassMethodErroredSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestConsideredRiskySubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestErroredSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestFailedSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestFinishedSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestMarkedIncompleteSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestPreparedSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestRunnerExecutionStartedSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestSkippedSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestTriggeredDeprecationSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestTriggeredNoticeSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestTriggeredPhpDeprecationSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestTriggeredPhpNoticeSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestTriggeredPhpunitDeprecationSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestTriggeredPhpunitWarningSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestTriggeredPhpWarningSubscriber($this), new \PHPUnit\TextUI\Output\Default\ProgressPrinter\TestTriggeredWarningSubscriber($this)); } private function updateTestStatus(TestStatus $status) : void { @@ -82808,16 +90931,16 @@ declare (strict_types=1); */ namespace PHPUnit\TextUI\Output\Default\ProgressPrinter; -use PHPUnit\Event\Test\PrintedUnexpectedOutput; -use PHPUnit\Event\Test\PrintedUnexpectedOutputSubscriber; +use PHPUnit\Event\TestRunner\ExecutionStarted; +use PHPUnit\Event\TestRunner\ExecutionStartedSubscriber; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ -final class TestPrintedUnexpectedOutputSubscriber extends \PHPUnit\TextUI\Output\Default\ProgressPrinter\Subscriber implements PrintedUnexpectedOutputSubscriber +final class TestRunnerExecutionStartedSubscriber extends \PHPUnit\TextUI\Output\Default\ProgressPrinter\Subscriber implements ExecutionStartedSubscriber { - public function notify(PrintedUnexpectedOutput $event) : void + public function notify(ExecutionStarted $event) : void { - $this->printer()->testPrintedOutput($event); + $this->printer()->testRunnerExecutionStarted($event); } } printer()->testRunnerExecutionStarted($event); + $this->printer()->testSkipped(); } } printer()->testSkipped(); + $this->printer()->testTriggeredDeprecation($event); } } printer()->testTriggeredDeprecation(); + $this->printer()->testTriggeredError($event); } } printer()->testTriggeredNotice(); + $this->printer()->testTriggeredNotice($event); } } printer()->testTriggeredDeprecation(); + $this->printer()->testTriggeredPhpDeprecation($event); } } printer()->testTriggeredNotice(); + $this->printer()->testTriggeredPhpNotice($event); } } printer()->testTriggeredWarning(); + $this->printer()->testTriggeredPhpWarning($event); } } printer()->testTriggeredDeprecation(); + $this->printer()->testTriggeredPhpunitDeprecation(); } } printer()->testTriggeredWarning(); + $this->printer()->testTriggeredPhpunitWarning(); } } printer()->testTriggeredWarning(); + $this->printer()->testTriggeredWarning($event); } } printer = $printer; $this->displayPhpunitErrors = $displayPhpunitErrors; $this->displayPhpunitWarnings = $displayPhpunitWarnings; + $this->displayPhpunitDeprecations = $displayPhpunitDeprecations; $this->displayTestsWithErrors = $displayTestsWithErrors; $this->displayTestsWithFailedAssertions = $displayTestsWithFailedAssertions; $this->displayRiskyTests = $displayRiskyTests; - $this->displayDetailsOnTestsThatTriggeredPhpunitDeprecations = $displayDetailsOnTestsThatTriggeredPhpunitDeprecations; $this->displayDetailsOnIncompleteTests = $displayDetailsOnIncompleteTests; $this->displayDetailsOnSkippedTests = $displayDetailsOnSkippedTests; $this->displayDetailsOnTestsThatTriggerDeprecations = $displayDetailsOnTestsThatTriggerDeprecations; @@ -83155,7 +91281,10 @@ final class ResultPrinter $this->printPhpunitErrors($result); } if ($this->displayPhpunitWarnings) { - $this->printPhpunitWarnings($result); + $this->printTestRunnerWarnings($result); + } + if ($this->displayPhpunitDeprecations) { + $this->printTestRunnerDeprecations($result); } if ($this->displayTestsWithErrors) { $this->printTestsWithErrors($result); @@ -83163,12 +91292,15 @@ final class ResultPrinter if ($this->displayTestsWithFailedAssertions) { $this->printTestsWithFailedAssertions($result); } - if ($this->displayRiskyTests) { - $this->printRiskyTests($result); + if ($this->displayPhpunitWarnings) { + $this->printDetailsOnTestsThatTriggeredPhpunitWarnings($result); } - if ($this->displayDetailsOnTestsThatTriggeredPhpunitDeprecations) { + if ($this->displayPhpunitDeprecations) { $this->printDetailsOnTestsThatTriggeredPhpunitDeprecations($result); } + if ($this->displayRiskyTests) { + $this->printRiskyTests($result); + } if ($this->displayDetailsOnIncompleteTests) { $this->printIncompleteTests($result); } @@ -83176,20 +91308,20 @@ final class ResultPrinter $this->printSkippedTestSuites($result); $this->printSkippedTests($result); } - if ($this->displayDetailsOnTestsThatTriggerDeprecations) { - $this->printDetailsOnTestsThatTriggerPhpDeprecations($result); - $this->printDetailsOnTestsThatTriggerDeprecations($result); - } if ($this->displayDetailsOnTestsThatTriggerErrors) { - $this->printDetailsOnTestsThatTriggerErrors($result); + $this->printIssueList('error', $result->errors()); + } + if ($this->displayDetailsOnTestsThatTriggerWarnings) { + $this->printIssueList('PHP warning', $result->phpWarnings()); + $this->printIssueList('warning', $result->warnings()); } if ($this->displayDetailsOnTestsThatTriggerNotices) { - $this->printDetailsOnTestsThatTriggerPhpNotices($result); - $this->printDetailsOnTestsThatTriggerNotices($result); + $this->printIssueList('PHP notice', $result->phpNotices()); + $this->printIssueList('notice', $result->notices()); } - if ($this->displayDetailsOnTestsThatTriggerWarnings) { - $this->printDetailsOnTestsThatTriggerPhpWarnings($result); - $this->printDetailsOnTestsThatTriggerWarnings($result); + if ($this->displayDetailsOnTestsThatTriggerDeprecations) { + $this->printIssueList('PHP deprecation', $result->phpDeprecations()); + $this->printIssueList('deprecation', $result->deprecations()); } } public function flush() : void @@ -83201,26 +91333,51 @@ final class ResultPrinter if (!$result->hasTestTriggeredPhpunitErrorEvents()) { return; } - $this->printList($result->numberOfTestsWithTestTriggeredPhpunitErrorEvents(), $this->mapTestsWithIssuesEventsToElements($result->testTriggeredPhpunitErrorEvents()), 'PHPUnit error'); + $elements = $this->mapTestsWithIssuesEventsToElements($result->testTriggeredPhpunitErrorEvents()); + $this->printListHeaderWithNumber($elements['numberOfTestsWithIssues'], 'PHPUnit error'); + $this->printList($elements['elements']); + } + private function printDetailsOnTestsThatTriggeredPhpunitDeprecations(TestResult $result) : void + { + if (!$result->hasTestTriggeredPhpunitDeprecationEvents()) { + return; + } + $elements = $this->mapTestsWithIssuesEventsToElements($result->testTriggeredPhpunitDeprecationEvents()); + $this->printListHeaderWithNumberOfTestsAndNumberOfIssues($elements['numberOfTestsWithIssues'], $elements['numberOfIssues'], 'PHPUnit deprecation'); + $this->printList($elements['elements']); } - private function printPhpunitWarnings(TestResult $result) : void + private function printTestRunnerWarnings(TestResult $result) : void { - if (!$result->hasTestRunnerTriggeredWarningEvents() && !$result->hasTestTriggeredPhpunitWarningEvents()) { + if (!$result->hasTestRunnerTriggeredWarningEvents()) { return; } $elements = []; foreach ($result->testRunnerTriggeredWarningEvents() as $event) { $elements[] = ['title' => $event->message(), 'body' => '']; } - $elements = array_merge($elements, $this->mapTestsWithIssuesEventsToElements($result->testTriggeredPhpunitWarningEvents())); - $this->printList($result->numberOfTestRunnerTriggeredWarningEvents() + $result->numberOfTestsWithTestTriggeredPhpunitWarningEvents(), $elements, 'PHPUnit warning'); + $this->printListHeaderWithNumber(count($elements), 'PHPUnit test runner warning'); + $this->printList($elements); } - private function printDetailsOnTestsThatTriggeredPhpunitDeprecations(TestResult $result) : void + private function printTestRunnerDeprecations(TestResult $result) : void { - if (!$result->hasTestTriggeredPhpunitDeprecationEvents()) { + if (!$result->hasTestRunnerTriggeredDeprecationEvents()) { return; } - $this->printList($result->numberOfTestsWithTestTriggeredPhpunitDeprecationEvents(), $this->mapTestsWithIssuesEventsToElements($result->testTriggeredPhpunitDeprecationEvents()), 'PHPUnit deprecation'); + $elements = []; + foreach ($result->testRunnerTriggeredDeprecationEvents() as $event) { + $elements[] = ['title' => $event->message(), 'body' => '']; + } + $this->printListHeaderWithNumber(count($elements), 'PHPUnit test runner deprecation'); + $this->printList($elements); + } + private function printDetailsOnTestsThatTriggeredPhpunitWarnings(TestResult $result) : void + { + if (!$result->hasTestTriggeredPhpunitWarningEvents()) { + return; + } + $elements = $this->mapTestsWithIssuesEventsToElements($result->testTriggeredPhpunitWarningEvents()); + $this->printListHeaderWithNumberOfTestsAndNumberOfIssues($elements['numberOfTestsWithIssues'], $elements['numberOfIssues'], 'PHPUnit warning'); + $this->printList($elements['elements']); } private function printTestsWithErrors(TestResult $result) : void { @@ -83236,7 +91393,8 @@ final class ResultPrinter } $elements[] = ['title' => $title, 'body' => $event->throwable()->asString()]; } - $this->printList(count($elements), $elements, 'error'); + $this->printListHeaderWithNumber(count($elements), 'error'); + $this->printList($elements); } private function printTestsWithFailedAssertions(TestResult $result) : void { @@ -83251,14 +91409,17 @@ final class ResultPrinter } $elements[] = ['title' => $this->name($event->test()), 'body' => $body]; } - $this->printList(count($elements), $elements, 'failure'); + $this->printListHeaderWithNumber(count($elements), 'failure'); + $this->printList($elements); } private function printRiskyTests(TestResult $result) : void { if (!$result->hasTestConsideredRiskyEvents()) { return; } - $this->printList($result->numberOfTestsWithTestConsideredRiskyEvents(), $this->mapTestsWithIssuesEventsToElements($result->testConsideredRiskyEvents()), 'risky test'); + $elements = $this->mapTestsWithIssuesEventsToElements($result->testConsideredRiskyEvents()); + $this->printListHeaderWithNumber($elements['numberOfTestsWithIssues'], 'risky test'); + $this->printList($elements['elements']); } private function printIncompleteTests(TestResult $result) : void { @@ -83269,7 +91430,8 @@ final class ResultPrinter foreach ($result->testMarkedIncompleteEvents() as $event) { $elements[] = ['title' => $this->name($event->test()), 'body' => $event->throwable()->asString()]; } - $this->printList(count($elements), $elements, 'incomplete test'); + $this->printListHeaderWithNumber(count($elements), 'incomplete test'); + $this->printList($elements); } private function printSkippedTestSuites(TestResult $result) : void { @@ -83280,7 +91442,8 @@ final class ResultPrinter foreach ($result->testSuiteSkippedEvents() as $event) { $elements[] = ['title' => $event->testSuite()->name(), 'body' => $event->message()]; } - $this->printList(count($elements), $elements, 'skipped test suite'); + $this->printListHeaderWithNumber(count($elements), 'skipped test suite'); + $this->printList($elements); } private function printSkippedTests(TestResult $result) : void { @@ -83291,67 +91454,66 @@ final class ResultPrinter foreach ($result->testSkippedEvents() as $event) { $elements[] = ['title' => $this->name($event->test()), 'body' => $event->message()]; } - $this->printList(count($elements), $elements, 'skipped test'); + $this->printListHeaderWithNumber(count($elements), 'skipped test'); + $this->printList($elements); } - private function printDetailsOnTestsThatTriggerPhpDeprecations(TestResult $result) : void + /** + * @psalm-param non-empty-string $type + * @psalm-param list $issues + */ + private function printIssueList(string $type, array $issues) : void { - if (!$result->hasTestTriggeredPhpDeprecationEvents()) { + if (empty($issues)) { return; } - $this->printList($result->numberOfTestsWithTestTriggeredPhpDeprecationEvents(), $this->mapTestsWithIssuesEventsToElements($result->testTriggeredPhpDeprecationEvents()), 'PHP deprecation'); - } - private function printDetailsOnTestsThatTriggerDeprecations(TestResult $result) : void - { - if (!$result->hasTestTriggeredDeprecationEvents()) { - return; + $numberOfUniqueIssues = count($issues); + $triggeringTests = []; + foreach ($issues as $issue) { + $triggeringTests = array_merge($triggeringTests, array_keys($issue->triggeringTests())); } - $this->printList($result->numberOfTestsWithTestTriggeredDeprecationEvents(), $this->mapTestsWithIssuesEventsToElements($result->testTriggeredDeprecationEvents()), 'deprecation'); - } - private function printDetailsOnTestsThatTriggerErrors(TestResult $result) : void - { - if (!$result->hasTestTriggeredErrorEvents()) { - return; - } - $this->printList($result->numberOfTestsWithTestTriggeredErrorEvents(), $this->mapTestsWithIssuesEventsToElements($result->testTriggeredErrorEvents()), 'error'); - } - private function printDetailsOnTestsThatTriggerPhpNotices(TestResult $result) : void - { - if (!$result->hasTestTriggeredPhpNoticeEvents()) { - return; + $numberOfTests = count(array_unique($triggeringTests)); + unset($triggeringTests); + $this->printListHeader(sprintf('%d test%s triggered %d %s%s:' . PHP_EOL . PHP_EOL, $numberOfTests, $numberOfTests !== 1 ? 's' : '', $numberOfUniqueIssues, $type, $numberOfUniqueIssues !== 1 ? 's' : '')); + $i = 1; + foreach ($issues as $issue) { + $title = sprintf('%s:%d', $issue->file(), $issue->line()); + $body = trim($issue->description()) . PHP_EOL . PHP_EOL . 'Triggered by:'; + $triggeringTests = $issue->triggeringTests(); + ksort($triggeringTests); + foreach ($triggeringTests as $triggeringTest) { + $body .= PHP_EOL . PHP_EOL . '* ' . $triggeringTest['test']->id(); + if ($triggeringTest['count'] > 1) { + $body .= sprintf(' (%d times)', $triggeringTest['count']); + } + if ($triggeringTest['test']->isTestMethod()) { + $body .= PHP_EOL . ' ' . $triggeringTest['test']->file() . ':' . $triggeringTest['test']->line(); + } + } + $this->printIssueListElement($i++, $title, $body); + $this->printer->print(PHP_EOL); } - $this->printList($result->numberOfTestsWithTestTriggeredPhpNoticeEvents(), $this->mapTestsWithIssuesEventsToElements($result->testTriggeredPhpNoticeEvents()), 'PHP notice'); } - private function printDetailsOnTestsThatTriggerNotices(TestResult $result) : void + private function printListHeaderWithNumberOfTestsAndNumberOfIssues(int $numberOfTestsWithIssues, int $numberOfIssues, string $type) : void { - if (!$result->hasTestTriggeredNoticeEvents()) { - return; - } - $this->printList($result->numberOfTestsWithTestTriggeredNoticeEvents(), $this->mapTestsWithIssuesEventsToElements($result->testTriggeredNoticeEvents()), 'notice'); + $this->printListHeader(sprintf("%d test%s triggered %d %s%s:\n\n", $numberOfTestsWithIssues, $numberOfTestsWithIssues !== 1 ? 's' : '', $numberOfIssues, $type, $numberOfIssues !== 1 ? 's' : '')); } - private function printDetailsOnTestsThatTriggerPhpWarnings(TestResult $result) : void + private function printListHeaderWithNumber(int $number, string $type) : void { - if (!$result->hasTestTriggeredPhpWarningEvents()) { - return; - } - $this->printList($result->numberOfTestsWithTestTriggeredPhpWarningEvents(), $this->mapTestsWithIssuesEventsToElements($result->testTriggeredPhpWarningEvents()), 'PHP warning'); + $this->printListHeader(sprintf("There %s %d %s%s:\n\n", $number === 1 ? 'was' : 'were', $number, $type, $number === 1 ? '' : 's')); } - private function printDetailsOnTestsThatTriggerWarnings(TestResult $result) : void + private function printListHeader(string $header) : void { - if (!$result->hasTestTriggeredWarningEvents()) { - return; + if ($this->listPrinted) { + $this->printer->print("--\n\n"); } - $this->printList($result->numberOfTestsWithTestTriggeredWarningEvents(), $this->mapTestsWithIssuesEventsToElements($result->testTriggeredWarningEvents()), 'warning'); + $this->listPrinted = \true; + $this->printer->print($header); } /** * @psalm-param list $elements */ - private function printList(int $count, array $elements, string $type) : void + private function printList(array $elements) : void { - if ($this->listPrinted) { - $this->printer->print("--\n\n"); - } - $this->listPrinted = \true; - $this->printer->print(sprintf("There %s %d %s%s:\n\n", $count === 1 ? 'was' : 'were', $count, $type, $count === 1 ? '' : 's')); $i = 1; if ($this->displayDefectsInReverseOrder) { $elements = array_reverse($elements); @@ -83366,63 +91528,120 @@ final class ResultPrinter $body = trim($body); $this->printer->print(sprintf("%s%d) %s\n%s%s", $number > 1 ? "\n" : '', $number, $title, $body, !empty($body) ? "\n" : '')); } - /** - * @throws NoDataSetFromDataProviderException - */ + private function printIssueListElement(int $number, string $title, string $body) : void + { + $body = trim($body); + $this->printer->print(sprintf("%d) %s\n%s%s", $number, $title, $body, !empty($body) ? "\n" : '')); + } private function name(Test $test) : string { if ($test->isTestMethod()) { assert($test instanceof TestMethod); - return $test->nameWithClass(); + if (!$test->testData()->hasDataFromDataProvider()) { + return $test->nameWithClass(); + } + return $test->className() . '::' . $test->methodName() . $test->testData()->dataFromDataProvider()->dataAsStringForResultOutput(); } return $test->name(); } - private function location(Test $test) : string - { - if (!$test->isTestMethod()) { - return ''; - } - assert($test instanceof TestMethod); - return sprintf('%s%s:%d%s', PHP_EOL, $test->file(), $test->line(), PHP_EOL); - } /** * @psalm-param array> $events * - * @psalm-return list + * @psalm-return array{numberOfTestsWithIssues: int, numberOfIssues: int, elements: list} */ private function mapTestsWithIssuesEventsToElements(array $events) : array { $elements = []; + $issues = 0; foreach ($events as $reasons) { $test = $reasons[0]->test(); + $testLocation = $this->testLocation($test); $title = $this->name($test); - $location = $this->location($test); - if (count($reasons) === 1) { - $body = trim($reasons[0]->message()) . PHP_EOL; - } else { - $body = ''; - $first = \true; - foreach ($reasons as $reason) { - if ($first) { - $first = \false; - } else { - $body .= PHP_EOL; - } - $lines = explode(PHP_EOL, trim($reason->message())); - $body .= '* ' . $lines[0] . PHP_EOL; - if (count($lines) > 1) { - foreach (range(1, count($lines) - 1) as $line) { - $body .= ' ' . $lines[$line] . PHP_EOL; - } - } + $body = ''; + $first = \true; + $single = count($reasons) === 1; + foreach ($reasons as $reason) { + if ($first) { + $first = \false; + } else { + $body .= PHP_EOL; } + $body .= $this->reasonMessage($reason, $single); + $body .= $this->reasonLocation($reason, $single); + $issues++; } - if (!empty($location)) { - $body .= $location; + if (!empty($testLocation)) { + $body .= $testLocation; } $elements[] = ['title' => $title, 'body' => $body]; } - return $elements; + return ['numberOfTestsWithIssues' => count($events), 'numberOfIssues' => $issues, 'elements' => $elements]; + } + private function testLocation(Test $test) : string + { + if (!$test->isTestMethod()) { + return ''; + } + assert($test instanceof TestMethod); + return sprintf('%s%s:%d%s', PHP_EOL, $test->file(), $test->line(), PHP_EOL); + } + private function reasonMessage(ConsideredRisky|DeprecationTriggered|ErrorTriggered|NoticeTriggered|PhpDeprecationTriggered|PhpNoticeTriggered|PhpunitDeprecationTriggered|PhpunitErrorTriggered|PhpunitWarningTriggered|PhpWarningTriggered|WarningTriggered $reason, bool $single) : string + { + $message = trim($reason->message()); + if ($single) { + return $message . PHP_EOL; + } + $lines = explode(PHP_EOL, $message); + $buffer = '* ' . $lines[0] . PHP_EOL; + if (count($lines) > 1) { + foreach (range(1, count($lines) - 1) as $line) { + $buffer .= ' ' . $lines[$line] . PHP_EOL; + } + } + return $buffer; + } + private function reasonLocation(ConsideredRisky|DeprecationTriggered|ErrorTriggered|NoticeTriggered|PhpDeprecationTriggered|PhpNoticeTriggered|PhpunitDeprecationTriggered|PhpunitErrorTriggered|PhpunitWarningTriggered|PhpWarningTriggered|WarningTriggered $reason, bool $single) : string + { + if (!$reason instanceof DeprecationTriggered && !$reason instanceof PhpDeprecationTriggered && !$reason instanceof ErrorTriggered && !$reason instanceof NoticeTriggered && !$reason instanceof PhpNoticeTriggered && !$reason instanceof WarningTriggered && !$reason instanceof PhpWarningTriggered) { + return ''; + } + return sprintf('%s%s:%d%s', $single ? '' : ' ', $reason->file(), $reason->line(), PHP_EOL); + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\TextUI\Output\Default; + +use PHPUnit\Event\EventFacadeIsSealedException; +use PHPUnit\Event\Facade; +use PHPUnit\Event\Test\PrintedUnexpectedOutput; +use PHPUnit\Event\Test\PrintedUnexpectedOutputSubscriber; +use PHPUnit\Event\UnknownSubscriberTypeException; +use PHPUnit\TextUI\Output\Printer; +final class UnexpectedOutputPrinter implements PrintedUnexpectedOutputSubscriber +{ + private readonly Printer $printer; + /** + * @throws EventFacadeIsSealedException + * @throws UnknownSubscriberTypeException + */ + public function __construct(Printer $printer, Facade $facade) + { + $this->printer = $printer; + $facade->registerSubscriber($this); + } + public function notify(PrintedUnexpectedOutput $event) : void + { + $this->printer->print($event->output()); } } debug()) { + return self::$printer; + } + self::createUnexpectedOutputPrinter(); + if (!$extensionReplacesProgressOutput) { + self::createProgressPrinter($configuration); + } + if (!$extensionReplacesResultOutput) { + self::createResultPrinter($configuration); + self::createSummaryPrinter($configuration); + } if ($configuration->outputIsTeamCity()) { - new TeamCityLogger(\PHPUnit\TextUI\Output\DefaultPrinter::standardOutput()); + new TeamCityLogger(\PHPUnit\TextUI\Output\DefaultPrinter::standardOutput(), EventFacade::instance()); } - self::$colors = $configuration->colors(); return self::$printer; } /** @@ -83513,6 +91746,9 @@ final class Facade private static function createPrinter(Configuration $configuration) : void { $printerNeeded = \false; + if ($configuration->debug()) { + $printerNeeded = \true; + } if ($configuration->outputIsTeamCity()) { $printerNeeded = \true; } @@ -83541,7 +91777,7 @@ final class Facade if (!self::useDefaultProgressPrinter($configuration)) { return; } - new DefaultProgressPrinter(self::$printer, $configuration->colors(), $configuration->columns()); + new DefaultProgressPrinter(self::$printer, EventFacade::instance(), $configuration->colors(), $configuration->columns(), $configuration->source()); self::$defaultProgressPrinter = \true; } private static function useDefaultProgressPrinter(Configuration $configuration) : bool @@ -83560,8 +91796,8 @@ final class Facade private static function createResultPrinter(Configuration $configuration) : void { assert(self::$printer !== null); - if ($configuration->outputIsTeamCity() || $configuration->outputIsTestDox()) { - self::$defaultResultPrinter = new DefaultResultPrinter(self::$printer, \true, \true, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false, \false); + if ($configuration->outputIsTestDox()) { + self::$defaultResultPrinter = new DefaultResultPrinter(self::$printer, \true, \true, \true, \false, \false, \true, \false, \false, $configuration->displayDetailsOnTestsThatTriggerDeprecations(), $configuration->displayDetailsOnTestsThatTriggerErrors(), $configuration->displayDetailsOnTestsThatTriggerNotices(), $configuration->displayDetailsOnTestsThatTriggerWarnings(), $configuration->reverseDefectList()); } if ($configuration->outputIsTestDox()) { self::$testDoxResultPrinter = new TestDoxResultPrinter(self::$printer, $configuration->colors()); @@ -83582,6 +91818,15 @@ final class Facade } self::$summaryPrinter = new \PHPUnit\TextUI\Output\SummaryPrinter(self::$printer, $configuration->colors()); } + /** + * @throws EventFacadeIsSealedException + * @throws UnknownSubscriberTypeException + */ + private static function createUnexpectedOutputPrinter() : void + { + assert(self::$printer !== null); + new UnexpectedOutputPrinter(self::$printer, EventFacade::instance()); + } } wasSuccessfulAndNoTestHasIssues() && !$result->hasTestSuiteSkippedEvents() && !$result->hasTestSkippedEvents()) { $this->printWithColor('fg-black, bg-green', sprintf('OK (%d test%s, %d assertion%s)', $result->numberOfTestsRun(), $result->numberOfTestsRun() === 1 ? '' : 's', $result->numberOfAssertions(), $result->numberOfAssertions() === 1 ? '' : 's')); + $this->printNumberOfIssuesIgnoredByBaseline($result); return; } $color = 'fg-black, bg-yellow'; @@ -83770,34 +92016,35 @@ final class SummaryPrinter if (!$result->hasTestsWithIssues()) { $this->printWithColor($color, 'OK, but some tests were skipped!'); } else { - $this->printWithColor($color, 'OK, but some tests have issues!'); + $this->printWithColor($color, 'OK, but there were issues!'); } } else { - if ($result->hasTestErroredEvents()) { + if ($result->hasTestErroredEvents() || $result->hasTestTriggeredPhpunitErrorEvents()) { $color = 'fg-white, bg-red'; $this->printWithColor($color, 'ERRORS!'); } elseif ($result->hasTestFailedEvents()) { $color = 'fg-white, bg-red'; $this->printWithColor($color, 'FAILURES!'); - } elseif ($result->hasWarningEvents()) { + } elseif ($result->hasWarnings()) { $this->printWithColor($color, 'WARNINGS!'); - } elseif ($result->hasDeprecationEvents()) { + } elseif ($result->hasDeprecations()) { $this->printWithColor($color, 'DEPRECATIONS!'); - } elseif ($result->hasNoticeEvents()) { + } elseif ($result->hasNotices()) { $this->printWithColor($color, 'NOTICES!'); } } $this->printCountString($result->numberOfTestsRun(), 'Tests', $color, \true); $this->printCountString($result->numberOfAssertions(), 'Assertions', $color, \true); - $this->printCountString($result->numberOfTestErroredEvents() + $result->numberOfTestsWithTestTriggeredErrorEvents(), 'Errors', $color); + $this->printCountString($result->numberOfErrors(), 'Errors', $color); $this->printCountString($result->numberOfTestFailedEvents(), 'Failures', $color); - $this->printCountString($result->numberOfWarningEvents(), 'Warnings', $color); - $this->printCountString($result->numberOfDeprecationEvents(), 'Deprecations', $color); - $this->printCountString($result->numberOfNoticeEvents(), 'Notices', $color); + $this->printCountString($result->numberOfWarnings(), 'Warnings', $color); + $this->printCountString($result->numberOfDeprecations(), 'Deprecations', $color); + $this->printCountString($result->numberOfNotices(), 'Notices', $color); $this->printCountString($result->numberOfTestSuiteSkippedEvents() + $result->numberOfTestSkippedEvents(), 'Skipped', $color); $this->printCountString($result->numberOfTestMarkedIncompleteEvents(), 'Incomplete', $color); $this->printCountString($result->numberOfTestsWithTestConsideredRiskyEvents(), 'Risky', $color); $this->printWithColor($color, '.'); + $this->printNumberOfIssuesIgnoredByBaseline($result); } private function printCountString(int $count, string $name, string $color, bool $always = \false) : void { @@ -83816,6 +92063,12 @@ final class SummaryPrinter $this->printer->print(\PHP_EOL); } } + private function printNumberOfIssuesIgnoredByBaseline(TestResult $result) : void + { + if ($result->hasIssuesIgnoredByBaseline()) { + $this->printer->print(sprintf('%s%d issue%s %s ignored by baseline.%s', \PHP_EOL, $result->numberOfIssuesIgnoredByBaseline(), $result->numberOfIssuesIgnoredByBaseline() > 1 ? 's' : '', $result->numberOfIssuesIgnoredByBaseline() > 1 ? 'were' : 'was', \PHP_EOL)); + } + } } printer->print($buffer . PHP_EOL); } - /** - * @throws NoDataSetFromDataProviderException - */ private function printTestResult(TestDoxTestResult $test) : void { $this->printTestResultHeader($test); $this->printTestResultBody($test); } - /** - * @throws NoDataSetFromDataProviderException - */ private function printTestResultHeader(TestDoxTestResult $test) : void { $buffer = ' ' . $this->symbolFor($test->status()) . ' '; @@ -84044,7 +92290,7 @@ final class ResultPrinter if ($status->isSkipped()) { return 'fg-cyan'; } - if ($status->isRisky() || $status->isIncomplete() || $status->isWarning()) { + if ($status->isIncomplete() || $status->isDeprecation() || $status->isNotice() || $status->isRisky() || $status->isWarning()) { return 'fg-yellow'; } return 'fg-blue'; @@ -84063,7 +92309,7 @@ final class ResultPrinter if ($status->isSkipped()) { return 'fg-cyan'; } - if ($status->isRisky() || $status->isIncomplete() || $status->isWarning()) { + if ($status->isIncomplete() || $status->isDeprecation() || $status->isNotice() || $status->isRisky() || $status->isWarning()) { return 'fg-yellow'; } return 'fg-white,bg-blue'; @@ -84079,15 +92325,12 @@ final class ResultPrinter if ($status->isSkipped()) { return '↩'; } - if ($status->isRisky()) { - return '☢'; + if ($status->isDeprecation() || $status->isNotice() || $status->isRisky() || $status->isWarning()) { + return '⚠'; } if ($status->isIncomplete()) { return '∅'; } - if ($status->isWarning()) { - return '⚠'; - } return '?'; } } @@ -84113,30 +92356,36 @@ final class ShellExitCodeCalculator private const SUCCESS_EXIT = 0; private const FAILURE_EXIT = 1; private const EXCEPTION_EXIT = 2; - public function calculate(bool $failOnEmptyTestSuite, bool $failOnRisky, bool $failOnWarning, bool $failOnIncomplete, bool $failOnSkipped, TestResult $result) : int + public function calculate(bool $failOnDeprecation, bool $failOnEmptyTestSuite, bool $failOnIncomplete, bool $failOnNotice, bool $failOnRisky, bool $failOnSkipped, bool $failOnWarning, TestResult $result) : int { $returnCode = self::FAILURE_EXIT; if ($result->wasSuccessful()) { $returnCode = self::SUCCESS_EXIT; } - if ($failOnEmptyTestSuite && $result->numberOfTests() === 0) { + if ($failOnEmptyTestSuite && !$result->hasTests()) { $returnCode = self::FAILURE_EXIT; } if ($result->wasSuccessfulIgnoringPhpunitWarnings()) { - if ($failOnRisky && $result->hasTestConsideredRiskyEvents()) { + if ($failOnDeprecation && $result->hasDeprecations()) { + $returnCode = self::FAILURE_EXIT; + } + if ($failOnIncomplete && $result->hasIncompleteTests()) { $returnCode = self::FAILURE_EXIT; } - if ($failOnWarning && $result->hasWarningEvents()) { + if ($failOnNotice && $result->hasNotices()) { $returnCode = self::FAILURE_EXIT; } - if ($failOnIncomplete && $result->hasTestMarkedIncompleteEvents()) { + if ($failOnRisky && $result->hasRiskyTests()) { $returnCode = self::FAILURE_EXIT; } - if ($failOnSkipped && $result->hasTestSkippedEvents()) { + if ($failOnSkipped && $result->hasSkippedTests()) { + $returnCode = self::FAILURE_EXIT; + } + if ($failOnWarning && $result->hasWarnings()) { $returnCode = self::FAILURE_EXIT; } } - if ($result->hasTestErroredEvents()) { + if ($result->hasErrors()) { $returnCode = self::EXCEPTION_EXIT; } return $returnCode; @@ -84405,148 +92654,6 @@ declare (strict_types=1); */ namespace PHPUnit\Util; -use const E_DEPRECATED; -use const E_NOTICE; -use const E_STRICT; -use const E_USER_DEPRECATED; -use const E_USER_NOTICE; -use const E_USER_WARNING; -use const E_WARNING; -use function debug_backtrace; -use function error_reporting; -use function in_array; -use function restore_error_handler; -use function set_error_handler; -use PHPUnit\Event; -use PHPUnit\Framework\TestCase; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class ErrorHandler -{ - private static ?self $instance = null; - private bool $enabled = \false; - public static function instance() : self - { - return self::$instance ?? (self::$instance = new self()); - } - /** - * @throws Exception - */ - public function __invoke(int $errorNumber, string $errorString, string $errorFile, int $errorLine) : bool - { - $suppressed = !($errorNumber & error_reporting()); - if ($suppressed && in_array($errorNumber, [E_DEPRECATED, E_NOTICE, E_STRICT, E_WARNING], \true)) { - return \false; - } - switch ($errorNumber) { - case E_NOTICE: - case E_STRICT: - Event\Facade::emitter()->testTriggeredPhpNotice($this->testValueObjectForEvents(), $errorString, $errorFile, $errorLine); - return \true; - case E_USER_NOTICE: - Event\Facade::emitter()->testTriggeredNotice($this->testValueObjectForEvents(), $errorString, $errorFile, $errorLine); - break; - case E_WARNING: - Event\Facade::emitter()->testTriggeredPhpWarning($this->testValueObjectForEvents(), $errorString, $errorFile, $errorLine); - break; - case E_USER_WARNING: - Event\Facade::emitter()->testTriggeredWarning($this->testValueObjectForEvents(), $errorString, $errorFile, $errorLine); - break; - case E_DEPRECATED: - Event\Facade::emitter()->testTriggeredPhpDeprecation($this->testValueObjectForEvents(), $errorString, $errorFile, $errorLine); - break; - case E_USER_DEPRECATED: - Event\Facade::emitter()->testTriggeredDeprecation($this->testValueObjectForEvents(), $errorString, $errorFile, $errorLine); - break; - case \E_USER_ERROR: - Event\Facade::emitter()->testTriggeredError($this->testValueObjectForEvents(), $errorString, $errorFile, $errorLine); - break; - default: - // @codeCoverageIgnoreStart - return \false; - } - return \true; - } - public function enable() : void - { - if ($this->enabled) { - // @codeCoverageIgnoreStart - return; - // @codeCoverageIgnoreEnd - } - $oldErrorHandler = set_error_handler($this); - if ($oldErrorHandler !== null) { - // @codeCoverageIgnoreStart - restore_error_handler(); - return; - // @codeCoverageIgnoreEnd - } - $this->enabled = \true; - } - public function disable() : void - { - if (!$this->enabled) { - // @codeCoverageIgnoreStart - return; - // @codeCoverageIgnoreEnd - } - restore_error_handler(); - $this->enabled = \false; - } - /** - * @throws NoTestCaseObjectOnCallStackException - */ - private function testValueObjectForEvents() : Event\Code\Test - { - foreach (debug_backtrace() as $frame) { - if (isset($frame['object']) && $frame['object'] instanceof TestCase) { - return $frame['object']->valueObjectForEvents(); - } - } - // @codeCoverageIgnoreStart - throw new \PHPUnit\Util\NoTestCaseObjectOnCallStackException(); - // @codeCoverageIgnoreEnd - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util; - -use function sprintf; -use RuntimeException; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class DirectoryDoesNotExistException extends RuntimeException implements \PHPUnit\Util\Exception -{ - public function __construct(string $directory) - { - parent::__construct(sprintf('Directory "%s" does not exist and could not be created', $directory)); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util; - use Throwable; /** * @internal This interface is not covered by the backward compatibility promise for PHPUnit @@ -84612,31 +92719,6 @@ declare (strict_types=1); */ namespace PHPUnit\Util; -use function sprintf; -use RuntimeException; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class InvalidSocketException extends RuntimeException implements \PHPUnit\Util\Exception -{ - public function __construct(string $socket) - { - parent::__construct(sprintf('"%s" does not match "socket://hostname:port" format', $socket)); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util; - use function sprintf; use RuntimeException; /** @@ -84651,30 +92733,6 @@ final class InvalidVersionOperatorException extends RuntimeException implements } - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util; - -use RuntimeException; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class NoTestCaseObjectOnCallStackException extends RuntimeException implements \PHPUnit\Util\Exception -{ - public function __construct() - { - parent::__construct('Cannot find TestCase object on call stack'); - } -} -enabled = $enabled; + } /** * @psalm-return list */ @@ -84852,7 +92917,7 @@ final class ExcludeList } public function isExcluded(string $file) : bool { - if (defined('PHPUNIT_TESTSUITE')) { + if (!$this->enabled) { return \false; } self::initialize(); @@ -84879,7 +92944,7 @@ final class ExcludeList self::$directories[] = $directory; } // Hide process isolation workaround on Windows. - if (DIRECTORY_SEPARATOR === '\\') { + if (\PHP_OS_FAMILY === 'Windows') { // tempnam() prefix is limited to first 3 chars. // @see https://php.net/manual/en/function.tempnam.php self::$directories[] = sys_get_temp_dir() . '\\PHP'; @@ -84900,8 +92965,65 @@ declare (strict_types=1); */ namespace PHPUnit\Util; +use function is_array; +use function is_scalar; +use PHPUnit\SebastianBergmann\RecursionContext\Context; +/** + * @internal This class is not covered by the backward compatibility promise for PHPUnit + * + * @deprecated + */ +final class Exporter +{ + public static function export(mixed $value, bool $exportObjects = \false) : string + { + if (self::isExportable($value) || $exportObjects) { + return (new \PHPUnit\SebastianBergmann\Exporter\Exporter())->export($value); + } + return '{enable export of objects to see this value}'; + } + private static function isExportable(mixed &$value, Context $context = null) : bool + { + if (is_scalar($value) || $value === null) { + return \true; + } + if (!is_array($value)) { + return \false; + } + if (!$context) { + $context = new Context(); + } + if ($context->contains($value) !== \false) { + return \true; + } + $array = $value; + $context->add($value); + foreach ($array as &$_value) { + if (!self::isExportable($_value, $context)) { + return \false; + } + } + return \true; + } +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\Util; + use function is_dir; +use function is_string; use function mkdir; +use function realpath; +use function str_starts_with; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ @@ -84911,6 +93033,22 @@ final class Filesystem { return !(!is_dir($directory) && !@mkdir($directory, 0777, \true) && !is_dir($directory)); } + /** + * @psalm-param non-empty-string $path + * + * @return false|non-empty-string + */ + public static function resolvePathOrStream(string $path) : false|string + { + if (str_starts_with($path, 'php://') || str_starts_with($path, 'socket://')) { + return $path; + } + $path = realpath($path); + if (is_string($path) && !empty($path)) { + return $path; + } + return \false; + } } getFile(); $eLine = $t->getLine(); } else { - if ($t->getPrevious()) { + if ($unwrap && $t->getPrevious()) { $t = $t->getPrevious(); } $eTrace = $t->getTrace(); @@ -84974,7 +93112,7 @@ final class Filter } return $filteredStacktrace; } - private static function shouldPrintFrame(array $frame, string|false $prefix, \PHPUnit\Util\ExcludeList $excludeList) : bool + private static function shouldPrintFrame(array $frame, false|string $prefix, \PHPUnit\Util\ExcludeList $excludeList) : bool { if (!isset($frame['file'])) { return \false; @@ -85016,6 +93154,8 @@ declare (strict_types=1); */ namespace PHPUnit\Util; +use const PHP_MAJOR_VERSION; +use const PHP_MINOR_VERSION; use function array_keys; use function array_reverse; use function array_shift; @@ -85044,6 +93184,10 @@ final class GlobalState * @psalm-var list */ private const SUPER_GLOBAL_ARRAYS = ['_ENV', '_POST', '_GET', '_COOKIE', '_SERVER', '_FILES', '_REQUEST']; + /** + * @psalm-var array> + */ + private const DEPRECATED_INI_SETTINGS = ['7.3' => ['iconv.input_encoding' => \true, 'iconv.output_encoding' => \true, 'iconv.internal_encoding' => \true, 'mbstring.func_overload' => \true, 'mbstring.http_input' => \true, 'mbstring.http_output' => \true, 'mbstring.internal_encoding' => \true, 'string.strip_tags' => \true], '7.4' => ['iconv.input_encoding' => \true, 'iconv.output_encoding' => \true, 'iconv.internal_encoding' => \true, 'mbstring.func_overload' => \true, 'mbstring.http_input' => \true, 'mbstring.http_output' => \true, 'mbstring.internal_encoding' => \true, 'pdo_odbc.db2_instance_name' => \true, 'string.strip_tags' => \true], '8.0' => ['iconv.input_encoding' => \true, 'iconv.output_encoding' => \true, 'iconv.internal_encoding' => \true, 'mbstring.http_input' => \true, 'mbstring.http_output' => \true, 'mbstring.internal_encoding' => \true], '8.1' => ['auto_detect_line_endings' => \true, 'filter.default' => \true, 'iconv.input_encoding' => \true, 'iconv.output_encoding' => \true, 'iconv.internal_encoding' => \true, 'mbstring.http_input' => \true, 'mbstring.http_output' => \true, 'mbstring.internal_encoding' => \true, 'oci8.old_oci_close_semantics' => \true], '8.2' => ['auto_detect_line_endings' => \true, 'filter.default' => \true, 'iconv.input_encoding' => \true, 'iconv.output_encoding' => \true, 'iconv.internal_encoding' => \true, 'mbstring.http_input' => \true, 'mbstring.http_output' => \true, 'mbstring.internal_encoding' => \true, 'oci8.old_oci_close_semantics' => \true], '8.3' => ['auto_detect_line_endings' => \true, 'filter.default' => \true, 'iconv.input_encoding' => \true, 'iconv.output_encoding' => \true, 'iconv.internal_encoding' => \true, 'mbstring.http_input' => \true, 'mbstring.http_output' => \true, 'mbstring.internal_encoding' => \true, 'oci8.old_oci_close_semantics' => \true]]; /** * @throws Exception */ @@ -85091,6 +93235,9 @@ final class GlobalState { $result = ''; foreach (ini_get_all(null, \false) as $key => $value) { + if (self::isIniSettingDeprecated($key)) { + continue; + } $result .= sprintf('@ini_set(%s, %s);' . "\n", self::exportVariable($key), self::exportVariable((string) $value)); } return $result; @@ -85150,6 +93297,10 @@ final class GlobalState } return $result; } + private static function isIniSettingDeprecated(string $iniSetting) : bool + { + return isset(self::DEPRECATED_INI_SETTINGS[PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION][$iniSetting]); + } } */ protected array $env = []; - protected int $timeout = 0; public static function factory() : self { - if (DIRECTORY_SEPARATOR === '\\') { + if (\PHP_OS_FAMILY === 'Windows') { return new \PHPUnit\Util\PHP\WindowsPhpProcess(); } return new \PHPUnit\Util\PHP\DefaultPhpProcess(); } - public function __construct() - { - $this->runtime = new Runtime(); - } /** * Defines if should use STDERR redirection or not. * @@ -85360,20 +93504,6 @@ abstract class AbstractPhpProcess { return $this->env; } - /** - * Sets the amount of seconds to wait before timing out. - */ - public function setTimeout(int $timeout) : void - { - $this->timeout = $timeout; - } - /** - * Returns the amount of seconds to wait before timing out. - */ - public function getTimeout() : int - { - return $this->timeout; - } /** * Runs a single test in a separate PHP process. * @@ -85382,21 +93512,27 @@ abstract class AbstractPhpProcess * @throws MoreThanOneDataSetFromDataProviderException * @throws NoPreviousThrowableException */ - public function runTestJob(string $job, Test $test) : void + public function runTestJob(string $job, Test $test, string $processResultFile) : void { $_result = $this->runJob($job); - $this->processChildResult($test, $_result['stdout'], $_result['stderr']); + $processResult = ''; + if (file_exists($processResultFile)) { + $processResult = file_get_contents($processResultFile); + @unlink($processResultFile); + } + $this->processChildResult($test, $processResult, $_result['stderr']); } /** * Returns the command based into the configurations. */ public function getCommand(array $settings, string $file = null) : string { - $command = $this->runtime->getBinary(); - if ($this->runtime->hasPCOV()) { - $settings = array_merge($settings, $this->runtime->getCurrentSettings(array_keys(ini_get_all('pcov')))); - } elseif ($this->runtime->hasXdebug()) { - $settings = array_merge($settings, $this->runtime->getCurrentSettings(array_keys(ini_get_all('xdebug')))); + $runtime = new Runtime(); + $command = $runtime->getBinary(); + if ($runtime->hasPCOV()) { + $settings = array_merge($settings, $runtime->getCurrentSettings(array_keys(ini_get_all('pcov')))); + } elseif ($runtime->hasXdebug()) { + $settings = array_merge($settings, $runtime->getCurrentSettings(array_keys(ini_get_all('xdebug')))); } $command .= $this->settingsToParameters($settings); if (PHP_SAPI === 'phpdbg') { @@ -85454,10 +93590,7 @@ abstract class AbstractPhpProcess } ); try { - if (str_starts_with($stdout, "#!/usr/bin/env php\n")) { - $stdout = substr($stdout, 19); - } - $childResult = unserialize(str_replace("#!/usr/bin/env php\n", '', $stdout)); + $childResult = unserialize($stdout); restore_error_handler(); if ($childResult === \false) { $exception = new AssertionFailedError('Test was run in child process and ended unexpectedly'); @@ -85476,7 +93609,7 @@ abstract class AbstractPhpProcess if (!empty($childResult['output'])) { $output = $childResult['output']; } - Facade::forward($childResult['events']); + Facade::instance()->forward($childResult['events']); PassedTests::instance()->import($childResult['passedTests']); assert($test instanceof TestCase); $test->setResult($childResult['testResult']); @@ -85506,17 +93639,13 @@ namespace PHPUnit\Util\PHP; use function array_merge; use function fclose; use function file_put_contents; -use function fread; use function fwrite; use function is_array; use function is_resource; use function proc_close; use function proc_open; -use function proc_terminate; use function rewind; -use function sprintf; use function stream_get_contents; -use function stream_select; use function sys_get_temp_dir; use function tempnam; use function unlink; @@ -85530,13 +93659,15 @@ class DefaultPhpProcess extends \PHPUnit\Util\PHP\AbstractPhpProcess /** * Runs a single job (PHP code) using a separate PHP process. * + * @psalm-return array{stdout: string, stderr: string} + * * @throws Exception * @throws PhpProcessException */ public function runJob(string $job, array $settings = []) : array { if ($this->stdin || $this->useTemporaryFile()) { - if (!($this->tempFile = tempnam(sys_get_temp_dir(), 'PHPUnit')) || file_put_contents($this->tempFile, $job) === \false) { + if (!($this->tempFile = tempnam(sys_get_temp_dir(), 'phpunit_')) || file_put_contents($this->tempFile, $job) === \false) { throw new \PHPUnit\Util\PHP\PhpProcessException('Unable to write temporary file'); } $job = $this->stdin; @@ -85553,6 +93684,8 @@ class DefaultPhpProcess extends \PHPUnit\Util\PHP\AbstractPhpProcess /** * Handles creating the child process and returning the STDOUT and STDERR. * + * @psalm-return array{stdout: string, stderr: string} + * * @throws Exception * @throws PhpProcessException */ @@ -85580,56 +93713,13 @@ class DefaultPhpProcess extends \PHPUnit\Util\PHP\AbstractPhpProcess } fclose($pipes[0]); $stderr = $stdout = ''; - if ($this->timeout) { - unset($pipes[0]); - while (\true) { - $r = $pipes; - $w = null; - $e = null; - $n = @stream_select($r, $w, $e, $this->timeout); - if ($n === \false) { - break; - } - if ($n === 0) { - proc_terminate($process, 9); - throw new \PHPUnit\Util\PHP\PhpProcessException(sprintf('Job execution aborted after %d seconds', $this->timeout)); - } - if ($n > 0) { - foreach ($r as $pipe) { - $pipeOffset = 0; - foreach ($pipes as $i => $origPipe) { - if ($pipe === $origPipe) { - $pipeOffset = $i; - break; - } - } - if (!$pipeOffset) { - break; - } - $line = fread($pipe, 8192); - if ($line === '' || $line === \false) { - fclose($pipes[$pipeOffset]); - unset($pipes[$pipeOffset]); - } elseif ($pipeOffset === 1) { - $stdout .= $line; - } else { - $stderr .= $line; - } - } - if (empty($pipes)) { - break; - } - } - } - } else { - if (isset($pipes[1])) { - $stdout = stream_get_contents($pipes[1]); - fclose($pipes[1]); - } - if (isset($pipes[2])) { - $stderr = stream_get_contents($pipes[2]); - fclose($pipes[2]); - } + if (isset($pipes[1])) { + $stdout = stream_get_contents($pipes[1]); + fclose($pipes[1]); + } + if (isset($pipes[2])) { + $stderr = stream_get_contents($pipes[2]); + fclose($pipes[2]); } if (isset($handles[1])) { rewind($handles[1]); @@ -85698,131 +93788,22 @@ if ($composerAutoload) { function __phpunit_run_isolated_test() { - $dispatcher = Facade::initForIsolation( + $dispatcher = Facade::instance()->initForIsolation( PHPUnit\Event\Telemetry\HRTime::fromSecondsAndNanoseconds( {offsetSeconds}, {offsetNanoseconds} - ) + ), + {exportObjects}, ); require_once '{filename}'; if ({collectCodeCoverageInformation}) { - CodeCoverage::instance()->init(ConfigurationRegistry::get(), CodeCoverageFilterRegistry::instance()); + CodeCoverage::instance()->init(ConfigurationRegistry::get(), CodeCoverageFilterRegistry::instance(), true); + CodeCoverage::instance()->ignoreLines({linesToBeIgnored}); } $test = new {className}('{name}'); - $test->setData('{dataName}', unserialize('{data}')); - $test->setDependencyInput(unserialize('{dependencyInput}')); - $test->setInIsolation(true); - - ob_end_clean(); - - $test->run(); - - $output = ''; - - if (!$test->hasExpectationOnOutput()) { - $output = $test->output(); - } - - ini_set('xdebug.scream', '0'); - - // Not every STDOUT target stream is rewindable - @rewind(STDOUT); - - if ($stdout = @stream_get_contents(STDOUT)) { - $output = $stdout . $output; - $streamMetaData = stream_get_meta_data(STDOUT); - - if (!empty($streamMetaData['stream_type']) && 'STDIO' === $streamMetaData['stream_type']) { - @ftruncate(STDOUT, 0); - @rewind(STDOUT); - } - } - - print serialize( - [ - 'testResult' => $test->result(), - 'codeCoverage' => {collectCodeCoverageInformation} ? CodeCoverage::instance()->codeCoverage() : null, - 'numAssertions' => $test->numberOfAssertionsPerformed(), - 'output' => $output, - 'events' => $dispatcher->flush(), - 'passedTests' => PassedTests::instance() - ] - ); -} - -function __phpunit_error_handler($errno, $errstr, $errfile, $errline) -{ - return true; -} - -set_error_handler('__phpunit_error_handler'); - -{constants} -{included_files} -{globals} - -restore_error_handler(); - -ConfigurationRegistry::loadFrom('{serializedConfiguration}'); -(new PhpHandler)->handle(ConfigurationRegistry::get()->php()); - -if ('{bootstrap}' !== '') { - require_once '{bootstrap}'; -} - -__phpunit_run_isolated_test(); -init(ConfigurationRegistry::get(), CodeCoverageFilterRegistry::instance()); - } - - $test = new {className}('{methodName}'); $test->setData('{dataName}', unserialize('{data}')); $test->setDependencyInput(unserialize('{dependencyInput}')); @@ -85834,7 +93815,7 @@ function __phpunit_run_isolated_test() $output = ''; - if (!$test->hasExpectationOnOutput()) { + if (!$test->expectsOutput()) { $output = $test->output(); } @@ -85853,15 +93834,135 @@ function __phpunit_run_isolated_test() } } - print serialize( - [ - 'testResult' => $test->result(), - 'codeCoverage' => {collectCodeCoverageInformation} ? CodeCoverage::instance()->codeCoverage() : null, - 'numAssertions' => $test->numberOfAssertionsPerformed(), - 'output' => $output, - 'events' => $dispatcher->flush(), - 'passedTests' => PassedTests::instance() - ] + file_put_contents( + '{processResultFile}', + serialize( + [ + 'testResult' => $test->result(), + 'codeCoverage' => {collectCodeCoverageInformation} ? CodeCoverage::instance()->codeCoverage() : null, + 'numAssertions' => $test->numberOfAssertionsPerformed(), + 'output' => $output, + 'events' => $dispatcher->flush(), + 'passedTests' => PassedTests::instance() + ] + ) + ); +} + +function __phpunit_error_handler($errno, $errstr, $errfile, $errline) +{ + return true; +} + +set_error_handler('__phpunit_error_handler'); + +{constants} +{included_files} +{globals} + +restore_error_handler(); + +ConfigurationRegistry::loadFrom('{serializedConfiguration}'); +(new PhpHandler)->handle(ConfigurationRegistry::get()->php()); + +if ('{bootstrap}' !== '') { + require_once '{bootstrap}'; +} + +__phpunit_run_isolated_test(); +initForIsolation( + PHPUnit\Event\Telemetry\HRTime::fromSecondsAndNanoseconds( + {offsetSeconds}, + {offsetNanoseconds} + ), + {exportObjects}, + ); + + require_once '{filename}'; + + if ({collectCodeCoverageInformation}) { + CodeCoverage::instance()->init(ConfigurationRegistry::get(), CodeCoverageFilterRegistry::instance(), true); + CodeCoverage::instance()->ignoreLines({linesToBeIgnored}); + } + + $test = new {className}('{methodName}'); + + $test->setData('{dataName}', unserialize('{data}')); + $test->setDependencyInput(unserialize('{dependencyInput}')); + $test->setInIsolation(true); + + ob_end_clean(); + + $test->run(); + + $output = ''; + + if (!$test->expectsOutput()) { + $output = $test->output(); + } + + ini_set('xdebug.scream', '0'); + + // Not every STDOUT target stream is rewindable + @rewind(STDOUT); + + if ($stdout = @stream_get_contents(STDOUT)) { + $output = $stdout . $output; + $streamMetaData = stream_get_meta_data(STDOUT); + + if (!empty($streamMetaData['stream_type']) && 'STDIO' === $streamMetaData['stream_type']) { + @ftruncate(STDOUT, 0); + @rewind(STDOUT); + } + } + + file_put_contents( + '{processResultFile}', + serialize( + [ + 'testResult' => $test->result(), + 'codeCoverage' => {collectCodeCoverageInformation} ? CodeCoverage::instance()->codeCoverage() : null, + 'numAssertions' => $test->numberOfAssertionsPerformed(), + 'output' => $output, + 'events' => $dispatcher->flush(), + 'passedTests' => PassedTests::instance() + ] + ) ); } @@ -85993,6 +94094,9 @@ declare (strict_types=1); */ namespace PHPUnit\Util; +use function array_keys; +use function array_merge; +use function array_reverse; use PHPUnit\Framework\Assert; use PHPUnit\Framework\TestCase; use ReflectionClass; @@ -86007,7 +94111,7 @@ final class Reflection * @psalm-param class-string $className * @psalm-param non-empty-string $methodName * - * @psalm-return array{file: string, line: int} + * @psalm-return array{file: non-empty-string, line: non-negative-int} */ public static function sourceLocationFor(string $className, string $methodName) : array { @@ -86024,31 +94128,43 @@ final class Reflection /** * @psalm-return list */ - public function publicMethodsInTestClass(ReflectionClass $class) : array + public static function publicMethodsInTestClass(ReflectionClass $class) : array { - return $this->filterMethods($class, ReflectionMethod::IS_PUBLIC); + return self::filterAndSortMethods($class, ReflectionMethod::IS_PUBLIC, \true); } /** * @psalm-return list */ - public function methodsInTestClass(ReflectionClass $class) : array + public static function methodsInTestClass(ReflectionClass $class) : array { - return $this->filterMethods($class, null); + return self::filterAndSortMethods($class, null, \false); } /** * @psalm-return list */ - private function filterMethods(ReflectionClass $class, ?int $filter) : array + private static function filterAndSortMethods(ReflectionClass $class, ?int $filter, bool $sortHighestToLowest) : array { - $methods = []; + $methodsByClass = []; foreach ($class->getMethods($filter) as $method) { - if ($method->getDeclaringClass()->getName() === TestCase::class) { + $declaringClassName = $method->getDeclaringClass()->getName(); + if ($declaringClassName === TestCase::class) { continue; } - if ($method->getDeclaringClass()->getName() === Assert::class) { + if ($declaringClassName === Assert::class) { continue; } - $methods[] = $method; + if (!isset($methodsByClass[$declaringClassName])) { + $methodsByClass[$declaringClassName] = []; + } + $methodsByClass[$declaringClassName][] = $method; + } + $classNames = array_keys($methodsByClass); + if ($sortHighestToLowest) { + $classNames = array_reverse($classNames); + } + $methods = []; + foreach ($classNames as $className) { + $methods = array_merge($methods, $methodsByClass[$className]); } return $methods; } @@ -86103,6 +94219,7 @@ use function trim; use PHPUnit\Framework\ExpectationFailedException; use PHPUnit\Framework\PhptAssertionFailedError; use PHPUnit\Framework\SelfDescribing; +use PHPUnit\Runner\ErrorException; use Throwable; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit @@ -86111,6 +94228,9 @@ final class ThrowableToStringMapper { public static function map(Throwable $t) : string { + if ($t instanceof ErrorException) { + return $t->getMessage(); + } if ($t instanceof SelfDescribing) { $buffer = $t->toString(); if ($t instanceof ExpectationFailedException && $t->getComparisonFailure()) { @@ -86183,114 +94303,6 @@ final class VersionComparisonOperator } - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util; - -use const ENT_QUOTES; -use function htmlspecialchars; -use function mb_convert_encoding; -use function ord; -use function preg_replace; -use function strlen; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class Xml -{ - /** - * Escapes a string for the use in XML documents. - * - * Any Unicode character is allowed, excluding the surrogate blocks, FFFE, - * and FFFF (not even as character reference). - * - * @see https://www.w3.org/TR/xml/#charsets - */ - public static function prepareString(string $string) : string - { - return preg_replace('/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]/', '', htmlspecialchars(self::convertToUtf8($string), ENT_QUOTES)); - } - private static function convertToUtf8(string $string) : string - { - if (!self::isUtf8($string)) { - $string = mb_convert_encoding($string, 'UTF-8'); - } - return $string; - } - private static function isUtf8(string $string) : bool - { - $length = strlen($string); - for ($i = 0; $i < $length; $i++) { - if (ord($string[$i]) < 0x80) { - $n = 0; - } elseif ((ord($string[$i]) & 0xe0) === 0xc0) { - $n = 1; - } elseif ((ord($string[$i]) & 0xf0) === 0xe0) { - $n = 2; - } elseif ((ord($string[$i]) & 0xf0) === 0xf0) { - $n = 3; - } else { - return \false; - } - for ($j = 0; $j < $n; $j++) { - if (++$i === $length || (ord($string[$i]) & 0xc0) !== 0x80) { - return \false; - } - } - } - return \true; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util\Xml; - -use RuntimeException; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class Exception extends RuntimeException implements \PHPUnit\Exception -{ -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util\Xml; - -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - * - * @psalm-immutable - */ -final class FailedSchemaDetectionResult extends \PHPUnit\Util\Xml\SchemaDetectionResult -{ -} -load($contents, $isHtml, $filename, $xinclude, $strict); + return $this->load($contents, $filename); } /** * @throws XmlException */ - public function load(string $actual, bool $isHtml = \false, string $filename = '', bool $xinclude = \false, bool $strict = \false) : DOMDocument + public function load(string $actual, ?string $filename = null) : DOMDocument { if ($actual === '') { - throw new \PHPUnit\Util\Xml\XmlException('Could not load XML from empty string'); - } - // Required for XInclude on Windows. - if ($xinclude) { - $cwd = getcwd(); - @chdir(dirname($filename)); + if ($filename === null) { + throw new \PHPUnit\Util\Xml\XmlException('Could not parse XML from empty string'); + } + throw new \PHPUnit\Util\Xml\XmlException(sprintf('Could not parse XML from empty file "%s"', $filename)); } $document = new DOMDocument(); $document->preserveWhiteSpace = \false; $internal = libxml_use_internal_errors(\true); $message = ''; $reporting = error_reporting(0); - if ($filename !== '') { - // Required for XInclude + // Required for XInclude + if ($filename !== null) { + // Required for XInclude on Windows + if (\PHP_OS_FAMILY === 'Windows') { + $cwd = getcwd(); + @chdir(dirname($filename)); + } $document->documentURI = $filename; } - if ($isHtml) { - $loaded = $document->loadHTML($actual); - } else { - $loaded = $document->loadXML($actual); - } - if (!$isHtml && $xinclude) { + $loaded = $document->loadXML($actual); + if ($filename !== null) { $document->xinclude(); } foreach (libxml_get_errors() as $error) { @@ -86367,9 +94378,9 @@ final class Loader if (isset($cwd)) { @chdir($cwd); } - if ($loaded === \false || $strict && $message !== '') { - if ($filename !== '') { - throw new \PHPUnit\Util\Xml\XmlException(sprintf('Could not load "%s".%s', $filename, $message !== '' ? "\n" . $message : '')); + if ($loaded === \false || $message !== '') { + if ($filename !== null) { + throw new \PHPUnit\Util\Xml\XmlException(sprintf('Could not load "%s"%s', $filename, $message !== '' ? ":\n" . $message : '')); } if ($message === '') { $message = 'Could not load XML for unknown reason'; @@ -86390,277 +94401,60 @@ declare (strict_types=1); * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ -namespace PHPUnit\Util\Xml; - -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - * - * @psalm-immutable - */ -abstract class SchemaDetectionResult -{ - public function detected() : bool - { - return \false; - } - /** - * @throws XmlException - */ - public function version() : string - { - throw new \PHPUnit\Util\Xml\XmlException('No supported schema was detected'); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util\Xml; - -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class SchemaDetector -{ - /** - * @throws XmlException - */ - public function detect(string $filename) : \PHPUnit\Util\Xml\SchemaDetectionResult - { - $document = (new \PHPUnit\Util\Xml\Loader())->loadFile($filename, \false, \true, \true); - foreach (['9.5', '9.2', '8.5'] as $candidate) { - $schema = (new \PHPUnit\Util\Xml\SchemaFinder())->find($candidate); - if (!(new \PHPUnit\Util\Xml\Validator())->validate($document, $schema)->hasValidationErrors()) { - return new \PHPUnit\Util\Xml\SuccessfulSchemaDetectionResult($candidate); - } - } - return new \PHPUnit\Util\Xml\FailedSchemaDetectionResult(); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util\Xml; +namespace PHPUnit\Util; -use function defined; -use function is_file; -use function sprintf; -use PHPUnit\Runner\Version; +use const ENT_QUOTES; +use function htmlspecialchars; +use function mb_convert_encoding; +use function ord; +use function preg_replace; +use function strlen; /** * @internal This class is not covered by the backward compatibility promise for PHPUnit */ -final class SchemaFinder +final class Xml { /** - * @throws XmlException + * Escapes a string for the use in XML documents. + * + * Any Unicode character is allowed, excluding the surrogate blocks, FFFE, + * and FFFF (not even as character reference). + * + * @see https://www.w3.org/TR/xml/#charsets */ - public function find(string $version) : string - { - if ($version === Version::series()) { - $filename = $this->path() . 'phpunit.xsd'; - } else { - $filename = $this->path() . 'schema/' . $version . '.xsd'; - } - if (!is_file($filename)) { - throw new \PHPUnit\Util\Xml\XmlException(sprintf('Schema for PHPUnit %s is not available', $version)); - } - return $filename; - } - private function path() : string + public static function prepareString(string $string) : string { - if (defined('__PHPUNIT_PHAR_ROOT__')) { - return __PHPUNIT_PHAR_ROOT__ . '/'; - } - return __DIR__ . '/../../../'; + return preg_replace('/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]/', '', htmlspecialchars(self::convertToUtf8($string), ENT_QUOTES)); } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util\Xml; - -use function count; -use ArrayIterator; -use Countable; -use DOMNode; -use DOMNodeList; -use IteratorAggregate; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - * - * @template-implements IteratorAggregate - */ -final class SnapshotNodeList implements Countable, IteratorAggregate -{ - /** - * @psalm-var list - */ - private array $nodes = []; - public static function fromNodeList(DOMNodeList $list) : self + private static function convertToUtf8(string $string) : string { - $snapshot = new self(); - foreach ($list as $node) { - $snapshot->nodes[] = $node; + if (!self::isUtf8($string)) { + $string = mb_convert_encoding($string, 'UTF-8'); } - return $snapshot; - } - public function count() : int - { - return count($this->nodes); - } - public function getIterator() : ArrayIterator - { - return new ArrayIterator($this->nodes); - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util\Xml; - -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - * - * @psalm-immutable - */ -final class SuccessfulSchemaDetectionResult extends \PHPUnit\Util\Xml\SchemaDetectionResult -{ - private readonly string $version; - public function __construct(string $version) - { - $this->version = $version; - } - public function detected() : bool - { - return \true; - } - public function version() : string - { - return $this->version; + return $string; } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util\Xml; - -use function sprintf; -use function trim; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - * - * @psalm-immutable - */ -final class ValidationResult -{ - /** - * @psalm-var array> - */ - private readonly array $validationErrors; - /** - * @psalm-param array $errors - */ - public static function fromArray(array $errors) : self + private static function isUtf8(string $string) : bool { - $validationErrors = []; - foreach ($errors as $error) { - if (!isset($validationErrors[$error->line])) { - $validationErrors[$error->line] = []; + $length = strlen($string); + for ($i = 0; $i < $length; $i++) { + if (ord($string[$i]) < 0x80) { + $n = 0; + } elseif ((ord($string[$i]) & 0xe0) === 0xc0) { + $n = 1; + } elseif ((ord($string[$i]) & 0xf0) === 0xe0) { + $n = 2; + } elseif ((ord($string[$i]) & 0xf0) === 0xf0) { + $n = 3; + } else { + return \false; } - $validationErrors[$error->line][] = trim($error->message); - } - return new self($validationErrors); - } - private function __construct(array $validationErrors) - { - $this->validationErrors = $validationErrors; - } - public function hasValidationErrors() : bool - { - return !empty($this->validationErrors); - } - public function asString() : string - { - $buffer = ''; - foreach ($this->validationErrors as $line => $validationErrorsOnLine) { - $buffer .= sprintf(\PHP_EOL . ' Line %d:' . \PHP_EOL, $line); - foreach ($validationErrorsOnLine as $validationError) { - $buffer .= sprintf(' - %s' . \PHP_EOL, $validationError); + for ($j = 0; $j < $n; $j++) { + if (++$i === $length || (ord($string[$i]) & 0xc0) !== 0x80) { + return \false; + } } } - return $buffer; - } -} - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PHPUnit\Util\Xml; - -use function file_get_contents; -use function libxml_clear_errors; -use function libxml_get_errors; -use function libxml_use_internal_errors; -use DOMDocument; -/** - * @internal This class is not covered by the backward compatibility promise for PHPUnit - */ -final class Validator -{ - public function validate(DOMDocument $document, string $xsdFilename) : \PHPUnit\Util\Xml\ValidationResult - { - $originalErrorHandling = libxml_use_internal_errors(\true); - $document->schemaValidateSource(file_get_contents($xsdFilename)); - $errors = libxml_get_errors(); - libxml_clear_errors(); - libxml_use_internal_errors($originalErrorHandling); - return \PHPUnit\Util\Xml\ValidationResult::fromArray($errors); + return \true; } } @@ -86669,14 +94463,14 @@ final class Validator phpunit phpunit - 10.0.16 + 10.5.8 The PHP Unit Testing framework. BSD-3-Clause - pkg:composer/phpunit/phpunit@10.0.16 + pkg:composer/phpunit/phpunit@10.5.8 myclabs @@ -86693,14 +94487,14 @@ final class Validator nikic php-parser - v4.15.4 + v5.0.0 A PHP parser written in PHP BSD-3-Clause - pkg:composer/nikic/php-parser@v4.15.4 + pkg:composer/nikic/php-parser@v5.0.0 phar-io @@ -86729,26 +94523,26 @@ final class Validator phpunit php-code-coverage - 10.0.2 + 10.1.11 Library that provides collection, processing, and rendering functionality for PHP code coverage information. BSD-3-Clause - pkg:composer/phpunit/php-code-coverage@10.0.2 + pkg:composer/phpunit/php-code-coverage@10.1.11 phpunit php-file-iterator - 4.0.1 + 4.1.0 FilterIterator implementation that filters files based on a list of suffixes. BSD-3-Clause - pkg:composer/phpunit/php-file-iterator@4.0.1 + pkg:composer/phpunit/php-file-iterator@4.1.0 phpunit @@ -86765,14 +94559,14 @@ final class Validator phpunit php-text-template - 3.0.0 + 3.0.1 Simple template engine. BSD-3-Clause - pkg:composer/phpunit/php-text-template@3.0.0 + pkg:composer/phpunit/php-text-template@3.0.1 phpunit @@ -86825,86 +94619,86 @@ final class Validator sebastian comparator - 5.0.0 + 5.0.1 Provides the functionality to compare PHP values for equality BSD-3-Clause - pkg:composer/sebastian/comparator@5.0.0 + pkg:composer/sebastian/comparator@5.0.1 sebastian complexity - 3.0.0 + 3.2.0 Library for calculating the complexity of PHP code units BSD-3-Clause - pkg:composer/sebastian/complexity@3.0.0 + pkg:composer/sebastian/complexity@3.2.0 sebastian diff - 5.0.0 + 5.1.0 Diff implementation BSD-3-Clause - pkg:composer/sebastian/diff@5.0.0 + pkg:composer/sebastian/diff@5.1.0 sebastian environment - 6.0.0 + 6.0.1 Provides functionality to handle HHVM/PHP environments BSD-3-Clause - pkg:composer/sebastian/environment@6.0.0 + pkg:composer/sebastian/environment@6.0.1 sebastian exporter - 5.0.0 + 5.1.1 Provides the functionality to export PHP variables for visualization BSD-3-Clause - pkg:composer/sebastian/exporter@5.0.0 + pkg:composer/sebastian/exporter@5.1.1 sebastian global-state - 6.0.0 + 6.0.1 Snapshotting of global state BSD-3-Clause - pkg:composer/sebastian/global-state@6.0.0 + pkg:composer/sebastian/global-state@6.0.1 sebastian lines-of-code - 2.0.0 + 2.0.2 Library for counting the lines of code in PHP source code BSD-3-Clause - pkg:composer/sebastian/lines-of-code@2.0.0 + pkg:composer/sebastian/lines-of-code@2.0.2 sebastian @@ -86969,14 +94763,14 @@ final class Validator theseer tokenizer - 1.2.1 + 1.2.2 A small library for converting tokenized PHP source code into XML and potentially other formats BSD-3-Clause - pkg:composer/theseer/tokenizer@1.2.1 + pkg:composer/theseer/tokenizer@1.2.2 @@ -86984,7 +94778,2516 @@ final class Validator - This Schema file defines the rules by which the XML configuration file of PHPUnit 8.5 may be structured. + This Schema file defines the rules by which the XML configuration file of PHPUnit 10.0 may be structured. + + + + + + Root Element + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The main type specifying the document structure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This Schema file defines the rules by which the XML configuration file of PHPUnit 10.1 may be structured. + + + + + + Root Element + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The main type specifying the document structure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This Schema file defines the rules by which the XML configuration file of PHPUnit 10.2 may be structured. + + + + + + Root Element + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The main type specifying the document structure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This Schema file defines the rules by which the XML configuration file of PHPUnit 10.3 may be structured. + + + + + + Root Element + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The main type specifying the document structure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This Schema file defines the rules by which the XML configuration file of PHPUnit 10.4 may be structured. + + + + + + Root Element + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The main type specifying the document structure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This Schema file defines the rules by which the XML configuration file of PHPUnit 8.5 may be structured. + + + + + + Root Element + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The main type specifying the document structure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This Schema file defines the rules by which the XML configuration file of PHPUnit 9.0 may be structured. + + + + + + Root Element + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The main type specifying the document structure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This Schema file defines the rules by which the XML configuration file of PHPUnit 9.0 may be structured. + + + + + + Root Element + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The main type specifying the document structure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This Schema file defines the rules by which the XML configuration file of PHPUnit 9.2 may be structured. @@ -87119,9 +97422,7 @@ final class Validator - - @@ -87147,7 +97448,7 @@ final class Validator - + @@ -87232,7 +97533,7 @@ final class Validator - + @@ -87242,7 +97543,9 @@ final class Validator + + @@ -87264,7 +97567,7 @@ final class Validator - + @@ -87292,7 +97595,7 @@ final class Validator - + @@ -87301,7 +97604,7 @@ final class Validator - This Schema file defines the rules by which the XML configuration file of PHPUnit 9.2 may be structured. + This Schema file defines the rules by which the XML configuration file of PHPUnit 9.3 may be structured. @@ -87310,30 +97613,33 @@ final class Validator Root Element - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - + + @@ -87421,37 +97727,333 @@ final class Validator - + - + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The main type specifying the document structure + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This Schema file defines the rules by which the XML configuration file of PHPUnit 9.4 may be structured. + + + + + + Root Element + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + - - - - - - - - + + @@ -87462,7 +98064,7 @@ final class Validator - + @@ -87538,16 +98140,14 @@ final class Validator - - - + @@ -87557,6 +98157,7 @@ final class Validator + @@ -87569,7 +98170,6 @@ final class Validator - @@ -87581,7 +98181,7 @@ final class Validator - + @@ -87591,8 +98191,8 @@ final class Validator - - + + @@ -87609,10 +98209,51 @@ final class Validator - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -87829,7 +98470,7 @@ final class Validator - + @@ -87895,8 +98536,10 @@ final class Validator - - + + + + @@ -89586,12 +100229,6 @@ use Exception; */ final class ExceptionComparator extends ObjectComparator { - /** - * Returns whether the comparator can compare two values. - * - * @param mixed $expected The first value to compare - * @param mixed $actual The second value to compare - */ public function accepts(mixed $expected, mixed $actual) : bool { return $expected instanceof Exception && $actual instanceof Exception; @@ -89747,28 +100384,29 @@ declare (strict_types=1); */ namespace PHPUnit\SebastianBergmann\Comparator; +use function array_keys; use function assert; -use PHPUnit\Framework\MockObject\MockObject; +use function str_starts_with; +use PHPUnit\Framework\MockObject\Stub; /** * Compares PHPUnit\Framework\MockObject\MockObject instances for equality. */ final class MockObjectComparator extends ObjectComparator { - /** - * Returns whether the comparator can compare two values. - * - * @param mixed $expected The first value to compare - * @param mixed $actual The second value to compare - */ public function accepts(mixed $expected, mixed $actual) : bool { - return $expected instanceof MockObject && $actual instanceof MockObject; + return $expected instanceof Stub && $actual instanceof Stub; } protected function toArray(object $object) : array { - assert($object instanceof MockObject); + assert($object instanceof Stub); $array = parent::toArray($object); - unset($array['__phpunit_invocationMocker']); + foreach (array_keys($array) as $key) { + if (!str_starts_with($key, '__phpunit_')) { + continue; + } + unset($array[$key]); + } return $array; } } @@ -90114,12 +100752,10 @@ namespace PHPUnit\SebastianBergmann\Complexity; use function assert; use function file_get_contents; use PHPUnit\PhpParser\Error; -use PHPUnit\PhpParser\Lexer; use PHPUnit\PhpParser\Node; use PHPUnit\PhpParser\NodeTraverser; use PHPUnit\PhpParser\NodeVisitor\NameResolver; use PHPUnit\PhpParser\NodeVisitor\ParentConnectingVisitor; -use PHPUnit\PhpParser\Parser; use PHPUnit\PhpParser\ParserFactory; final class Calculator { @@ -90136,7 +100772,7 @@ final class Calculator public function calculateForSourceString(string $source) : ComplexityCollection { try { - $nodes = $this->parser()->parse($source); + $nodes = (new ParserFactory())->createForHostVersion()->parse($source); assert($nodes !== null); return $this->calculateForAbstractSyntaxTree($nodes); // @codeCoverageIgnoreStart @@ -90167,10 +100803,6 @@ final class Calculator // @codeCoverageIgnoreEnd return $complexityCalculatingVisitor->result(); } - private function parser() : Parser - { - return (new ParserFactory())->create(ParserFactory::PREFER_PHP7, new Lexer()); - } } name = $name; $this->cyclomaticComplexity = $cyclomaticComplexity; } + /** + * @psalm-return non-empty-string + */ public function name() : string { return $this->name; } + /** + * @psalm-return positive-int + */ public function cyclomaticComplexity() : int { return $this->cyclomaticComplexity; } + public function isFunction() : bool + { + return !$this->isMethod(); + } + public function isMethod() : bool + { + return str_contains($this->name, '::'); + } } */ - private array $items; + private readonly array $items; public static function fromList(Complexity ...$items) : self { return new self($items); @@ -90253,6 +100915,9 @@ final class ComplexityCollection implements Countable, IteratorAggregate { return new ComplexityCollectionIterator($this); } + /** + * @psalm-return non-negative-int + */ public function count() : int { return count($this->items); @@ -90261,6 +100926,9 @@ final class ComplexityCollection implements Countable, IteratorAggregate { return empty($this->items); } + /** + * @psalm-return non-negative-int + */ public function cyclomaticComplexity() : int { $cyclomaticComplexity = 0; @@ -90269,6 +100937,26 @@ final class ComplexityCollection implements Countable, IteratorAggregate } return $cyclomaticComplexity; } + public function isFunction() : self + { + return new self(array_values(array_filter($this->items, static fn(Complexity $complexity): bool => $complexity->isFunction()))); + } + public function isMethod() : self + { + return new self(array_values(array_filter($this->items, static fn(Complexity $complexity): bool => $complexity->isMethod()))); + } + public function mergeWith(self $other) : self + { + return new self(array_merge($this->asArray(), $other->asArray())); + } + public function sortByDescendingCyclomaticComplexity() : self + { + $items = $this->items; + usort($items, static function (Complexity $a, Complexity $b) : int { + return $a->cyclomaticComplexity() <=> $b->cyclomaticComplexity(); + }); + return new self(array_reverse($items)); + } } */ - private array $items; + private readonly array $items; private int $position = 0; public function __construct(ComplexityCollection $items) { @@ -90394,11 +101082,13 @@ namespace PHPUnit\SebastianBergmann\Complexity; use function assert; use function is_array; use PHPUnit\PhpParser\Node; +use PHPUnit\PhpParser\Node\Expr\New_; use PHPUnit\PhpParser\Node\Name; use PHPUnit\PhpParser\Node\Stmt; use PHPUnit\PhpParser\Node\Stmt\Class_; use PHPUnit\PhpParser\Node\Stmt\ClassMethod; use PHPUnit\PhpParser\Node\Stmt\Function_; +use PHPUnit\PhpParser\Node\Stmt\Interface_; use PHPUnit\PhpParser\Node\Stmt\Trait_; use PHPUnit\PhpParser\NodeTraverser; use PHPUnit\PhpParser\NodeVisitorAbstract; @@ -90419,6 +101109,12 @@ final class ComplexityCalculatingVisitor extends NodeVisitorAbstract return null; } if ($node instanceof ClassMethod) { + if ($node->getAttribute('parent') instanceof Interface_) { + return null; + } + if ($node->isAbstract()) { + return null; + } $name = $this->classMethodName($node); } else { $name = $this->functionName($node); @@ -90437,6 +101133,8 @@ final class ComplexityCalculatingVisitor extends NodeVisitorAbstract } /** * @param Stmt[] $statements + * + * @psalm-return positive-int */ private function cyclomaticComplexity(array $statements) : int { @@ -90447,19 +101145,30 @@ final class ComplexityCalculatingVisitor extends NodeVisitorAbstract $traverser->traverse($statements); return $cyclomaticComplexityCalculatingVisitor->cyclomaticComplexity(); } + /** + * @psalm-return non-empty-string + */ private function classMethodName(ClassMethod $node) : string { $parent = $node->getAttribute('parent'); assert($parent instanceof Class_ || $parent instanceof Trait_); + if ($parent->getAttribute('parent') instanceof New_) { + return 'anonymous class'; + } assert(isset($parent->namespacedName)); assert($parent->namespacedName instanceof Name); return $parent->namespacedName->toString() . '::' . $node->name->toString(); } + /** + * @psalm-return non-empty-string + */ private function functionName(Function_ $node) : string { assert(isset($node->namespacedName)); assert($node->namespacedName instanceof Name); - return $node->namespacedName->toString(); + $functionName = $node->namespacedName->toString(); + assert($functionName !== ''); + return $functionName; } } cyclomaticComplexity++; } } + /** + * @psalm-return positive-int + */ public function cyclomaticComplexity() : int { return $this->cyclomaticComplexity; @@ -90528,7 +101243,13 @@ declare (strict_types=1); */ namespace PHPUnit\SebastianBergmann\Diff; -final class Chunk +use ArrayIterator; +use IteratorAggregate; +use Traversable; +/** + * @template-implements IteratorAggregate + */ +final class Chunk implements IteratorAggregate { private int $start; private int $startRange; @@ -90543,26 +101264,26 @@ final class Chunk $this->endRange = $endRange; $this->lines = $lines; } - public function getStart() : int + public function start() : int { return $this->start; } - public function getStartRange() : int + public function startRange() : int { return $this->startRange; } - public function getEnd() : int + public function end() : int { return $this->end; } - public function getEndRange() : int + public function endRange() : int { return $this->endRange; } /** * @psalm-return list */ - public function getLines() : array + public function lines() : array { return $this->lines; } @@ -90578,6 +101299,47 @@ final class Chunk } $this->lines = $lines; } + /** + * @deprecated Use start() instead + */ + public function getStart() : int + { + return $this->start; + } + /** + * @deprecated Use startRange() instead + */ + public function getStartRange() : int + { + return $this->startRange; + } + /** + * @deprecated Use end() instead + */ + public function getEnd() : int + { + return $this->end; + } + /** + * @deprecated Use endRange() instead + */ + public function getEndRange() : int + { + return $this->endRange; + } + /** + * @psalm-return list + * + * @deprecated Use lines() instead + */ + public function getLines() : array + { + return $this->lines; + } + public function getIterator() : Traversable + { + return new ArrayIterator($this->lines); + } } + */ +final class Diff implements IteratorAggregate { + /** + * @psalm-var non-empty-string + */ private string $from; + /** + * @psalm-var non-empty-string + */ private string $to; /** * @psalm-var list */ private array $chunks; /** + * @psalm-param non-empty-string $from + * @psalm-param non-empty-string $to * @psalm-param list $chunks */ public function __construct(string $from, string $to, array $chunks = []) @@ -90609,18 +101385,24 @@ final class Diff $this->to = $to; $this->chunks = $chunks; } - public function getFrom() : string + /** + * @psalm-return non-empty-string + */ + public function from() : string { return $this->from; } - public function getTo() : string + /** + * @psalm-return non-empty-string + */ + public function to() : string { return $this->to; } /** * @psalm-return list */ - public function getChunks() : array + public function chunks() : array { return $this->chunks; } @@ -90631,6 +101413,37 @@ final class Diff { $this->chunks = $chunks; } + /** + * @psalm-return non-empty-string + * + * @deprecated + */ + public function getFrom() : string + { + return $this->from; + } + /** + * @psalm-return non-empty-string + * + * @deprecated + */ + public function getTo() : string + { + return $this->to; + } + /** + * @psalm-return list + * + * @deprecated + */ + public function getChunks() : array + { + return $this->chunks; + } + public function getIterator() : Traversable + { + return new ArrayIterator($this->chunks); + } } type = $type; $this->content = $content; } + public function content() : string + { + return $this->content; + } + public function type() : int + { + return $this->type; + } + public function isAdded() : bool + { + return $this->type === self::ADDED; + } + public function isRemoved() : bool + { + return $this->type === self::REMOVED; + } + public function isUnchanged() : bool + { + return $this->type === self::UNCHANGED; + } + /** + * @deprecated + */ public function getContent() : string { return $this->content; } + /** + * @deprecated + */ public function getType() : int { return $this->type; @@ -91031,7 +101870,12 @@ final class MemoryEfficientLongestCommonSubsequenceCalculator implements Longest if ($from[$i] === $to[$j]) { $current[$j + 1] = $prev[$j] + 1; } else { - $current[$j + 1] = max($current[$j], $prev[$j + 1]); + // don't use max() to avoid function call overhead + if ($current[$j] > $prev[$j + 1]) { + $current[$j + 1] = $current[$j]; + } else { + $current[$j + 1] = $prev[$j + 1]; + } } } } @@ -91610,6 +102454,7 @@ declare (strict_types=1); namespace PHPUnit\SebastianBergmann\Diff; use function array_pop; +use function assert; use function count; use function max; use function preg_match; @@ -91639,6 +102484,8 @@ final class Parser $diffs[] = $diff; $collected = []; } + assert(!empty($fromMatch['file'])); + assert(!empty($toMatch['file'])); $diff = new Diff($fromMatch['file'], $toMatch['file']); $i++; } else { @@ -91660,8 +102507,8 @@ final class Parser $chunk = null; $diffLines = []; foreach ($lines as $line) { - if (preg_match('/^@@\\s+-(?P\\d+)(?:,\\s*(?P\\d+))?\\s+\\+(?P\\d+)(?:,\\s*(?P\\d+))?\\s+@@/', $line, $match)) { - $chunk = new Chunk((int) $match['start'], isset($match['startrange']) ? max(1, (int) $match['startrange']) : 1, (int) $match['end'], isset($match['endrange']) ? max(1, (int) $match['endrange']) : 1); + if (preg_match('/^@@\\s+-(?P\\d+)(?:,\\s*(?P\\d+))?\\s+\\+(?P\\d+)(?:,\\s*(?P\\d+))?\\s+@@/', $line, $match, \PREG_UNMATCHED_AS_NULL)) { + $chunk = new Chunk((int) $match['start'], isset($match['startrange']) ? max(0, (int) $match['startrange']) : 1, (int) $match['end'], isset($match['endrange']) ? max(0, (int) $match['endrange']) : 1); $chunks[] = $chunk; $diffLines = []; continue; @@ -91718,7 +102565,21 @@ final class TimeEfficientLongestCommonSubsequenceCalculator implements LongestCo for ($i = 1; $i <= $fromLength; $i++) { for ($j = 1; $j <= $toLength; $j++) { $o = $j * $width + $i; - $matrix[$o] = max($matrix[$o - 1], $matrix[$o - $width], $from[$i - 1] === $to[$j - 1] ? $matrix[$o - $width - 1] + 1 : 0); + // don't use max() to avoid function call overhead + $firstOrLast = $from[$i - 1] === $to[$j - 1] ? $matrix[$o - $width - 1] + 1 : 0; + if ($matrix[$o - 1] > $matrix[$o - $width]) { + if ($firstOrLast > $matrix[$o - 1]) { + $matrix[$o] = $firstOrLast; + } else { + $matrix[$o] = $matrix[$o - 1]; + } + } else { + if ($firstOrLast > $matrix[$o - $width]) { + $matrix[$o] = $firstOrLast; + } else { + $matrix[$o] = $matrix[$o - $width]; + } + } } } $i = $fromLength; @@ -91950,7 +102811,7 @@ use function php_ini_loaded_file; use function php_ini_scanned_files; use function phpversion; use function sprintf; -use function strpos; +use function strrpos; final class Runtime { private static string $binary; @@ -91989,7 +102850,14 @@ final class Runtime if (!$this->isOpcacheActive()) { return \false; } - if (strpos(ini_get('opcache.jit'), '0') === 0) { + if (ini_get('opcache.jit_buffer_size') === '0') { + return \false; + } + $jit = ini_get('opcache.jit'); + if ($jit === 'disable' || $jit === 'off') { + return \false; + } + if (strrpos($jit, '0') === 3) { return \false; } return \true; @@ -92176,17 +103044,6 @@ use BackedEnum; use PHPUnit\SebastianBergmann\RecursionContext\Context; use SplObjectStorage; use UnitEnum; -/** - * A nifty utility for visualizing PHP variables. - * - * - * export(new Exception); - * - */ final class Exporter { /** @@ -92221,7 +103078,7 @@ final class Exporter if ($context->contains($data[$key]) !== \false) { $result[] = '*RECURSION*'; } else { - $result[] = sprintf('array(%s)', $this->shortenedRecursiveExport($data[$key], $context)); + $result[] = sprintf('[%s]', $this->shortenedRecursiveExport($data[$key], $context)); } } else { $result[] = $exporter->shortenedExport($value); @@ -92257,7 +103114,7 @@ final class Exporter return sprintf('%s Object (%s)', $value::class, count($this->toArray($value)) > 0 ? '...' : ''); } if (is_array($value)) { - return sprintf('Array (%s)', count($value) > 0 ? '...' : ''); + return sprintf('[%s]', count($value) > 0 ? '...' : ''); } return $this->export($value); } @@ -92279,9 +103136,9 @@ final class Exporter continue; } // properties are transformed to keys in the following way: - // private $property => "\0Classname\0property" - // protected $property => "\0*\0property" - // public $property => "property" + // private $propertyName => "\0ClassName\0propertyName" + // protected $propertyName => "\0*\0propertyName" + // public $propertyName => "propertyName" if (preg_match('/^\\0.+\\0(.+)$/', (string) $key, $matches)) { $key = $matches[1]; } @@ -92291,19 +103148,17 @@ final class Exporter } $array[$key] = $val; } - // Some internal classes like SplObjectStorage don't work with the + // Some internal classes like SplObjectStorage do not work with the // above (fast) mechanism nor with reflection in Zend. // Format the output similarly to print_r() in this case if ($value instanceof SplObjectStorage) { foreach ($value as $_value) { $array['Object #' . spl_object_id($_value)] = ['obj' => $_value, 'inf' => $value->getInfo()]; } + $value->rewind(); } return $array; } - /** - * Recursive implementation of export. - */ private function recursiveExport(mixed &$value, int $indentation, ?Context $processed = null) : string { if ($value === null) { @@ -92341,7 +103196,7 @@ final class Exporter return sprintf('%s Enum #%d (%s)', $value::class, spl_object_id($value), $value->name); } if (is_string($value)) { - // Match for most non printable chars somewhat taking multibyte chars into account + // Match for most non-printable chars somewhat taking multibyte chars into account if (preg_match('/[^\\x09-\\x0d\\x1b\\x20-\\xff]/', $value)) { return 'Binary String: 0x' . bin2hex($value); } @@ -92360,27 +103215,27 @@ final class Exporter $values = ''; if (count($array) > 0) { foreach ($array as $k => $v) { - $values .= sprintf('%s %s => %s' . "\n", $whitespace, $this->recursiveExport($k, $indentation), $this->recursiveExport($value[$k], $indentation + 1, $processed)); + $values .= $whitespace . ' ' . $this->recursiveExport($k, $indentation) . ' => ' . $this->recursiveExport($value[$k], $indentation + 1, $processed) . ",\n"; } $values = "\n" . $values . $whitespace; } - return sprintf('Array &%s (%s)', $key, $values); + return 'Array &' . (string) $key . ' [' . $values . ']'; } if (is_object($value)) { $class = $value::class; if ($processed->contains($value)) { - return sprintf('%s Object #%d', $class, spl_object_id($value)); + return $class . ' Object #' . spl_object_id($value); } $processed->add($value); $values = ''; $array = $this->toArray($value); if (count($array) > 0) { foreach ($array as $k => $v) { - $values .= sprintf('%s %s => %s' . "\n", $whitespace, $this->recursiveExport($k, $indentation), $this->recursiveExport($v, $indentation + 1, $processed)); + $values .= $whitespace . ' ' . $this->recursiveExport($k, $indentation) . ' => ' . $this->recursiveExport($v, $indentation + 1, $processed) . ",\n"; } $values = "\n" . $values . $whitespace; } - return sprintf('%s Object #%d (%s)', $class, spl_object_id($value), $values); + return $class . ' Object #' . spl_object_id($value) . ' (' . $values . ')'; } return var_export($value, \true); } @@ -92652,8 +103507,7 @@ final class Restorer foreach ($snapshot->staticProperties() as $className => $staticProperties) { foreach ($staticProperties as $name => $value) { $reflector = new ReflectionProperty($className, $name); - $reflector->setAccessible(\true); - $reflector->setValue($value); + $reflector->setValue(null, $value); } } foreach ($newClasses as $className) { @@ -92670,8 +103524,7 @@ final class Restorer if (!isset($defaults[$name])) { continue; } - $property->setAccessible(\true); - $property->setValue($defaults[$name]); + $property->setValue(null, $defaults[$name]); } } } @@ -92891,7 +103744,6 @@ class Snapshot if ($this->excludeList->isStaticPropertyExcluded($className, $name)) { continue; } - $property->setAccessible(\true); if (!$property->isInitialized()) { continue; } @@ -93031,10 +103883,8 @@ use function assert; use function file_get_contents; use function substr_count; use PHPUnit\PhpParser\Error; -use PHPUnit\PhpParser\Lexer; use PHPUnit\PhpParser\Node; use PHPUnit\PhpParser\NodeTraverser; -use PHPUnit\PhpParser\Parser; use PHPUnit\PhpParser\ParserFactory; final class Counter { @@ -93054,8 +103904,9 @@ final class Counter if ($linesOfCode === 0 && !empty($source)) { $linesOfCode = 1; } + assert($linesOfCode >= 0); try { - $nodes = $this->parser()->parse($source); + $nodes = (new ParserFactory())->createForHostVersion()->parse($source); assert($nodes !== null); return $this->countInAbstractSyntaxTree($linesOfCode, $nodes); // @codeCoverageIgnoreStart @@ -93065,6 +103916,8 @@ final class Counter // @codeCoverageIgnoreEnd } /** + * @psalm-param non-negative-int $linesOfCode + * * @param Node[] $nodes * * @throws RuntimeException @@ -93084,10 +103937,6 @@ final class Counter // @codeCoverageIgnoreEnd return $visitor->result(); } - private function parser() : Parser - { - return (new ParserFactory())->create(ParserFactory::PREFER_PHP7, new Lexer()); - } } linesOfCode = $linesOfCode; @@ -93234,7 +104090,12 @@ final class LineCountingVisitor extends NodeVisitorAbstract foreach ($this->comments() as $comment) { $commentLinesOfCode += $comment->getEndLine() - $comment->getStartLine() + 1; } - return new LinesOfCode($this->linesOfCode, $commentLinesOfCode, $this->linesOfCode - $commentLinesOfCode, count(array_unique($this->linesWithStatements))); + $nonCommentLinesOfCode = $this->linesOfCode - $commentLinesOfCode; + $logicalLinesOfCode = count(array_unique($this->linesWithStatements)); + assert($commentLinesOfCode >= 0); + assert($nonCommentLinesOfCode >= 0); + assert($logicalLinesOfCode >= 0); + return new LinesOfCode($this->linesOfCode, $commentLinesOfCode, $nonCommentLinesOfCode, $logicalLinesOfCode); } /** * @return Comment[] @@ -93266,25 +104127,46 @@ namespace PHPUnit\SebastianBergmann\LinesOfCode; */ final class LinesOfCode { - private int $linesOfCode; - private int $commentLinesOfCode; - private int $nonCommentLinesOfCode; - private int $logicalLinesOfCode; /** + * @psalm-var non-negative-int + */ + private readonly int $linesOfCode; + /** + * @psalm-var non-negative-int + */ + private readonly int $commentLinesOfCode; + /** + * @psalm-var non-negative-int + */ + private readonly int $nonCommentLinesOfCode; + /** + * @psalm-var non-negative-int + */ + private readonly int $logicalLinesOfCode; + /** + * @psalm-param non-negative-int $linesOfCode + * @psalm-param non-negative-int $commentLinesOfCode + * @psalm-param non-negative-int $nonCommentLinesOfCode + * @psalm-param non-negative-int $logicalLinesOfCode + * * @throws IllogicalValuesException * @throws NegativeValueException */ public function __construct(int $linesOfCode, int $commentLinesOfCode, int $nonCommentLinesOfCode, int $logicalLinesOfCode) { + /** @psalm-suppress DocblockTypeContradiction */ if ($linesOfCode < 0) { throw new NegativeValueException('$linesOfCode must not be negative'); } + /** @psalm-suppress DocblockTypeContradiction */ if ($commentLinesOfCode < 0) { throw new NegativeValueException('$commentLinesOfCode must not be negative'); } + /** @psalm-suppress DocblockTypeContradiction */ if ($nonCommentLinesOfCode < 0) { throw new NegativeValueException('$nonCommentLinesOfCode must not be negative'); } + /** @psalm-suppress DocblockTypeContradiction */ if ($logicalLinesOfCode < 0) { throw new NegativeValueException('$logicalLinesOfCode must not be negative'); } @@ -93296,18 +104178,30 @@ final class LinesOfCode $this->nonCommentLinesOfCode = $nonCommentLinesOfCode; $this->logicalLinesOfCode = $logicalLinesOfCode; } + /** + * @psalm-return non-negative-int + */ public function linesOfCode() : int { return $this->linesOfCode; } + /** + * @psalm-return non-negative-int + */ public function commentLinesOfCode() : int { return $this->commentLinesOfCode; } + /** + * @psalm-return non-negative-int + */ public function nonCommentLinesOfCode() : int { return $this->nonCommentLinesOfCode; } + /** + * @psalm-return non-negative-int + */ public function logicalLinesOfCode() : int { return $this->logicalLinesOfCode; @@ -95222,6 +106116,7 @@ class TokenCollectionException extends Exception declare (strict_types=1); namespace PHPUnit\TheSeer\Tokenizer; +use function var_dump; class Tokenizer { /** @@ -95247,6 +106142,10 @@ class Tokenizer } $line = $tok[2]; $values = \preg_split('/\\R+/Uu', $tok[1]); + if (!$values) { + $result->addToken(new Token($line, \token_name($tok[0]), '{binary data}')); + continue; + } foreach ($values as $v) { $token = new Token($line, \token_name($tok[0]), $v); $lastToken = $token; @@ -95264,11 +106163,6 @@ class Tokenizer $prev = new Token(0, 'Placeholder', ''); $final = new TokenCollection(); foreach ($tokens as $token) { - if ($prev === null) { - $final->addToken($token); - $prev = $token; - continue; - } $gap = $token->getLine() - $prev->getLine(); while ($gap > 1) { $linebreak = new Token($prev->getLine() + 1, 'T_WHITESPACE', ''); @@ -95363,12 +106257,17 @@ class XMLSerializer namespace PHPSTORM_META { override( - \PHPUnit\Framework\TestCase::createMock(0), + \PHPUnit\Framework\TestCase::createStub(0), map([""=>"$0"]) ); override( - \PHPUnit\Framework\TestCase::createStub(0), + \PHPUnit\Framework\TestCase::createConfiguredStub(0), + map([""=>"$0"]) + ); + + override( + \PHPUnit\Framework\TestCase::createMock(0), map([""=>"$0"]) ); @@ -95392,4 +106291,4 @@ namespace PHPSTORM_META { map([""=>"$0"]) ); } -]qLr3=R}}}W䌋Xp p&K;ӯxQ6GBMB \ No newline at end of file +ȸd@N].Ku4 |)BYz` pw6`m*P ؟pGBMB \ No newline at end of file From 6624eadfaa138780e62e64d691d204b8efc863cc Mon Sep 17 00:00:00 2001 From: Bastian Schwarz Date: Sun, 21 Jan 2024 00:25:14 +0100 Subject: [PATCH 2/4] Set minimal version to 8.2 --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 0809e2b..6bc0075 100644 --- a/composer.json +++ b/composer.json @@ -10,7 +10,7 @@ } ], "require": { - "php": "^8.1", + "php": "^8.2", "codenamephp/deployer.base": "^3.0", "codenamephp/deployer.command": "^1.0" }, From 1327c963acdcf77a85808941c106a731bf63d93a Mon Sep 17 00:00:00 2001 From: Bastian Schwarz Date: Sun, 21 Jan 2024 00:25:34 +0100 Subject: [PATCH 3/4] Remove 8.1 from CI --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f87b6f4..35c965d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,4 +17,4 @@ jobs: ci: uses: codenamephp/workflows.php/.github/workflows/ci.yml@1 with: - php-versions: '["8.1","8.2","8.3"]' + php-versions: '["8.2","8.3"]' From f76e7ff4c8bcb954b27f60d007fb5604f8d85e1a Mon Sep 17 00:00:00 2001 From: Bastian Schwarz Date: Sun, 21 Jan 2024 00:25:41 +0100 Subject: [PATCH 4/4] PHPStorm stuff --- .idea/php.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.idea/php.xml b/.idea/php.xml index f4f21ad..13eed7b 100644 --- a/.idea/php.xml +++ b/.idea/php.xml @@ -130,7 +130,7 @@ - +

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%0A@*e91v;&!@HqEO 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 AMgRZ+ diff --git a/tools/infection b/tools/infection index aef346043cede04d997c2c3689b5924355f51f7c..257191b97d9f90200b965e27752494e0f12255e3 100755 GIT binary patch delta 86764 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 KCIdaX-v0pR23DQ` delta 85643 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 diff --git a/tools/phpunit.phar b/tools/phpunit.phar index e1c645f..678daa9 100755 --- a/tools/phpunit.phar +++ b/tools/phpunit.phar @@ -19,7 +19,7 @@ if (version_compare('8.1.0', PHP_VERSION, '>')) { fwrite( STDERR, sprintf( - 'PHPUnit 10.0.16 by Sebastian Bergmann and contributors.' . PHP_EOL . PHP_EOL . + 'PHPUnit 10.5.8 by Sebastian Bergmann and contributors.' . PHP_EOL . PHP_EOL . 'This version of PHPUnit requires PHP >= 8.1.' . PHP_EOL . 'You are using PHP %s (%s).' . PHP_EOL, PHP_VERSION, @@ -30,31 +30,42 @@ if (version_compare('8.1.0', PHP_VERSION, '>')) { die(1); } -foreach (['dom', 'json', 'libxml', 'mbstring', 'tokenizer', 'xml', 'xmlwriter'] as $extension) { - if (extension_loaded($extension)) { - continue; +$requiredExtensions = ['ctype', 'dom', 'json', 'libxml', 'mbstring', 'tokenizer', 'xml', 'xmlwriter']; + +$unavailableExtensions = array_filter( + $requiredExtensions, + static function ($extension) { + return !extension_loaded($extension); } +); +if ([] !== $unavailableExtensions) { fwrite( STDERR, sprintf( - 'PHPUnit requires the "%s" extension.' . PHP_EOL, - $extension + 'PHPUnit requires the "%s" extensions, but the "%s" %s not available.' . PHP_EOL, + implode('", "', $requiredExtensions), + implode('", "', $unavailableExtensions), + count($unavailableExtensions) === 1 ? 'extension is' : 'extensions are' ) ); die(1); } +unset($requiredExtensions, $unavailableExtensions); + if (__FILE__ === realpath($_SERVER['SCRIPT_NAME'])) { $execute = true; } else { $execute = false; } -$options = getopt('', array('manifest', 'sbom')); +$options = getopt('', array('composer-lock', 'manifest', 'sbom')); -if (isset($options['manifest'])) { +if (isset($options['composer-lock'])) { + $printComposerLock = true; +} elseif (isset($options['manifest'])) { $printManifest = true; } elseif (isset($options['sbom'])) { $printSbom = true; @@ -63,9 +74,9 @@ if (isset($options['manifest'])) { unset($options); define('__PHPUNIT_PHAR__', str_replace(DIRECTORY_SEPARATOR, '/', __FILE__)); -define('__PHPUNIT_PHAR_ROOT__', 'phar://phpunit-10.0.16.phar'); +define('__PHPUNIT_PHAR_ROOT__', 'phar://phpunit-10.5.8.phar'); -Phar::mapPhar('phpunit-10.0.16.phar'); +Phar::mapPhar('phpunit-10.5.8.phar'); spl_autoload_register( function ($class) { @@ -104,6 +115,7 @@ spl_autoload_register( 'PHPUnit\\Event\\Code\\ClassMethod' => '/phpunit/Event/Value/ClassMethod.php', 'PHPUnit\\Event\\Code\\ComparisonFailure' => '/phpunit/Event/Value/ComparisonFailure.php', 'PHPUnit\\Event\\Code\\ComparisonFailureBuilder' => '/phpunit/Event/Value/ComparisonFailureBuilder.php', + 'PHPUnit\\Event\\Code\\NoTestCaseObjectOnCallStackException' => '/phpunit/Event/Exception/NoTestCaseObjectOnCallStackException.php', 'PHPUnit\\Event\\Code\\Phpt' => '/phpunit/Event/Value/Test/Phpt.php', 'PHPUnit\\Event\\Code\\Test' => '/phpunit/Event/Value/Test/Test.php', 'PHPUnit\\Event\\Code\\TestCollection' => '/phpunit/Event/Value/Test/TestCollection.php', @@ -141,10 +153,14 @@ spl_autoload_register( 'PHPUnit\\Event\\Subscriber' => '/phpunit/Event/Subscriber.php', 'PHPUnit\\Event\\SubscriberTypeAlreadyRegisteredException' => '/phpunit/Event/Exception/SubscriberTypeAlreadyRegisteredException.php', 'PHPUnit\\Event\\Telemetry\\Duration' => '/phpunit/Event/Value/Telemetry/Duration.php', + 'PHPUnit\\Event\\Telemetry\\GarbageCollectorStatus' => '/phpunit/Event/Value/Telemetry/GarbageCollectorStatus.php', + 'PHPUnit\\Event\\Telemetry\\GarbageCollectorStatusProvider' => '/phpunit/Event/Value/Telemetry/GarbageCollectorStatusProvider.php', 'PHPUnit\\Event\\Telemetry\\HRTime' => '/phpunit/Event/Value/Telemetry/HRTime.php', 'PHPUnit\\Event\\Telemetry\\Info' => '/phpunit/Event/Value/Telemetry/Info.php', 'PHPUnit\\Event\\Telemetry\\MemoryMeter' => '/phpunit/Event/Value/Telemetry/MemoryMeter.php', 'PHPUnit\\Event\\Telemetry\\MemoryUsage' => '/phpunit/Event/Value/Telemetry/MemoryUsage.php', + 'PHPUnit\\Event\\Telemetry\\Php81GarbageCollectorStatusProvider' => '/phpunit/Event/Value/Telemetry/Php81GarbageCollectorStatusProvider.php', + 'PHPUnit\\Event\\Telemetry\\Php83GarbageCollectorStatusProvider' => '/phpunit/Event/Value/Telemetry/Php83GarbageCollectorStatusProvider.php', 'PHPUnit\\Event\\Telemetry\\Snapshot' => '/phpunit/Event/Value/Telemetry/Snapshot.php', 'PHPUnit\\Event\\Telemetry\\StopWatch' => '/phpunit/Event/Value/Telemetry/StopWatch.php', 'PHPUnit\\Event\\Telemetry\\System' => '/phpunit/Event/Value/Telemetry/System.php', @@ -166,6 +182,8 @@ spl_autoload_register( 'PHPUnit\\Event\\TestRunner\\DeprecationTriggeredSubscriber' => '/phpunit/Event/Events/TestRunner/DeprecationTriggeredSubscriber.php', 'PHPUnit\\Event\\TestRunner\\EventFacadeSealed' => '/phpunit/Event/Events/TestRunner/EventFacadeSealed.php', 'PHPUnit\\Event\\TestRunner\\EventFacadeSealedSubscriber' => '/phpunit/Event/Events/TestRunner/EventFacadeSealedSubscriber.php', + 'PHPUnit\\Event\\TestRunner\\ExecutionAborted' => '/phpunit/Event/Events/TestRunner/ExecutionAborted.php', + 'PHPUnit\\Event\\TestRunner\\ExecutionAbortedSubscriber' => '/phpunit/Event/Events/TestRunner/ExecutionAbortedSubscriber.php', 'PHPUnit\\Event\\TestRunner\\ExecutionFinished' => '/phpunit/Event/Events/TestRunner/ExecutionFinished.php', 'PHPUnit\\Event\\TestRunner\\ExecutionFinishedSubscriber' => '/phpunit/Event/Events/TestRunner/ExecutionFinishedSubscriber.php', 'PHPUnit\\Event\\TestRunner\\ExecutionStarted' => '/phpunit/Event/Events/TestRunner/ExecutionStarted.php', @@ -176,6 +194,12 @@ spl_autoload_register( 'PHPUnit\\Event\\TestRunner\\ExtensionLoadedFromPharSubscriber' => '/phpunit/Event/Events/TestRunner/ExtensionLoadedFromPharSubscriber.php', 'PHPUnit\\Event\\TestRunner\\Finished' => '/phpunit/Event/Events/TestRunner/Finished.php', 'PHPUnit\\Event\\TestRunner\\FinishedSubscriber' => '/phpunit/Event/Events/TestRunner/FinishedSubscriber.php', + 'PHPUnit\\Event\\TestRunner\\GarbageCollectionDisabled' => '/phpunit/Event/Events/TestRunner/GarbageCollectionDisabled.php', + 'PHPUnit\\Event\\TestRunner\\GarbageCollectionDisabledSubscriber' => '/phpunit/Event/Events/TestRunner/GarbageCollectionDisabledSubscriber.php', + 'PHPUnit\\Event\\TestRunner\\GarbageCollectionEnabled' => '/phpunit/Event/Events/TestRunner/GarbageCollectionEnabled.php', + 'PHPUnit\\Event\\TestRunner\\GarbageCollectionEnabledSubscriber' => '/phpunit/Event/Events/TestRunner/GarbageCollectionEnabledSubscriber.php', + 'PHPUnit\\Event\\TestRunner\\GarbageCollectionTriggered' => '/phpunit/Event/Events/TestRunner/GarbageCollectionTriggered.php', + 'PHPUnit\\Event\\TestRunner\\GarbageCollectionTriggeredSubscriber' => '/phpunit/Event/Events/TestRunner/GarbageCollectionTriggeredSubscriber.php', 'PHPUnit\\Event\\TestRunner\\Started' => '/phpunit/Event/Events/TestRunner/Started.php', 'PHPUnit\\Event\\TestRunner\\StartedSubscriber' => '/phpunit/Event/Events/TestRunner/StartedSubscriber.php', 'PHPUnit\\Event\\TestRunner\\WarningTriggered' => '/phpunit/Event/Events/TestRunner/WarningTriggered.php', @@ -223,6 +247,10 @@ spl_autoload_register( 'PHPUnit\\Event\\Test\\ComparatorRegisteredSubscriber' => '/phpunit/Event/Events/Test/ComparatorRegisteredSubscriber.php', 'PHPUnit\\Event\\Test\\ConsideredRisky' => '/phpunit/Event/Events/Test/Issue/ConsideredRisky.php', 'PHPUnit\\Event\\Test\\ConsideredRiskySubscriber' => '/phpunit/Event/Events/Test/Issue/ConsideredRiskySubscriber.php', + 'PHPUnit\\Event\\Test\\DataProviderMethodCalled' => '/phpunit/Event/Events/Test/Lifecycle/DataProviderMethodCalled.php', + 'PHPUnit\\Event\\Test\\DataProviderMethodCalledSubscriber' => '/phpunit/Event/Events/Test/Lifecycle/DataProviderMethodCalledSubscriber.php', + 'PHPUnit\\Event\\Test\\DataProviderMethodFinished' => '/phpunit/Event/Events/Test/Lifecycle/DataProviderMethodFinished.php', + 'PHPUnit\\Event\\Test\\DataProviderMethodFinishedSubscriber' => '/phpunit/Event/Events/Test/Lifecycle/DataProviderMethodFinishedSubscriber.php', 'PHPUnit\\Event\\Test\\DeprecationTriggered' => '/phpunit/Event/Events/Test/Issue/DeprecationTriggered.php', 'PHPUnit\\Event\\Test\\DeprecationTriggeredSubscriber' => '/phpunit/Event/Events/Test/Issue/DeprecationTriggeredSubscriber.php', 'PHPUnit\\Event\\Test\\ErrorTriggered' => '/phpunit/Event/Events/Test/Issue/ErrorTriggered.php', @@ -272,6 +300,8 @@ spl_autoload_register( 'PHPUnit\\Event\\Test\\PreConditionCalledSubscriber' => '/phpunit/Event/Events/Test/HookMethod/PreConditionCalledSubscriber.php', 'PHPUnit\\Event\\Test\\PreConditionFinished' => '/phpunit/Event/Events/Test/HookMethod/PreConditionFinished.php', 'PHPUnit\\Event\\Test\\PreConditionFinishedSubscriber' => '/phpunit/Event/Events/Test/HookMethod/PreConditionFinishedSubscriber.php', + 'PHPUnit\\Event\\Test\\PreparationFailed' => '/phpunit/Event/Events/Test/Lifecycle/PreparationFailed.php', + 'PHPUnit\\Event\\Test\\PreparationFailedSubscriber' => '/phpunit/Event/Events/Test/Lifecycle/PreparationFailedSubscriber.php', 'PHPUnit\\Event\\Test\\PreparationStarted' => '/phpunit/Event/Events/Test/Lifecycle/PreparationStarted.php', 'PHPUnit\\Event\\Test\\PreparationStartedSubscriber' => '/phpunit/Event/Events/Test/Lifecycle/PreparationStartedSubscriber.php', 'PHPUnit\\Event\\Test\\Prepared' => '/phpunit/Event/Events/Test/Lifecycle/Prepared.php', @@ -323,6 +353,10 @@ spl_autoload_register( 'PHPUnit\\Framework\\Attributes\\ExcludeGlobalVariableFromBackup' => '/phpunit/Framework/Attributes/ExcludeGlobalVariableFromBackup.php', 'PHPUnit\\Framework\\Attributes\\ExcludeStaticPropertyFromBackup' => '/phpunit/Framework/Attributes/ExcludeStaticPropertyFromBackup.php', 'PHPUnit\\Framework\\Attributes\\Group' => '/phpunit/Framework/Attributes/Group.php', + 'PHPUnit\\Framework\\Attributes\\IgnoreClassForCodeCoverage' => '/phpunit/Framework/Attributes/IgnoreClassForCodeCoverage.php', + 'PHPUnit\\Framework\\Attributes\\IgnoreDeprecations' => '/phpunit/Framework/Attributes/IgnoreDeprecations.php', + 'PHPUnit\\Framework\\Attributes\\IgnoreFunctionForCodeCoverage' => '/phpunit/Framework/Attributes/IgnoreFunctionForCodeCoverage.php', + 'PHPUnit\\Framework\\Attributes\\IgnoreMethodForCodeCoverage' => '/phpunit/Framework/Attributes/IgnoreMethodForCodeCoverage.php', 'PHPUnit\\Framework\\Attributes\\Large' => '/phpunit/Framework/Attributes/Large.php', 'PHPUnit\\Framework\\Attributes\\Medium' => '/phpunit/Framework/Attributes/Medium.php', 'PHPUnit\\Framework\\Attributes\\PostCondition' => '/phpunit/Framework/Attributes/PostCondition.php', @@ -347,6 +381,7 @@ spl_autoload_register( 'PHPUnit\\Framework\\Attributes\\Ticket' => '/phpunit/Framework/Attributes/Ticket.php', 'PHPUnit\\Framework\\Attributes\\UsesClass' => '/phpunit/Framework/Attributes/UsesClass.php', 'PHPUnit\\Framework\\Attributes\\UsesFunction' => '/phpunit/Framework/Attributes/UsesFunction.php', + 'PHPUnit\\Framework\\Attributes\\WithoutErrorHandler' => '/phpunit/Framework/Attributes/WithoutErrorHandler.php', 'PHPUnit\\Framework\\CodeCoverageException' => '/phpunit/Framework/Exception/CodeCoverageException.php', 'PHPUnit\\Framework\\ComparisonMethodDoesNotAcceptParameterTypeException' => '/phpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotAcceptParameterTypeException.php', 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareBoolReturnTypeException' => '/phpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareBoolReturnTypeException.php', @@ -390,7 +425,8 @@ spl_autoload_register( 'PHPUnit\\Framework\\Constraint\\LogicalNot' => '/phpunit/Framework/Constraint/Operator/LogicalNot.php', 'PHPUnit\\Framework\\Constraint\\LogicalOr' => '/phpunit/Framework/Constraint/Operator/LogicalOr.php', 'PHPUnit\\Framework\\Constraint\\LogicalXor' => '/phpunit/Framework/Constraint/Operator/LogicalXor.php', - 'PHPUnit\\Framework\\Constraint\\ObjectEquals' => '/phpunit/Framework/Constraint/ObjectEquals.php', + 'PHPUnit\\Framework\\Constraint\\ObjectEquals' => '/phpunit/Framework/Constraint/Object/ObjectEquals.php', + 'PHPUnit\\Framework\\Constraint\\ObjectHasProperty' => '/phpunit/Framework/Constraint/Object/ObjectHasProperty.php', 'PHPUnit\\Framework\\Constraint\\Operator' => '/phpunit/Framework/Constraint/Operator/Operator.php', 'PHPUnit\\Framework\\Constraint\\RegularExpression' => '/phpunit/Framework/Constraint/String/RegularExpression.php', 'PHPUnit\\Framework\\Constraint\\SameSize' => '/phpunit/Framework/Constraint/Cardinality/SameSize.php', @@ -406,7 +442,6 @@ spl_autoload_register( 'PHPUnit\\Framework\\Constraint\\UnaryOperator' => '/phpunit/Framework/Constraint/Operator/UnaryOperator.php', 'PHPUnit\\Framework\\DataProviderTestSuite' => '/phpunit/Framework/DataProviderTestSuite.php', 'PHPUnit\\Framework\\EmptyStringException' => '/phpunit/Framework/Exception/EmptyStringException.php', - 'PHPUnit\\Framework\\Error' => '/phpunit/Framework/Exception/Error.php', 'PHPUnit\\Framework\\Exception' => '/phpunit/Framework/Exception/Exception.php', 'PHPUnit\\Framework\\ExecutionOrderDependency' => '/phpunit/Framework/ExecutionOrderDependency.php', 'PHPUnit\\Framework\\ExpectationFailedException' => '/phpunit/Framework/Exception/ExpectationFailedException.php', @@ -417,77 +452,83 @@ spl_autoload_register( 'PHPUnit\\Framework\\InvalidCoversTargetException' => '/phpunit/Framework/Exception/InvalidCoversTargetException.php', 'PHPUnit\\Framework\\InvalidDataProviderException' => '/phpunit/Framework/Exception/InvalidDataProviderException.php', 'PHPUnit\\Framework\\InvalidDependencyException' => '/phpunit/Framework/Exception/InvalidDependencyException.php', - 'PHPUnit\\Framework\\MockObject\\Api' => '/phpunit/Framework/MockObject/Api/Api.php', 'PHPUnit\\Framework\\MockObject\\BadMethodCallException' => '/phpunit/Framework/MockObject/Exception/BadMethodCallException.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\Identity' => '/phpunit/Framework/MockObject/Builder/Identity.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker' => '/phpunit/Framework/MockObject/Builder/InvocationMocker.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationStubber' => '/phpunit/Framework/MockObject/Builder/InvocationStubber.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => '/phpunit/Framework/MockObject/Builder/MethodNameMatch.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => '/phpunit/Framework/MockObject/Builder/ParametersMatch.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => '/phpunit/Framework/MockObject/Builder/Stub.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\Identity' => '/phpunit/Framework/MockObject/Runtime/Builder/Identity.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker' => '/phpunit/Framework/MockObject/Runtime/Builder/InvocationMocker.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationStubber' => '/phpunit/Framework/MockObject/Runtime/Builder/InvocationStubber.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => '/phpunit/Framework/MockObject/Runtime/Builder/MethodNameMatch.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => '/phpunit/Framework/MockObject/Runtime/Builder/ParametersMatch.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => '/phpunit/Framework/MockObject/Runtime/Builder/Stub.php', 'PHPUnit\\Framework\\MockObject\\CannotUseAddMethodsException' => '/phpunit/Framework/MockObject/Exception/CannotUseAddMethodsException.php', 'PHPUnit\\Framework\\MockObject\\CannotUseOnlyMethodsException' => '/phpunit/Framework/MockObject/Exception/CannotUseOnlyMethodsException.php', - 'PHPUnit\\Framework\\MockObject\\ClassAlreadyExistsException' => '/phpunit/Framework/MockObject/Exception/ClassAlreadyExistsException.php', - 'PHPUnit\\Framework\\MockObject\\ClassIsEnumerationException' => '/phpunit/Framework/MockObject/Exception/ClassIsEnumerationException.php', - 'PHPUnit\\Framework\\MockObject\\ClassIsFinalException' => '/phpunit/Framework/MockObject/Exception/ClassIsFinalException.php', - 'PHPUnit\\Framework\\MockObject\\ClassIsReadonlyException' => '/phpunit/Framework/MockObject/Exception/ClassIsReadonlyException.php', 'PHPUnit\\Framework\\MockObject\\ConfigurableMethod' => '/phpunit/Framework/MockObject/ConfigurableMethod.php', - 'PHPUnit\\Framework\\MockObject\\ConfigurableMethodsAlreadyInitializedException' => '/phpunit/Framework/MockObject/Exception/ConfigurableMethodsAlreadyInitializedException.php', - 'PHPUnit\\Framework\\MockObject\\DuplicateMethodException' => '/phpunit/Framework/MockObject/Exception/DuplicateMethodException.php', + 'PHPUnit\\Framework\\MockObject\\DoubledCloneMethod' => '/phpunit/Framework/MockObject/Runtime/Api/DoubledCloneMethod.php', 'PHPUnit\\Framework\\MockObject\\Exception' => '/phpunit/Framework/MockObject/Exception/Exception.php', - 'PHPUnit\\Framework\\MockObject\\Generator' => '/phpunit/Framework/MockObject/Generator.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\ClassAlreadyExistsException' => '/phpunit/Framework/MockObject/Generator/Exception/ClassAlreadyExistsException.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\ClassIsEnumerationException' => '/phpunit/Framework/MockObject/Generator/Exception/ClassIsEnumerationException.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\ClassIsFinalException' => '/phpunit/Framework/MockObject/Generator/Exception/ClassIsFinalException.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\ClassIsReadonlyException' => '/phpunit/Framework/MockObject/Generator/Exception/ClassIsReadonlyException.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\DuplicateMethodException' => '/phpunit/Framework/MockObject/Generator/Exception/DuplicateMethodException.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\Exception' => '/phpunit/Framework/MockObject/Generator/Exception/Exception.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\Generator' => '/phpunit/Framework/MockObject/Generator/Generator.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\InvalidMethodNameException' => '/phpunit/Framework/MockObject/Generator/Exception/InvalidMethodNameException.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\MockClass' => '/phpunit/Framework/MockObject/Generator/MockClass.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\MockMethod' => '/phpunit/Framework/MockObject/Generator/MockMethod.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\MockMethodSet' => '/phpunit/Framework/MockObject/Generator/MockMethodSet.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\MockTrait' => '/phpunit/Framework/MockObject/Generator/MockTrait.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\MockType' => '/phpunit/Framework/MockObject/Generator/MockType.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\OriginalConstructorInvocationRequiredException' => '/phpunit/Framework/MockObject/Generator/Exception/OriginalConstructorInvocationRequiredException.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\ReflectionException' => '/phpunit/Framework/MockObject/Generator/Exception/ReflectionException.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\RuntimeException' => '/phpunit/Framework/MockObject/Generator/Exception/RuntimeException.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\SoapExtensionNotAvailableException' => '/phpunit/Framework/MockObject/Generator/Exception/SoapExtensionNotAvailableException.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\TemplateLoader' => '/phpunit/Framework/MockObject/Generator/TemplateLoader.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\UnknownClassException' => '/phpunit/Framework/MockObject/Generator/Exception/UnknownClassException.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\UnknownTraitException' => '/phpunit/Framework/MockObject/Generator/Exception/UnknownTraitException.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\UnknownTypeException' => '/phpunit/Framework/MockObject/Generator/Exception/UnknownTypeException.php', 'PHPUnit\\Framework\\MockObject\\IncompatibleReturnValueException' => '/phpunit/Framework/MockObject/Exception/IncompatibleReturnValueException.php', - 'PHPUnit\\Framework\\MockObject\\InvalidMethodNameException' => '/phpunit/Framework/MockObject/Exception/InvalidMethodNameException.php', - 'PHPUnit\\Framework\\MockObject\\Invocation' => '/phpunit/Framework/MockObject/Invocation.php', - 'PHPUnit\\Framework\\MockObject\\InvocationHandler' => '/phpunit/Framework/MockObject/InvocationHandler.php', + 'PHPUnit\\Framework\\MockObject\\Invocation' => '/phpunit/Framework/MockObject/Runtime/Invocation.php', + 'PHPUnit\\Framework\\MockObject\\InvocationHandler' => '/phpunit/Framework/MockObject/Runtime/InvocationHandler.php', 'PHPUnit\\Framework\\MockObject\\MatchBuilderNotFoundException' => '/phpunit/Framework/MockObject/Exception/MatchBuilderNotFoundException.php', - 'PHPUnit\\Framework\\MockObject\\Matcher' => '/phpunit/Framework/MockObject/Matcher.php', + 'PHPUnit\\Framework\\MockObject\\Matcher' => '/phpunit/Framework/MockObject/Runtime/Matcher.php', 'PHPUnit\\Framework\\MockObject\\MatcherAlreadyRegisteredException' => '/phpunit/Framework/MockObject/Exception/MatcherAlreadyRegisteredException.php', - 'PHPUnit\\Framework\\MockObject\\Method' => '/phpunit/Framework/MockObject/Api/Method.php', + 'PHPUnit\\Framework\\MockObject\\Method' => '/phpunit/Framework/MockObject/Runtime/Api/Method.php', 'PHPUnit\\Framework\\MockObject\\MethodCannotBeConfiguredException' => '/phpunit/Framework/MockObject/Exception/MethodCannotBeConfiguredException.php', 'PHPUnit\\Framework\\MockObject\\MethodNameAlreadyConfiguredException' => '/phpunit/Framework/MockObject/Exception/MethodNameAlreadyConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MethodNameConstraint' => '/phpunit/Framework/MockObject/MethodNameConstraint.php', + 'PHPUnit\\Framework\\MockObject\\MethodNameConstraint' => '/phpunit/Framework/MockObject/Runtime/MethodNameConstraint.php', 'PHPUnit\\Framework\\MockObject\\MethodNameNotConfiguredException' => '/phpunit/Framework/MockObject/Exception/MethodNameNotConfiguredException.php', 'PHPUnit\\Framework\\MockObject\\MethodParametersAlreadyConfiguredException' => '/phpunit/Framework/MockObject/Exception/MethodParametersAlreadyConfiguredException.php', 'PHPUnit\\Framework\\MockObject\\MockBuilder' => '/phpunit/Framework/MockObject/MockBuilder.php', - 'PHPUnit\\Framework\\MockObject\\MockClass' => '/phpunit/Framework/MockObject/MockClass.php', - 'PHPUnit\\Framework\\MockObject\\MockMethod' => '/phpunit/Framework/MockObject/MockMethod.php', - 'PHPUnit\\Framework\\MockObject\\MockMethodSet' => '/phpunit/Framework/MockObject/MockMethodSet.php', - 'PHPUnit\\Framework\\MockObject\\MockObject' => '/phpunit/Framework/MockObject/MockObject.php', - 'PHPUnit\\Framework\\MockObject\\MockTrait' => '/phpunit/Framework/MockObject/MockTrait.php', - 'PHPUnit\\Framework\\MockObject\\MockType' => '/phpunit/Framework/MockObject/MockType.php', - 'PHPUnit\\Framework\\MockObject\\MockedCloneMethod' => '/phpunit/Framework/MockObject/Api/MockedCloneMethod.php', - 'PHPUnit\\Framework\\MockObject\\OriginalConstructorInvocationRequiredException' => '/phpunit/Framework/MockObject/Exception/OriginalConstructorInvocationRequiredException.php', + 'PHPUnit\\Framework\\MockObject\\MockObject' => '/phpunit/Framework/MockObject/Runtime/Interface/MockObject.php', + 'PHPUnit\\Framework\\MockObject\\MockObjectApi' => '/phpunit/Framework/MockObject/Runtime/Api/MockObjectApi.php', + 'PHPUnit\\Framework\\MockObject\\MockObjectInternal' => '/phpunit/Framework/MockObject/Runtime/Interface/MockObjectInternal.php', + 'PHPUnit\\Framework\\MockObject\\NeverReturningMethodException' => '/phpunit/Framework/MockObject/Exception/NeverReturningMethodException.php', + 'PHPUnit\\Framework\\MockObject\\ProxiedCloneMethod' => '/phpunit/Framework/MockObject/Runtime/Api/ProxiedCloneMethod.php', 'PHPUnit\\Framework\\MockObject\\ReflectionException' => '/phpunit/Framework/MockObject/Exception/ReflectionException.php', + 'PHPUnit\\Framework\\MockObject\\ReturnValueGenerator' => '/phpunit/Framework/MockObject/Runtime/ReturnValueGenerator.php', 'PHPUnit\\Framework\\MockObject\\ReturnValueNotConfiguredException' => '/phpunit/Framework/MockObject/Exception/ReturnValueNotConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\AnyInvokedCount' => '/phpunit/Framework/MockObject/Rule/AnyInvokedCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\AnyParameters' => '/phpunit/Framework/MockObject/Rule/AnyParameters.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvocationOrder' => '/phpunit/Framework/MockObject/Rule/InvocationOrder.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastCount' => '/phpunit/Framework/MockObject/Rule/InvokedAtLeastCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastOnce' => '/phpunit/Framework/MockObject/Rule/InvokedAtLeastOnce.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtMostCount' => '/phpunit/Framework/MockObject/Rule/InvokedAtMostCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedCount' => '/phpunit/Framework/MockObject/Rule/InvokedCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\MethodName' => '/phpunit/Framework/MockObject/Rule/MethodName.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\Parameters' => '/phpunit/Framework/MockObject/Rule/Parameters.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\ParametersRule' => '/phpunit/Framework/MockObject/Rule/ParametersRule.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\AnyInvokedCount' => '/phpunit/Framework/MockObject/Runtime/Rule/AnyInvokedCount.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\AnyParameters' => '/phpunit/Framework/MockObject/Runtime/Rule/AnyParameters.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\InvocationOrder' => '/phpunit/Framework/MockObject/Runtime/Rule/InvocationOrder.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastCount' => '/phpunit/Framework/MockObject/Runtime/Rule/InvokedAtLeastCount.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastOnce' => '/phpunit/Framework/MockObject/Runtime/Rule/InvokedAtLeastOnce.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtMostCount' => '/phpunit/Framework/MockObject/Runtime/Rule/InvokedAtMostCount.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedCount' => '/phpunit/Framework/MockObject/Runtime/Rule/InvokedCount.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\MethodName' => '/phpunit/Framework/MockObject/Runtime/Rule/MethodName.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\Parameters' => '/phpunit/Framework/MockObject/Runtime/Rule/Parameters.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\ParametersRule' => '/phpunit/Framework/MockObject/Runtime/Rule/ParametersRule.php', 'PHPUnit\\Framework\\MockObject\\RuntimeException' => '/phpunit/Framework/MockObject/Exception/RuntimeException.php', - 'PHPUnit\\Framework\\MockObject\\SoapExtensionNotAvailableException' => '/phpunit/Framework/MockObject/Exception/SoapExtensionNotAvailableException.php', - 'PHPUnit\\Framework\\MockObject\\Stub' => '/phpunit/Framework/MockObject/Stub.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ConsecutiveCalls' => '/phpunit/Framework/MockObject/Stub/ConsecutiveCalls.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\Exception' => '/phpunit/Framework/MockObject/Stub/Exception.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnArgument' => '/phpunit/Framework/MockObject/Stub/ReturnArgument.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnCallback' => '/phpunit/Framework/MockObject/Stub/ReturnCallback.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnReference' => '/phpunit/Framework/MockObject/Stub/ReturnReference.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnSelf' => '/phpunit/Framework/MockObject/Stub/ReturnSelf.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => '/phpunit/Framework/MockObject/Stub/ReturnStub.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => '/phpunit/Framework/MockObject/Stub/ReturnValueMap.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\Stub' => '/phpunit/Framework/MockObject/Stub/Stub.php', - 'PHPUnit\\Framework\\MockObject\\TemplateLoader' => '/phpunit/Framework/MockObject/TemplateLoader.php', - 'PHPUnit\\Framework\\MockObject\\UnknownClassException' => '/phpunit/Framework/MockObject/Exception/UnknownClassException.php', - 'PHPUnit\\Framework\\MockObject\\UnknownTraitException' => '/phpunit/Framework/MockObject/Exception/UnknownTraitException.php', - 'PHPUnit\\Framework\\MockObject\\UnknownTypeException' => '/phpunit/Framework/MockObject/Exception/UnknownTypeException.php', - 'PHPUnit\\Framework\\MockObject\\UnmockedCloneMethod' => '/phpunit/Framework/MockObject/Api/UnmockedCloneMethod.php', - 'PHPUnit\\Framework\\MockObject\\Verifiable' => '/phpunit/Framework/MockObject/Verifiable.php', + 'PHPUnit\\Framework\\MockObject\\Stub' => '/phpunit/Framework/MockObject/Runtime/Interface/Stub.php', + 'PHPUnit\\Framework\\MockObject\\StubApi' => '/phpunit/Framework/MockObject/Runtime/Api/StubApi.php', + 'PHPUnit\\Framework\\MockObject\\StubInternal' => '/phpunit/Framework/MockObject/Runtime/Interface/StubInternal.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ConsecutiveCalls' => '/phpunit/Framework/MockObject/Runtime/Stub/ConsecutiveCalls.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\Exception' => '/phpunit/Framework/MockObject/Runtime/Stub/Exception.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnArgument' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnArgument.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnCallback' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnCallback.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnReference' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnReference.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnSelf' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnSelf.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnStub.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnValueMap.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\Stub' => '/phpunit/Framework/MockObject/Runtime/Stub/Stub.php', 'PHPUnit\\Framework\\NoChildTestSuiteException' => '/phpunit/Framework/Exception/NoChildTestSuiteException.php', 'PHPUnit\\Framework\\PhptAssertionFailedError' => '/phpunit/Framework/Exception/PhptAssertionFailedError.php', 'PHPUnit\\Framework\\ProcessIsolationException' => '/phpunit/Framework/Exception/ProcessIsolationException.php', @@ -520,7 +561,6 @@ spl_autoload_register( 'PHPUnit\\Framework\\TestStatus\\Warning' => '/phpunit/Framework/TestStatus/Warning.php', 'PHPUnit\\Framework\\TestSuite' => '/phpunit/Framework/TestSuite.php', 'PHPUnit\\Framework\\TestSuiteIterator' => '/phpunit/Framework/TestSuiteIterator.php', - 'PHPUnit\\Framework\\UnknownClassException' => '/phpunit/Framework/Exception/UnknownClassException.php', 'PHPUnit\\Framework\\UnknownClassOrInterfaceException' => '/phpunit/Framework/Exception/UnknownClassOrInterfaceException.php', 'PHPUnit\\Framework\\UnknownTypeException' => '/phpunit/Framework/Exception/UnknownTypeException.php', 'PHPUnit\\Logging\\EventLogger' => '/phpunit/Logging/EventLogger.php', @@ -531,6 +571,8 @@ spl_autoload_register( 'PHPUnit\\Logging\\JUnit\\TestFailedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestFailedSubscriber.php', 'PHPUnit\\Logging\\JUnit\\TestFinishedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestFinishedSubscriber.php', 'PHPUnit\\Logging\\JUnit\\TestMarkedIncompleteSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestMarkedIncompleteSubscriber.php', + 'PHPUnit\\Logging\\JUnit\\TestPreparationFailedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestPreparationFailedSubscriber.php', + 'PHPUnit\\Logging\\JUnit\\TestPreparationStartedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestPreparationStartedSubscriber.php', 'PHPUnit\\Logging\\JUnit\\TestPreparedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestPreparedSubscriber.php', 'PHPUnit\\Logging\\JUnit\\TestRunnerExecutionFinishedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestRunnerExecutionFinishedSubscriber.php', 'PHPUnit\\Logging\\JUnit\\TestSkippedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestSkippedSubscriber.php', @@ -551,26 +593,28 @@ spl_autoload_register( 'PHPUnit\\Logging\\TestDox\\HtmlRenderer' => '/phpunit/Logging/TestDox/HtmlRenderer.php', 'PHPUnit\\Logging\\TestDox\\NamePrettifier' => '/phpunit/Logging/TestDox/NamePrettifier.php', 'PHPUnit\\Logging\\TestDox\\PlainTextRenderer' => '/phpunit/Logging/TestDox/PlainTextRenderer.php', - 'PHPUnit\\Logging\\TestDox\\Subscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/Subscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestConsideredRiskySubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestConsideredRiskySubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestCreatedMockObjectForAbstractClassSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedMockObjectForAbstractClassSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestCreatedMockObjectForTraitSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedMockObjectForTraitSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestCreatedMockObjectFromWsdlSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedMockObjectFromWsdlSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestCreatedMockObjectSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedMockObjectSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestCreatedPartialMockObjectSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedPartialMockObjectSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestCreatedTestProxySubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedTestProxySubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestCreatedTestStubSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedTestStubSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestErroredSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestErroredSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestFailedSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestFailedSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestFinishedSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestFinishedSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestMarkedIncompleteSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestMarkedIncompleteSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestPassedSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestPassedSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestPreparedSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestPreparedSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestResult' => '/phpunit/Logging/TestDox/TestMethod/TestResult.php', - 'PHPUnit\\Logging\\TestDox\\TestResultCollection' => '/phpunit/Logging/TestDox/TestMethod/TestResultCollection.php', - 'PHPUnit\\Logging\\TestDox\\TestResultCollectionIterator' => '/phpunit/Logging/TestDox/TestMethod/TestResultCollectionIterator.php', - 'PHPUnit\\Logging\\TestDox\\TestResultCollector' => '/phpunit/Logging/TestDox/TestMethod/TestResultCollector.php', - 'PHPUnit\\Logging\\TestDox\\TestSkippedSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestSkippedSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\Subscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/Subscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestConsideredRiskySubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestConsideredRiskySubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestErroredSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestErroredSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestFailedSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestFailedSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestFinishedSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestFinishedSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestMarkedIncompleteSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestMarkedIncompleteSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestPassedSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestPassedSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestPreparedSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestPreparedSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestResult' => '/phpunit/Logging/TestDox/TestResult/TestResult.php', + 'PHPUnit\\Logging\\TestDox\\TestResultCollection' => '/phpunit/Logging/TestDox/TestResult/TestResultCollection.php', + 'PHPUnit\\Logging\\TestDox\\TestResultCollectionIterator' => '/phpunit/Logging/TestDox/TestResult/TestResultCollectionIterator.php', + 'PHPUnit\\Logging\\TestDox\\TestResultCollector' => '/phpunit/Logging/TestDox/TestResult/TestResultCollector.php', + 'PHPUnit\\Logging\\TestDox\\TestSkippedSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestSkippedSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestTriggeredDeprecationSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredDeprecationSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestTriggeredNoticeSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredNoticeSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpDeprecationSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpDeprecationSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpNoticeSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpNoticeSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpWarningSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpWarningSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpunitDeprecationSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpunitDeprecationSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpunitErrorSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpunitErrorSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpunitWarningSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpunitWarningSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestTriggeredWarningSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredWarningSubscriber.php', 'PHPUnit\\Metadata\\After' => '/phpunit/Metadata/After.php', 'PHPUnit\\Metadata\\AfterClass' => '/phpunit/Metadata/AfterClass.php', 'PHPUnit\\Metadata\\Annotation\\Parser\\DocBlock' => '/phpunit/Metadata/Parser/Annotation/DocBlock.php', @@ -599,6 +643,10 @@ spl_autoload_register( 'PHPUnit\\Metadata\\ExcludeGlobalVariableFromBackup' => '/phpunit/Metadata/ExcludeGlobalVariableFromBackup.php', 'PHPUnit\\Metadata\\ExcludeStaticPropertyFromBackup' => '/phpunit/Metadata/ExcludeStaticPropertyFromBackup.php', 'PHPUnit\\Metadata\\Group' => '/phpunit/Metadata/Group.php', + 'PHPUnit\\Metadata\\IgnoreClassForCodeCoverage' => '/phpunit/Metadata/IgnoreClassForCodeCoverage.php', + 'PHPUnit\\Metadata\\IgnoreDeprecations' => '/phpunit/Metadata/IgnoreDeprecations.php', + 'PHPUnit\\Metadata\\IgnoreFunctionForCodeCoverage' => '/phpunit/Metadata/IgnoreFunctionForCodeCoverage.php', + 'PHPUnit\\Metadata\\IgnoreMethodForCodeCoverage' => '/phpunit/Metadata/IgnoreMethodForCodeCoverage.php', 'PHPUnit\\Metadata\\InvalidVersionRequirementException' => '/phpunit/Metadata/Exception/InvalidVersionRequirementException.php', 'PHPUnit\\Metadata\\Metadata' => '/phpunit/Metadata/Metadata.php', 'PHPUnit\\Metadata\\MetadataCollection' => '/phpunit/Metadata/MetadataCollection.php', @@ -635,6 +683,7 @@ spl_autoload_register( 'PHPUnit\\Metadata\\Version\\ComparisonRequirement' => '/phpunit/Metadata/Version/ComparisonRequirement.php', 'PHPUnit\\Metadata\\Version\\ConstraintRequirement' => '/phpunit/Metadata/Version/ConstraintRequirement.php', 'PHPUnit\\Metadata\\Version\\Requirement' => '/phpunit/Metadata/Version/Requirement.php', + 'PHPUnit\\Metadata\\WithoutErrorHandler' => '/phpunit/Metadata/WithoutErrorHandler.php', 'PHPUnit\\PharIo\\Manifest\\Application' => '/phar-io-manifest/values/Application.php', 'PHPUnit\\PharIo\\Manifest\\ApplicationName' => '/phar-io-manifest/values/ApplicationName.php', 'PHPUnit\\PharIo\\Manifest\\Author' => '/phar-io-manifest/values/Author.php', @@ -736,24 +785,22 @@ spl_autoload_register( 'PHPUnit\\PhpParser\\Internal\\DiffElem' => '/nikic-php-parser/PhpParser/Internal/DiffElem.php', 'PHPUnit\\PhpParser\\Internal\\Differ' => '/nikic-php-parser/PhpParser/Internal/Differ.php', 'PHPUnit\\PhpParser\\Internal\\PrintableNewAnonClassNode' => '/nikic-php-parser/PhpParser/Internal/PrintableNewAnonClassNode.php', + 'PHPUnit\\PhpParser\\Internal\\TokenPolyfill' => '/nikic-php-parser/PhpParser/Internal/TokenPolyfill.php', 'PHPUnit\\PhpParser\\Internal\\TokenStream' => '/nikic-php-parser/PhpParser/Internal/TokenStream.php', 'PHPUnit\\PhpParser\\JsonDecoder' => '/nikic-php-parser/PhpParser/JsonDecoder.php', 'PHPUnit\\PhpParser\\Lexer' => '/nikic-php-parser/PhpParser/Lexer.php', 'PHPUnit\\PhpParser\\Lexer\\Emulative' => '/nikic-php-parser/PhpParser/Lexer/Emulative.php', 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\AttributeEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php', - 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\CoaleseEqualTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php', 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\EnumTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php', 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\ExplicitOctalEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php', - 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\FlexibleDocStringEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php', - 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\FnTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php', 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\KeywordEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php', 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\MatchTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php', 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\NullsafeTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php', - 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\NumericLiteralSeparatorEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php', 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\ReadonlyFunctionTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.php', 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\ReadonlyTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.php', 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\ReverseEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php', 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\TokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/TokenEmulator.php', + 'PHPUnit\\PhpParser\\Modifiers' => '/nikic-php-parser/PhpParser/Modifiers.php', 'PHPUnit\\PhpParser\\NameContext' => '/nikic-php-parser/PhpParser/NameContext.php', 'PHPUnit\\PhpParser\\Node' => '/nikic-php-parser/PhpParser/Node.php', 'PHPUnit\\PhpParser\\NodeAbstract' => '/nikic-php-parser/PhpParser/NodeAbstract.php', @@ -764,19 +811,22 @@ spl_autoload_register( 'PHPUnit\\PhpParser\\NodeVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor.php', 'PHPUnit\\PhpParser\\NodeVisitorAbstract' => '/nikic-php-parser/PhpParser/NodeVisitorAbstract.php', 'PHPUnit\\PhpParser\\NodeVisitor\\CloningVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor/CloningVisitor.php', + 'PHPUnit\\PhpParser\\NodeVisitor\\CommentAnnotatingVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php', 'PHPUnit\\PhpParser\\NodeVisitor\\FindingVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor/FindingVisitor.php', 'PHPUnit\\PhpParser\\NodeVisitor\\FirstFindingVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor/FirstFindingVisitor.php', 'PHPUnit\\PhpParser\\NodeVisitor\\NameResolver' => '/nikic-php-parser/PhpParser/NodeVisitor/NameResolver.php', 'PHPUnit\\PhpParser\\NodeVisitor\\NodeConnectingVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor/NodeConnectingVisitor.php', 'PHPUnit\\PhpParser\\NodeVisitor\\ParentConnectingVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor/ParentConnectingVisitor.php', 'PHPUnit\\PhpParser\\Node\\Arg' => '/nikic-php-parser/PhpParser/Node/Arg.php', + 'PHPUnit\\PhpParser\\Node\\ArrayItem' => '/nikic-php-parser/PhpParser/Node/ArrayItem.php', 'PHPUnit\\PhpParser\\Node\\Attribute' => '/nikic-php-parser/PhpParser/Node/Attribute.php', 'PHPUnit\\PhpParser\\Node\\AttributeGroup' => '/nikic-php-parser/PhpParser/Node/AttributeGroup.php', + 'PHPUnit\\PhpParser\\Node\\ClosureUse' => '/nikic-php-parser/PhpParser/Node/ClosureUse.php', 'PHPUnit\\PhpParser\\Node\\ComplexType' => '/nikic-php-parser/PhpParser/Node/ComplexType.php', 'PHPUnit\\PhpParser\\Node\\Const_' => '/nikic-php-parser/PhpParser/Node/Const_.php', + 'PHPUnit\\PhpParser\\Node\\DeclareItem' => '/nikic-php-parser/PhpParser/Node/DeclareItem.php', 'PHPUnit\\PhpParser\\Node\\Expr' => '/nikic-php-parser/PhpParser/Node/Expr.php', 'PHPUnit\\PhpParser\\Node\\Expr\\ArrayDimFetch' => '/nikic-php-parser/PhpParser/Node/Expr/ArrayDimFetch.php', - 'PHPUnit\\PhpParser\\Node\\Expr\\ArrayItem' => '/nikic-php-parser/PhpParser/Node/Expr/ArrayItem.php', 'PHPUnit\\PhpParser\\Node\\Expr\\Array_' => '/nikic-php-parser/PhpParser/Node/Expr/Array_.php', 'PHPUnit\\PhpParser\\Node\\Expr\\ArrowFunction' => '/nikic-php-parser/PhpParser/Node/Expr/ArrowFunction.php', 'PHPUnit\\PhpParser\\Node\\Expr\\Assign' => '/nikic-php-parser/PhpParser/Node/Expr/Assign.php', @@ -837,7 +887,6 @@ spl_autoload_register( 'PHPUnit\\PhpParser\\Node\\Expr\\ClassConstFetch' => '/nikic-php-parser/PhpParser/Node/Expr/ClassConstFetch.php', 'PHPUnit\\PhpParser\\Node\\Expr\\Clone_' => '/nikic-php-parser/PhpParser/Node/Expr/Clone_.php', 'PHPUnit\\PhpParser\\Node\\Expr\\Closure' => '/nikic-php-parser/PhpParser/Node/Expr/Closure.php', - 'PHPUnit\\PhpParser\\Node\\Expr\\ClosureUse' => '/nikic-php-parser/PhpParser/Node/Expr/ClosureUse.php', 'PHPUnit\\PhpParser\\Node\\Expr\\ConstFetch' => '/nikic-php-parser/PhpParser/Node/Expr/ConstFetch.php', 'PHPUnit\\PhpParser\\Node\\Expr\\Empty_' => '/nikic-php-parser/PhpParser/Node/Expr/Empty_.php', 'PHPUnit\\PhpParser\\Node\\Expr\\Error' => '/nikic-php-parser/PhpParser/Node/Expr/Error.php', @@ -872,6 +921,7 @@ spl_autoload_register( 'PHPUnit\\PhpParser\\Node\\Expr\\Yield_' => '/nikic-php-parser/PhpParser/Node/Expr/Yield_.php', 'PHPUnit\\PhpParser\\Node\\FunctionLike' => '/nikic-php-parser/PhpParser/Node/FunctionLike.php', 'PHPUnit\\PhpParser\\Node\\Identifier' => '/nikic-php-parser/PhpParser/Node/Identifier.php', + 'PHPUnit\\PhpParser\\Node\\InterpolatedStringPart' => '/nikic-php-parser/PhpParser/Node/InterpolatedStringPart.php', 'PHPUnit\\PhpParser\\Node\\IntersectionType' => '/nikic-php-parser/PhpParser/Node/IntersectionType.php', 'PHPUnit\\PhpParser\\Node\\MatchArm' => '/nikic-php-parser/PhpParser/Node/MatchArm.php', 'PHPUnit\\PhpParser\\Node\\Name' => '/nikic-php-parser/PhpParser/Node/Name.php', @@ -879,11 +929,11 @@ spl_autoload_register( 'PHPUnit\\PhpParser\\Node\\Name\\Relative' => '/nikic-php-parser/PhpParser/Node/Name/Relative.php', 'PHPUnit\\PhpParser\\Node\\NullableType' => '/nikic-php-parser/PhpParser/Node/NullableType.php', 'PHPUnit\\PhpParser\\Node\\Param' => '/nikic-php-parser/PhpParser/Node/Param.php', + 'PHPUnit\\PhpParser\\Node\\PropertyItem' => '/nikic-php-parser/PhpParser/Node/PropertyItem.php', 'PHPUnit\\PhpParser\\Node\\Scalar' => '/nikic-php-parser/PhpParser/Node/Scalar.php', - 'PHPUnit\\PhpParser\\Node\\Scalar\\DNumber' => '/nikic-php-parser/PhpParser/Node/Scalar/DNumber.php', - 'PHPUnit\\PhpParser\\Node\\Scalar\\Encapsed' => '/nikic-php-parser/PhpParser/Node/Scalar/Encapsed.php', - 'PHPUnit\\PhpParser\\Node\\Scalar\\EncapsedStringPart' => '/nikic-php-parser/PhpParser/Node/Scalar/EncapsedStringPart.php', - 'PHPUnit\\PhpParser\\Node\\Scalar\\LNumber' => '/nikic-php-parser/PhpParser/Node/Scalar/LNumber.php', + 'PHPUnit\\PhpParser\\Node\\Scalar\\Float_' => '/nikic-php-parser/PhpParser/Node/Scalar/Float_.php', + 'PHPUnit\\PhpParser\\Node\\Scalar\\Int_' => '/nikic-php-parser/PhpParser/Node/Scalar/Int_.php', + 'PHPUnit\\PhpParser\\Node\\Scalar\\InterpolatedString' => '/nikic-php-parser/PhpParser/Node/Scalar/InterpolatedString.php', 'PHPUnit\\PhpParser\\Node\\Scalar\\MagicConst' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst.php', 'PHPUnit\\PhpParser\\Node\\Scalar\\MagicConst\\Class_' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Class_.php', 'PHPUnit\\PhpParser\\Node\\Scalar\\MagicConst\\Dir' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Dir.php', @@ -894,7 +944,9 @@ spl_autoload_register( 'PHPUnit\\PhpParser\\Node\\Scalar\\MagicConst\\Namespace_' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Namespace_.php', 'PHPUnit\\PhpParser\\Node\\Scalar\\MagicConst\\Trait_' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Trait_.php', 'PHPUnit\\PhpParser\\Node\\Scalar\\String_' => '/nikic-php-parser/PhpParser/Node/Scalar/String_.php', + 'PHPUnit\\PhpParser\\Node\\StaticVar' => '/nikic-php-parser/PhpParser/Node/StaticVar.php', 'PHPUnit\\PhpParser\\Node\\Stmt' => '/nikic-php-parser/PhpParser/Node/Stmt.php', + 'PHPUnit\\PhpParser\\Node\\Stmt\\Block' => '/nikic-php-parser/PhpParser/Node/Stmt/Block.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Break_' => '/nikic-php-parser/PhpParser/Node/Stmt/Break_.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Case_' => '/nikic-php-parser/PhpParser/Node/Stmt/Case_.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Catch_' => '/nikic-php-parser/PhpParser/Node/Stmt/Catch_.php', @@ -904,7 +956,6 @@ spl_autoload_register( 'PHPUnit\\PhpParser\\Node\\Stmt\\Class_' => '/nikic-php-parser/PhpParser/Node/Stmt/Class_.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Const_' => '/nikic-php-parser/PhpParser/Node/Stmt/Const_.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Continue_' => '/nikic-php-parser/PhpParser/Node/Stmt/Continue_.php', - 'PHPUnit\\PhpParser\\Node\\Stmt\\DeclareDeclare' => '/nikic-php-parser/PhpParser/Node/Stmt/DeclareDeclare.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Declare_' => '/nikic-php-parser/PhpParser/Node/Stmt/Declare_.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Do_' => '/nikic-php-parser/PhpParser/Node/Stmt/Do_.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Echo_' => '/nikic-php-parser/PhpParser/Node/Stmt/Echo_.php', @@ -928,12 +979,9 @@ spl_autoload_register( 'PHPUnit\\PhpParser\\Node\\Stmt\\Namespace_' => '/nikic-php-parser/PhpParser/Node/Stmt/Namespace_.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Nop' => '/nikic-php-parser/PhpParser/Node/Stmt/Nop.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Property' => '/nikic-php-parser/PhpParser/Node/Stmt/Property.php', - 'PHPUnit\\PhpParser\\Node\\Stmt\\PropertyProperty' => '/nikic-php-parser/PhpParser/Node/Stmt/PropertyProperty.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Return_' => '/nikic-php-parser/PhpParser/Node/Stmt/Return_.php', - 'PHPUnit\\PhpParser\\Node\\Stmt\\StaticVar' => '/nikic-php-parser/PhpParser/Node/Stmt/StaticVar.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Static_' => '/nikic-php-parser/PhpParser/Node/Stmt/Static_.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Switch_' => '/nikic-php-parser/PhpParser/Node/Stmt/Switch_.php', - 'PHPUnit\\PhpParser\\Node\\Stmt\\Throw_' => '/nikic-php-parser/PhpParser/Node/Stmt/Throw_.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\TraitUse' => '/nikic-php-parser/PhpParser/Node/Stmt/TraitUse.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\TraitUseAdaptation' => '/nikic-php-parser/PhpParser/Node/Stmt/TraitUseAdaptation.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Alias' => '/nikic-php-parser/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php', @@ -941,28 +989,44 @@ spl_autoload_register( 'PHPUnit\\PhpParser\\Node\\Stmt\\Trait_' => '/nikic-php-parser/PhpParser/Node/Stmt/Trait_.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\TryCatch' => '/nikic-php-parser/PhpParser/Node/Stmt/TryCatch.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Unset_' => '/nikic-php-parser/PhpParser/Node/Stmt/Unset_.php', - 'PHPUnit\\PhpParser\\Node\\Stmt\\UseUse' => '/nikic-php-parser/PhpParser/Node/Stmt/UseUse.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Use_' => '/nikic-php-parser/PhpParser/Node/Stmt/Use_.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\While_' => '/nikic-php-parser/PhpParser/Node/Stmt/While_.php', 'PHPUnit\\PhpParser\\Node\\UnionType' => '/nikic-php-parser/PhpParser/Node/UnionType.php', + 'PHPUnit\\PhpParser\\Node\\UseItem' => '/nikic-php-parser/PhpParser/Node/UseItem.php', 'PHPUnit\\PhpParser\\Node\\VarLikeIdentifier' => '/nikic-php-parser/PhpParser/Node/VarLikeIdentifier.php', 'PHPUnit\\PhpParser\\Node\\VariadicPlaceholder' => '/nikic-php-parser/PhpParser/Node/VariadicPlaceholder.php', 'PHPUnit\\PhpParser\\Parser' => '/nikic-php-parser/PhpParser/Parser.php', 'PHPUnit\\PhpParser\\ParserAbstract' => '/nikic-php-parser/PhpParser/ParserAbstract.php', 'PHPUnit\\PhpParser\\ParserFactory' => '/nikic-php-parser/PhpParser/ParserFactory.php', - 'PHPUnit\\PhpParser\\Parser\\Multiple' => '/nikic-php-parser/PhpParser/Parser/Multiple.php', - 'PHPUnit\\PhpParser\\Parser\\Php5' => '/nikic-php-parser/PhpParser/Parser/Php5.php', 'PHPUnit\\PhpParser\\Parser\\Php7' => '/nikic-php-parser/PhpParser/Parser/Php7.php', - 'PHPUnit\\PhpParser\\Parser\\Tokens' => '/nikic-php-parser/PhpParser/Parser/Tokens.php', + 'PHPUnit\\PhpParser\\Parser\\Php8' => '/nikic-php-parser/PhpParser/Parser/Php8.php', + 'PHPUnit\\PhpParser\\PhpVersion' => '/nikic-php-parser/PhpParser/PhpVersion.php', + 'PHPUnit\\PhpParser\\PrettyPrinter' => '/nikic-php-parser/PhpParser/PrettyPrinter.php', 'PHPUnit\\PhpParser\\PrettyPrinterAbstract' => '/nikic-php-parser/PhpParser/PrettyPrinterAbstract.php', 'PHPUnit\\PhpParser\\PrettyPrinter\\Standard' => '/nikic-php-parser/PhpParser/PrettyPrinter/Standard.php', + 'PHPUnit\\PhpParser\\Token' => '/nikic-php-parser/PhpParser/Token.php', + 'PHPUnit\\Runner\\Baseline\\Baseline' => '/phpunit/Runner/Baseline/Baseline.php', + 'PHPUnit\\Runner\\Baseline\\CannotLoadBaselineException' => '/phpunit/Runner/Baseline/Exception/CannotLoadBaselineException.php', + 'PHPUnit\\Runner\\Baseline\\FileDoesNotHaveLineException' => '/phpunit/Runner/Baseline/Exception/FileDoesNotHaveLineException.php', + 'PHPUnit\\Runner\\Baseline\\Generator' => '/phpunit/Runner/Baseline/Generator.php', + 'PHPUnit\\Runner\\Baseline\\Issue' => '/phpunit/Runner/Baseline/Issue.php', + 'PHPUnit\\Runner\\Baseline\\Reader' => '/phpunit/Runner/Baseline/Reader.php', + 'PHPUnit\\Runner\\Baseline\\RelativePathCalculator' => '/phpunit/Runner/Baseline/RelativePathCalculator.php', + 'PHPUnit\\Runner\\Baseline\\Subscriber' => '/phpunit/Runner/Baseline/Subscriber/Subscriber.php', + 'PHPUnit\\Runner\\Baseline\\TestTriggeredDeprecationSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredDeprecationSubscriber.php', + 'PHPUnit\\Runner\\Baseline\\TestTriggeredNoticeSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredNoticeSubscriber.php', + 'PHPUnit\\Runner\\Baseline\\TestTriggeredPhpDeprecationSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredPhpDeprecationSubscriber.php', + 'PHPUnit\\Runner\\Baseline\\TestTriggeredPhpNoticeSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredPhpNoticeSubscriber.php', + 'PHPUnit\\Runner\\Baseline\\TestTriggeredPhpWarningSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredPhpWarningSubscriber.php', + 'PHPUnit\\Runner\\Baseline\\TestTriggeredWarningSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredWarningSubscriber.php', + 'PHPUnit\\Runner\\Baseline\\Writer' => '/phpunit/Runner/Baseline/Writer.php', 'PHPUnit\\Runner\\ClassCannotBeFoundException' => '/phpunit/Runner/Exception/ClassCannotBeFoundException.php', - 'PHPUnit\\Runner\\ClassCannotBeInstantiatedException' => '/phpunit/Runner/Exception/ClassCannotBeInstantiatedException.php', - 'PHPUnit\\Runner\\ClassDoesNotExistException' => '/phpunit/Runner/Exception/ClassDoesNotExistException.php', - 'PHPUnit\\Runner\\ClassDoesNotImplementExtensionInterfaceException' => '/phpunit/Runner/Exception/ClassDoesNotImplementExtensionInterfaceException.php', + 'PHPUnit\\Runner\\ClassDoesNotExtendTestCaseException' => '/phpunit/Runner/Exception/ClassDoesNotExtendTestCaseException.php', 'PHPUnit\\Runner\\ClassIsAbstractException' => '/phpunit/Runner/Exception/ClassIsAbstractException.php', 'PHPUnit\\Runner\\CodeCoverage' => '/phpunit/Runner/CodeCoverage.php', 'PHPUnit\\Runner\\DirectoryCannotBeCreatedException' => '/phpunit/Runner/Exception/DirectoryCannotBeCreatedException.php', + 'PHPUnit\\Runner\\ErrorException' => '/phpunit/Runner/Exception/ErrorException.php', + 'PHPUnit\\Runner\\ErrorHandler' => '/phpunit/Runner/ErrorHandler.php', 'PHPUnit\\Runner\\Exception' => '/phpunit/Runner/Exception/Exception.php', 'PHPUnit\\Runner\\Extension\\Extension' => '/phpunit/Runner/Extension/Extension.php', 'PHPUnit\\Runner\\Extension\\ExtensionBootstrapper' => '/phpunit/Runner/Extension/ExtensionBootstrapper.php', @@ -975,6 +1039,12 @@ spl_autoload_register( 'PHPUnit\\Runner\\Filter\\GroupFilterIterator' => '/phpunit/Runner/Filter/GroupFilterIterator.php', 'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator' => '/phpunit/Runner/Filter/IncludeGroupFilterIterator.php', 'PHPUnit\\Runner\\Filter\\NameFilterIterator' => '/phpunit/Runner/Filter/NameFilterIterator.php', + 'PHPUnit\\Runner\\Filter\\TestIdFilterIterator' => '/phpunit/Runner/Filter/TestIdFilterIterator.php', + 'PHPUnit\\Runner\\GarbageCollection\\ExecutionFinishedSubscriber' => '/phpunit/Runner/GarbageCollection/Subscriber/ExecutionFinishedSubscriber.php', + 'PHPUnit\\Runner\\GarbageCollection\\ExecutionStartedSubscriber' => '/phpunit/Runner/GarbageCollection/Subscriber/ExecutionStartedSubscriber.php', + 'PHPUnit\\Runner\\GarbageCollection\\GarbageCollectionHandler' => '/phpunit/Runner/GarbageCollection/GarbageCollectionHandler.php', + 'PHPUnit\\Runner\\GarbageCollection\\Subscriber' => '/phpunit/Runner/GarbageCollection/Subscriber/Subscriber.php', + 'PHPUnit\\Runner\\GarbageCollection\\TestFinishedSubscriber' => '/phpunit/Runner/GarbageCollection/Subscriber/TestFinishedSubscriber.php', 'PHPUnit\\Runner\\InvalidOrderException' => '/phpunit/Runner/Exception/InvalidOrderException.php', 'PHPUnit\\Runner\\InvalidPhptFileException' => '/phpunit/Runner/Exception/InvalidPhptFileException.php', 'PHPUnit\\Runner\\NoIgnoredEventException' => '/phpunit/Runner/Exception/NoIgnoredEventException.php', @@ -1021,6 +1091,7 @@ spl_autoload_register( 'PHPUnit\\SebastianBergmann\\CodeCoverage\\Driver\\XdebugNotAvailableException' => '/php-code-coverage/Exception/XdebugNotAvailableException.php', 'PHPUnit\\SebastianBergmann\\CodeCoverage\\Driver\\XdebugNotEnabledException' => '/php-code-coverage/Exception/XdebugNotEnabledException.php', 'PHPUnit\\SebastianBergmann\\CodeCoverage\\Exception' => '/php-code-coverage/Exception/Exception.php', + 'PHPUnit\\SebastianBergmann\\CodeCoverage\\FileCouldNotBeWrittenException' => '/php-code-coverage/Exception/FileCouldNotBeWrittenException.php', 'PHPUnit\\SebastianBergmann\\CodeCoverage\\Filter' => '/php-code-coverage/Filter.php', 'PHPUnit\\SebastianBergmann\\CodeCoverage\\InvalidArgumentException' => '/php-code-coverage/Exception/InvalidArgumentException.php', 'PHPUnit\\SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverAvailableException' => '/php-code-coverage/Exception/NoCodeCoverageDriverAvailableException.php', @@ -1206,6 +1277,7 @@ spl_autoload_register( 'PHPUnit\\TestRunner\\TestResult\\Collector' => '/phpunit/Runner/TestResult/Collector.php', 'PHPUnit\\TestRunner\\TestResult\\ExecutionStartedSubscriber' => '/phpunit/Runner/TestResult/Subscriber/ExecutionStartedSubscriber.php', 'PHPUnit\\TestRunner\\TestResult\\Facade' => '/phpunit/Runner/TestResult/Facade.php', + 'PHPUnit\\TestRunner\\TestResult\\Issues\\Issue' => '/phpunit/Runner/TestResult/Issue.php', 'PHPUnit\\TestRunner\\TestResult\\PassedTests' => '/phpunit/Runner/TestResult/PassedTests.php', 'PHPUnit\\TestRunner\\TestResult\\Subscriber' => '/phpunit/Runner/TestResult/Subscriber/Subscriber.php', 'PHPUnit\\TestRunner\\TestResult\\TestConsideredRiskySubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestConsideredRiskySubscriber.php', @@ -1280,6 +1352,7 @@ spl_autoload_register( 'PHPUnit\\TextUI\\Configuration\\IniSettingCollectionIterator' => '/phpunit/TextUI/Configuration/Value/IniSettingCollectionIterator.php', 'PHPUnit\\TextUI\\Configuration\\LoggingNotConfiguredException' => '/phpunit/TextUI/Configuration/Exception/LoggingNotConfiguredException.php', 'PHPUnit\\TextUI\\Configuration\\Merger' => '/phpunit/TextUI/Configuration/Merger.php', + 'PHPUnit\\TextUI\\Configuration\\NoBaselineException' => '/phpunit/TextUI/Configuration/Exception/NoBaselineException.php', 'PHPUnit\\TextUI\\Configuration\\NoBootstrapException' => '/phpunit/TextUI/Configuration/Exception/NoBootstrapException.php', 'PHPUnit\\TextUI\\Configuration\\NoCacheDirectoryException' => '/phpunit/TextUI/Configuration/Exception/NoCacheDirectoryException.php', 'PHPUnit\\TextUI\\Configuration\\NoCliArgumentException' => '/phpunit/TextUI/Configuration/Exception/NoCliArgumentException.php', @@ -1291,6 +1364,9 @@ spl_autoload_register( 'PHPUnit\\TextUI\\Configuration\\Php' => '/phpunit/TextUI/Configuration/Value/Php.php', 'PHPUnit\\TextUI\\Configuration\\PhpHandler' => '/phpunit/TextUI/Configuration/PhpHandler.php', 'PHPUnit\\TextUI\\Configuration\\Registry' => '/phpunit/TextUI/Configuration/Registry.php', + 'PHPUnit\\TextUI\\Configuration\\Source' => '/phpunit/TextUI/Configuration/Value/Source.php', + 'PHPUnit\\TextUI\\Configuration\\SourceFilter' => '/phpunit/TextUI/Configuration/SourceFilter.php', + 'PHPUnit\\TextUI\\Configuration\\SourceMapper' => '/phpunit/TextUI/Configuration/SourceMapper.php', 'PHPUnit\\TextUI\\Configuration\\TestDirectory' => '/phpunit/TextUI/Configuration/Value/TestDirectory.php', 'PHPUnit\\TextUI\\Configuration\\TestDirectoryCollection' => '/phpunit/TextUI/Configuration/Value/TestDirectoryCollection.php', 'PHPUnit\\TextUI\\Configuration\\TestDirectoryCollectionIterator' => '/phpunit/TextUI/Configuration/Value/TestDirectoryCollectionIterator.php', @@ -1304,9 +1380,11 @@ spl_autoload_register( 'PHPUnit\\TextUI\\Configuration\\Variable' => '/phpunit/TextUI/Configuration/Value/Variable.php', 'PHPUnit\\TextUI\\Configuration\\VariableCollection' => '/phpunit/TextUI/Configuration/Value/VariableCollection.php', 'PHPUnit\\TextUI\\Configuration\\VariableCollectionIterator' => '/phpunit/TextUI/Configuration/Value/VariableCollectionIterator.php', + 'PHPUnit\\TextUI\\DirectoryDoesNotExistException' => '/phpunit/TextUI/Exception/DirectoryDoesNotExistException.php', 'PHPUnit\\TextUI\\Exception' => '/phpunit/TextUI/Exception/Exception.php', 'PHPUnit\\TextUI\\ExtensionsNotConfiguredException' => '/phpunit/TextUI/Exception/ExtensionsNotConfiguredException.php', 'PHPUnit\\TextUI\\Help' => '/phpunit/TextUI/Help.php', + 'PHPUnit\\TextUI\\InvalidSocketException' => '/phpunit/TextUI/Exception/InvalidSocketException.php', 'PHPUnit\\TextUI\\Output\\DefaultPrinter' => '/phpunit/TextUI/Output/Printer/DefaultPrinter.php', 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\BeforeTestClassMethodErroredSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/BeforeTestClassMethodErroredSubscriber.php', 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\ProgressPrinter' => '/phpunit/TextUI/Output/Default/ProgressPrinter/ProgressPrinter.php', @@ -1317,10 +1395,10 @@ spl_autoload_register( 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestFinishedSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestFinishedSubscriber.php', 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestMarkedIncompleteSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestMarkedIncompleteSubscriber.php', 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestPreparedSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestPreparedSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestPrintedUnexpectedOutputSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestPrintedUnexpectedOutputSubscriber.php', 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestRunnerExecutionStartedSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestRunnerExecutionStartedSubscriber.php', 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestSkippedSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestSkippedSubscriber.php', 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredDeprecationSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredDeprecationSubscriber.php', + 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredErrorSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredErrorSubscriber.php', 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredNoticeSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredNoticeSubscriber.php', 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpDeprecationSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpDeprecationSubscriber.php', 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpNoticeSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpNoticeSubscriber.php', @@ -1329,6 +1407,7 @@ spl_autoload_register( 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpunitWarningSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpunitWarningSubscriber.php', 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredWarningSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredWarningSubscriber.php', 'PHPUnit\\TextUI\\Output\\Default\\ResultPrinter' => '/phpunit/TextUI/Output/Default/ResultPrinter.php', + 'PHPUnit\\TextUI\\Output\\Default\\UnexpectedOutputPrinter' => '/phpunit/TextUI/Output/Default/UnexpectedOutputPrinter.php', 'PHPUnit\\TextUI\\Output\\Facade' => '/phpunit/TextUI/Output/Facade.php', 'PHPUnit\\TextUI\\Output\\NullPrinter' => '/phpunit/TextUI/Output/Printer/NullPrinter.php', 'PHPUnit\\TextUI\\Output\\Printer' => '/phpunit/TextUI/Output/Printer/Printer.php', @@ -1341,6 +1420,7 @@ spl_autoload_register( 'PHPUnit\\TextUI\\TestFileNotFoundException' => '/phpunit/TextUI/Exception/TestFileNotFoundException.php', 'PHPUnit\\TextUI\\TestRunner' => '/phpunit/TextUI/TestRunner.php', 'PHPUnit\\TextUI\\TestSuiteFilterProcessor' => '/phpunit/TextUI/TestSuiteFilterProcessor.php', + 'PHPUnit\\TextUI\\XmlConfiguration\\CannotFindSchemaException' => '/phpunit/TextUI/Configuration/Exception/CannotFindSchemaException.php', 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\CodeCoverage' => '/phpunit/TextUI/Configuration/Xml/CodeCoverage/CodeCoverage.php', 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Clover' => '/phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Clover.php', 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Cobertura' => '/phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Cobertura.php', @@ -1359,6 +1439,7 @@ spl_autoload_register( 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageXmlToReport' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageXmlToReport.php', 'PHPUnit\\TextUI\\XmlConfiguration\\DefaultConfiguration' => '/phpunit/TextUI/Configuration/Xml/DefaultConfiguration.php', 'PHPUnit\\TextUI\\XmlConfiguration\\Exception' => '/phpunit/TextUI/Configuration/Xml/Exception.php', + 'PHPUnit\\TextUI\\XmlConfiguration\\FailedSchemaDetectionResult' => '/phpunit/TextUI/Configuration/Xml/SchemaDetector/FailedSchemaDetectionResult.php', 'PHPUnit\\TextUI\\XmlConfiguration\\Generator' => '/phpunit/TextUI/Configuration/Xml/Generator.php', 'PHPUnit\\TextUI\\XmlConfiguration\\Groups' => '/phpunit/TextUI/Configuration/Xml/Groups.php', 'PHPUnit\\TextUI\\XmlConfiguration\\IntroduceCacheDirectoryAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/IntroduceCacheDirectoryAttribute.php', @@ -1378,8 +1459,9 @@ spl_autoload_register( 'PHPUnit\\TextUI\\XmlConfiguration\\Migrator' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrator.php', 'PHPUnit\\TextUI\\XmlConfiguration\\MoveAttributesFromFilterWhitelistToCoverage' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveAttributesFromFilterWhitelistToCoverage.php', 'PHPUnit\\TextUI\\XmlConfiguration\\MoveAttributesFromRootToCoverage' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveAttributesFromRootToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveWhitelistDirectoriesToCoverage' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveWhitelistDirectoriesToCoverage.php', + 'PHPUnit\\TextUI\\XmlConfiguration\\MoveCoverageDirectoriesToSource' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveCoverageDirectoriesToSource.php', 'PHPUnit\\TextUI\\XmlConfiguration\\MoveWhitelistExcludesToCoverage' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveWhitelistExcludesToCoverage.php', + 'PHPUnit\\TextUI\\XmlConfiguration\\MoveWhitelistIncludesToCoverage' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveWhitelistIncludesToCoverage.php', 'PHPUnit\\TextUI\\XmlConfiguration\\PHPUnit' => '/phpunit/TextUI/Configuration/Xml/PHPUnit.php', 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveBeStrictAboutResourceUsageDuringSmallTestsAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveBeStrictAboutResourceUsageDuringSmallTestsAttribute.php', 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveBeStrictAboutTodoAnnotatedTestsAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveBeStrictAboutTodoAnnotatedTestsAttribute.php', @@ -1400,8 +1482,15 @@ spl_autoload_register( 'PHPUnit\\TextUI\\XmlConfiguration\\RenameBackupStaticAttributesAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameBackupStaticAttributesAttribute.php', 'PHPUnit\\TextUI\\XmlConfiguration\\RenameBeStrictAboutCoversAnnotationAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameBeStrictAboutCoversAnnotationAttribute.php', 'PHPUnit\\TextUI\\XmlConfiguration\\RenameForceCoversAnnotationAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameForceCoversAnnotationAttribute.php', + 'PHPUnit\\TextUI\\XmlConfiguration\\SchemaDetectionResult' => '/phpunit/TextUI/Configuration/Xml/SchemaDetector/SchemaDetectionResult.php', + 'PHPUnit\\TextUI\\XmlConfiguration\\SchemaDetector' => '/phpunit/TextUI/Configuration/Xml/SchemaDetector/SchemaDetector.php', + 'PHPUnit\\TextUI\\XmlConfiguration\\SchemaFinder' => '/phpunit/TextUI/Configuration/Xml/SchemaFinder.php', + 'PHPUnit\\TextUI\\XmlConfiguration\\SnapshotNodeList' => '/phpunit/TextUI/Configuration/Xml/Migration/SnapshotNodeList.php', + 'PHPUnit\\TextUI\\XmlConfiguration\\SuccessfulSchemaDetectionResult' => '/phpunit/TextUI/Configuration/Xml/SchemaDetector/SuccessfulSchemaDetectionResult.php', 'PHPUnit\\TextUI\\XmlConfiguration\\TestSuiteMapper' => '/phpunit/TextUI/Configuration/Xml/TestSuiteMapper.php', 'PHPUnit\\TextUI\\XmlConfiguration\\UpdateSchemaLocation' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/UpdateSchemaLocation.php', + 'PHPUnit\\TextUI\\XmlConfiguration\\ValidationResult' => '/phpunit/TextUI/Configuration/Xml/Validator/ValidationResult.php', + 'PHPUnit\\TextUI\\XmlConfiguration\\Validator' => '/phpunit/TextUI/Configuration/Xml/Validator/Validator.php', 'PHPUnit\\TheSeer\\Tokenizer\\Exception' => '/theseer-tokenizer/Exception.php', 'PHPUnit\\TheSeer\\Tokenizer\\NamespaceUri' => '/theseer-tokenizer/NamespaceUri.php', 'PHPUnit\\TheSeer\\Tokenizer\\NamespaceUriException' => '/theseer-tokenizer/NamespaceUriException.php', @@ -1412,19 +1501,16 @@ spl_autoload_register( 'PHPUnit\\TheSeer\\Tokenizer\\XMLSerializer' => '/theseer-tokenizer/XMLSerializer.php', 'PHPUnit\\Util\\Cloner' => '/phpunit/Util/Cloner.php', 'PHPUnit\\Util\\Color' => '/phpunit/Util/Color.php', - 'PHPUnit\\Util\\DirectoryDoesNotExistException' => '/phpunit/Util/Exception/DirectoryDoesNotExistException.php', - 'PHPUnit\\Util\\ErrorHandler' => '/phpunit/Util/ErrorHandler.php', 'PHPUnit\\Util\\Exception' => '/phpunit/Util/Exception/Exception.php', 'PHPUnit\\Util\\ExcludeList' => '/phpunit/Util/ExcludeList.php', + 'PHPUnit\\Util\\Exporter' => '/phpunit/Util/Exporter.php', 'PHPUnit\\Util\\Filesystem' => '/phpunit/Util/Filesystem.php', 'PHPUnit\\Util\\Filter' => '/phpunit/Util/Filter.php', 'PHPUnit\\Util\\GlobalState' => '/phpunit/Util/GlobalState.php', 'PHPUnit\\Util\\InvalidDirectoryException' => '/phpunit/Util/Exception/InvalidDirectoryException.php', 'PHPUnit\\Util\\InvalidJsonException' => '/phpunit/Util/Exception/InvalidJsonException.php', - 'PHPUnit\\Util\\InvalidSocketException' => '/phpunit/Util/Exception/InvalidSocketException.php', 'PHPUnit\\Util\\InvalidVersionOperatorException' => '/phpunit/Util/Exception/InvalidVersionOperatorException.php', 'PHPUnit\\Util\\Json' => '/phpunit/Util/Json.php', - 'PHPUnit\\Util\\NoTestCaseObjectOnCallStackException' => '/phpunit/Util/Exception/NoTestCaseObjectOnCallStackException.php', 'PHPUnit\\Util\\PHP\\AbstractPhpProcess' => '/phpunit/Util/PHP/AbstractPhpProcess.php', 'PHPUnit\\Util\\PHP\\DefaultPhpProcess' => '/phpunit/Util/PHP/DefaultPhpProcess.php', 'PHPUnit\\Util\\PHP\\PhpProcessException' => '/phpunit/Util/Exception/PhpProcessException.php', @@ -1433,22 +1519,13 @@ spl_autoload_register( 'PHPUnit\\Util\\Test' => '/phpunit/Util/Test.php', 'PHPUnit\\Util\\ThrowableToStringMapper' => '/phpunit/Util/ThrowableToStringMapper.php', 'PHPUnit\\Util\\VersionComparisonOperator' => '/phpunit/Util/VersionComparisonOperator.php', - 'PHPUnit\\Util\\Xml' => '/phpunit/Util/Xml.php', - 'PHPUnit\\Util\\Xml\\Exception' => '/phpunit/Util/Xml/Exception.php', - 'PHPUnit\\Util\\Xml\\FailedSchemaDetectionResult' => '/phpunit/Util/Xml/FailedSchemaDetectionResult.php', + 'PHPUnit\\Util\\Xml' => '/phpunit/Util/Xml/Xml.php', 'PHPUnit\\Util\\Xml\\Loader' => '/phpunit/Util/Xml/Loader.php', - 'PHPUnit\\Util\\Xml\\SchemaDetectionResult' => '/phpunit/Util/Xml/SchemaDetectionResult.php', - 'PHPUnit\\Util\\Xml\\SchemaDetector' => '/phpunit/Util/Xml/SchemaDetector.php', - 'PHPUnit\\Util\\Xml\\SchemaFinder' => '/phpunit/Util/Xml/SchemaFinder.php', - 'PHPUnit\\Util\\Xml\\SnapshotNodeList' => '/phpunit/Util/Xml/SnapshotNodeList.php', - 'PHPUnit\\Util\\Xml\\SuccessfulSchemaDetectionResult' => '/phpunit/Util/Xml/SuccessfulSchemaDetectionResult.php', - 'PHPUnit\\Util\\Xml\\ValidationResult' => '/phpunit/Util/Xml/ValidationResult.php', - 'PHPUnit\\Util\\Xml\\Validator' => '/phpunit/Util/Xml/Validator.php', 'PHPUnit\\Util\\Xml\\XmlException' => '/phpunit/Util/Exception/XmlException.php']; } if (isset($classes[$class])) { - require_once 'phar://phpunit-10.0.16.phar' . $classes[$class]; + require_once 'phar://phpunit-10.5.8.phar' . $classes[$class]; } }, true, @@ -1487,6 +1564,7 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Event\\Code\\ClassMethod' => '/phpunit/Event/Value/ClassMethod.php', 'PHPUnit\\Event\\Code\\ComparisonFailure' => '/phpunit/Event/Value/ComparisonFailure.php', 'PHPUnit\\Event\\Code\\ComparisonFailureBuilder' => '/phpunit/Event/Value/ComparisonFailureBuilder.php', + 'PHPUnit\\Event\\Code\\NoTestCaseObjectOnCallStackException' => '/phpunit/Event/Exception/NoTestCaseObjectOnCallStackException.php', 'PHPUnit\\Event\\Code\\Phpt' => '/phpunit/Event/Value/Test/Phpt.php', 'PHPUnit\\Event\\Code\\Test' => '/phpunit/Event/Value/Test/Test.php', 'PHPUnit\\Event\\Code\\TestCollection' => '/phpunit/Event/Value/Test/TestCollection.php', @@ -1524,10 +1602,14 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Event\\Subscriber' => '/phpunit/Event/Subscriber.php', 'PHPUnit\\Event\\SubscriberTypeAlreadyRegisteredException' => '/phpunit/Event/Exception/SubscriberTypeAlreadyRegisteredException.php', 'PHPUnit\\Event\\Telemetry\\Duration' => '/phpunit/Event/Value/Telemetry/Duration.php', + 'PHPUnit\\Event\\Telemetry\\GarbageCollectorStatus' => '/phpunit/Event/Value/Telemetry/GarbageCollectorStatus.php', + 'PHPUnit\\Event\\Telemetry\\GarbageCollectorStatusProvider' => '/phpunit/Event/Value/Telemetry/GarbageCollectorStatusProvider.php', 'PHPUnit\\Event\\Telemetry\\HRTime' => '/phpunit/Event/Value/Telemetry/HRTime.php', 'PHPUnit\\Event\\Telemetry\\Info' => '/phpunit/Event/Value/Telemetry/Info.php', 'PHPUnit\\Event\\Telemetry\\MemoryMeter' => '/phpunit/Event/Value/Telemetry/MemoryMeter.php', 'PHPUnit\\Event\\Telemetry\\MemoryUsage' => '/phpunit/Event/Value/Telemetry/MemoryUsage.php', + 'PHPUnit\\Event\\Telemetry\\Php81GarbageCollectorStatusProvider' => '/phpunit/Event/Value/Telemetry/Php81GarbageCollectorStatusProvider.php', + 'PHPUnit\\Event\\Telemetry\\Php83GarbageCollectorStatusProvider' => '/phpunit/Event/Value/Telemetry/Php83GarbageCollectorStatusProvider.php', 'PHPUnit\\Event\\Telemetry\\Snapshot' => '/phpunit/Event/Value/Telemetry/Snapshot.php', 'PHPUnit\\Event\\Telemetry\\StopWatch' => '/phpunit/Event/Value/Telemetry/StopWatch.php', 'PHPUnit\\Event\\Telemetry\\System' => '/phpunit/Event/Value/Telemetry/System.php', @@ -1549,6 +1631,8 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Event\\TestRunner\\DeprecationTriggeredSubscriber' => '/phpunit/Event/Events/TestRunner/DeprecationTriggeredSubscriber.php', 'PHPUnit\\Event\\TestRunner\\EventFacadeSealed' => '/phpunit/Event/Events/TestRunner/EventFacadeSealed.php', 'PHPUnit\\Event\\TestRunner\\EventFacadeSealedSubscriber' => '/phpunit/Event/Events/TestRunner/EventFacadeSealedSubscriber.php', + 'PHPUnit\\Event\\TestRunner\\ExecutionAborted' => '/phpunit/Event/Events/TestRunner/ExecutionAborted.php', + 'PHPUnit\\Event\\TestRunner\\ExecutionAbortedSubscriber' => '/phpunit/Event/Events/TestRunner/ExecutionAbortedSubscriber.php', 'PHPUnit\\Event\\TestRunner\\ExecutionFinished' => '/phpunit/Event/Events/TestRunner/ExecutionFinished.php', 'PHPUnit\\Event\\TestRunner\\ExecutionFinishedSubscriber' => '/phpunit/Event/Events/TestRunner/ExecutionFinishedSubscriber.php', 'PHPUnit\\Event\\TestRunner\\ExecutionStarted' => '/phpunit/Event/Events/TestRunner/ExecutionStarted.php', @@ -1559,6 +1643,12 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Event\\TestRunner\\ExtensionLoadedFromPharSubscriber' => '/phpunit/Event/Events/TestRunner/ExtensionLoadedFromPharSubscriber.php', 'PHPUnit\\Event\\TestRunner\\Finished' => '/phpunit/Event/Events/TestRunner/Finished.php', 'PHPUnit\\Event\\TestRunner\\FinishedSubscriber' => '/phpunit/Event/Events/TestRunner/FinishedSubscriber.php', + 'PHPUnit\\Event\\TestRunner\\GarbageCollectionDisabled' => '/phpunit/Event/Events/TestRunner/GarbageCollectionDisabled.php', + 'PHPUnit\\Event\\TestRunner\\GarbageCollectionDisabledSubscriber' => '/phpunit/Event/Events/TestRunner/GarbageCollectionDisabledSubscriber.php', + 'PHPUnit\\Event\\TestRunner\\GarbageCollectionEnabled' => '/phpunit/Event/Events/TestRunner/GarbageCollectionEnabled.php', + 'PHPUnit\\Event\\TestRunner\\GarbageCollectionEnabledSubscriber' => '/phpunit/Event/Events/TestRunner/GarbageCollectionEnabledSubscriber.php', + 'PHPUnit\\Event\\TestRunner\\GarbageCollectionTriggered' => '/phpunit/Event/Events/TestRunner/GarbageCollectionTriggered.php', + 'PHPUnit\\Event\\TestRunner\\GarbageCollectionTriggeredSubscriber' => '/phpunit/Event/Events/TestRunner/GarbageCollectionTriggeredSubscriber.php', 'PHPUnit\\Event\\TestRunner\\Started' => '/phpunit/Event/Events/TestRunner/Started.php', 'PHPUnit\\Event\\TestRunner\\StartedSubscriber' => '/phpunit/Event/Events/TestRunner/StartedSubscriber.php', 'PHPUnit\\Event\\TestRunner\\WarningTriggered' => '/phpunit/Event/Events/TestRunner/WarningTriggered.php', @@ -1606,6 +1696,10 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Event\\Test\\ComparatorRegisteredSubscriber' => '/phpunit/Event/Events/Test/ComparatorRegisteredSubscriber.php', 'PHPUnit\\Event\\Test\\ConsideredRisky' => '/phpunit/Event/Events/Test/Issue/ConsideredRisky.php', 'PHPUnit\\Event\\Test\\ConsideredRiskySubscriber' => '/phpunit/Event/Events/Test/Issue/ConsideredRiskySubscriber.php', + 'PHPUnit\\Event\\Test\\DataProviderMethodCalled' => '/phpunit/Event/Events/Test/Lifecycle/DataProviderMethodCalled.php', + 'PHPUnit\\Event\\Test\\DataProviderMethodCalledSubscriber' => '/phpunit/Event/Events/Test/Lifecycle/DataProviderMethodCalledSubscriber.php', + 'PHPUnit\\Event\\Test\\DataProviderMethodFinished' => '/phpunit/Event/Events/Test/Lifecycle/DataProviderMethodFinished.php', + 'PHPUnit\\Event\\Test\\DataProviderMethodFinishedSubscriber' => '/phpunit/Event/Events/Test/Lifecycle/DataProviderMethodFinishedSubscriber.php', 'PHPUnit\\Event\\Test\\DeprecationTriggered' => '/phpunit/Event/Events/Test/Issue/DeprecationTriggered.php', 'PHPUnit\\Event\\Test\\DeprecationTriggeredSubscriber' => '/phpunit/Event/Events/Test/Issue/DeprecationTriggeredSubscriber.php', 'PHPUnit\\Event\\Test\\ErrorTriggered' => '/phpunit/Event/Events/Test/Issue/ErrorTriggered.php', @@ -1655,6 +1749,8 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Event\\Test\\PreConditionCalledSubscriber' => '/phpunit/Event/Events/Test/HookMethod/PreConditionCalledSubscriber.php', 'PHPUnit\\Event\\Test\\PreConditionFinished' => '/phpunit/Event/Events/Test/HookMethod/PreConditionFinished.php', 'PHPUnit\\Event\\Test\\PreConditionFinishedSubscriber' => '/phpunit/Event/Events/Test/HookMethod/PreConditionFinishedSubscriber.php', + 'PHPUnit\\Event\\Test\\PreparationFailed' => '/phpunit/Event/Events/Test/Lifecycle/PreparationFailed.php', + 'PHPUnit\\Event\\Test\\PreparationFailedSubscriber' => '/phpunit/Event/Events/Test/Lifecycle/PreparationFailedSubscriber.php', 'PHPUnit\\Event\\Test\\PreparationStarted' => '/phpunit/Event/Events/Test/Lifecycle/PreparationStarted.php', 'PHPUnit\\Event\\Test\\PreparationStartedSubscriber' => '/phpunit/Event/Events/Test/Lifecycle/PreparationStartedSubscriber.php', 'PHPUnit\\Event\\Test\\Prepared' => '/phpunit/Event/Events/Test/Lifecycle/Prepared.php', @@ -1706,6 +1802,10 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Framework\\Attributes\\ExcludeGlobalVariableFromBackup' => '/phpunit/Framework/Attributes/ExcludeGlobalVariableFromBackup.php', 'PHPUnit\\Framework\\Attributes\\ExcludeStaticPropertyFromBackup' => '/phpunit/Framework/Attributes/ExcludeStaticPropertyFromBackup.php', 'PHPUnit\\Framework\\Attributes\\Group' => '/phpunit/Framework/Attributes/Group.php', + 'PHPUnit\\Framework\\Attributes\\IgnoreClassForCodeCoverage' => '/phpunit/Framework/Attributes/IgnoreClassForCodeCoverage.php', + 'PHPUnit\\Framework\\Attributes\\IgnoreDeprecations' => '/phpunit/Framework/Attributes/IgnoreDeprecations.php', + 'PHPUnit\\Framework\\Attributes\\IgnoreFunctionForCodeCoverage' => '/phpunit/Framework/Attributes/IgnoreFunctionForCodeCoverage.php', + 'PHPUnit\\Framework\\Attributes\\IgnoreMethodForCodeCoverage' => '/phpunit/Framework/Attributes/IgnoreMethodForCodeCoverage.php', 'PHPUnit\\Framework\\Attributes\\Large' => '/phpunit/Framework/Attributes/Large.php', 'PHPUnit\\Framework\\Attributes\\Medium' => '/phpunit/Framework/Attributes/Medium.php', 'PHPUnit\\Framework\\Attributes\\PostCondition' => '/phpunit/Framework/Attributes/PostCondition.php', @@ -1730,6 +1830,7 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Framework\\Attributes\\Ticket' => '/phpunit/Framework/Attributes/Ticket.php', 'PHPUnit\\Framework\\Attributes\\UsesClass' => '/phpunit/Framework/Attributes/UsesClass.php', 'PHPUnit\\Framework\\Attributes\\UsesFunction' => '/phpunit/Framework/Attributes/UsesFunction.php', + 'PHPUnit\\Framework\\Attributes\\WithoutErrorHandler' => '/phpunit/Framework/Attributes/WithoutErrorHandler.php', 'PHPUnit\\Framework\\CodeCoverageException' => '/phpunit/Framework/Exception/CodeCoverageException.php', 'PHPUnit\\Framework\\ComparisonMethodDoesNotAcceptParameterTypeException' => '/phpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotAcceptParameterTypeException.php', 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareBoolReturnTypeException' => '/phpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareBoolReturnTypeException.php', @@ -1773,7 +1874,8 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Framework\\Constraint\\LogicalNot' => '/phpunit/Framework/Constraint/Operator/LogicalNot.php', 'PHPUnit\\Framework\\Constraint\\LogicalOr' => '/phpunit/Framework/Constraint/Operator/LogicalOr.php', 'PHPUnit\\Framework\\Constraint\\LogicalXor' => '/phpunit/Framework/Constraint/Operator/LogicalXor.php', - 'PHPUnit\\Framework\\Constraint\\ObjectEquals' => '/phpunit/Framework/Constraint/ObjectEquals.php', + 'PHPUnit\\Framework\\Constraint\\ObjectEquals' => '/phpunit/Framework/Constraint/Object/ObjectEquals.php', + 'PHPUnit\\Framework\\Constraint\\ObjectHasProperty' => '/phpunit/Framework/Constraint/Object/ObjectHasProperty.php', 'PHPUnit\\Framework\\Constraint\\Operator' => '/phpunit/Framework/Constraint/Operator/Operator.php', 'PHPUnit\\Framework\\Constraint\\RegularExpression' => '/phpunit/Framework/Constraint/String/RegularExpression.php', 'PHPUnit\\Framework\\Constraint\\SameSize' => '/phpunit/Framework/Constraint/Cardinality/SameSize.php', @@ -1789,7 +1891,6 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Framework\\Constraint\\UnaryOperator' => '/phpunit/Framework/Constraint/Operator/UnaryOperator.php', 'PHPUnit\\Framework\\DataProviderTestSuite' => '/phpunit/Framework/DataProviderTestSuite.php', 'PHPUnit\\Framework\\EmptyStringException' => '/phpunit/Framework/Exception/EmptyStringException.php', - 'PHPUnit\\Framework\\Error' => '/phpunit/Framework/Exception/Error.php', 'PHPUnit\\Framework\\Exception' => '/phpunit/Framework/Exception/Exception.php', 'PHPUnit\\Framework\\ExecutionOrderDependency' => '/phpunit/Framework/ExecutionOrderDependency.php', 'PHPUnit\\Framework\\ExpectationFailedException' => '/phpunit/Framework/Exception/ExpectationFailedException.php', @@ -1800,77 +1901,83 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Framework\\InvalidCoversTargetException' => '/phpunit/Framework/Exception/InvalidCoversTargetException.php', 'PHPUnit\\Framework\\InvalidDataProviderException' => '/phpunit/Framework/Exception/InvalidDataProviderException.php', 'PHPUnit\\Framework\\InvalidDependencyException' => '/phpunit/Framework/Exception/InvalidDependencyException.php', - 'PHPUnit\\Framework\\MockObject\\Api' => '/phpunit/Framework/MockObject/Api/Api.php', 'PHPUnit\\Framework\\MockObject\\BadMethodCallException' => '/phpunit/Framework/MockObject/Exception/BadMethodCallException.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\Identity' => '/phpunit/Framework/MockObject/Builder/Identity.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker' => '/phpunit/Framework/MockObject/Builder/InvocationMocker.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationStubber' => '/phpunit/Framework/MockObject/Builder/InvocationStubber.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => '/phpunit/Framework/MockObject/Builder/MethodNameMatch.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => '/phpunit/Framework/MockObject/Builder/ParametersMatch.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => '/phpunit/Framework/MockObject/Builder/Stub.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\Identity' => '/phpunit/Framework/MockObject/Runtime/Builder/Identity.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker' => '/phpunit/Framework/MockObject/Runtime/Builder/InvocationMocker.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationStubber' => '/phpunit/Framework/MockObject/Runtime/Builder/InvocationStubber.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => '/phpunit/Framework/MockObject/Runtime/Builder/MethodNameMatch.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => '/phpunit/Framework/MockObject/Runtime/Builder/ParametersMatch.php', + 'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => '/phpunit/Framework/MockObject/Runtime/Builder/Stub.php', 'PHPUnit\\Framework\\MockObject\\CannotUseAddMethodsException' => '/phpunit/Framework/MockObject/Exception/CannotUseAddMethodsException.php', 'PHPUnit\\Framework\\MockObject\\CannotUseOnlyMethodsException' => '/phpunit/Framework/MockObject/Exception/CannotUseOnlyMethodsException.php', - 'PHPUnit\\Framework\\MockObject\\ClassAlreadyExistsException' => '/phpunit/Framework/MockObject/Exception/ClassAlreadyExistsException.php', - 'PHPUnit\\Framework\\MockObject\\ClassIsEnumerationException' => '/phpunit/Framework/MockObject/Exception/ClassIsEnumerationException.php', - 'PHPUnit\\Framework\\MockObject\\ClassIsFinalException' => '/phpunit/Framework/MockObject/Exception/ClassIsFinalException.php', - 'PHPUnit\\Framework\\MockObject\\ClassIsReadonlyException' => '/phpunit/Framework/MockObject/Exception/ClassIsReadonlyException.php', 'PHPUnit\\Framework\\MockObject\\ConfigurableMethod' => '/phpunit/Framework/MockObject/ConfigurableMethod.php', - 'PHPUnit\\Framework\\MockObject\\ConfigurableMethodsAlreadyInitializedException' => '/phpunit/Framework/MockObject/Exception/ConfigurableMethodsAlreadyInitializedException.php', - 'PHPUnit\\Framework\\MockObject\\DuplicateMethodException' => '/phpunit/Framework/MockObject/Exception/DuplicateMethodException.php', + 'PHPUnit\\Framework\\MockObject\\DoubledCloneMethod' => '/phpunit/Framework/MockObject/Runtime/Api/DoubledCloneMethod.php', 'PHPUnit\\Framework\\MockObject\\Exception' => '/phpunit/Framework/MockObject/Exception/Exception.php', - 'PHPUnit\\Framework\\MockObject\\Generator' => '/phpunit/Framework/MockObject/Generator.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\ClassAlreadyExistsException' => '/phpunit/Framework/MockObject/Generator/Exception/ClassAlreadyExistsException.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\ClassIsEnumerationException' => '/phpunit/Framework/MockObject/Generator/Exception/ClassIsEnumerationException.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\ClassIsFinalException' => '/phpunit/Framework/MockObject/Generator/Exception/ClassIsFinalException.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\ClassIsReadonlyException' => '/phpunit/Framework/MockObject/Generator/Exception/ClassIsReadonlyException.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\DuplicateMethodException' => '/phpunit/Framework/MockObject/Generator/Exception/DuplicateMethodException.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\Exception' => '/phpunit/Framework/MockObject/Generator/Exception/Exception.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\Generator' => '/phpunit/Framework/MockObject/Generator/Generator.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\InvalidMethodNameException' => '/phpunit/Framework/MockObject/Generator/Exception/InvalidMethodNameException.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\MockClass' => '/phpunit/Framework/MockObject/Generator/MockClass.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\MockMethod' => '/phpunit/Framework/MockObject/Generator/MockMethod.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\MockMethodSet' => '/phpunit/Framework/MockObject/Generator/MockMethodSet.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\MockTrait' => '/phpunit/Framework/MockObject/Generator/MockTrait.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\MockType' => '/phpunit/Framework/MockObject/Generator/MockType.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\OriginalConstructorInvocationRequiredException' => '/phpunit/Framework/MockObject/Generator/Exception/OriginalConstructorInvocationRequiredException.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\ReflectionException' => '/phpunit/Framework/MockObject/Generator/Exception/ReflectionException.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\RuntimeException' => '/phpunit/Framework/MockObject/Generator/Exception/RuntimeException.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\SoapExtensionNotAvailableException' => '/phpunit/Framework/MockObject/Generator/Exception/SoapExtensionNotAvailableException.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\TemplateLoader' => '/phpunit/Framework/MockObject/Generator/TemplateLoader.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\UnknownClassException' => '/phpunit/Framework/MockObject/Generator/Exception/UnknownClassException.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\UnknownTraitException' => '/phpunit/Framework/MockObject/Generator/Exception/UnknownTraitException.php', + 'PHPUnit\\Framework\\MockObject\\Generator\\UnknownTypeException' => '/phpunit/Framework/MockObject/Generator/Exception/UnknownTypeException.php', 'PHPUnit\\Framework\\MockObject\\IncompatibleReturnValueException' => '/phpunit/Framework/MockObject/Exception/IncompatibleReturnValueException.php', - 'PHPUnit\\Framework\\MockObject\\InvalidMethodNameException' => '/phpunit/Framework/MockObject/Exception/InvalidMethodNameException.php', - 'PHPUnit\\Framework\\MockObject\\Invocation' => '/phpunit/Framework/MockObject/Invocation.php', - 'PHPUnit\\Framework\\MockObject\\InvocationHandler' => '/phpunit/Framework/MockObject/InvocationHandler.php', + 'PHPUnit\\Framework\\MockObject\\Invocation' => '/phpunit/Framework/MockObject/Runtime/Invocation.php', + 'PHPUnit\\Framework\\MockObject\\InvocationHandler' => '/phpunit/Framework/MockObject/Runtime/InvocationHandler.php', 'PHPUnit\\Framework\\MockObject\\MatchBuilderNotFoundException' => '/phpunit/Framework/MockObject/Exception/MatchBuilderNotFoundException.php', - 'PHPUnit\\Framework\\MockObject\\Matcher' => '/phpunit/Framework/MockObject/Matcher.php', + 'PHPUnit\\Framework\\MockObject\\Matcher' => '/phpunit/Framework/MockObject/Runtime/Matcher.php', 'PHPUnit\\Framework\\MockObject\\MatcherAlreadyRegisteredException' => '/phpunit/Framework/MockObject/Exception/MatcherAlreadyRegisteredException.php', - 'PHPUnit\\Framework\\MockObject\\Method' => '/phpunit/Framework/MockObject/Api/Method.php', + 'PHPUnit\\Framework\\MockObject\\Method' => '/phpunit/Framework/MockObject/Runtime/Api/Method.php', 'PHPUnit\\Framework\\MockObject\\MethodCannotBeConfiguredException' => '/phpunit/Framework/MockObject/Exception/MethodCannotBeConfiguredException.php', 'PHPUnit\\Framework\\MockObject\\MethodNameAlreadyConfiguredException' => '/phpunit/Framework/MockObject/Exception/MethodNameAlreadyConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MethodNameConstraint' => '/phpunit/Framework/MockObject/MethodNameConstraint.php', + 'PHPUnit\\Framework\\MockObject\\MethodNameConstraint' => '/phpunit/Framework/MockObject/Runtime/MethodNameConstraint.php', 'PHPUnit\\Framework\\MockObject\\MethodNameNotConfiguredException' => '/phpunit/Framework/MockObject/Exception/MethodNameNotConfiguredException.php', 'PHPUnit\\Framework\\MockObject\\MethodParametersAlreadyConfiguredException' => '/phpunit/Framework/MockObject/Exception/MethodParametersAlreadyConfiguredException.php', 'PHPUnit\\Framework\\MockObject\\MockBuilder' => '/phpunit/Framework/MockObject/MockBuilder.php', - 'PHPUnit\\Framework\\MockObject\\MockClass' => '/phpunit/Framework/MockObject/MockClass.php', - 'PHPUnit\\Framework\\MockObject\\MockMethod' => '/phpunit/Framework/MockObject/MockMethod.php', - 'PHPUnit\\Framework\\MockObject\\MockMethodSet' => '/phpunit/Framework/MockObject/MockMethodSet.php', - 'PHPUnit\\Framework\\MockObject\\MockObject' => '/phpunit/Framework/MockObject/MockObject.php', - 'PHPUnit\\Framework\\MockObject\\MockTrait' => '/phpunit/Framework/MockObject/MockTrait.php', - 'PHPUnit\\Framework\\MockObject\\MockType' => '/phpunit/Framework/MockObject/MockType.php', - 'PHPUnit\\Framework\\MockObject\\MockedCloneMethod' => '/phpunit/Framework/MockObject/Api/MockedCloneMethod.php', - 'PHPUnit\\Framework\\MockObject\\OriginalConstructorInvocationRequiredException' => '/phpunit/Framework/MockObject/Exception/OriginalConstructorInvocationRequiredException.php', + 'PHPUnit\\Framework\\MockObject\\MockObject' => '/phpunit/Framework/MockObject/Runtime/Interface/MockObject.php', + 'PHPUnit\\Framework\\MockObject\\MockObjectApi' => '/phpunit/Framework/MockObject/Runtime/Api/MockObjectApi.php', + 'PHPUnit\\Framework\\MockObject\\MockObjectInternal' => '/phpunit/Framework/MockObject/Runtime/Interface/MockObjectInternal.php', + 'PHPUnit\\Framework\\MockObject\\NeverReturningMethodException' => '/phpunit/Framework/MockObject/Exception/NeverReturningMethodException.php', + 'PHPUnit\\Framework\\MockObject\\ProxiedCloneMethod' => '/phpunit/Framework/MockObject/Runtime/Api/ProxiedCloneMethod.php', 'PHPUnit\\Framework\\MockObject\\ReflectionException' => '/phpunit/Framework/MockObject/Exception/ReflectionException.php', + 'PHPUnit\\Framework\\MockObject\\ReturnValueGenerator' => '/phpunit/Framework/MockObject/Runtime/ReturnValueGenerator.php', 'PHPUnit\\Framework\\MockObject\\ReturnValueNotConfiguredException' => '/phpunit/Framework/MockObject/Exception/ReturnValueNotConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\AnyInvokedCount' => '/phpunit/Framework/MockObject/Rule/AnyInvokedCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\AnyParameters' => '/phpunit/Framework/MockObject/Rule/AnyParameters.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvocationOrder' => '/phpunit/Framework/MockObject/Rule/InvocationOrder.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastCount' => '/phpunit/Framework/MockObject/Rule/InvokedAtLeastCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastOnce' => '/phpunit/Framework/MockObject/Rule/InvokedAtLeastOnce.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtMostCount' => '/phpunit/Framework/MockObject/Rule/InvokedAtMostCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedCount' => '/phpunit/Framework/MockObject/Rule/InvokedCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\MethodName' => '/phpunit/Framework/MockObject/Rule/MethodName.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\Parameters' => '/phpunit/Framework/MockObject/Rule/Parameters.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\ParametersRule' => '/phpunit/Framework/MockObject/Rule/ParametersRule.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\AnyInvokedCount' => '/phpunit/Framework/MockObject/Runtime/Rule/AnyInvokedCount.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\AnyParameters' => '/phpunit/Framework/MockObject/Runtime/Rule/AnyParameters.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\InvocationOrder' => '/phpunit/Framework/MockObject/Runtime/Rule/InvocationOrder.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastCount' => '/phpunit/Framework/MockObject/Runtime/Rule/InvokedAtLeastCount.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastOnce' => '/phpunit/Framework/MockObject/Runtime/Rule/InvokedAtLeastOnce.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtMostCount' => '/phpunit/Framework/MockObject/Runtime/Rule/InvokedAtMostCount.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedCount' => '/phpunit/Framework/MockObject/Runtime/Rule/InvokedCount.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\MethodName' => '/phpunit/Framework/MockObject/Runtime/Rule/MethodName.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\Parameters' => '/phpunit/Framework/MockObject/Runtime/Rule/Parameters.php', + 'PHPUnit\\Framework\\MockObject\\Rule\\ParametersRule' => '/phpunit/Framework/MockObject/Runtime/Rule/ParametersRule.php', 'PHPUnit\\Framework\\MockObject\\RuntimeException' => '/phpunit/Framework/MockObject/Exception/RuntimeException.php', - 'PHPUnit\\Framework\\MockObject\\SoapExtensionNotAvailableException' => '/phpunit/Framework/MockObject/Exception/SoapExtensionNotAvailableException.php', - 'PHPUnit\\Framework\\MockObject\\Stub' => '/phpunit/Framework/MockObject/Stub.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ConsecutiveCalls' => '/phpunit/Framework/MockObject/Stub/ConsecutiveCalls.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\Exception' => '/phpunit/Framework/MockObject/Stub/Exception.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnArgument' => '/phpunit/Framework/MockObject/Stub/ReturnArgument.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnCallback' => '/phpunit/Framework/MockObject/Stub/ReturnCallback.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnReference' => '/phpunit/Framework/MockObject/Stub/ReturnReference.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnSelf' => '/phpunit/Framework/MockObject/Stub/ReturnSelf.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => '/phpunit/Framework/MockObject/Stub/ReturnStub.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => '/phpunit/Framework/MockObject/Stub/ReturnValueMap.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\Stub' => '/phpunit/Framework/MockObject/Stub/Stub.php', - 'PHPUnit\\Framework\\MockObject\\TemplateLoader' => '/phpunit/Framework/MockObject/TemplateLoader.php', - 'PHPUnit\\Framework\\MockObject\\UnknownClassException' => '/phpunit/Framework/MockObject/Exception/UnknownClassException.php', - 'PHPUnit\\Framework\\MockObject\\UnknownTraitException' => '/phpunit/Framework/MockObject/Exception/UnknownTraitException.php', - 'PHPUnit\\Framework\\MockObject\\UnknownTypeException' => '/phpunit/Framework/MockObject/Exception/UnknownTypeException.php', - 'PHPUnit\\Framework\\MockObject\\UnmockedCloneMethod' => '/phpunit/Framework/MockObject/Api/UnmockedCloneMethod.php', - 'PHPUnit\\Framework\\MockObject\\Verifiable' => '/phpunit/Framework/MockObject/Verifiable.php', + 'PHPUnit\\Framework\\MockObject\\Stub' => '/phpunit/Framework/MockObject/Runtime/Interface/Stub.php', + 'PHPUnit\\Framework\\MockObject\\StubApi' => '/phpunit/Framework/MockObject/Runtime/Api/StubApi.php', + 'PHPUnit\\Framework\\MockObject\\StubInternal' => '/phpunit/Framework/MockObject/Runtime/Interface/StubInternal.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ConsecutiveCalls' => '/phpunit/Framework/MockObject/Runtime/Stub/ConsecutiveCalls.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\Exception' => '/phpunit/Framework/MockObject/Runtime/Stub/Exception.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnArgument' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnArgument.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnCallback' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnCallback.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnReference' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnReference.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnSelf' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnSelf.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnStub.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => '/phpunit/Framework/MockObject/Runtime/Stub/ReturnValueMap.php', + 'PHPUnit\\Framework\\MockObject\\Stub\\Stub' => '/phpunit/Framework/MockObject/Runtime/Stub/Stub.php', 'PHPUnit\\Framework\\NoChildTestSuiteException' => '/phpunit/Framework/Exception/NoChildTestSuiteException.php', 'PHPUnit\\Framework\\PhptAssertionFailedError' => '/phpunit/Framework/Exception/PhptAssertionFailedError.php', 'PHPUnit\\Framework\\ProcessIsolationException' => '/phpunit/Framework/Exception/ProcessIsolationException.php', @@ -1903,7 +2010,6 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Framework\\TestStatus\\Warning' => '/phpunit/Framework/TestStatus/Warning.php', 'PHPUnit\\Framework\\TestSuite' => '/phpunit/Framework/TestSuite.php', 'PHPUnit\\Framework\\TestSuiteIterator' => '/phpunit/Framework/TestSuiteIterator.php', - 'PHPUnit\\Framework\\UnknownClassException' => '/phpunit/Framework/Exception/UnknownClassException.php', 'PHPUnit\\Framework\\UnknownClassOrInterfaceException' => '/phpunit/Framework/Exception/UnknownClassOrInterfaceException.php', 'PHPUnit\\Framework\\UnknownTypeException' => '/phpunit/Framework/Exception/UnknownTypeException.php', 'PHPUnit\\Logging\\EventLogger' => '/phpunit/Logging/EventLogger.php', @@ -1914,6 +2020,8 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Logging\\JUnit\\TestFailedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestFailedSubscriber.php', 'PHPUnit\\Logging\\JUnit\\TestFinishedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestFinishedSubscriber.php', 'PHPUnit\\Logging\\JUnit\\TestMarkedIncompleteSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestMarkedIncompleteSubscriber.php', + 'PHPUnit\\Logging\\JUnit\\TestPreparationFailedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestPreparationFailedSubscriber.php', + 'PHPUnit\\Logging\\JUnit\\TestPreparationStartedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestPreparationStartedSubscriber.php', 'PHPUnit\\Logging\\JUnit\\TestPreparedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestPreparedSubscriber.php', 'PHPUnit\\Logging\\JUnit\\TestRunnerExecutionFinishedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestRunnerExecutionFinishedSubscriber.php', 'PHPUnit\\Logging\\JUnit\\TestSkippedSubscriber' => '/phpunit/Logging/JUnit/Subscriber/TestSkippedSubscriber.php', @@ -1934,26 +2042,28 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Logging\\TestDox\\HtmlRenderer' => '/phpunit/Logging/TestDox/HtmlRenderer.php', 'PHPUnit\\Logging\\TestDox\\NamePrettifier' => '/phpunit/Logging/TestDox/NamePrettifier.php', 'PHPUnit\\Logging\\TestDox\\PlainTextRenderer' => '/phpunit/Logging/TestDox/PlainTextRenderer.php', - 'PHPUnit\\Logging\\TestDox\\Subscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/Subscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestConsideredRiskySubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestConsideredRiskySubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestCreatedMockObjectForAbstractClassSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedMockObjectForAbstractClassSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestCreatedMockObjectForTraitSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedMockObjectForTraitSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestCreatedMockObjectFromWsdlSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedMockObjectFromWsdlSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestCreatedMockObjectSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedMockObjectSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestCreatedPartialMockObjectSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedPartialMockObjectSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestCreatedTestProxySubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedTestProxySubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestCreatedTestStubSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedTestStubSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestErroredSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestErroredSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestFailedSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestFailedSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestFinishedSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestFinishedSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestMarkedIncompleteSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestMarkedIncompleteSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestPassedSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestPassedSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestPreparedSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestPreparedSubscriber.php', - 'PHPUnit\\Logging\\TestDox\\TestResult' => '/phpunit/Logging/TestDox/TestMethod/TestResult.php', - 'PHPUnit\\Logging\\TestDox\\TestResultCollection' => '/phpunit/Logging/TestDox/TestMethod/TestResultCollection.php', - 'PHPUnit\\Logging\\TestDox\\TestResultCollectionIterator' => '/phpunit/Logging/TestDox/TestMethod/TestResultCollectionIterator.php', - 'PHPUnit\\Logging\\TestDox\\TestResultCollector' => '/phpunit/Logging/TestDox/TestMethod/TestResultCollector.php', - 'PHPUnit\\Logging\\TestDox\\TestSkippedSubscriber' => '/phpunit/Logging/TestDox/TestMethod/Subscriber/TestSkippedSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\Subscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/Subscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestConsideredRiskySubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestConsideredRiskySubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestErroredSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestErroredSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestFailedSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestFailedSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestFinishedSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestFinishedSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestMarkedIncompleteSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestMarkedIncompleteSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestPassedSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestPassedSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestPreparedSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestPreparedSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestResult' => '/phpunit/Logging/TestDox/TestResult/TestResult.php', + 'PHPUnit\\Logging\\TestDox\\TestResultCollection' => '/phpunit/Logging/TestDox/TestResult/TestResultCollection.php', + 'PHPUnit\\Logging\\TestDox\\TestResultCollectionIterator' => '/phpunit/Logging/TestDox/TestResult/TestResultCollectionIterator.php', + 'PHPUnit\\Logging\\TestDox\\TestResultCollector' => '/phpunit/Logging/TestDox/TestResult/TestResultCollector.php', + 'PHPUnit\\Logging\\TestDox\\TestSkippedSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestSkippedSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestTriggeredDeprecationSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredDeprecationSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestTriggeredNoticeSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredNoticeSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpDeprecationSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpDeprecationSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpNoticeSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpNoticeSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpWarningSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpWarningSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpunitDeprecationSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpunitDeprecationSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpunitErrorSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpunitErrorSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestTriggeredPhpunitWarningSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpunitWarningSubscriber.php', + 'PHPUnit\\Logging\\TestDox\\TestTriggeredWarningSubscriber' => '/phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredWarningSubscriber.php', 'PHPUnit\\Metadata\\After' => '/phpunit/Metadata/After.php', 'PHPUnit\\Metadata\\AfterClass' => '/phpunit/Metadata/AfterClass.php', 'PHPUnit\\Metadata\\Annotation\\Parser\\DocBlock' => '/phpunit/Metadata/Parser/Annotation/DocBlock.php', @@ -1982,6 +2092,10 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Metadata\\ExcludeGlobalVariableFromBackup' => '/phpunit/Metadata/ExcludeGlobalVariableFromBackup.php', 'PHPUnit\\Metadata\\ExcludeStaticPropertyFromBackup' => '/phpunit/Metadata/ExcludeStaticPropertyFromBackup.php', 'PHPUnit\\Metadata\\Group' => '/phpunit/Metadata/Group.php', + 'PHPUnit\\Metadata\\IgnoreClassForCodeCoverage' => '/phpunit/Metadata/IgnoreClassForCodeCoverage.php', + 'PHPUnit\\Metadata\\IgnoreDeprecations' => '/phpunit/Metadata/IgnoreDeprecations.php', + 'PHPUnit\\Metadata\\IgnoreFunctionForCodeCoverage' => '/phpunit/Metadata/IgnoreFunctionForCodeCoverage.php', + 'PHPUnit\\Metadata\\IgnoreMethodForCodeCoverage' => '/phpunit/Metadata/IgnoreMethodForCodeCoverage.php', 'PHPUnit\\Metadata\\InvalidVersionRequirementException' => '/phpunit/Metadata/Exception/InvalidVersionRequirementException.php', 'PHPUnit\\Metadata\\Metadata' => '/phpunit/Metadata/Metadata.php', 'PHPUnit\\Metadata\\MetadataCollection' => '/phpunit/Metadata/MetadataCollection.php', @@ -2018,6 +2132,7 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Metadata\\Version\\ComparisonRequirement' => '/phpunit/Metadata/Version/ComparisonRequirement.php', 'PHPUnit\\Metadata\\Version\\ConstraintRequirement' => '/phpunit/Metadata/Version/ConstraintRequirement.php', 'PHPUnit\\Metadata\\Version\\Requirement' => '/phpunit/Metadata/Version/Requirement.php', + 'PHPUnit\\Metadata\\WithoutErrorHandler' => '/phpunit/Metadata/WithoutErrorHandler.php', 'PHPUnit\\PharIo\\Manifest\\Application' => '/phar-io-manifest/values/Application.php', 'PHPUnit\\PharIo\\Manifest\\ApplicationName' => '/phar-io-manifest/values/ApplicationName.php', 'PHPUnit\\PharIo\\Manifest\\Author' => '/phar-io-manifest/values/Author.php', @@ -2119,24 +2234,22 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\PhpParser\\Internal\\DiffElem' => '/nikic-php-parser/PhpParser/Internal/DiffElem.php', 'PHPUnit\\PhpParser\\Internal\\Differ' => '/nikic-php-parser/PhpParser/Internal/Differ.php', 'PHPUnit\\PhpParser\\Internal\\PrintableNewAnonClassNode' => '/nikic-php-parser/PhpParser/Internal/PrintableNewAnonClassNode.php', + 'PHPUnit\\PhpParser\\Internal\\TokenPolyfill' => '/nikic-php-parser/PhpParser/Internal/TokenPolyfill.php', 'PHPUnit\\PhpParser\\Internal\\TokenStream' => '/nikic-php-parser/PhpParser/Internal/TokenStream.php', 'PHPUnit\\PhpParser\\JsonDecoder' => '/nikic-php-parser/PhpParser/JsonDecoder.php', 'PHPUnit\\PhpParser\\Lexer' => '/nikic-php-parser/PhpParser/Lexer.php', 'PHPUnit\\PhpParser\\Lexer\\Emulative' => '/nikic-php-parser/PhpParser/Lexer/Emulative.php', 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\AttributeEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php', - 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\CoaleseEqualTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php', 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\EnumTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php', 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\ExplicitOctalEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php', - 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\FlexibleDocStringEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.php', - 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\FnTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php', 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\KeywordEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php', 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\MatchTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php', 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\NullsafeTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php', - 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\NumericLiteralSeparatorEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php', 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\ReadonlyFunctionTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.php', 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\ReadonlyTokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.php', 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\ReverseEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php', 'PHPUnit\\PhpParser\\Lexer\\TokenEmulator\\TokenEmulator' => '/nikic-php-parser/PhpParser/Lexer/TokenEmulator/TokenEmulator.php', + 'PHPUnit\\PhpParser\\Modifiers' => '/nikic-php-parser/PhpParser/Modifiers.php', 'PHPUnit\\PhpParser\\NameContext' => '/nikic-php-parser/PhpParser/NameContext.php', 'PHPUnit\\PhpParser\\Node' => '/nikic-php-parser/PhpParser/Node.php', 'PHPUnit\\PhpParser\\NodeAbstract' => '/nikic-php-parser/PhpParser/NodeAbstract.php', @@ -2147,19 +2260,22 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\PhpParser\\NodeVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor.php', 'PHPUnit\\PhpParser\\NodeVisitorAbstract' => '/nikic-php-parser/PhpParser/NodeVisitorAbstract.php', 'PHPUnit\\PhpParser\\NodeVisitor\\CloningVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor/CloningVisitor.php', + 'PHPUnit\\PhpParser\\NodeVisitor\\CommentAnnotatingVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php', 'PHPUnit\\PhpParser\\NodeVisitor\\FindingVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor/FindingVisitor.php', 'PHPUnit\\PhpParser\\NodeVisitor\\FirstFindingVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor/FirstFindingVisitor.php', 'PHPUnit\\PhpParser\\NodeVisitor\\NameResolver' => '/nikic-php-parser/PhpParser/NodeVisitor/NameResolver.php', 'PHPUnit\\PhpParser\\NodeVisitor\\NodeConnectingVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor/NodeConnectingVisitor.php', 'PHPUnit\\PhpParser\\NodeVisitor\\ParentConnectingVisitor' => '/nikic-php-parser/PhpParser/NodeVisitor/ParentConnectingVisitor.php', 'PHPUnit\\PhpParser\\Node\\Arg' => '/nikic-php-parser/PhpParser/Node/Arg.php', + 'PHPUnit\\PhpParser\\Node\\ArrayItem' => '/nikic-php-parser/PhpParser/Node/ArrayItem.php', 'PHPUnit\\PhpParser\\Node\\Attribute' => '/nikic-php-parser/PhpParser/Node/Attribute.php', 'PHPUnit\\PhpParser\\Node\\AttributeGroup' => '/nikic-php-parser/PhpParser/Node/AttributeGroup.php', + 'PHPUnit\\PhpParser\\Node\\ClosureUse' => '/nikic-php-parser/PhpParser/Node/ClosureUse.php', 'PHPUnit\\PhpParser\\Node\\ComplexType' => '/nikic-php-parser/PhpParser/Node/ComplexType.php', 'PHPUnit\\PhpParser\\Node\\Const_' => '/nikic-php-parser/PhpParser/Node/Const_.php', + 'PHPUnit\\PhpParser\\Node\\DeclareItem' => '/nikic-php-parser/PhpParser/Node/DeclareItem.php', 'PHPUnit\\PhpParser\\Node\\Expr' => '/nikic-php-parser/PhpParser/Node/Expr.php', 'PHPUnit\\PhpParser\\Node\\Expr\\ArrayDimFetch' => '/nikic-php-parser/PhpParser/Node/Expr/ArrayDimFetch.php', - 'PHPUnit\\PhpParser\\Node\\Expr\\ArrayItem' => '/nikic-php-parser/PhpParser/Node/Expr/ArrayItem.php', 'PHPUnit\\PhpParser\\Node\\Expr\\Array_' => '/nikic-php-parser/PhpParser/Node/Expr/Array_.php', 'PHPUnit\\PhpParser\\Node\\Expr\\ArrowFunction' => '/nikic-php-parser/PhpParser/Node/Expr/ArrowFunction.php', 'PHPUnit\\PhpParser\\Node\\Expr\\Assign' => '/nikic-php-parser/PhpParser/Node/Expr/Assign.php', @@ -2220,7 +2336,6 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\PhpParser\\Node\\Expr\\ClassConstFetch' => '/nikic-php-parser/PhpParser/Node/Expr/ClassConstFetch.php', 'PHPUnit\\PhpParser\\Node\\Expr\\Clone_' => '/nikic-php-parser/PhpParser/Node/Expr/Clone_.php', 'PHPUnit\\PhpParser\\Node\\Expr\\Closure' => '/nikic-php-parser/PhpParser/Node/Expr/Closure.php', - 'PHPUnit\\PhpParser\\Node\\Expr\\ClosureUse' => '/nikic-php-parser/PhpParser/Node/Expr/ClosureUse.php', 'PHPUnit\\PhpParser\\Node\\Expr\\ConstFetch' => '/nikic-php-parser/PhpParser/Node/Expr/ConstFetch.php', 'PHPUnit\\PhpParser\\Node\\Expr\\Empty_' => '/nikic-php-parser/PhpParser/Node/Expr/Empty_.php', 'PHPUnit\\PhpParser\\Node\\Expr\\Error' => '/nikic-php-parser/PhpParser/Node/Expr/Error.php', @@ -2255,6 +2370,7 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\PhpParser\\Node\\Expr\\Yield_' => '/nikic-php-parser/PhpParser/Node/Expr/Yield_.php', 'PHPUnit\\PhpParser\\Node\\FunctionLike' => '/nikic-php-parser/PhpParser/Node/FunctionLike.php', 'PHPUnit\\PhpParser\\Node\\Identifier' => '/nikic-php-parser/PhpParser/Node/Identifier.php', + 'PHPUnit\\PhpParser\\Node\\InterpolatedStringPart' => '/nikic-php-parser/PhpParser/Node/InterpolatedStringPart.php', 'PHPUnit\\PhpParser\\Node\\IntersectionType' => '/nikic-php-parser/PhpParser/Node/IntersectionType.php', 'PHPUnit\\PhpParser\\Node\\MatchArm' => '/nikic-php-parser/PhpParser/Node/MatchArm.php', 'PHPUnit\\PhpParser\\Node\\Name' => '/nikic-php-parser/PhpParser/Node/Name.php', @@ -2262,11 +2378,11 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\PhpParser\\Node\\Name\\Relative' => '/nikic-php-parser/PhpParser/Node/Name/Relative.php', 'PHPUnit\\PhpParser\\Node\\NullableType' => '/nikic-php-parser/PhpParser/Node/NullableType.php', 'PHPUnit\\PhpParser\\Node\\Param' => '/nikic-php-parser/PhpParser/Node/Param.php', + 'PHPUnit\\PhpParser\\Node\\PropertyItem' => '/nikic-php-parser/PhpParser/Node/PropertyItem.php', 'PHPUnit\\PhpParser\\Node\\Scalar' => '/nikic-php-parser/PhpParser/Node/Scalar.php', - 'PHPUnit\\PhpParser\\Node\\Scalar\\DNumber' => '/nikic-php-parser/PhpParser/Node/Scalar/DNumber.php', - 'PHPUnit\\PhpParser\\Node\\Scalar\\Encapsed' => '/nikic-php-parser/PhpParser/Node/Scalar/Encapsed.php', - 'PHPUnit\\PhpParser\\Node\\Scalar\\EncapsedStringPart' => '/nikic-php-parser/PhpParser/Node/Scalar/EncapsedStringPart.php', - 'PHPUnit\\PhpParser\\Node\\Scalar\\LNumber' => '/nikic-php-parser/PhpParser/Node/Scalar/LNumber.php', + 'PHPUnit\\PhpParser\\Node\\Scalar\\Float_' => '/nikic-php-parser/PhpParser/Node/Scalar/Float_.php', + 'PHPUnit\\PhpParser\\Node\\Scalar\\Int_' => '/nikic-php-parser/PhpParser/Node/Scalar/Int_.php', + 'PHPUnit\\PhpParser\\Node\\Scalar\\InterpolatedString' => '/nikic-php-parser/PhpParser/Node/Scalar/InterpolatedString.php', 'PHPUnit\\PhpParser\\Node\\Scalar\\MagicConst' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst.php', 'PHPUnit\\PhpParser\\Node\\Scalar\\MagicConst\\Class_' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Class_.php', 'PHPUnit\\PhpParser\\Node\\Scalar\\MagicConst\\Dir' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Dir.php', @@ -2277,7 +2393,9 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\PhpParser\\Node\\Scalar\\MagicConst\\Namespace_' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Namespace_.php', 'PHPUnit\\PhpParser\\Node\\Scalar\\MagicConst\\Trait_' => '/nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Trait_.php', 'PHPUnit\\PhpParser\\Node\\Scalar\\String_' => '/nikic-php-parser/PhpParser/Node/Scalar/String_.php', + 'PHPUnit\\PhpParser\\Node\\StaticVar' => '/nikic-php-parser/PhpParser/Node/StaticVar.php', 'PHPUnit\\PhpParser\\Node\\Stmt' => '/nikic-php-parser/PhpParser/Node/Stmt.php', + 'PHPUnit\\PhpParser\\Node\\Stmt\\Block' => '/nikic-php-parser/PhpParser/Node/Stmt/Block.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Break_' => '/nikic-php-parser/PhpParser/Node/Stmt/Break_.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Case_' => '/nikic-php-parser/PhpParser/Node/Stmt/Case_.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Catch_' => '/nikic-php-parser/PhpParser/Node/Stmt/Catch_.php', @@ -2287,7 +2405,6 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\PhpParser\\Node\\Stmt\\Class_' => '/nikic-php-parser/PhpParser/Node/Stmt/Class_.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Const_' => '/nikic-php-parser/PhpParser/Node/Stmt/Const_.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Continue_' => '/nikic-php-parser/PhpParser/Node/Stmt/Continue_.php', - 'PHPUnit\\PhpParser\\Node\\Stmt\\DeclareDeclare' => '/nikic-php-parser/PhpParser/Node/Stmt/DeclareDeclare.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Declare_' => '/nikic-php-parser/PhpParser/Node/Stmt/Declare_.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Do_' => '/nikic-php-parser/PhpParser/Node/Stmt/Do_.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Echo_' => '/nikic-php-parser/PhpParser/Node/Stmt/Echo_.php', @@ -2311,12 +2428,9 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\PhpParser\\Node\\Stmt\\Namespace_' => '/nikic-php-parser/PhpParser/Node/Stmt/Namespace_.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Nop' => '/nikic-php-parser/PhpParser/Node/Stmt/Nop.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Property' => '/nikic-php-parser/PhpParser/Node/Stmt/Property.php', - 'PHPUnit\\PhpParser\\Node\\Stmt\\PropertyProperty' => '/nikic-php-parser/PhpParser/Node/Stmt/PropertyProperty.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Return_' => '/nikic-php-parser/PhpParser/Node/Stmt/Return_.php', - 'PHPUnit\\PhpParser\\Node\\Stmt\\StaticVar' => '/nikic-php-parser/PhpParser/Node/Stmt/StaticVar.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Static_' => '/nikic-php-parser/PhpParser/Node/Stmt/Static_.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Switch_' => '/nikic-php-parser/PhpParser/Node/Stmt/Switch_.php', - 'PHPUnit\\PhpParser\\Node\\Stmt\\Throw_' => '/nikic-php-parser/PhpParser/Node/Stmt/Throw_.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\TraitUse' => '/nikic-php-parser/PhpParser/Node/Stmt/TraitUse.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\TraitUseAdaptation' => '/nikic-php-parser/PhpParser/Node/Stmt/TraitUseAdaptation.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\TraitUseAdaptation\\Alias' => '/nikic-php-parser/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php', @@ -2324,28 +2438,44 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\PhpParser\\Node\\Stmt\\Trait_' => '/nikic-php-parser/PhpParser/Node/Stmt/Trait_.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\TryCatch' => '/nikic-php-parser/PhpParser/Node/Stmt/TryCatch.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Unset_' => '/nikic-php-parser/PhpParser/Node/Stmt/Unset_.php', - 'PHPUnit\\PhpParser\\Node\\Stmt\\UseUse' => '/nikic-php-parser/PhpParser/Node/Stmt/UseUse.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\Use_' => '/nikic-php-parser/PhpParser/Node/Stmt/Use_.php', 'PHPUnit\\PhpParser\\Node\\Stmt\\While_' => '/nikic-php-parser/PhpParser/Node/Stmt/While_.php', 'PHPUnit\\PhpParser\\Node\\UnionType' => '/nikic-php-parser/PhpParser/Node/UnionType.php', + 'PHPUnit\\PhpParser\\Node\\UseItem' => '/nikic-php-parser/PhpParser/Node/UseItem.php', 'PHPUnit\\PhpParser\\Node\\VarLikeIdentifier' => '/nikic-php-parser/PhpParser/Node/VarLikeIdentifier.php', 'PHPUnit\\PhpParser\\Node\\VariadicPlaceholder' => '/nikic-php-parser/PhpParser/Node/VariadicPlaceholder.php', 'PHPUnit\\PhpParser\\Parser' => '/nikic-php-parser/PhpParser/Parser.php', 'PHPUnit\\PhpParser\\ParserAbstract' => '/nikic-php-parser/PhpParser/ParserAbstract.php', 'PHPUnit\\PhpParser\\ParserFactory' => '/nikic-php-parser/PhpParser/ParserFactory.php', - 'PHPUnit\\PhpParser\\Parser\\Multiple' => '/nikic-php-parser/PhpParser/Parser/Multiple.php', - 'PHPUnit\\PhpParser\\Parser\\Php5' => '/nikic-php-parser/PhpParser/Parser/Php5.php', 'PHPUnit\\PhpParser\\Parser\\Php7' => '/nikic-php-parser/PhpParser/Parser/Php7.php', - 'PHPUnit\\PhpParser\\Parser\\Tokens' => '/nikic-php-parser/PhpParser/Parser/Tokens.php', + 'PHPUnit\\PhpParser\\Parser\\Php8' => '/nikic-php-parser/PhpParser/Parser/Php8.php', + 'PHPUnit\\PhpParser\\PhpVersion' => '/nikic-php-parser/PhpParser/PhpVersion.php', + 'PHPUnit\\PhpParser\\PrettyPrinter' => '/nikic-php-parser/PhpParser/PrettyPrinter.php', 'PHPUnit\\PhpParser\\PrettyPrinterAbstract' => '/nikic-php-parser/PhpParser/PrettyPrinterAbstract.php', 'PHPUnit\\PhpParser\\PrettyPrinter\\Standard' => '/nikic-php-parser/PhpParser/PrettyPrinter/Standard.php', + 'PHPUnit\\PhpParser\\Token' => '/nikic-php-parser/PhpParser/Token.php', + 'PHPUnit\\Runner\\Baseline\\Baseline' => '/phpunit/Runner/Baseline/Baseline.php', + 'PHPUnit\\Runner\\Baseline\\CannotLoadBaselineException' => '/phpunit/Runner/Baseline/Exception/CannotLoadBaselineException.php', + 'PHPUnit\\Runner\\Baseline\\FileDoesNotHaveLineException' => '/phpunit/Runner/Baseline/Exception/FileDoesNotHaveLineException.php', + 'PHPUnit\\Runner\\Baseline\\Generator' => '/phpunit/Runner/Baseline/Generator.php', + 'PHPUnit\\Runner\\Baseline\\Issue' => '/phpunit/Runner/Baseline/Issue.php', + 'PHPUnit\\Runner\\Baseline\\Reader' => '/phpunit/Runner/Baseline/Reader.php', + 'PHPUnit\\Runner\\Baseline\\RelativePathCalculator' => '/phpunit/Runner/Baseline/RelativePathCalculator.php', + 'PHPUnit\\Runner\\Baseline\\Subscriber' => '/phpunit/Runner/Baseline/Subscriber/Subscriber.php', + 'PHPUnit\\Runner\\Baseline\\TestTriggeredDeprecationSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredDeprecationSubscriber.php', + 'PHPUnit\\Runner\\Baseline\\TestTriggeredNoticeSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredNoticeSubscriber.php', + 'PHPUnit\\Runner\\Baseline\\TestTriggeredPhpDeprecationSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredPhpDeprecationSubscriber.php', + 'PHPUnit\\Runner\\Baseline\\TestTriggeredPhpNoticeSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredPhpNoticeSubscriber.php', + 'PHPUnit\\Runner\\Baseline\\TestTriggeredPhpWarningSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredPhpWarningSubscriber.php', + 'PHPUnit\\Runner\\Baseline\\TestTriggeredWarningSubscriber' => '/phpunit/Runner/Baseline/Subscriber/TestTriggeredWarningSubscriber.php', + 'PHPUnit\\Runner\\Baseline\\Writer' => '/phpunit/Runner/Baseline/Writer.php', 'PHPUnit\\Runner\\ClassCannotBeFoundException' => '/phpunit/Runner/Exception/ClassCannotBeFoundException.php', - 'PHPUnit\\Runner\\ClassCannotBeInstantiatedException' => '/phpunit/Runner/Exception/ClassCannotBeInstantiatedException.php', - 'PHPUnit\\Runner\\ClassDoesNotExistException' => '/phpunit/Runner/Exception/ClassDoesNotExistException.php', - 'PHPUnit\\Runner\\ClassDoesNotImplementExtensionInterfaceException' => '/phpunit/Runner/Exception/ClassDoesNotImplementExtensionInterfaceException.php', + 'PHPUnit\\Runner\\ClassDoesNotExtendTestCaseException' => '/phpunit/Runner/Exception/ClassDoesNotExtendTestCaseException.php', 'PHPUnit\\Runner\\ClassIsAbstractException' => '/phpunit/Runner/Exception/ClassIsAbstractException.php', 'PHPUnit\\Runner\\CodeCoverage' => '/phpunit/Runner/CodeCoverage.php', 'PHPUnit\\Runner\\DirectoryCannotBeCreatedException' => '/phpunit/Runner/Exception/DirectoryCannotBeCreatedException.php', + 'PHPUnit\\Runner\\ErrorException' => '/phpunit/Runner/Exception/ErrorException.php', + 'PHPUnit\\Runner\\ErrorHandler' => '/phpunit/Runner/ErrorHandler.php', 'PHPUnit\\Runner\\Exception' => '/phpunit/Runner/Exception/Exception.php', 'PHPUnit\\Runner\\Extension\\Extension' => '/phpunit/Runner/Extension/Extension.php', 'PHPUnit\\Runner\\Extension\\ExtensionBootstrapper' => '/phpunit/Runner/Extension/ExtensionBootstrapper.php', @@ -2358,6 +2488,12 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Runner\\Filter\\GroupFilterIterator' => '/phpunit/Runner/Filter/GroupFilterIterator.php', 'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator' => '/phpunit/Runner/Filter/IncludeGroupFilterIterator.php', 'PHPUnit\\Runner\\Filter\\NameFilterIterator' => '/phpunit/Runner/Filter/NameFilterIterator.php', + 'PHPUnit\\Runner\\Filter\\TestIdFilterIterator' => '/phpunit/Runner/Filter/TestIdFilterIterator.php', + 'PHPUnit\\Runner\\GarbageCollection\\ExecutionFinishedSubscriber' => '/phpunit/Runner/GarbageCollection/Subscriber/ExecutionFinishedSubscriber.php', + 'PHPUnit\\Runner\\GarbageCollection\\ExecutionStartedSubscriber' => '/phpunit/Runner/GarbageCollection/Subscriber/ExecutionStartedSubscriber.php', + 'PHPUnit\\Runner\\GarbageCollection\\GarbageCollectionHandler' => '/phpunit/Runner/GarbageCollection/GarbageCollectionHandler.php', + 'PHPUnit\\Runner\\GarbageCollection\\Subscriber' => '/phpunit/Runner/GarbageCollection/Subscriber/Subscriber.php', + 'PHPUnit\\Runner\\GarbageCollection\\TestFinishedSubscriber' => '/phpunit/Runner/GarbageCollection/Subscriber/TestFinishedSubscriber.php', 'PHPUnit\\Runner\\InvalidOrderException' => '/phpunit/Runner/Exception/InvalidOrderException.php', 'PHPUnit\\Runner\\InvalidPhptFileException' => '/phpunit/Runner/Exception/InvalidPhptFileException.php', 'PHPUnit\\Runner\\NoIgnoredEventException' => '/phpunit/Runner/Exception/NoIgnoredEventException.php', @@ -2404,6 +2540,7 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\SebastianBergmann\\CodeCoverage\\Driver\\XdebugNotAvailableException' => '/php-code-coverage/Exception/XdebugNotAvailableException.php', 'PHPUnit\\SebastianBergmann\\CodeCoverage\\Driver\\XdebugNotEnabledException' => '/php-code-coverage/Exception/XdebugNotEnabledException.php', 'PHPUnit\\SebastianBergmann\\CodeCoverage\\Exception' => '/php-code-coverage/Exception/Exception.php', + 'PHPUnit\\SebastianBergmann\\CodeCoverage\\FileCouldNotBeWrittenException' => '/php-code-coverage/Exception/FileCouldNotBeWrittenException.php', 'PHPUnit\\SebastianBergmann\\CodeCoverage\\Filter' => '/php-code-coverage/Filter.php', 'PHPUnit\\SebastianBergmann\\CodeCoverage\\InvalidArgumentException' => '/php-code-coverage/Exception/InvalidArgumentException.php', 'PHPUnit\\SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverAvailableException' => '/php-code-coverage/Exception/NoCodeCoverageDriverAvailableException.php', @@ -2589,6 +2726,7 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\TestRunner\\TestResult\\Collector' => '/phpunit/Runner/TestResult/Collector.php', 'PHPUnit\\TestRunner\\TestResult\\ExecutionStartedSubscriber' => '/phpunit/Runner/TestResult/Subscriber/ExecutionStartedSubscriber.php', 'PHPUnit\\TestRunner\\TestResult\\Facade' => '/phpunit/Runner/TestResult/Facade.php', + 'PHPUnit\\TestRunner\\TestResult\\Issues\\Issue' => '/phpunit/Runner/TestResult/Issue.php', 'PHPUnit\\TestRunner\\TestResult\\PassedTests' => '/phpunit/Runner/TestResult/PassedTests.php', 'PHPUnit\\TestRunner\\TestResult\\Subscriber' => '/phpunit/Runner/TestResult/Subscriber/Subscriber.php', 'PHPUnit\\TestRunner\\TestResult\\TestConsideredRiskySubscriber' => '/phpunit/Runner/TestResult/Subscriber/TestConsideredRiskySubscriber.php', @@ -2663,6 +2801,7 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\TextUI\\Configuration\\IniSettingCollectionIterator' => '/phpunit/TextUI/Configuration/Value/IniSettingCollectionIterator.php', 'PHPUnit\\TextUI\\Configuration\\LoggingNotConfiguredException' => '/phpunit/TextUI/Configuration/Exception/LoggingNotConfiguredException.php', 'PHPUnit\\TextUI\\Configuration\\Merger' => '/phpunit/TextUI/Configuration/Merger.php', + 'PHPUnit\\TextUI\\Configuration\\NoBaselineException' => '/phpunit/TextUI/Configuration/Exception/NoBaselineException.php', 'PHPUnit\\TextUI\\Configuration\\NoBootstrapException' => '/phpunit/TextUI/Configuration/Exception/NoBootstrapException.php', 'PHPUnit\\TextUI\\Configuration\\NoCacheDirectoryException' => '/phpunit/TextUI/Configuration/Exception/NoCacheDirectoryException.php', 'PHPUnit\\TextUI\\Configuration\\NoCliArgumentException' => '/phpunit/TextUI/Configuration/Exception/NoCliArgumentException.php', @@ -2674,6 +2813,9 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\TextUI\\Configuration\\Php' => '/phpunit/TextUI/Configuration/Value/Php.php', 'PHPUnit\\TextUI\\Configuration\\PhpHandler' => '/phpunit/TextUI/Configuration/PhpHandler.php', 'PHPUnit\\TextUI\\Configuration\\Registry' => '/phpunit/TextUI/Configuration/Registry.php', + 'PHPUnit\\TextUI\\Configuration\\Source' => '/phpunit/TextUI/Configuration/Value/Source.php', + 'PHPUnit\\TextUI\\Configuration\\SourceFilter' => '/phpunit/TextUI/Configuration/SourceFilter.php', + 'PHPUnit\\TextUI\\Configuration\\SourceMapper' => '/phpunit/TextUI/Configuration/SourceMapper.php', 'PHPUnit\\TextUI\\Configuration\\TestDirectory' => '/phpunit/TextUI/Configuration/Value/TestDirectory.php', 'PHPUnit\\TextUI\\Configuration\\TestDirectoryCollection' => '/phpunit/TextUI/Configuration/Value/TestDirectoryCollection.php', 'PHPUnit\\TextUI\\Configuration\\TestDirectoryCollectionIterator' => '/phpunit/TextUI/Configuration/Value/TestDirectoryCollectionIterator.php', @@ -2687,9 +2829,11 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\TextUI\\Configuration\\Variable' => '/phpunit/TextUI/Configuration/Value/Variable.php', 'PHPUnit\\TextUI\\Configuration\\VariableCollection' => '/phpunit/TextUI/Configuration/Value/VariableCollection.php', 'PHPUnit\\TextUI\\Configuration\\VariableCollectionIterator' => '/phpunit/TextUI/Configuration/Value/VariableCollectionIterator.php', + 'PHPUnit\\TextUI\\DirectoryDoesNotExistException' => '/phpunit/TextUI/Exception/DirectoryDoesNotExistException.php', 'PHPUnit\\TextUI\\Exception' => '/phpunit/TextUI/Exception/Exception.php', 'PHPUnit\\TextUI\\ExtensionsNotConfiguredException' => '/phpunit/TextUI/Exception/ExtensionsNotConfiguredException.php', 'PHPUnit\\TextUI\\Help' => '/phpunit/TextUI/Help.php', + 'PHPUnit\\TextUI\\InvalidSocketException' => '/phpunit/TextUI/Exception/InvalidSocketException.php', 'PHPUnit\\TextUI\\Output\\DefaultPrinter' => '/phpunit/TextUI/Output/Printer/DefaultPrinter.php', 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\BeforeTestClassMethodErroredSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/BeforeTestClassMethodErroredSubscriber.php', 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\ProgressPrinter' => '/phpunit/TextUI/Output/Default/ProgressPrinter/ProgressPrinter.php', @@ -2700,10 +2844,10 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestFinishedSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestFinishedSubscriber.php', 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestMarkedIncompleteSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestMarkedIncompleteSubscriber.php', 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestPreparedSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestPreparedSubscriber.php', - 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestPrintedUnexpectedOutputSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestPrintedUnexpectedOutputSubscriber.php', 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestRunnerExecutionStartedSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestRunnerExecutionStartedSubscriber.php', 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestSkippedSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestSkippedSubscriber.php', 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredDeprecationSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredDeprecationSubscriber.php', + 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredErrorSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredErrorSubscriber.php', 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredNoticeSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredNoticeSubscriber.php', 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpDeprecationSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpDeprecationSubscriber.php', 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpNoticeSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpNoticeSubscriber.php', @@ -2712,6 +2856,7 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredPhpunitWarningSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpunitWarningSubscriber.php', 'PHPUnit\\TextUI\\Output\\Default\\ProgressPrinter\\TestTriggeredWarningSubscriber' => '/phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredWarningSubscriber.php', 'PHPUnit\\TextUI\\Output\\Default\\ResultPrinter' => '/phpunit/TextUI/Output/Default/ResultPrinter.php', + 'PHPUnit\\TextUI\\Output\\Default\\UnexpectedOutputPrinter' => '/phpunit/TextUI/Output/Default/UnexpectedOutputPrinter.php', 'PHPUnit\\TextUI\\Output\\Facade' => '/phpunit/TextUI/Output/Facade.php', 'PHPUnit\\TextUI\\Output\\NullPrinter' => '/phpunit/TextUI/Output/Printer/NullPrinter.php', 'PHPUnit\\TextUI\\Output\\Printer' => '/phpunit/TextUI/Output/Printer/Printer.php', @@ -2724,6 +2869,7 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\TextUI\\TestFileNotFoundException' => '/phpunit/TextUI/Exception/TestFileNotFoundException.php', 'PHPUnit\\TextUI\\TestRunner' => '/phpunit/TextUI/TestRunner.php', 'PHPUnit\\TextUI\\TestSuiteFilterProcessor' => '/phpunit/TextUI/TestSuiteFilterProcessor.php', + 'PHPUnit\\TextUI\\XmlConfiguration\\CannotFindSchemaException' => '/phpunit/TextUI/Configuration/Exception/CannotFindSchemaException.php', 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\CodeCoverage' => '/phpunit/TextUI/Configuration/Xml/CodeCoverage/CodeCoverage.php', 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Clover' => '/phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Clover.php', 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Cobertura' => '/phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Cobertura.php', @@ -2742,6 +2888,7 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageXmlToReport' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageXmlToReport.php', 'PHPUnit\\TextUI\\XmlConfiguration\\DefaultConfiguration' => '/phpunit/TextUI/Configuration/Xml/DefaultConfiguration.php', 'PHPUnit\\TextUI\\XmlConfiguration\\Exception' => '/phpunit/TextUI/Configuration/Xml/Exception.php', + 'PHPUnit\\TextUI\\XmlConfiguration\\FailedSchemaDetectionResult' => '/phpunit/TextUI/Configuration/Xml/SchemaDetector/FailedSchemaDetectionResult.php', 'PHPUnit\\TextUI\\XmlConfiguration\\Generator' => '/phpunit/TextUI/Configuration/Xml/Generator.php', 'PHPUnit\\TextUI\\XmlConfiguration\\Groups' => '/phpunit/TextUI/Configuration/Xml/Groups.php', 'PHPUnit\\TextUI\\XmlConfiguration\\IntroduceCacheDirectoryAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/IntroduceCacheDirectoryAttribute.php', @@ -2761,8 +2908,9 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\TextUI\\XmlConfiguration\\Migrator' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrator.php', 'PHPUnit\\TextUI\\XmlConfiguration\\MoveAttributesFromFilterWhitelistToCoverage' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveAttributesFromFilterWhitelistToCoverage.php', 'PHPUnit\\TextUI\\XmlConfiguration\\MoveAttributesFromRootToCoverage' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveAttributesFromRootToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveWhitelistDirectoriesToCoverage' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveWhitelistDirectoriesToCoverage.php', + 'PHPUnit\\TextUI\\XmlConfiguration\\MoveCoverageDirectoriesToSource' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveCoverageDirectoriesToSource.php', 'PHPUnit\\TextUI\\XmlConfiguration\\MoveWhitelistExcludesToCoverage' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveWhitelistExcludesToCoverage.php', + 'PHPUnit\\TextUI\\XmlConfiguration\\MoveWhitelistIncludesToCoverage' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveWhitelistIncludesToCoverage.php', 'PHPUnit\\TextUI\\XmlConfiguration\\PHPUnit' => '/phpunit/TextUI/Configuration/Xml/PHPUnit.php', 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveBeStrictAboutResourceUsageDuringSmallTestsAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveBeStrictAboutResourceUsageDuringSmallTestsAttribute.php', 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveBeStrictAboutTodoAnnotatedTestsAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveBeStrictAboutTodoAnnotatedTestsAttribute.php', @@ -2783,8 +2931,15 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\TextUI\\XmlConfiguration\\RenameBackupStaticAttributesAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameBackupStaticAttributesAttribute.php', 'PHPUnit\\TextUI\\XmlConfiguration\\RenameBeStrictAboutCoversAnnotationAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameBeStrictAboutCoversAnnotationAttribute.php', 'PHPUnit\\TextUI\\XmlConfiguration\\RenameForceCoversAnnotationAttribute' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameForceCoversAnnotationAttribute.php', + 'PHPUnit\\TextUI\\XmlConfiguration\\SchemaDetectionResult' => '/phpunit/TextUI/Configuration/Xml/SchemaDetector/SchemaDetectionResult.php', + 'PHPUnit\\TextUI\\XmlConfiguration\\SchemaDetector' => '/phpunit/TextUI/Configuration/Xml/SchemaDetector/SchemaDetector.php', + 'PHPUnit\\TextUI\\XmlConfiguration\\SchemaFinder' => '/phpunit/TextUI/Configuration/Xml/SchemaFinder.php', + 'PHPUnit\\TextUI\\XmlConfiguration\\SnapshotNodeList' => '/phpunit/TextUI/Configuration/Xml/Migration/SnapshotNodeList.php', + 'PHPUnit\\TextUI\\XmlConfiguration\\SuccessfulSchemaDetectionResult' => '/phpunit/TextUI/Configuration/Xml/SchemaDetector/SuccessfulSchemaDetectionResult.php', 'PHPUnit\\TextUI\\XmlConfiguration\\TestSuiteMapper' => '/phpunit/TextUI/Configuration/Xml/TestSuiteMapper.php', 'PHPUnit\\TextUI\\XmlConfiguration\\UpdateSchemaLocation' => '/phpunit/TextUI/Configuration/Xml/Migration/Migrations/UpdateSchemaLocation.php', + 'PHPUnit\\TextUI\\XmlConfiguration\\ValidationResult' => '/phpunit/TextUI/Configuration/Xml/Validator/ValidationResult.php', + 'PHPUnit\\TextUI\\XmlConfiguration\\Validator' => '/phpunit/TextUI/Configuration/Xml/Validator/Validator.php', 'PHPUnit\\TheSeer\\Tokenizer\\Exception' => '/theseer-tokenizer/Exception.php', 'PHPUnit\\TheSeer\\Tokenizer\\NamespaceUri' => '/theseer-tokenizer/NamespaceUri.php', 'PHPUnit\\TheSeer\\Tokenizer\\NamespaceUriException' => '/theseer-tokenizer/NamespaceUriException.php', @@ -2795,19 +2950,16 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\TheSeer\\Tokenizer\\XMLSerializer' => '/theseer-tokenizer/XMLSerializer.php', 'PHPUnit\\Util\\Cloner' => '/phpunit/Util/Cloner.php', 'PHPUnit\\Util\\Color' => '/phpunit/Util/Color.php', - 'PHPUnit\\Util\\DirectoryDoesNotExistException' => '/phpunit/Util/Exception/DirectoryDoesNotExistException.php', - 'PHPUnit\\Util\\ErrorHandler' => '/phpunit/Util/ErrorHandler.php', 'PHPUnit\\Util\\Exception' => '/phpunit/Util/Exception/Exception.php', 'PHPUnit\\Util\\ExcludeList' => '/phpunit/Util/ExcludeList.php', + 'PHPUnit\\Util\\Exporter' => '/phpunit/Util/Exporter.php', 'PHPUnit\\Util\\Filesystem' => '/phpunit/Util/Filesystem.php', 'PHPUnit\\Util\\Filter' => '/phpunit/Util/Filter.php', 'PHPUnit\\Util\\GlobalState' => '/phpunit/Util/GlobalState.php', 'PHPUnit\\Util\\InvalidDirectoryException' => '/phpunit/Util/Exception/InvalidDirectoryException.php', 'PHPUnit\\Util\\InvalidJsonException' => '/phpunit/Util/Exception/InvalidJsonException.php', - 'PHPUnit\\Util\\InvalidSocketException' => '/phpunit/Util/Exception/InvalidSocketException.php', 'PHPUnit\\Util\\InvalidVersionOperatorException' => '/phpunit/Util/Exception/InvalidVersionOperatorException.php', 'PHPUnit\\Util\\Json' => '/phpunit/Util/Json.php', - 'PHPUnit\\Util\\NoTestCaseObjectOnCallStackException' => '/phpunit/Util/Exception/NoTestCaseObjectOnCallStackException.php', 'PHPUnit\\Util\\PHP\\AbstractPhpProcess' => '/phpunit/Util/PHP/AbstractPhpProcess.php', 'PHPUnit\\Util\\PHP\\DefaultPhpProcess' => '/phpunit/Util/PHP/DefaultPhpProcess.php', 'PHPUnit\\Util\\PHP\\PhpProcessException' => '/phpunit/Util/Exception/PhpProcessException.php', @@ -2816,24 +2968,21 @@ foreach (['PHPUnit\\DeepCopy\\DeepCopy' => '/myclabs-deep-copy/DeepCopy/DeepCopy 'PHPUnit\\Util\\Test' => '/phpunit/Util/Test.php', 'PHPUnit\\Util\\ThrowableToStringMapper' => '/phpunit/Util/ThrowableToStringMapper.php', 'PHPUnit\\Util\\VersionComparisonOperator' => '/phpunit/Util/VersionComparisonOperator.php', - 'PHPUnit\\Util\\Xml' => '/phpunit/Util/Xml.php', - 'PHPUnit\\Util\\Xml\\Exception' => '/phpunit/Util/Xml/Exception.php', - 'PHPUnit\\Util\\Xml\\FailedSchemaDetectionResult' => '/phpunit/Util/Xml/FailedSchemaDetectionResult.php', + 'PHPUnit\\Util\\Xml' => '/phpunit/Util/Xml/Xml.php', 'PHPUnit\\Util\\Xml\\Loader' => '/phpunit/Util/Xml/Loader.php', - 'PHPUnit\\Util\\Xml\\SchemaDetectionResult' => '/phpunit/Util/Xml/SchemaDetectionResult.php', - 'PHPUnit\\Util\\Xml\\SchemaDetector' => '/phpunit/Util/Xml/SchemaDetector.php', - 'PHPUnit\\Util\\Xml\\SchemaFinder' => '/phpunit/Util/Xml/SchemaFinder.php', - 'PHPUnit\\Util\\Xml\\SnapshotNodeList' => '/phpunit/Util/Xml/SnapshotNodeList.php', - 'PHPUnit\\Util\\Xml\\SuccessfulSchemaDetectionResult' => '/phpunit/Util/Xml/SuccessfulSchemaDetectionResult.php', - 'PHPUnit\\Util\\Xml\\ValidationResult' => '/phpunit/Util/Xml/ValidationResult.php', - 'PHPUnit\\Util\\Xml\\Validator' => '/phpunit/Util/Xml/Validator.php', 'PHPUnit\\Util\\Xml\\XmlException' => '/phpunit/Util/Exception/XmlException.php'] as $file) { - require_once 'phar://phpunit-10.0.16.phar' . $file; + require_once 'phar://phpunit-10.5.8.phar' . $file; } require __PHPUNIT_PHAR_ROOT__ . '/phpunit/Framework/Assert/Functions.php'; if ($execute) { + if (isset($printComposerLock)) { + print file_get_contents(__PHPUNIT_PHAR_ROOT__ . '/composer.lock'); + + exit; + } + if (isset($printManifest)) { print file_get_contents(__PHPUNIT_PHAR_ROOT__ . '/manifest.txt'); @@ -2852,114 +3001,1665 @@ if ($execute) { } __HALT_COMPILER(); ?> -yphpunit-10.0.16.phar manifest.txtdcW'myclabs-deep-copy/DeepCopy/DeepCopy.phpdLä7myclabs-deep-copy/DeepCopy/Exception/CloneException.phpd {ˤ:myclabs-deep-copy/DeepCopy/Exception/PropertyException.phpd3Gz5myclabs-deep-copy/DeepCopy/Filter/ChainableFilter.phpdTE Gmyclabs-deep-copy/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php -d -DgLmyclabs-deep-copy/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.phpd)$Bmyclabs-deep-copy/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.phpd),myclabs-deep-copy/DeepCopy/Filter/Filter.phpdddM0myclabs-deep-copy/DeepCopy/Filter/KeepFilter.phpdYn3myclabs-deep-copy/DeepCopy/Filter/ReplaceFilter.phpd3myclabs-deep-copy/DeepCopy/Filter/SetNullFilter.phpd䊉Dmyclabs-deep-copy/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.phpdpr.myclabs-deep-copy/DeepCopy/Matcher/Matcher.phpd6myclabs-deep-copy/DeepCopy/Matcher/PropertyMatcher.phpd=Bv:myclabs-deep-copy/DeepCopy/Matcher/PropertyNameMatcher.phpdR:myclabs-deep-copy/DeepCopy/Matcher/PropertyTypeMatcher.php2d2ZQͤ:myclabs-deep-copy/DeepCopy/Reflection/ReflectionHelper.php5d5ىAmyclabs-deep-copy/DeepCopy/TypeFilter/Date/DateIntervalFilter.phpdƤ7myclabs-deep-copy/DeepCopy/TypeFilter/ReplaceFilter.phpdz;myclabs-deep-copy/DeepCopy/TypeFilter/ShallowCopyFilter.phpdؤ?myclabs-deep-copy/DeepCopy/TypeFilter/Spl/ArrayObjectFilter.phpd^Amyclabs-deep-copy/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.phpdv|Gmyclabs-deep-copy/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.phpdT+4myclabs-deep-copy/DeepCopy/TypeFilter/TypeFilter.phpdVD6myclabs-deep-copy/DeepCopy/TypeMatcher/TypeMatcher.phpdQBŤ(myclabs-deep-copy/DeepCopy/deep_copy.phpdrxmyclabs-deep-copy/LICENSE5d5ʭ˄nikic-php-parser/LICENSEd*&nikic-php-parser/PhpParser/Builder.phpd61nikic-php-parser/PhpParser/Builder/ClassConst.phpm dm z-nikic-php-parser/PhpParser/Builder/Class_.phpdc32nikic-php-parser/PhpParser/Builder/Declaration.phpdE7/nikic-php-parser/PhpParser/Builder/EnumCase.php^d^ueT,nikic-php-parser/PhpParser/Builder/Enum_.php d #3nikic-php-parser/PhpParser/Builder/FunctionLike.phpdZqe0nikic-php-parser/PhpParser/Builder/Function_.phpFdFux1nikic-php-parser/PhpParser/Builder/Interface_.php d -nikic-php-parser/PhpParser/Builder/Method.phpd}1nikic-php-parser/PhpParser/Builder/Namespace_.php:d:ˆp,nikic-php-parser/PhpParser/Builder/Param.php d ֤/nikic-php-parser/PhpParser/Builder/Property.php|d|O /nikic-php-parser/PhpParser/Builder/TraitUse.phpWdWL@9nikic-php-parser/PhpParser/Builder/TraitUseAdaptation.phpdUVx-nikic-php-parser/PhpParser/Builder/Trait_.phpdkj+nikic-php-parser/PhpParser/Builder/Use_.phpds-nikic-php-parser/PhpParser/BuilderFactory.php+d+޶-nikic-php-parser/PhpParser/BuilderHelpers.php$d$:@&nikic-php-parser/PhpParser/Comment.phpdA*nikic-php-parser/PhpParser/Comment/Doc.phpxdxp;nikic-php-parser/PhpParser/ConstExprEvaluationException.php_d_I 1nikic-php-parser/PhpParser/ConstExprEvaluator.phpl%dl%evQ$nikic-php-parser/PhpParser/Error.phpdQZ+nikic-php-parser/PhpParser/ErrorHandler.php/d/#\6nikic-php-parser/PhpParser/ErrorHandler/Collecting.phpd&Ȥ4nikic-php-parser/PhpParser/ErrorHandler/Throwing.phpdS}<0nikic-php-parser/PhpParser/Internal/DiffElem.php7d7$.nikic-php-parser/PhpParser/Internal/Differ.php-d-^Anikic-php-parser/PhpParser/Internal/PrintableNewAnonClassNode.php$d$'c3nikic-php-parser/PhpParser/Internal/TokenStream.php#d#f*nikic-php-parser/PhpParser/JsonDecoder.php d xg$nikic-php-parser/PhpParser/Lexer.phpyZdyZq⃤.nikic-php-parser/PhpParser/Lexer/Emulative.phpO#dO#ܲݤDnikic-php-parser/PhpParser/Lexer/TokenEmulator/AttributeEmulator.phpdrLnikic-php-parser/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php d *§oDnikic-php-parser/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.phpdLFHnikic-php-parser/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.phpd*#Lnikic-php-parser/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.phpn dn 1Bnikic-php-parser/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.phpdjBnikic-php-parser/PhpParser/Lexer/TokenEmulator/KeywordEmulator.phpd`atEnikic-php-parser/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.phpdc/Hnikic-php-parser/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.phpd:&ERnikic-php-parser/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.phpVdVPnikic-php-parser/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.phpde!ćHnikic-php-parser/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.phpLdL -`9JBnikic-php-parser/PhpParser/Lexer/TokenEmulator/ReverseEmulator.phpdI}@nikic-php-parser/PhpParser/Lexer/TokenEmulator/TokenEmulator.phpuduD4h*nikic-php-parser/PhpParser/NameContext.php%d%G-#nikic-php-parser/PhpParser/Node.phpdyݗ'nikic-php-parser/PhpParser/Node/Arg.php0d0q H-nikic-php-parser/PhpParser/Node/Attribute.phpHdHhqK2nikic-php-parser/PhpParser/Node/AttributeGroup.phpdB9/nikic-php-parser/PhpParser/Node/ComplexType.phpSdS(*nikic-php-parser/PhpParser/Node/Const_.phpdZ(nikic-php-parser/PhpParser/Node/Expr.phpdh傤6nikic-php-parser/PhpParser/Node/Expr/ArrayDimFetch.phpMdMIY2nikic-php-parser/PhpParser/Node/Expr/ArrayItem.phpxdx| 2/nikic-php-parser/PhpParser/Node/Expr/Array_.php8d8;p6nikic-php-parser/PhpParser/Node/Expr/ArrowFunction.php d w3/nikic-php-parser/PhpParser/Node/Expr/Assign.phpd1nikic-php-parser/PhpParser/Node/Expr/AssignOp.phpd,<nikic-php-parser/PhpParser/Node/Expr/AssignOp/BitwiseAnd.phpdu;nikic-php-parser/PhpParser/Node/Expr/AssignOp/BitwiseOr.phpd;<nikic-php-parser/PhpParser/Node/Expr/AssignOp/BitwiseXor.phpdlϚ:nikic-php-parser/PhpParser/Node/Expr/AssignOp/Coalesce.phpdq,8nikic-php-parser/PhpParser/Node/Expr/AssignOp/Concat.phpd5nikic-php-parser/PhpParser/Node/Expr/AssignOp/Div.phpdYP -7nikic-php-parser/PhpParser/Node/Expr/AssignOp/Minus.phpd隤5nikic-php-parser/PhpParser/Node/Expr/AssignOp/Mod.phpd]10Y5nikic-php-parser/PhpParser/Node/Expr/AssignOp/Mul.phpdπ/6nikic-php-parser/PhpParser/Node/Expr/AssignOp/Plus.phpd&|5nikic-php-parser/PhpParser/Node/Expr/AssignOp/Pow.phpdyV;nikic-php-parser/PhpParser/Node/Expr/AssignOp/ShiftLeft.phpd<nikic-php-parser/PhpParser/Node/Expr/AssignOp/ShiftRight.phpds*2nikic-php-parser/PhpParser/Node/Expr/AssignRef.phpHdHE`ob1nikic-php-parser/PhpParser/Node/Expr/BinaryOp.phpodo Ѥ<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.phpPdP6L6;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BitwiseOr.phpNdN_|<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BitwiseXor.phpPdP~Ƥ<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BooleanAnd.phpQdQ5v;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BooleanOr.phpOdOeӸ:nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Coalesce.phpMdMY 8nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Concat.phpHdH @q5nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Div.phpBdBi7nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Equal.phpGdGݙʤ9nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Greater.phpJdJ4ͤ@nikic-php-parser/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.phpYdY^ز;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Identical.phpPdP"<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/LogicalAnd.phpRdRi;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/LogicalOr.phpOdO@<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/LogicalXor.phpRdR4e7nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Minus.phpFdF$Lˤ5nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Mod.phpBdBʤ5nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Mul.phpBdB|:nikic-php-parser/PhpParser/Node/Expr/BinaryOp/NotEqual.phpMdM>nikic-php-parser/PhpParser/Node/Expr/BinaryOp/NotIdentical.phpVdVh< -6nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Plus.phpDdD' ,5nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Pow.phpCdC;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/ShiftLeft.phpOdOQ#<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/ShiftRight.phpQdQǤ9nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Smaller.phpJdJf@nikic-php-parser/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.phpYdY⍤;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Spaceship.phpPdPHƉ.3nikic-php-parser/PhpParser/Node/Expr/BitwiseNot.phpd~'3nikic-php-parser/PhpParser/Node/Expr/BooleanNot.phpdDC1nikic-php-parser/PhpParser/Node/Expr/CallLike.php&d&KS0-nikic-php-parser/PhpParser/Node/Expr/Cast.phpAdA:Vs4nikic-php-parser/PhpParser/Node/Expr/Cast/Array_.phpdI|3nikic-php-parser/PhpParser/Node/Expr/Cast/Bool_.phpd V]S4nikic-php-parser/PhpParser/Node/Expr/Cast/Double.phpd>,2nikic-php-parser/PhpParser/Node/Expr/Cast/Int_.phpdc5nikic-php-parser/PhpParser/Node/Expr/Cast/Object_.phpd5nikic-php-parser/PhpParser/Node/Expr/Cast/String_.phpd4nikic-php-parser/PhpParser/Node/Expr/Cast/Unset_.phpd1Ӥ8nikic-php-parser/PhpParser/Node/Expr/ClassConstFetch.phpd/nikic-php-parser/PhpParser/Node/Expr/Clone_.phpdW0nikic-php-parser/PhpParser/Node/Expr/Closure.php -d -U;3nikic-php-parser/PhpParser/Node/Expr/ClosureUse.phpdh3nikic-php-parser/PhpParser/Node/Expr/ConstFetch.phpd޶%/nikic-php-parser/PhpParser/Node/Expr/Empty_.phpd'.nikic-php-parser/PhpParser/Node/Expr/Error.phpda\6nikic-php-parser/PhpParser/Node/Expr/ErrorSuppress.phpdg.nikic-php-parser/PhpParser/Node/Expr/Eval_.phpd356.nikic-php-parser/PhpParser/Node/Expr/Exit_.phpd1nikic-php-parser/PhpParser/Node/Expr/FuncCall.php3d3%A1nikic-php-parser/PhpParser/Node/Expr/Include_.phpdi4nikic-php-parser/PhpParser/Node/Expr/Instanceof_.phpada< /nikic-php-parser/PhpParser/Node/Expr/Isset_.phpdI.nikic-php-parser/PhpParser/Node/Expr/List_.phpd/nikic-php-parser/PhpParser/Node/Expr/Match_.phpdW 3nikic-php-parser/PhpParser/Node/Expr/MethodCall.phpOdODWX-nikic-php-parser/PhpParser/Node/Expr/New_.phpdiĤ;nikic-php-parser/PhpParser/Node/Expr/NullsafeMethodCall.phpfdfɤ>nikic-php-parser/PhpParser/Node/Expr/NullsafePropertyFetch.phpd /N0nikic-php-parser/PhpParser/Node/Expr/PostDec.phpdw:0nikic-php-parser/PhpParser/Node/Expr/PostInc.phpdᦦ!/nikic-php-parser/PhpParser/Node/Expr/PreDec.phpdtg/nikic-php-parser/PhpParser/Node/Expr/PreInc.phpdYä/nikic-php-parser/PhpParser/Node/Expr/Print_.phpdnX6nikic-php-parser/PhpParser/Node/Expr/PropertyFetch.phpdɾ2nikic-php-parser/PhpParser/Node/Expr/ShellExec.phpdhy3nikic-php-parser/PhpParser/Node/Expr/StaticCall.phpede<nikic-php-parser/PhpParser/Node/Expr/StaticPropertyFetch.php&d&ܐ0nikic-php-parser/PhpParser/Node/Expr/Ternary.phpdQͤ/nikic-php-parser/PhpParser/Node/Expr/Throw_.phpd ?3nikic-php-parser/PhpParser/Node/Expr/UnaryMinus.phpdlA2nikic-php-parser/PhpParser/Node/Expr/UnaryPlus.phpde̤1nikic-php-parser/PhpParser/Node/Expr/Variable.phpdmJr2nikic-php-parser/PhpParser/Node/Expr/YieldFrom.phpdw8/nikic-php-parser/PhpParser/Node/Expr/Yield_.php\d\ 0nikic-php-parser/PhpParser/Node/FunctionLike.phpd4ͤ.nikic-php-parser/PhpParser/Node/Identifier.phpdJa4nikic-php-parser/PhpParser/Node/IntersectionType.phpdo,nikic-php-parser/PhpParser/Node/MatchArm.phpd+m6(nikic-php-parser/PhpParser/Node/Name.php d Q酯7nikic-php-parser/PhpParser/Node/Name/FullyQualified.phpd 1nikic-php-parser/PhpParser/Node/Name/Relative.phpdǛEf0nikic-php-parser/PhpParser/Node/NullableType.phpd6C)nikic-php-parser/PhpParser/Node/Param.phpbdbMߤ*nikic-php-parser/PhpParser/Node/Scalar.phpkdk,ߤ2nikic-php-parser/PhpParser/Node/Scalar/DNumber.phpdx3H:3nikic-php-parser/PhpParser/Node/Scalar/Encapsed.phpdRU=nikic-php-parser/PhpParser/Node/Scalar/EncapsedStringPart.phpd%2nikic-php-parser/PhpParser/Node/Scalar/LNumber.php d z5nikic-php-parser/PhpParser/Node/Scalar/MagicConst.phpcdc,xG<nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Class_.phpTdT㨘X9nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Dir.phpMdMal:nikic-php-parser/PhpParser/Node/Scalar/MagicConst/File.phpPdP#?nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Function_.php]d]HnY:nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Line.phpPdPM4<nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Method.phpVdVΤ@nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Namespace_.php`d`><nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Trait_.phpTdTd2nikic-php-parser/PhpParser/Node/Scalar/String_.phpqdqT$Q(nikic-php-parser/PhpParser/Node/Stmt.phpdv2//nikic-php-parser/PhpParser/Node/Stmt/Break_.phpd֤.nikic-php-parser/PhpParser/Node/Stmt/Case_.phpldlu/nikic-php-parser/PhpParser/Node/Stmt/Catch_.php|d|*V>3nikic-php-parser/PhpParser/Node/Stmt/ClassConst.phpdeX?ͤ2nikic-php-parser/PhpParser/Node/Stmt/ClassLike.php d 04nikic-php-parser/PhpParser/Node/Stmt/ClassMethod.phpdX/nikic-php-parser/PhpParser/Node/Stmt/Class_.phpudu_ļ/nikic-php-parser/PhpParser/Node/Stmt/Const_.phpd2nikic-php-parser/PhpParser/Node/Stmt/Continue_.phpd7nikic-php-parser/PhpParser/Node/Stmt/DeclareDeclare.phpdƀ1nikic-php-parser/PhpParser/Node/Stmt/Declare_.phpd.. -,nikic-php-parser/PhpParser/Node/Stmt/Do_.phpBdB -@.nikic-php-parser/PhpParser/Node/Stmt/Echo_.phpd͘Ƥ0nikic-php-parser/PhpParser/Node/Stmt/ElseIf_.phpIdIEä.nikic-php-parser/PhpParser/Node/Stmt/Else_.phpd|ä1nikic-php-parser/PhpParser/Node/Stmt/EnumCase.phpdjD.nikic-php-parser/PhpParser/Node/Stmt/Enum_.php=d=dA3nikic-php-parser/PhpParser/Node/Stmt/Expression.phpdRK1nikic-php-parser/PhpParser/Node/Stmt/Finally_.phpd1A-nikic-php-parser/PhpParser/Node/Stmt/For_.php>d>NQ1nikic-php-parser/PhpParser/Node/Stmt/Foreach_.phpodo92nikic-php-parser/PhpParser/Node/Stmt/Function_.php, -d, -nL0nikic-php-parser/PhpParser/Node/Stmt/Global_.phpd.nikic-php-parser/PhpParser/Node/Stmt/Goto_.phpdVyPn1nikic-php-parser/PhpParser/Node/Stmt/GroupUse.php -d -ߎ0|5nikic-php-parser/PhpParser/Node/Stmt/HaltCompiler.phpd];,nikic-php-parser/PhpParser/Node/Stmt/If_.php:d:u٤3nikic-php-parser/PhpParser/Node/Stmt/InlineHTML.phpd]3nikic-php-parser/PhpParser/Node/Stmt/Interface_.phpdL/Ǥ.nikic-php-parser/PhpParser/Node/Stmt/Label.phpdӤ3nikic-php-parser/PhpParser/Node/Stmt/Namespace_.phpd㹀,nikic-php-parser/PhpParser/Node/Stmt/Nop.php@d@G1nikic-php-parser/PhpParser/Node/Stmt/Property.phpO -dO -=9nikic-php-parser/PhpParser/Node/Stmt/PropertyProperty.phpd҉0nikic-php-parser/PhpParser/Node/Stmt/Return_.phpdͿ)e2nikic-php-parser/PhpParser/Node/Stmt/StaticVar.phpd0nikic-php-parser/PhpParser/Node/Stmt/Static_.phpd0nikic-php-parser/PhpParser/Node/Stmt/Switch_.php5d5FFY/nikic-php-parser/PhpParser/Node/Stmt/Throw_.phpd1nikic-php-parser/PhpParser/Node/Stmt/TraitUse.phpdg,;nikic-php-parser/PhpParser/Node/Stmt/TraitUseAdaptation.phpda8Anikic-php-parser/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.phpAdAdFnikic-php-parser/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.phpZdZP֤/nikic-php-parser/PhpParser/Node/Stmt/Trait_.phpd$v1nikic-php-parser/PhpParser/Node/Stmt/TryCatch.php$d$W/nikic-php-parser/PhpParser/Node/Stmt/Unset_.phpd=oB/nikic-php-parser/PhpParser/Node/Stmt/UseUse.phpdddb-nikic-php-parser/PhpParser/Node/Stmt/Use_.phpldl9=|/nikic-php-parser/PhpParser/Node/Stmt/While_.phpEdEա-nikic-php-parser/PhpParser/Node/UnionType.phpdԛ5nikic-php-parser/PhpParser/Node/VarLikeIdentifier.phpd&7nikic-php-parser/PhpParser/Node/VariadicPlaceholder.phpdP+nikic-php-parser/PhpParser/NodeAbstract.phpZdZ׻@)nikic-php-parser/PhpParser/NodeDumper.phpdddY l)nikic-php-parser/PhpParser/NodeFinder.php d ,nikic-php-parser/PhpParser/NodeTraverser.php]'d]'TG:Ƥ5nikic-php-parser/PhpParser/NodeTraverserInterface.php|d|Ś *nikic-php-parser/PhpParser/NodeVisitor.phpd39nikic-php-parser/PhpParser/NodeVisitor/CloningVisitor.phpd"WJ9nikic-php-parser/PhpParser/NodeVisitor/FindingVisitor.phpdB>nikic-php-parser/PhpParser/NodeVisitor/FirstFindingVisitor.phpdm4Ť7nikic-php-parser/PhpParser/NodeVisitor/NameResolver.phpq&dq&ǠG@nikic-php-parser/PhpParser/NodeVisitor/NodeConnectingVisitor.phpdu -äBnikic-php-parser/PhpParser/NodeVisitor/ParentConnectingVisitor.phpuduME2nikic-php-parser/PhpParser/NodeVisitorAbstract.phpd%nikic-php-parser/PhpParser/Parser.php}d}{.nikic-php-parser/PhpParser/Parser/Multiple.phpdsF)7*nikic-php-parser/PhpParser/Parser/Php5.php+d+N׊*nikic-php-parser/PhpParser/Parser/Php7.phpOdOȅ,nikic-php-parser/PhpParser/Parser/Tokens.php&d&<-nikic-php-parser/PhpParser/ParserAbstract.phpTdT'[,nikic-php-parser/PhpParser/ParserFactory.phpd -~&5nikic-php-parser/PhpParser/PrettyPrinter/Standard.phpd'4nikic-php-parser/PhpParser/PrettyPrinterAbstract.phpdܤobject-enumerator/LICENSEdfobject-reflector/LICENSEdR6phar-io-manifest/LICENSE`d`p+phar-io-manifest/ManifestDocumentMapper.phpd:#phar-io-manifest/ManifestLoader.phpd.-a'phar-io-manifest/ManifestSerializer.phpdrp:phar-io-manifest/exceptions/ElementCollectionException.phpd I)phar-io-manifest/exceptions/Exception.phpd?phar-io-manifest/exceptions/InvalidApplicationNameException.phpd:@>5phar-io-manifest/exceptions/InvalidEmailException.phpd<3phar-io-manifest/exceptions/InvalidUrlException.phpd 9phar-io-manifest/exceptions/ManifestDocumentException.phpd!P4@phar-io-manifest/exceptions/ManifestDocumentLoadingException.phpHdHǃ?phar-io-manifest/exceptions/ManifestDocumentMapperException.phpd:9z8phar-io-manifest/exceptions/ManifestElementException.phpdA47phar-io-manifest/exceptions/ManifestLoaderException.phpdD>'phar-io-manifest/values/Application.phpdI$ۤ+phar-io-manifest/values/ApplicationName.php;d;D"phar-io-manifest/values/Author.phpdF,phar-io-manifest/values/AuthorCollection.phpdo4phar-io-manifest/values/AuthorCollectionIterator.php3d3џ,phar-io-manifest/values/BundledComponent.php@d@DP`6phar-io-manifest/values/BundledComponentCollection.php d ¾W6>phar-io-manifest/values/BundledComponentCollectionIterator.phpdVh0phar-io-manifest/values/CopyrightInformation.phpPdP ai!phar-io-manifest/values/Email.phpNdNZ&%phar-io-manifest/values/Extension.phpdq}#phar-io-manifest/values/Library.phpdO#phar-io-manifest/values/License.phpd&!o$phar-io-manifest/values/Manifest.php -d -=La3phar-io-manifest/values/PhpExtensionRequirement.phpd11phar-io-manifest/values/PhpVersionRequirement.phpdm?'phar-io-manifest/values/Requirement.phpdd1phar-io-manifest/values/RequirementCollection.phpdP9phar-io-manifest/values/RequirementCollectionIterator.phpjdjܭ: phar-io-manifest/values/Type.phpd=%phar-io-manifest/values/Url.phpd͚&phar-io-manifest/xml/AuthorElement.phprdr<0phar-io-manifest/xml/AuthorElementCollection.php,d,-'phar-io-manifest/xml/BundlesElement.phpSdSWN>)phar-io-manifest/xml/ComponentElement.phpydyݤ3phar-io-manifest/xml/ComponentElementCollection.php5d5(\(phar-io-manifest/xml/ContainsElement.phpndnf)phar-io-manifest/xml/CopyrightElement.phpd7*phar-io-manifest/xml/ElementCollection.phpd@ #phar-io-manifest/xml/ExtElement.php d y>-phar-io-manifest/xml/ExtElementCollection.php#d#E)phar-io-manifest/xml/ExtensionElement.php}d}0'phar-io-manifest/xml/LicenseElement.phpodo%:')phar-io-manifest/xml/ManifestDocument.php - d - 4(phar-io-manifest/xml/ManifestElement.php4d4#phar-io-manifest/xml/PhpElement.phpdB:5(phar-io-manifest/xml/RequiresElement.php$d$>!phar-io-version/BuildMetaData.phpdphar-io-version/LICENSE&d&Ҫ $phar-io-version/PreReleaseSuffix.phpd:phar-io-version/Version.phpdu#+phar-io-version/VersionConstraintParser.phpT dT Ф*phar-io-version/VersionConstraintValue.phpH -dH -F{~4!phar-io-version/VersionNumber.phpdO19phar-io-version/constraints/AbstractVersionConstraint.phpdxB9phar-io-version/constraints/AndVersionConstraintGroup.phpdY4phar-io-version/constraints/AnyVersionConstraint.phpRdR #6phar-io-version/constraints/ExactVersionConstraint.phpd!Ephar-io-version/constraints/GreaterThanOrEqualToVersionConstraint.phpdVU8phar-io-version/constraints/OrVersionConstraintGroup.phpdM%Fphar-io-version/constraints/SpecificMajorAndMinorVersionConstraint.phpdɍ>phar-io-version/constraints/SpecificMajorVersionConstraint.phpd`9q:1phar-io-version/constraints/VersionConstraint.phpdeDq(phar-io-version/exceptions/Exception.phpd$eb?phar-io-version/exceptions/InvalidPreReleaseSuffixException.phpdҵ6phar-io-version/exceptions/InvalidVersionException.phpd4/S7phar-io-version/exceptions/NoBuildMetaDataException.phpd]:phar-io-version/exceptions/NoPreReleaseSuffixException.phpdT4Dphar-io-version/exceptions/UnsupportedVersionConstraintException.phpd9"php-code-coverage/CodeCoverage.php;d;[ߤ4php-code-coverage/Data/ProcessedCodeCoverageData.php#d#QL.php-code-coverage/Data/RawCodeCoverageData.phpd Z7#php-code-coverage/Driver/Driver.php d cհ'php-code-coverage/Driver/PcovDriver.phpd=%php-code-coverage/Driver/Selector.php1d15)php-code-coverage/Driver/XdebugDriver.phpg dg ڤJphp-code-coverage/Exception/BranchAndPathCoverageNotSupportedException.phpd77Fphp-code-coverage/Exception/DeadCodeDetectionNotSupportedException.phpdCphp-code-coverage/Exception/DirectoryCouldNotBeCreatedException.phpd)php-code-coverage/Exception/Exception.php}d}z8php-code-coverage/Exception/InvalidArgumentException.phpdK.nFphp-code-coverage/Exception/NoCodeCoverageDriverAvailableException.php/d/6R]php-code-coverage/Exception/NoCodeCoverageDriverWithPathCoverageSupportAvailableException.phpada"A/php-code-coverage/Exception/ParserException.phpd,/Dphp-code-coverage/Exception/PathExistsButIsNotDirectoryException.phpd.29php-code-coverage/Exception/PcovNotAvailableException.phpadaj3php-code-coverage/Exception/ReflectionException.phpdk)?php-code-coverage/Exception/ReportAlreadyFinalizedException.php:d:d%6Iphp-code-coverage/Exception/StaticAnalysisCacheNotConfiguredException.phpd}6php-code-coverage/Exception/TestIdMissingException.phpd -Cphp-code-coverage/Exception/UnintentionallyCoveredCodeException.phpd}=php-code-coverage/Exception/WriteOperationFailedException.phpd(e;php-code-coverage/Exception/XdebugNotAvailableException.phpedeNG9php-code-coverage/Exception/XdebugNotEnabledException.phpxdx@_;,php-code-coverage/Exception/XmlException.phpdWܤphp-code-coverage/Filter.php d xˇphp-code-coverage/LICENSEd-~y֤'php-code-coverage/Node/AbstractNode.php%d%ּeΤ"php-code-coverage/Node/Builder.phpdT֤$php-code-coverage/Node/CrapIndex.phpd8\$php-code-coverage/Node/Directory.phpV$dV$\php-code-coverage/Node/File.phpIdI/#php-code-coverage/Node/Iterator.phpxdx8A)#php-code-coverage/Report/Clover.php'd'l4&php-code-coverage/Report/Cobertura.php(1d(1q#php-code-coverage/Report/Crap4j.phpdX+(php-code-coverage/Report/Html/Colors.phpdX`/php-code-coverage/Report/Html/CustomCssFile.php6d6"2bS(php-code-coverage/Report/Html/Facade.phpdpF*php-code-coverage/Report/Html/Renderer.php d G4php-code-coverage/Report/Html/Renderer/Dashboard.php{ d{ D54php-code-coverage/Report/Html/Renderer/Directory.php d (/php-code-coverage/Report/Html/Renderer/File.php&d&KCŤBphp-code-coverage/Report/Html/Renderer/Template/branches.html.distdh2+Fphp-code-coverage/Report/Html/Renderer/Template/coverage_bar.html.dist'd'O}Mphp-code-coverage/Report/Html/Renderer/Template/coverage_bar_branch.html.dist'd'O}Ephp-code-coverage/Report/Html/Renderer/Template/css/bootstrap.min.cssydyĤ>php-code-coverage/Report/Html/Renderer/Template/css/custom.cssdAphp-code-coverage/Report/Html/Renderer/Template/css/nv.d3.min.cssX%dX%0,@php-code-coverage/Report/Html/Renderer/Template/css/octicons.cssXdX'#=php-code-coverage/Report/Html/Renderer/Template/css/style.cssH -dH -Cphp-code-coverage/Report/Html/Renderer/Template/dashboard.html.distdDJphp-code-coverage/Report/Html/Renderer/Template/dashboard_branch.html.distdDCphp-code-coverage/Report/Html/Renderer/Template/directory.html.distdՆJphp-code-coverage/Report/Html/Renderer/Template/directory_branch.html.distdn2]Hphp-code-coverage/Report/Html/Renderer/Template/directory_item.html.distAdAdsOphp-code-coverage/Report/Html/Renderer/Template/directory_item_branch.html.dist;d;mۤ>php-code-coverage/Report/Html/Renderer/Template/file.html.distP dP j*Ephp-code-coverage/Report/Html/Renderer/Template/file_branch.html.dist d ㉞Cphp-code-coverage/Report/Html/Renderer/Template/file_item.html.distrdr/yJphp-code-coverage/Report/Html/Renderer/Template/file_item_branch.html.distldl-Cphp-code-coverage/Report/Html/Renderer/Template/icons/file-code.svg0d0QUUHphp-code-coverage/Report/Html/Renderer/Template/icons/file-directory.svgdZCphp-code-coverage/Report/Html/Renderer/Template/js/bootstrap.min.jscdc"#<php-code-coverage/Report/Html/Renderer/Template/js/d3.min.jsPdPhb:php-code-coverage/Report/Html/Renderer/Template/js/file.jsdb䆤@php-code-coverage/Report/Html/Renderer/Template/js/jquery.min.js@^d@^ ?php-code-coverage/Report/Html/Renderer/Template/js/nv.d3.min.jsRdRphp-code-coverage/Report/Html/Renderer/Template/line.html.distd{?php-code-coverage/Report/Html/Renderer/Template/lines.html.distededf Ephp-code-coverage/Report/Html/Renderer/Template/method_item.html.distdjפLphp-code-coverage/Report/Html/Renderer/Template/method_item_branch.html.distdyĎk?php-code-coverage/Report/Html/Renderer/Template/paths.html.distd*'ݤ php-code-coverage/Report/PHP.phpdg!php-code-coverage/Report/Text.php&d&ਤ'php-code-coverage/Report/Thresholds.phpSdS 1php-code-coverage/Report/Xml/BuildInformation.phpdzݤ)php-code-coverage/Report/Xml/Coverage.phpd׍d*php-code-coverage/Report/Xml/Directory.phpdAf'php-code-coverage/Report/Xml/Facade.php!d!t7 &%php-code-coverage/Report/Xml/File.phpd4E'php-code-coverage/Report/Xml/Method.phpDdDC#T%php-code-coverage/Report/Xml/Node.phpd(php-code-coverage/Report/Xml/Project.phpfdfPe'php-code-coverage/Report/Xml/Report.php d HC'php-code-coverage/Report/Xml/Source.phpsdsCaꀤ&php-code-coverage/Report/Xml/Tests.phpdd'php-code-coverage/Report/Xml/Totals.phpdAx%php-code-coverage/Report/Xml/Unit.phpdj0php-code-coverage/StaticAnalysis/CacheWarmer.php)d) ۤ8php-code-coverage/StaticAnalysis/CachingFileAnalyser.phpTdT{H;php-code-coverage/StaticAnalysis/CodeUnitFindingVisitor.phpR&dR&ĤBphp-code-coverage/StaticAnalysis/ExecutableLinesFindingVisitor.php;'d;'1php-code-coverage/StaticAnalysis/FileAnalyser.phpdJ?php-code-coverage/StaticAnalysis/IgnoredLinesFindingVisitor.php d \GԤ8php-code-coverage/StaticAnalysis/ParsingFileAnalyser.phpqdq4$php-code-coverage/TestSize/Known.phpXdXzK$php-code-coverage/TestSize/Large.phpd'r %php-code-coverage/TestSize/Medium.phpd{`$php-code-coverage/TestSize/Small.phpdŖ_'php-code-coverage/TestSize/TestSize.phpd8&php-code-coverage/TestSize/Unknown.phpidi%,(php-code-coverage/TestStatus/Failure.phphdhK8B&php-code-coverage/TestStatus/Known.phpd(php-code-coverage/TestStatus/Success.phphdhcp+php-code-coverage/TestStatus/TestStatus.phpd%!(php-code-coverage/TestStatus/Unknown.phpmdm[%php-code-coverage/Util/Filesystem.phpd%php-code-coverage/Util/Percentage.php^d^5?:php-code-coverage/Version.phpd$%php-file-iterator/ExcludeIterator.phpd'fphp-file-iterator/Facade.phpdc\mephp-file-iterator/Factory.php -d -gmphp-file-iterator/Iterator.php d Jphp-file-iterator/LICENSEd-~y֤php-invoker/Invoker.phpdc$php-invoker/exceptions/Exception.phprdrvvduDphp-invoker/exceptions/ProcessControlExtensionNotLoadedException.phpd +php-invoker/exceptions/TimeoutException.phpd.php-text-template/LICENSEd-~y֤php-text-template/Template.phpU dU %*php-text-template/exceptions/Exception.phpydyn9php-text-template/exceptions/InvalidArgumentException.phpdaM1php-text-template/exceptions/RuntimeException.phpdYm'php-timer/Duration.php d 2php-timer/LICENSEd$php-timer/ResourceUsageFormatter.phpd Hphp-timer/Timer.phpdQ>El"php-timer/exceptions/Exception.phpndniuۤ/php-timer/exceptions/NoActiveTimerException.phpdl٤Ephp-timer/exceptions/TimeSinceStartOfRequestNotAvailableException.phpd$b phpunit.xsd=d=|H1phpunit/Event/Dispatcher/CollectingDispatcher.phpd!0phpunit/Event/Dispatcher/DeferringDispatcher.phpdD-phpunit/Event/Dispatcher/DirectDispatcher.php d g'phpunit/Event/Dispatcher/Dispatcher.phpd8Ť3phpunit/Event/Dispatcher/SubscribableDispatcher.php&d&>Y,,phpunit/Event/Emitter/DispatchingEmitter.phpdddw!phpunit/Event/Emitter/Emitter.php!d!׸'-phpunit/Event/Events/Application/Finished.phpdp,7phpunit/Event/Events/Application/FinishedSubscriber.php7d7,~դ,phpunit/Event/Events/Application/Started.phpdW6phpunit/Event/Events/Application/StartedSubscriber.php5d5fphpunit/Event/Events/Event.php d w(phpunit/Event/Events/EventCollection.phpOdOak0phpunit/Event/Events/EventCollectionIterator.phpd`N7phpunit/Event/Events/Test/Assertion/AssertionFailed.phpd1ݤAphpunit/Event/Events/Test/Assertion/AssertionFailedSubscriber.php7d7haב:phpunit/Event/Events/Test/Assertion/AssertionSucceeded.phpdUUDphpunit/Event/Events/Test/Assertion/AssertionSucceededSubscriber.php=d=m2phpunit/Event/Events/Test/ComparatorRegistered.php d <phpunit/Event/Events/Test/ComparatorRegisteredSubscriber.phpAdA8VBphpunit/Event/Events/Test/HookMethod/AfterLastTestMethodCalled.phpmdm֤Lphpunit/Event/Events/Test/HookMethod/AfterLastTestMethodCalledSubscriber.phpKdKĶLDphpunit/Event/Events/Test/HookMethod/AfterLastTestMethodFinished.phpddd)Nphpunit/Event/Events/Test/HookMethod/AfterLastTestMethodFinishedSubscriber.phpOdO>phpunit/Event/Events/Test/HookMethod/AfterTestMethodCalled.phpdddHphpunit/Event/Events/Test/HookMethod/AfterTestMethodCalledSubscriber.phpCdCߊ@phpunit/Event/Events/Test/HookMethod/AfterTestMethodFinished.php[d[o΀Jphpunit/Event/Events/Test/HookMethod/AfterTestMethodFinishedSubscriber.phpGdGV)Dphpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodCalled.phpqdq,UNphpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodCalledSubscriber.phpOdOҘI Ephpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodErrored.phpdOphpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodErroredSubscriber.phpQdQFphpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodFinished.phphdhZPphpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodFinishedSubscriber.phpSdS/h?phpunit/Event/Events/Test/HookMethod/BeforeTestMethodCalled.phpfdf![Iphpunit/Event/Events/Test/HookMethod/BeforeTestMethodCalledSubscriber.phpEdEphpunit/Event/Events/Test/HookMethod/PostConditionFinished.php]d]Hphpunit/Event/Events/Test/HookMethod/PostConditionFinishedSubscriber.phpCdCkxŤ;phpunit/Event/Events/Test/HookMethod/PreConditionCalled.phpdddtդEphpunit/Event/Events/Test/HookMethod/PreConditionCalledSubscriber.php=d=T#=phpunit/Event/Events/Test/HookMethod/PreConditionFinished.php[d[ƄGphpunit/Event/Events/Test/HookMethod/PreConditionFinishedSubscriber.phpAdAm3phpunit/Event/Events/Test/Issue/ConsideredRisky.phpKdK =phpunit/Event/Events/Test/Issue/ConsideredRiskySubscriber.php7d7¤8phpunit/Event/Events/Test/Issue/DeprecationTriggered.phpdMǤBphpunit/Event/Events/Test/Issue/DeprecationTriggeredSubscriber.phpAdA8d2phpunit/Event/Events/Test/Issue/ErrorTriggered.phpd<phpunit/Event/Events/Test/Issue/ErrorTriggeredSubscriber.php5d53phpunit/Event/Events/Test/Issue/NoticeTriggered.phpdJJ¤=phpunit/Event/Events/Test/Issue/NoticeTriggeredSubscriber.php7d7xp;phpunit/Event/Events/Test/Issue/PhpDeprecationTriggered.phpdKEphpunit/Event/Events/Test/Issue/PhpDeprecationTriggeredSubscriber.phpGdGdS6phpunit/Event/Events/Test/Issue/PhpNoticeTriggered.phpd@phpunit/Event/Events/Test/Issue/PhpNoticeTriggeredSubscriber.php=d=L07phpunit/Event/Events/Test/Issue/PhpWarningTriggered.phpd -ZAphpunit/Event/Events/Test/Issue/PhpWarningTriggeredSubscriber.php?d?Xޤ?phpunit/Event/Events/Test/Issue/PhpunitDeprecationTriggered.phpd$/Iphpunit/Event/Events/Test/Issue/PhpunitDeprecationTriggeredSubscriber.phpOdOjt9phpunit/Event/Events/Test/Issue/PhpunitErrorTriggered.phpdqCphpunit/Event/Events/Test/Issue/PhpunitErrorTriggeredSubscriber.phpCdC;phpunit/Event/Events/Test/Issue/PhpunitWarningTriggered.phpdESޤEphpunit/Event/Events/Test/Issue/PhpunitWarningTriggeredSubscriber.phpGdGM4phpunit/Event/Events/Test/Issue/WarningTriggered.phpd>phpunit/Event/Events/Test/Issue/WarningTriggeredSubscriber.php9d9#A@0phpunit/Event/Events/Test/Lifecycle/Finished.php{d{ դ:phpunit/Event/Events/Test/Lifecycle/FinishedSubscriber.php)d)Qb:phpunit/Event/Events/Test/Lifecycle/PreparationStarted.phpuduX[`Dphpunit/Event/Events/Test/Lifecycle/PreparationStartedSubscriber.php=d=w 0phpunit/Event/Events/Test/Lifecycle/Prepared.php`d`ISϤ:phpunit/Event/Events/Test/Lifecycle/PreparedSubscriber.php)d)Ѥy-phpunit/Event/Events/Test/Outcome/Errored.phpdQa4$7phpunit/Event/Events/Test/Outcome/ErroredSubscriber.php'd' >,phpunit/Event/Events/Test/Outcome/Failed.phpdE*%6phpunit/Event/Events/Test/Outcome/FailedSubscriber.php%d%ǩ6phpunit/Event/Events/Test/Outcome/MarkedIncomplete.phpdHԤ@phpunit/Event/Events/Test/Outcome/MarkedIncompleteSubscriber.php9d96Ф,phpunit/Event/Events/Test/Outcome/Passed.php\d\6phpunit/Event/Events/Test/Outcome/PassedSubscriber.php%d%pE-phpunit/Event/Events/Test/Outcome/Skipped.phpdoKȏ7phpunit/Event/Events/Test/Outcome/SkippedSubscriber.php'd'%I5phpunit/Event/Events/Test/PrintedUnexpectedOutput.phpdOg?phpunit/Event/Events/Test/PrintedUnexpectedOutputSubscriber.phpGdG`ɐ:phpunit/Event/Events/Test/TestDouble/MockObjectCreated.phpd{͵Dphpunit/Event/Events/Test/TestDouble/MockObjectCreatedSubscriber.php;d;h{6Jphpunit/Event/Events/Test/TestDouble/MockObjectForAbstractClassCreated.phpdҽTphpunit/Event/Events/Test/TestDouble/MockObjectForAbstractClassCreatedSubscriber.php[d[ -vUphpunit/Event/Events/Test/TestDouble/MockObjectForIntersectionOfInterfacesCreated.phpXdXr_phpunit/Event/Events/Test/TestDouble/MockObjectForIntersectionOfInterfacesCreatedSubscriber.phpqdq/uBphpunit/Event/Events/Test/TestDouble/MockObjectForTraitCreated.phpd> Lphpunit/Event/Events/Test/TestDouble/MockObjectForTraitCreatedSubscriber.phpKdK#TBphpunit/Event/Events/Test/TestDouble/MockObjectFromWsdlCreated.php -d -ȌkLphpunit/Event/Events/Test/TestDouble/MockObjectFromWsdlCreatedSubscriber.phpKdKIAphpunit/Event/Events/Test/TestDouble/PartialMockObjectCreated.php=d=sUKphpunit/Event/Events/Test/TestDouble/PartialMockObjectCreatedSubscriber.phpIdI2!9phpunit/Event/Events/Test/TestDouble/TestProxyCreated.phpdͤCphpunit/Event/Events/Test/TestDouble/TestProxyCreatedSubscriber.php9d9K8phpunit/Event/Events/Test/TestDouble/TestStubCreated.phpdsʤBphpunit/Event/Events/Test/TestDouble/TestStubCreatedSubscriber.php7d7d#Sphpunit/Event/Events/Test/TestDouble/TestStubForIntersectionOfInterfacesCreated.phpTdT̪ ]phpunit/Event/Events/Test/TestDouble/TestStubForIntersectionOfInterfacesCreatedSubscriber.phpmdmKѕ=5phpunit/Event/Events/TestRunner/BootstrapFinished.phpidi?phpunit/Event/Events/TestRunner/BootstrapFinishedSubscriber.phpGdGaݤ.phpunit/Event/Events/TestRunner/Configured.php}d}u8phpunit/Event/Events/TestRunner/ConfiguredSubscriber.php9d9դ8phpunit/Event/Events/TestRunner/DeprecationTriggered.phptdtӤzBphpunit/Event/Events/TestRunner/DeprecationTriggeredSubscriber.phpMdMd5phpunit/Event/Events/TestRunner/EventFacadeSealed.phpd{J?phpunit/Event/Events/TestRunner/EventFacadeSealedSubscriber.phpGdG{ 5phpunit/Event/Events/TestRunner/ExecutionFinished.phpdБW?phpunit/Event/Events/TestRunner/ExecutionFinishedSubscriber.phpGdGH4phpunit/Event/Events/TestRunner/ExecutionStarted.phpdcic>phpunit/Event/Events/TestRunner/ExecutionStartedSubscriber.phpEdES9phpunit/Event/Events/TestRunner/ExtensionBootstrapped.phpydy%קCphpunit/Event/Events/TestRunner/ExtensionBootstrappedSubscriber.phpOdOpɞ2;phpunit/Event/Events/TestRunner/ExtensionLoadedFromPhar.phpd䟉Ephpunit/Event/Events/TestRunner/ExtensionLoadedFromPharSubscriber.phpSdSR^1,phpunit/Event/Events/TestRunner/Finished.php{d{zǡ6phpunit/Event/Events/TestRunner/FinishedSubscriber.php5d5̤+phpunit/Event/Events/TestRunner/Started.phpydy5phpunit/Event/Events/TestRunner/StartedSubscriber.php3d3 4phpunit/Event/Events/TestRunner/WarningTriggered.phpldl.Cv>phpunit/Event/Events/TestRunner/WarningTriggeredSubscriber.phpEdE8K+phpunit/Event/Events/TestSuite/Filtered.phpdo5phpunit/Event/Events/TestSuite/FilteredSubscriber.php3d3|+phpunit/Event/Events/TestSuite/Finished.phpdM`xd5phpunit/Event/Events/TestSuite/FinishedSubscriber.php3d3զ)phpunit/Event/Events/TestSuite/Loaded.phpdX(\*3phpunit/Event/Events/TestSuite/LoadedSubscriber.php/d/^7*phpunit/Event/Events/TestSuite/Skipped.phpd4phpunit/Event/Events/TestSuite/SkippedSubscriber.php1d1D!)phpunit/Event/Events/TestSuite/Sorted.php'd'j 3phpunit/Event/Events/TestSuite/SortedSubscriber.php/d/ Ȥ*phpunit/Event/Events/TestSuite/Started.phpdl4phpunit/Event/Events/TestSuite/StartedSubscriber.php1d1i5k9phpunit/Event/Exception/EventAlreadyAssignedException.php d 0ɤ8phpunit/Event/Exception/EventFacadeIsSealedException.php -d -J ؤ%phpunit/Event/Exception/Exception.phpLdLgx4phpunit/Event/Exception/InvalidArgumentException.phpd䀤1phpunit/Event/Exception/InvalidEventException.phpdE>6phpunit/Event/Exception/InvalidSubscriberException.phpdSg$phpunit/Event/Exception/MapError.phpdRGphpunit/Event/Exception/MoreThanOneDataSetFromDataProviderException.php0d0R=8phpunit/Event/Exception/NoComparisonFailureException.phpd{k>phpunit/Event/Exception/NoDataSetFromDataProviderException.php'd'@~8phpunit/Event/Exception/NoPreviousThrowableException.php -d -~,phpunit/Event/Exception/RuntimeException.phpdLDphpunit/Event/Exception/SubscriberTypeAlreadyRegisteredException.phpdįK1phpunit/Event/Exception/UnknownEventException.phpd}5phpunit/Event/Exception/UnknownEventTypeException.phpd/<6phpunit/Event/Exception/UnknownSubscriberException.phpd ˤ:phpunit/Event/Exception/UnknownSubscriberTypeException.php d &'*phpunit/Event/Facade.phpdAvphpunit/Event/Subscriber.phpddlkphpunit/Event/Tracer.phpdr7phpunit/Event/TypeMap.php d #phpunit/Event/Value/ClassMethod.phpdB)phpunit/Event/Value/ComparisonFailure.phpdk;0phpunit/Event/Value/ComparisonFailureBuilder.phpdvZ/phpunit/Event/Value/Runtime/OperatingSystem.phpdgA! #phpunit/Event/Value/Runtime/PHP.php d P'phpunit/Event/Value/Runtime/PHPUnit.phpodo3'phpunit/Event/Value/Runtime/Runtime.phpdk?J*phpunit/Event/Value/Telemetry/Duration.php d /(phpunit/Event/Value/Telemetry/HRTime.php d Fɤ&phpunit/Event/Value/Telemetry/Info.php -d --phpunit/Event/Value/Telemetry/MemoryMeter.php6d6-phpunit/Event/Value/Telemetry/MemoryUsage.phpgdg-*phpunit/Event/Value/Telemetry/Snapshot.php)d)\q+phpunit/Event/Value/Telemetry/StopWatch.phpd7\;(phpunit/Event/Value/Telemetry/System.phpd#3phpunit/Event/Value/Telemetry/SystemMemoryMeter.php~d~q`e1phpunit/Event/Value/Telemetry/SystemStopWatch.phpd H};phpunit/Event/Value/Telemetry/SystemStopWatchWithOffset.php8d8D !phpunit/Event/Value/Test/Phpt.phpRdR߭L!phpunit/Event/Value/Test/Test.phpd]+phpunit/Event/Value/Test/TestCollection.php1d1J3T3phpunit/Event/Value/Test/TestCollectionIterator.phpdbx:phpunit/Event/Value/Test/TestData/DataFromDataProvider.phpKdK?m<phpunit/Event/Value/Test/TestData/DataFromTestDependency.phpd.phpunit/Event/Value/Test/TestData/TestData.phpdn~8phpunit/Event/Value/Test/TestData/TestDataCollection.php -d -*^@phpunit/Event/Value/Test/TestData/TestDataCollectionIterator.phpdA$phpunit/Event/Value/Test/TestDox.php d Kyx+phpunit/Event/Value/Test/TestDoxBuilder.phpdU'phpunit/Event/Value/Test/TestMethod.php d bpy.phpunit/Event/Value/Test/TestMethodBuilder.phpd +phpunit/Event/Value/TestSuite/TestSuite.phpd2phpunit/Event/Value/TestSuite/TestSuiteBuilder.phpN dN v7phpunit/Event/Value/TestSuite/TestSuiteForTestClass.phpdN&Hphpunit/Event/Value/TestSuite/TestSuiteForTestMethodWithDataProvider.phpTdTTN3phpunit/Event/Value/TestSuite/TestSuiteWithName.phpd4d !phpunit/Event/Value/Throwable.php_ d_  (phpunit/Event/Value/ThrowableBuilder.phpdabphpunit/Exception.phpLdLߊphpunit/Framework/Assert.php{d{u[;&phpunit/Framework/Assert/Functions.phpTdT99H&phpunit/Framework/Attributes/After.phpd~jL¤+phpunit/Framework/Attributes/AfterClass.phpd׎.phpunit/Framework/Attributes/BackupGlobals.phpdmEO7phpunit/Framework/Attributes/BackupStaticProperties.phpdh'phpunit/Framework/Attributes/Before.phpd;,phpunit/Framework/Attributes/BeforeClass.phpd\3phpunit/Framework/Attributes/CodeCoverageIgnore.php#d#/@',phpunit/Framework/Attributes/CoversClass.phpdCb/phpunit/Framework/Attributes/CoversFunction.phpdΐX.phpunit/Framework/Attributes/CoversNothing.phpd&ޏ-phpunit/Framework/Attributes/DataProvider.phpdM5phpunit/Framework/Attributes/DataProviderExternal.phpdh5(phpunit/Framework/Attributes/Depends.phpdO0phpunit/Framework/Attributes/DependsExternal.phpd -p>phpunit/Framework/Attributes/DependsExternalUsingDeepClone.phpdWgAphpunit/Framework/Attributes/DependsExternalUsingShallowClone.php d //phpunit/Framework/Attributes/DependsOnClass.phpd4=phpunit/Framework/Attributes/DependsOnClassUsingDeepClone.phpd'@phpunit/Framework/Attributes/DependsOnClassUsingShallowClone.phpd}E6phpunit/Framework/Attributes/DependsUsingDeepClone.phpdrˌ9phpunit/Framework/Attributes/DependsUsingShallowClone.phpd& 9phpunit/Framework/Attributes/DoesNotPerformAssertions.php)d)J.~@phpunit/Framework/Attributes/ExcludeGlobalVariableFromBackup.phpdL༤@phpunit/Framework/Attributes/ExcludeStaticPropertyFromBackup.php2d2&phpunit/Framework/Attributes/Group.phpdio&phpunit/Framework/Attributes/Large.phpd"mn'phpunit/Framework/Attributes/Medium.phpd'2.phpunit/Framework/Attributes/PostCondition.phpdK-phpunit/Framework/Attributes/PreCondition.phpdؕ@4phpunit/Framework/Attributes/PreserveGlobalState.phpdM|1phpunit/Framework/Attributes/RequiresFunction.phpdd/phpunit/Framework/Attributes/RequiresMethod.phpdG -8phpunit/Framework/Attributes/RequiresOperatingSystem.phpd>phpunit/Framework/Attributes/RequiresOperatingSystemFamily.phpd-",phpunit/Framework/Attributes/RequiresPhp.phpdn5phpunit/Framework/Attributes/RequiresPhpExtension.phpvdve(a0phpunit/Framework/Attributes/RequiresPhpunit.phpdIt0phpunit/Framework/Attributes/RequiresSetting.phpdLP:phpunit/Framework/Attributes/RunClassInSeparateProcess.phpd:5phpunit/Framework/Attributes/RunInSeparateProcess.php d <phpunit/Framework/Attributes/RunTestsInSeparateProcesses.phpdĪ&phpunit/Framework/Attributes/Small.phpdw~%phpunit/Framework/Attributes/Test.phpd#(phpunit/Framework/Attributes/TestDox.phpd{)phpunit/Framework/Attributes/TestWith.phpd[4-phpunit/Framework/Attributes/TestWithJson.phpdrzC'phpunit/Framework/Attributes/Ticket.phpd 2*phpunit/Framework/Attributes/UsesClass.phpdVF-phpunit/Framework/Attributes/UsesFunction.phpdN5ﻤ0phpunit/Framework/Constraint/Boolean/IsFalse.phpbdbBVu/phpunit/Framework/Constraint/Boolean/IsTrue.php_d_)phpunit/Framework/Constraint/Callback.phpd.@-2phpunit/Framework/Constraint/Cardinality/Count.php d ^.8phpunit/Framework/Constraint/Cardinality/GreaterThan.phpda4phpunit/Framework/Constraint/Cardinality/IsEmpty.php_d_yGϤ5phpunit/Framework/Constraint/Cardinality/LessThan.phpdߤo,5phpunit/Framework/Constraint/Cardinality/SameSize.phpd+phpunit/Framework/Constraint/Constraint.phpmdm}1phpunit/Framework/Constraint/Equality/IsEqual.php! d! xc`?phpunit/Framework/Constraint/Equality/IsEqualCanonicalizing.phpO -dO -x=phpunit/Framework/Constraint/Equality/IsEqualIgnoringCase.phpM -dM -}7:phpunit/Framework/Constraint/Equality/IsEqualWithDelta.php d MZf4phpunit/Framework/Constraint/Exception/Exception.phpvdvz8phpunit/Framework/Constraint/Exception/ExceptionCode.phpd?]Gphpunit/Framework/Constraint/Exception/ExceptionMessageIsOrContains.phpd_Sphpunit/Framework/Constraint/Exception/ExceptionMessageMatchesRegularExpression.php<d<K;phpunit/Framework/Constraint/Filesystem/DirectoryExists.phpdyy6phpunit/Framework/Constraint/Filesystem/FileExists.phpdC 6phpunit/Framework/Constraint/Filesystem/IsReadable.phpdȅ]6phpunit/Framework/Constraint/Filesystem/IsWritable.phpd +phpunit/Framework/Constraint/IsAnything.phpd{Ϝ,phpunit/Framework/Constraint/IsIdentical.php d 72,phpunit/Framework/Constraint/JsonMatches.php d '4|.phpunit/Framework/Constraint/Math/IsFinite.php|d|G˴w0phpunit/Framework/Constraint/Math/IsInfinite.phpd3ߡ+phpunit/Framework/Constraint/Math/IsNan.phppdpZMw-phpunit/Framework/Constraint/ObjectEquals.phpodo, 8phpunit/Framework/Constraint/Operator/BinaryOperator.php] d]  4phpunit/Framework/Constraint/Operator/LogicalAnd.php]d]F4phpunit/Framework/Constraint/Operator/LogicalNot.php d  33phpunit/Framework/Constraint/Operator/LogicalOr.phpAdA(K4phpunit/Framework/Constraint/Operator/LogicalXor.phpd2phpunit/Framework/Constraint/Operator/Operator.php,d,{7phpunit/Framework/Constraint/Operator/UnaryOperator.phpd.{-.phpunit/Framework/Constraint/String/IsJson.phpd(9phpunit/Framework/Constraint/String/RegularExpression.php`d`m6phpunit/Framework/Constraint/String/StringContains.php -d -E6phpunit/Framework/Constraint/String/StringEndsWith.phpdrmMphpunit/Framework/Constraint/String/StringEqualsStringIgnoringLineEndings.php:d:IlFphpunit/Framework/Constraint/String/StringMatchesFormatDescription.php d m}t8phpunit/Framework/Constraint/String/StringStartsWith.phpdi.Qդ8phpunit/Framework/Constraint/Traversable/ArrayHasKey.phptdt~ҳ33phpunit/Framework/Constraint/Traversable/IsList.phpxdxv @phpunit/Framework/Constraint/Traversable/TraversableContains.php<d<YGEphpunit/Framework/Constraint/Traversable/TraversableContainsEqual.php)d)%Iphpunit/Framework/Constraint/Traversable/TraversableContainsIdentical.phpdyDphpunit/Framework/Constraint/Traversable/TraversableContainsOnly.phpTdTW?2phpunit/Framework/Constraint/Type/IsInstanceOf.phpdX,phpunit/Framework/Constraint/Type/IsNull.php^d^Vɭ,phpunit/Framework/Constraint/Type/IsType.phpd8]+phpunit/Framework/DataProviderTestSuite.php1d1V14phpunit/Framework/Exception/AssertionFailedError.phpd5phpunit/Framework/Exception/CodeCoverageException.phpd[4phpunit/Framework/Exception/EmptyStringException.phpd!%phpunit/Framework/Exception/Error.phpdj1)phpunit/Framework/Exception/Exception.php d ٤:phpunit/Framework/Exception/ExpectationFailedException.phpdA>phpunit/Framework/Exception/GeneratorNotSupportedException.phpd(d9phpunit/Framework/Exception/Incomplete/IncompleteTest.phpd,+>phpunit/Framework/Exception/Incomplete/IncompleteTestError.phpdםܤ8phpunit/Framework/Exception/InvalidArgumentException.phpd:(<phpunit/Framework/Exception/InvalidCoversTargetException.phpdo苤<phpunit/Framework/Exception/InvalidDataProviderException.phpd.ڜɤ:phpunit/Framework/Exception/InvalidDependencyException.phpd}9phpunit/Framework/Exception/NoChildTestSuiteException.phpdP$Nphpunit/Framework/Exception/ObjectEquals/ActualValueIsNotAnObjectException.phpAdA<ؤ`phpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotAcceptParameterTypeException.phpd@bphpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareBoolReturnTypeException.phpdPigphpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareExactlyOneParameterException.phpdFaphpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareParameterTypeException.phpdENRphpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotExistException.phpdui8phpunit/Framework/Exception/PhptAssertionFailedError.php2d2_9phpunit/Framework/Exception/ProcessIsolationException.phpdH:3phpunit/Framework/Exception/Skipped/SkippedTest.phpdS.=phpunit/Framework/Exception/Skipped/SkippedTestSuiteError.phpdxCphpunit/Framework/Exception/Skipped/SkippedWithMessageException.phpdz$5phpunit/Framework/Exception/UnknownClassException.phprdrk(ؤ@phpunit/Framework/Exception/UnknownClassOrInterfaceException.phpdӤ4phpunit/Framework/Exception/UnknownTypeException.phpndn(j.phpunit/Framework/ExecutionOrderDependency.phpdX>2&(phpunit/Framework/MockObject/Api/Api.php d =8Q_+phpunit/Framework/MockObject/Api/Method.php d G(6phpunit/Framework/MockObject/Api/MockedCloneMethod.php1d1>BѤ8phpunit/Framework/MockObject/Api/UnmockedCloneMethod.phpNdN/1phpunit/Framework/MockObject/Builder/Identity.php[d[$X3{9phpunit/Framework/MockObject/Builder/InvocationMocker.phpkdk߰:phpunit/Framework/MockObject/Builder/InvocationStubber.phpdeU8phpunit/Framework/MockObject/Builder/MethodNameMatch.phpd:'8phpunit/Framework/MockObject/Builder/ParametersMatch.phpNdNx)-phpunit/Framework/MockObject/Builder/Stub.phpd(3phpunit/Framework/MockObject/ConfigurableMethod.phpbdbAphpunit/Framework/MockObject/Exception/BadMethodCallException.phpdΫXGphpunit/Framework/MockObject/Exception/CannotUseAddMethodsException.php5d5{Hphpunit/Framework/MockObject/Exception/CannotUseOnlyMethodsException.phpEdEFphpunit/Framework/MockObject/Exception/ClassAlreadyExistsException.phpdFphpunit/Framework/MockObject/Exception/ClassIsEnumerationException.phpdN@phpunit/Framework/MockObject/Exception/ClassIsFinalException.phpd()Cphpunit/Framework/MockObject/Exception/ClassIsReadonlyException.phpdOuXYphpunit/Framework/MockObject/Exception/ConfigurableMethodsAlreadyInitializedException.php d ɅWCphpunit/Framework/MockObject/Exception/DuplicateMethodException.phpdy4phpunit/Framework/MockObject/Exception/Exception.phpdB'Kphpunit/Framework/MockObject/Exception/IncompatibleReturnValueException.phpydy|/Ephpunit/Framework/MockObject/Exception/InvalidMethodNameException.phpd ܤHphpunit/Framework/MockObject/Exception/MatchBuilderNotFoundException.phpdLphpunit/Framework/MockObject/Exception/MatcherAlreadyRegisteredException.phpdz'Lphpunit/Framework/MockObject/Exception/MethodCannotBeConfiguredException.phpd}QOphpunit/Framework/MockObject/Exception/MethodNameAlreadyConfiguredException.phpdӁƤKphpunit/Framework/MockObject/Exception/MethodNameNotConfiguredException.php~d~x1)Uphpunit/Framework/MockObject/Exception/MethodParametersAlreadyConfiguredException.phpd rYphpunit/Framework/MockObject/Exception/OriginalConstructorInvocationRequiredException.phpdک>phpunit/Framework/MockObject/Exception/ReflectionException.phpd.ؔLphpunit/Framework/MockObject/Exception/ReturnValueNotConfiguredException.php0d0F;phpunit/Framework/MockObject/Exception/RuntimeException.phpd_|Mphpunit/Framework/MockObject/Exception/SoapExtensionNotAvailableException.phpdz@phpunit/Framework/MockObject/Exception/UnknownClassException.phpd5uW@phpunit/Framework/MockObject/Exception/UnknownTraitException.phpdq¥?phpunit/Framework/MockObject/Exception/UnknownTypeException.phpd~*phpunit/Framework/MockObject/Generator.php7}d7}Djr6phpunit/Framework/MockObject/Generator/deprecation.tpl;d;O5s7phpunit/Framework/MockObject/Generator/intersection.tplLdL-X7phpunit/Framework/MockObject/Generator/mocked_class.tpldwZ8phpunit/Framework/MockObject/Generator/mocked_method.tplFdFKFphpunit/Framework/MockObject/Generator/mocked_method_never_or_void.tpldp?phpunit/Framework/MockObject/Generator/mocked_static_method.tpld 4R9phpunit/Framework/MockObject/Generator/proxied_method.tpl}d}@ėGphpunit/Framework/MockObject/Generator/proxied_method_never_or_void.tplvdvT6phpunit/Framework/MockObject/Generator/trait_class.tplQdQ<Ȥ5phpunit/Framework/MockObject/Generator/wsdl_class.tpld6phpunit/Framework/MockObject/Generator/wsdl_method.tpl<d<i+phpunit/Framework/MockObject/Invocation.php!d!u2phpunit/Framework/MockObject/InvocationHandler.phpdjkפ(phpunit/Framework/MockObject/Matcher.phpsdsߤ5phpunit/Framework/MockObject/MethodNameConstraint.phpdʦ,phpunit/Framework/MockObject/MockBuilder.php&d&*phpunit/Framework/MockObject/MockClass.phpd_ޭ+phpunit/Framework/MockObject/MockMethod.php"d"y.phpunit/Framework/MockObject/MockMethodSet.php]d].ۤ+phpunit/Framework/MockObject/MockObject.phpdPߤ*phpunit/Framework/MockObject/MockTrait.phpd~;0)phpunit/Framework/MockObject/MockType.phpdFFt5phpunit/Framework/MockObject/Rule/AnyInvokedCount.phpd33phpunit/Framework/MockObject/Rule/AnyParameters.phpd~'5phpunit/Framework/MockObject/Rule/InvocationOrder.phpdh9phpunit/Framework/MockObject/Rule/InvokedAtLeastCount.phpdF88phpunit/Framework/MockObject/Rule/InvokedAtLeastOnce.phpd 8phpunit/Framework/MockObject/Rule/InvokedAtMostCount.phpd.P2phpunit/Framework/MockObject/Rule/InvokedCount.phpd쯑0phpunit/Framework/MockObject/Rule/MethodName.phpdf-Ф0phpunit/Framework/MockObject/Rule/Parameters.php|d|4phpunit/Framework/MockObject/Rule/ParametersRule.phpcdc?(%phpunit/Framework/MockObject/Stub.phpdŎ6phpunit/Framework/MockObject/Stub/ConsecutiveCalls.phpda/phpunit/Framework/MockObject/Stub/Exception.php<d<bT@F4phpunit/Framework/MockObject/Stub/ReturnArgument.phpd4p4phpunit/Framework/MockObject/Stub/ReturnCallback.phpdP J5phpunit/Framework/MockObject/Stub/ReturnReference.phpdŤ0phpunit/Framework/MockObject/Stub/ReturnSelf.php:d:s0phpunit/Framework/MockObject/Stub/ReturnStub.phpdx4phpunit/Framework/MockObject/Stub/ReturnValueMap.phpd.*phpunit/Framework/MockObject/Stub/Stub.phpdi/phpunit/Framework/MockObject/TemplateLoader.phpd[`+phpunit/Framework/MockObject/Verifiable.phpd̐ s!phpunit/Framework/Reorderable.phpd˯$phpunit/Framework/SelfDescribing.php -d -sphpunit/Framework/Test.phpdǺ!phpunit/Framework/TestBuilder.php%d%)rphpunit/Framework/TestCase.phpdQ -h phpunit/Framework/TestRunner.php5d5):$phpunit/Framework/TestSize/Known.phpd)T Ф$phpunit/Framework/TestSize/Large.php/d/N`i%phpunit/Framework/TestSize/Medium.php2d2b{$phpunit/Framework/TestSize/Small.php#d#24'phpunit/Framework/TestSize/TestSize.php5d5ˮ&phpunit/Framework/TestSize/Unknown.phpdg,phpunit/Framework/TestStatus/Deprecation.phpdȸ&phpunit/Framework/TestStatus/Error.phpdۑ(phpunit/Framework/TestStatus/Failure.phpdp!]+phpunit/Framework/TestStatus/Incomplete.phpdC&phpunit/Framework/TestStatus/Known.phpzdz->f'phpunit/Framework/TestStatus/Notice.phpd'S(&phpunit/Framework/TestStatus/Risky.phpdVw(phpunit/Framework/TestStatus/Skipped.phpd4̤(phpunit/Framework/TestStatus/Success.phpdڍ]8+phpunit/Framework/TestStatus/TestStatus.phpndnb(phpunit/Framework/TestStatus/Unknown.php d 7W(phpunit/Framework/TestStatus/Warning.phpdYphpunit/Framework/TestSuite.phpJdJ&'phpunit/Framework/TestSuiteIterator.php3d3.Kphpunit/Logging/EventLogger.phpd-|phpunit/Logging/Exception.phpd%٤(phpunit/Logging/JUnit/JunitXmlLogger.php.d.RT^ͤ/phpunit/Logging/JUnit/Subscriber/Subscriber.phpdyJ;:phpunit/Logging/JUnit/Subscriber/TestErroredSubscriber.phpzdzP_ˤ9phpunit/Logging/JUnit/Subscriber/TestFailedSubscriber.phptdtr);phpunit/Logging/JUnit/Subscriber/TestFinishedSubscriber.phpd Cphpunit/Logging/JUnit/Subscriber/TestMarkedIncompleteSubscriber.phpdP;phpunit/Logging/JUnit/Subscriber/TestPreparedSubscriber.phpd:wJphpunit/Logging/JUnit/Subscriber/TestRunnerExecutionFinishedSubscriber.phpdĤ:phpunit/Logging/JUnit/Subscriber/TestSkippedSubscriber.phpzdzY@phpunit/Logging/JUnit/Subscriber/TestSuiteFinishedSubscriber.phpdVG?phpunit/Logging/JUnit/Subscriber/TestSuiteStartedSubscriber.phpd?2phpunit/Logging/TeamCity/Subscriber/Subscriber.phpdGEphpunit/Logging/TeamCity/Subscriber/TestConsideredRiskySubscriber.php?d?s&U=phpunit/Logging/TeamCity/Subscriber/TestErroredSubscriber.phpdФ<phpunit/Logging/TeamCity/Subscriber/TestFailedSubscriber.php d U>phpunit/Logging/TeamCity/Subscriber/TestFinishedSubscriber.phpdi&iFphpunit/Logging/TeamCity/Subscriber/TestMarkedIncompleteSubscriber.phpEdE >phpunit/Logging/TeamCity/Subscriber/TestPreparedSubscriber.phpd Mphpunit/Logging/TeamCity/Subscriber/TestRunnerExecutionFinishedSubscriber.phpd,=phpunit/Logging/TeamCity/Subscriber/TestSkippedSubscriber.phpdmF֤Cphpunit/Logging/TeamCity/Subscriber/TestSuiteFinishedSubscriber.phpdxBphpunit/Logging/TeamCity/Subscriber/TestSuiteStartedSubscriber.phpd}G9+phpunit/Logging/TeamCity/TeamCityLogger.php>%d>% ϧ(phpunit/Logging/TestDox/HtmlRenderer.php d lE*phpunit/Logging/TestDox/NamePrettifier.phpd:lPh-phpunit/Logging/TestDox/PlainTextRenderer.phpede <phpunit/Logging/TestDox/TestMethod/Subscriber/Subscriber.phpd'ĤOphpunit/Logging/TestDox/TestMethod/Subscriber/TestConsideredRiskySubscriber.phpdAaphpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedMockObjectForAbstractClassSubscriber.php8d8G驤Yphpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedMockObjectForTraitSubscriber.phpdR< Yphpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedMockObjectFromWsdlSubscriber.phpdQphpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedMockObjectSubscriber.phpdԤXphpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedPartialMockObjectSubscriber.php d 2Pphpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedTestProxySubscriber.phpdOphpunit/Logging/TestDox/TestMethod/Subscriber/TestCreatedTestStubSubscriber.phpdaGphpunit/Logging/TestDox/TestMethod/Subscriber/TestErroredSubscriber.phpd;m Fphpunit/Logging/TestDox/TestMethod/Subscriber/TestFailedSubscriber.phpdF,Hphpunit/Logging/TestDox/TestMethod/Subscriber/TestFinishedSubscriber.phpdPGPphpunit/Logging/TestDox/TestMethod/Subscriber/TestMarkedIncompleteSubscriber.phpd {Fphpunit/Logging/TestDox/TestMethod/Subscriber/TestPassedSubscriber.phpd)#Hphpunit/Logging/TestDox/TestMethod/Subscriber/TestPreparedSubscriber.phpd.Gphpunit/Logging/TestDox/TestMethod/Subscriber/TestSkippedSubscriber.phpd<Ӥ1phpunit/Logging/TestDox/TestMethod/TestResult.phpd%+8;phpunit/Logging/TestDox/TestMethod/TestResultCollection.phpdCphpunit/Logging/TestDox/TestMethod/TestResultCollectionIterator.phpdx:phpunit/Logging/TestDox/TestMethod/TestResultCollector.phpdnvWphpunit/Metadata/After.php$d$Е1Τphpunit/Metadata/AfterClass.php.d.LR%phpunit/Metadata/Api/CodeCoverage.phpd%phpunit/Metadata/Api/DataProvider.phpd2%phpunit/Metadata/Api/Dependencies.php d  eɤphpunit/Metadata/Api/Groups.php9 d9 z/[C$phpunit/Metadata/Api/HookMethods.php} d} K5¤%phpunit/Metadata/Api/Requirements.phpd>c8"phpunit/Metadata/BackupGlobals.php:d:€k+phpunit/Metadata/BackupStaticProperties.phpLdL& phpunit/Metadata/Before.php&d& phpunit/Metadata/BeforeClass.php0d0Aphpunit/Metadata/Covers.php,d,Q phpunit/Metadata/CoversClass.phpd3'phpunit/Metadata/CoversDefaultClass.phpd"#phpunit/Metadata/CoversFunction.php>d>^$"phpunit/Metadata/CoversNothing.php4d4~Zc!phpunit/Metadata/DataProvider.phpdj#phpunit/Metadata/DependsOnClass.phpadadˤ$phpunit/Metadata/DependsOnMethod.php!d! -phpunit/Metadata/DoesNotPerformAssertions.phpJdJ8 \'Tphpunit/Metadata/Exception/AnnotationsAreNotSupportedForInternalClassesException.php:d:,Ȥ(phpunit/Metadata/Exception/Exception.phpOdOwAphpunit/Metadata/Exception/InvalidVersionRequirementException.phpdPR<phpunit/Metadata/Exception/NoVersionRequirementException.phpd?+睤2phpunit/Metadata/Exception/ReflectionException.phpdn4phpunit/Metadata/ExcludeGlobalVariableFromBackup.phpdg"4phpunit/Metadata/ExcludeStaticPropertyFromBackup.phpdʁg?phpunit/Metadata/Group.php<d<@7;phpunit/Metadata/Metadata.php.Jd.J.6J'phpunit/Metadata/MetadataCollection.php(d(0R/phpunit/Metadata/MetadataCollectionIterator.phpd2I/phpunit/Metadata/Parser/Annotation/DocBlock.phpP"dP"nV/phpunit/Metadata/Parser/Annotation/Registry.php d ],phpunit/Metadata/Parser/AnnotationParser.php~Cd~C^+phpunit/Metadata/Parser/AttributeParser.phpPdP )phpunit/Metadata/Parser/CachingParser.php -d -e"phpunit/Metadata/Parser/Parser.phpdOv'phpunit/Metadata/Parser/ParserChain.phpd -nY$phpunit/Metadata/Parser/Registry.phpbdb)D"phpunit/Metadata/PostCondition.php4d46..!phpunit/Metadata/PreCondition.php2d2.(phpunit/Metadata/PreserveGlobalState.phpFdF8%phpunit/Metadata/RequiresFunction.phpddd`B#phpunit/Metadata/RequiresMethod.phpdR,phpunit/Metadata/RequiresOperatingSystem.phpdM+A2phpunit/Metadata/RequiresOperatingSystemFamily.phpd'r phpunit/Metadata/RequiresPhp.phpd-Y)phpunit/Metadata/RequiresPhpExtension.phpdEW'$phpunit/Metadata/RequiresPhpunit.phpd!9a$phpunit/Metadata/RequiresSetting.phpdAm.phpunit/Metadata/RunClassInSeparateProcess.phpLdLwT)phpunit/Metadata/RunInSeparateProcess.phpBdBiZ0phpunit/Metadata/RunTestsInSeparateProcesses.phpPdPtphpunit/Metadata/Test.php"d"phpunit/Metadata/TestDox.php"d"phpunit/Metadata/TestWith.php!d!phpunit/Metadata/Uses.php(d(פphpunit/Metadata/UsesClass.phpd7*Ⱥ%phpunit/Metadata/UsesDefaultClass.phpd/7X!phpunit/Metadata/UsesFunction.php7d7(؟֤2phpunit/Metadata/Version/ComparisonRequirement.phphdh52phpunit/Metadata/Version/ConstraintRequirement.phpdw㳤(phpunit/Metadata/Version/Requirement.phpda p_phpunit/Runner/CodeCoverage.php0d0E8phpunit/Runner/Exception/ClassCannotBeFoundException.phpdc?phpunit/Runner/Exception/ClassCannotBeInstantiatedException.php$d$K7phpunit/Runner/Exception/ClassDoesNotExistException.phpdJ5@Mphpunit/Runner/Exception/ClassDoesNotImplementExtensionInterfaceException.phpdΤ5phpunit/Runner/Exception/ClassIsAbstractException.phpdp7o>phpunit/Runner/Exception/DirectoryCannotBeCreatedException.phpd:Vr&phpunit/Runner/Exception/Exception.phpdnHA6phpunit/Runner/Exception/FileDoesNotExistException.phpdg K2phpunit/Runner/Exception/InvalidOrderException.phpd8Kڤ5phpunit/Runner/Exception/InvalidPhptFileException.phpdzA>4phpunit/Runner/Exception/NoIgnoredEventException.phpd3Uǚ;phpunit/Runner/Exception/ParameterDoesNotExistException.phpd]wQDphpunit/Runner/Exception/PhptExternalFileCannotBeLoadedException.phpdj0phpunit/Runner/Exception/ReflectionException.phpd^ss<phpunit/Runner/Exception/UnsupportedPhptSectionException.phpd &phpunit/Runner/Extension/Extension.phpdVZ2phpunit/Runner/Extension/ExtensionBootstrapper.phpd֓~#phpunit/Runner/Extension/Facade.phpdW;0phpunit/Runner/Extension/ParameterCollection.phpdnZ[c'phpunit/Runner/Extension/PharLoader.php d 4phpunit/Runner/Filter/ExcludeGroupFilterIterator.phpldlH}H!phpunit/Runner/Filter/Factory.phpds-phpunit/Runner/Filter/GroupFilterIterator.phpd)դ4phpunit/Runner/Filter/IncludeGroupFilterIterator.phpkdkSw,phpunit/Runner/Filter/NameFilterIterator.php d phpunit/Runner/PhptTestCase.phpUdU1phpunit/Runner/ResultCache/DefaultResultCache.php d X-.phpunit/Runner/ResultCache/NullResultCache.phpdS*phpunit/Runner/ResultCache/ResultCache.phpd3Gb1phpunit/Runner/ResultCache/ResultCacheHandler.phpdXY4phpunit/Runner/ResultCache/Subscriber/Subscriber.phpdM#Gphpunit/Runner/ResultCache/Subscriber/TestConsideredRiskySubscriber.phpd$k?phpunit/Runner/ResultCache/Subscriber/TestErroredSubscriber.phpd4}Fr>phpunit/Runner/ResultCache/Subscriber/TestFailedSubscriber.phpd )@phpunit/Runner/ResultCache/Subscriber/TestFinishedSubscriber.phpUdUVHphpunit/Runner/ResultCache/Subscriber/TestMarkedIncompleteSubscriber.phpd.6@phpunit/Runner/ResultCache/Subscriber/TestPreparedSubscriber.phpdΤ?phpunit/Runner/ResultCache/Subscriber/TestSkippedSubscriber.phpOdODÇEphpunit/Runner/ResultCache/Subscriber/TestSuiteFinishedSubscriber.phpdߤDphpunit/Runner/ResultCache/Subscriber/TestSuiteStartedSubscriber.phpd0DĤ'phpunit/Runner/TestResult/Collector.php8<d8< L1 $phpunit/Runner/TestResult/Facade.php -d -G.=)phpunit/Runner/TestResult/PassedTests.php d |Ophpunit/Runner/TestResult/Subscriber/BeforeTestClassMethodErroredSubscriber.php.d.$|;Cphpunit/Runner/TestResult/Subscriber/ExecutionStartedSubscriber.php$d$ޙ63phpunit/Runner/TestResult/Subscriber/Subscriber.phpd񡠒Fphpunit/Runner/TestResult/Subscriber/TestConsideredRiskySubscriber.phpd}9r4>phpunit/Runner/TestResult/Subscriber/TestErroredSubscriber.phpdܤ=phpunit/Runner/TestResult/Subscriber/TestFailedSubscriber.phpd?%+?phpunit/Runner/TestResult/Subscriber/TestFinishedSubscriber.phpdۤGphpunit/Runner/TestResult/Subscriber/TestMarkedIncompleteSubscriber.phpdlH?phpunit/Runner/TestResult/Subscriber/TestPreparedSubscriber.phpd<¤Qphpunit/Runner/TestResult/Subscriber/TestRunnerTriggeredDeprecationSubscriber.phpdYMphpunit/Runner/TestResult/Subscriber/TestRunnerTriggeredWarningSubscriber.phpdx>phpunit/Runner/TestResult/Subscriber/TestSkippedSubscriber.phpdADphpunit/Runner/TestResult/Subscriber/TestSuiteFinishedSubscriber.phpSdS*Cphpunit/Runner/TestResult/Subscriber/TestSuiteSkippedSubscriber.phpdFCphpunit/Runner/TestResult/Subscriber/TestSuiteStartedSubscriber.phpd bZKphpunit/Runner/TestResult/Subscriber/TestTriggeredDeprecationSubscriber.phpdsXcEphpunit/Runner/TestResult/Subscriber/TestTriggeredErrorSubscriber.phpd{9Fphpunit/Runner/TestResult/Subscriber/TestTriggeredNoticeSubscriber.phpdߋ%Nphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpDeprecationSubscriber.phpdeLOԤIphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpNoticeSubscriber.phpd dJphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpWarningSubscriber.phpdèMRphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpunitDeprecationSubscriber.php0d0gﰤLphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpunitErrorSubscriber.php d T5Nphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpunitWarningSubscriber.phpdDnGphpunit/Runner/TestResult/Subscriber/TestTriggeredWarningSubscriber.phpdɤ(phpunit/Runner/TestResult/TestResult.phpGdG$L"phpunit/Runner/TestSuiteLoader.php d } -"phpunit/Runner/TestSuiteSorter.php%d% 1phpunit/Runner/Version.phpds_Cphpunit/TextUI/Application.php=d=g"phpunit/TextUI/Command/Command.phpdO㍤9phpunit/TextUI/Command/Commands/AtLeastVersionCommand.phpdTؼ@phpunit/TextUI/Command/Commands/GenerateConfigurationCommand.phpdor5phpunit/TextUI/Command/Commands/ListGroupsCommand.phpdpz9phpunit/TextUI/Command/Commands/ListTestSuitesCommand.phpdKn:phpunit/TextUI/Command/Commands/ListTestsAsTextCommand.phpdE>9phpunit/TextUI/Command/Commands/ListTestsAsXmlCommand.phpd ?phpunit/TextUI/Command/Commands/MigrateConfigurationCommand.phpd3phpunit/TextUI/Command/Commands/ShowHelpCommand.php/d/>>#6phpunit/TextUI/Command/Commands/ShowVersionCommand.phpSdS7phpunit/TextUI/Command/Commands/VersionCheckCommand.phpdZ@phpunit/TextUI/Command/Commands/WarmCodeCoverageCacheCommand.phpz dz *!phpunit/TextUI/Command/Result.phpcdc{(phpunit/TextUI/Configuration/Builder.phpdG,phpunit/TextUI/Configuration/Cli/Builder.phpQdQ^Z2phpunit/TextUI/Configuration/Cli/Configuration.phpzdz.phpunit/TextUI/Configuration/Cli/Exception.phpd%zE?phpunit/TextUI/Configuration/Cli/XmlConfigurationFileFinder.phpd p;phpunit/TextUI/Configuration/CodeCoverageFilterRegistry.phpda.phpunit/TextUI/Configuration/Configuration.phpd@ޤSphpunit/TextUI/Configuration/Exception/CodeCoverageReportNotConfiguredException.php$d$Nphpunit/TextUI/Configuration/Exception/ConfigurationCannotBeBuiltException.phpdZ$&4phpunit/TextUI/Configuration/Exception/Exception.phpdGphpunit/TextUI/Configuration/Exception/FilterNotConfiguredException.phpdgGLphpunit/TextUI/Configuration/Exception/IncludePathNotConfiguredException.phpdxHphpunit/TextUI/Configuration/Exception/LoggingNotConfiguredException.phpdY%?phpunit/TextUI/Configuration/Exception/NoBootstrapException.phpd`lƤDphpunit/TextUI/Configuration/Exception/NoCacheDirectoryException.phpdCAphpunit/TextUI/Configuration/Exception/NoCliArgumentException.phpd|J?RGphpunit/TextUI/Configuration/Exception/NoConfigurationFileException.phpdMLphpunit/TextUI/Configuration/Exception/NoCoverageCacheDirectoryException.phpd;Cphpunit/TextUI/Configuration/Exception/NoCustomCssFileException.phpdʑ0Fphpunit/TextUI/Configuration/Exception/NoDefaultTestSuiteException.phpd Lphpunit/TextUI/Configuration/Exception/NoPharExtensionDirectoryException.phpd)R'phpunit/TextUI/Configuration/Merger.phpxdx ٤+phpunit/TextUI/Configuration/PhpHandler.php\d\y)phpunit/TextUI/Configuration/Registry.php d - 3z1phpunit/TextUI/Configuration/TestSuiteBuilder.php -d -/bt/phpunit/TextUI/Configuration/Value/Constant.php8d8bt9phpunit/TextUI/Configuration/Value/ConstantCollection.phpdW6bAphpunit/TextUI/Configuration/Value/ConstantCollectionIterator.phpdg]0phpunit/TextUI/Configuration/Value/Directory.phpd3F:phpunit/TextUI/Configuration/Value/DirectoryCollection.php d ?aBphpunit/TextUI/Configuration/Value/DirectoryCollectionIterator.phpdہW9phpunit/TextUI/Configuration/Value/ExtensionBootstrap.phpdr[Cphpunit/TextUI/Configuration/Value/ExtensionBootstrapCollection.phpdѤKphpunit/TextUI/Configuration/Value/ExtensionBootstrapCollectionIterator.phpd( V+phpunit/TextUI/Configuration/Value/File.phpd**5phpunit/TextUI/Configuration/Value/FileCollection.phpd'P=phpunit/TextUI/Configuration/Value/FileCollectionIterator.phpndnj6phpunit/TextUI/Configuration/Value/FilterDirectory.phpd~@phpunit/TextUI/Configuration/Value/FilterDirectoryCollection.phpDdDJHphpunit/TextUI/Configuration/Value/FilterDirectoryCollectionIterator.phpd񭥤,phpunit/TextUI/Configuration/Value/Group.phpdkפ6phpunit/TextUI/Configuration/Value/GroupCollection.php8d8+Bm>phpunit/TextUI/Configuration/Value/GroupCollectionIterator.phpydywX1phpunit/TextUI/Configuration/Value/IniSetting.php1d1;phpunit/TextUI/Configuration/Value/IniSettingCollection.phpd^Cphpunit/TextUI/Configuration/Value/IniSettingCollectionIterator.phpd8Ф*phpunit/TextUI/Configuration/Value/Php.phpYdY畉4phpunit/TextUI/Configuration/Value/TestDirectory.phpd Ф>phpunit/TextUI/Configuration/Value/TestDirectoryCollection.php-d-zȤFphpunit/TextUI/Configuration/Value/TestDirectoryCollectionIterator.phpda>k/phpunit/TextUI/Configuration/Value/TestFile.phpd)tФ9phpunit/TextUI/Configuration/Value/TestFileCollection.phpdAphpunit/TextUI/Configuration/Value/TestFileCollectionIterator.phpdp0phpunit/TextUI/Configuration/Value/TestSuite.phpd(j:phpunit/TextUI/Configuration/Value/TestSuiteCollection.phpdPBphpunit/TextUI/Configuration/Value/TestSuiteCollectionIterator.phpd;E/phpunit/TextUI/Configuration/Value/Variable.phpd@9phpunit/TextUI/Configuration/Value/VariableCollection.phpdїAphpunit/TextUI/Configuration/Value/VariableCollectionIterator.phpdՑ>phpunit/TextUI/Configuration/Xml/CodeCoverage/CodeCoverage.phpd?phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Clover.phpdƣˠBphpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Cobertura.phpd5?phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Crap4j.phppdp^=phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Html.php -d -CD<phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Php.phpdCC|=phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Text.php}d}<phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Xml.phpd:H-2phpunit/TextUI/Configuration/Xml/Configuration.phpB -dB -^L9phpunit/TextUI/Configuration/Xml/DefaultConfiguration.php -d -J%.phpunit/TextUI/Configuration/Xml/Exception.phpdN5+.phpunit/TextUI/Configuration/Xml/Generator.phpd,<"+phpunit/TextUI/Configuration/Xml/Groups.phpddd8=Ӥ@phpunit/TextUI/Configuration/Xml/LoadedFromFileConfiguration.php7d7O 7+phpunit/TextUI/Configuration/Xml/Loader.php^vd^vNp2phpunit/TextUI/Configuration/Xml/Logging/Junit.phpdФ4phpunit/TextUI/Configuration/Xml/Logging/Logging.php -d -#5phpunit/TextUI/Configuration/Xml/Logging/TeamCity.phpdϦ9phpunit/TextUI/Configuration/Xml/Logging/TestDox/Html.phpdB*$9phpunit/TextUI/Configuration/Xml/Logging/TestDox/Text.phpd?phpunit/TextUI/Configuration/Xml/Migration/MigrationBuilder.php6d6vWcHphpunit/TextUI/Configuration/Xml/Migration/MigrationBuilderException.phpdUWĝAphpunit/TextUI/Configuration/Xml/Migration/MigrationException.phpd\ZIphpunit/TextUI/Configuration/Xml/Migration/Migrations/ConvertLogTypes.phpdhoePphpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageCloverToReport.phpXdXijPphpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageCrap4jToReport.phpd$i'Nphpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageHtmlToReport.phpdՄjMphpunit/TextUI/Configuration/Xml/Migration/Migrations/CoveragePhpToReport.phpFdF^ӤNphpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageTextToReport.phpdV_Mphpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageXmlToReport.phpKdK_ Zphpunit/TextUI/Configuration/Xml/Migration/Migrations/IntroduceCacheDirectoryAttribute.php\d\Rphpunit/TextUI/Configuration/Xml/Migration/Migrations/IntroduceCoverageElement.phpdUNphpunit/TextUI/Configuration/Xml/Migration/Migrations/LogToReportMigration.phpdUCphpunit/TextUI/Configuration/Xml/Migration/Migrations/Migration.phpd'ephpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveAttributesFromFilterWhitelistToCoverage.phpdU%5Zphpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveAttributesFromRootToCoverage.phpd"O\phpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveWhitelistDirectoriesToCoverage.phpd†踤Yphpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveWhitelistExcludesToCoverage.phpdsphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveBeStrictAboutResourceUsageDuringSmallTestsAttribute.phpd yhphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveBeStrictAboutTodoAnnotatedTestsAttribute.phpmdmXphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCacheResultFileAttribute.php=d=ۨǤTphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCacheTokensAttribute.php1d1T9`phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveConversionToExceptionsAttributes.php d fphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCoverageElementCacheDirectoryAttribute.phpdmphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCoverageElementProcessUncoveredFilesAttribute.phpd[ Kphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveEmptyFilter.php{d{KIphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveListeners.php'd'nHphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveLogTypes.phpodo3Ophpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveLoggingElements.php)d).Vphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveNoInteractionAttribute.php7d7⼿Qphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemovePrinterAttributes.phpd}Tphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveTestDoxGroupsElement.php6d6DYphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveTestSuiteLoaderAttributes.phpdsUPphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveVerboseAttribute.php%d%J_phpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameBackupStaticAttributesAttribute.php$d$CȤfphpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameBeStrictAboutCoversAnnotationAttribute.phpNdNb^phpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameForceCoversAnnotationAttribute.php"d" Nphpunit/TextUI/Configuration/Xml/Migration/Migrations/UpdateSchemaLocation.phpd 7phpunit/TextUI/Configuration/Xml/Migration/Migrator.phpdd=,phpunit/TextUI/Configuration/Xml/PHPUnit.php?5d?5G=[4phpunit/TextUI/Configuration/Xml/TestSuiteMapper.phpdy&phpunit/TextUI/Exception/Exception.phpdD{i=phpunit/TextUI/Exception/ExtensionsNotConfiguredException.phpd3f.0phpunit/TextUI/Exception/ReflectionException.phpdJuv-phpunit/TextUI/Exception/RuntimeException.phpd ;phpunit/TextUI/Exception/TestDirectoryNotFoundException.phpdnL6phpunit/TextUI/Exception/TestFileNotFoundException.phpd?lphpunit/TextUI/Help.php1/d1/[PAphpunit/TextUI/Output/Default/ProgressPrinter/ProgressPrinter.phpa#da#$cphpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/BeforeTestClassMethodErroredSubscriber.phpFdFC8%Gphpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/Subscriber.php;d;Ȥ^phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpWarningSubscriber.phpdafphpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpunitDeprecationSubscriber.phpAdAsbphpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredPhpunitWarningSubscriber.php)d).E[phpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/TestTriggeredWarningSubscriber.phpdʹ/phpunit/TextUI/Output/Default/ResultPrinter.php>d>60 phpunit/TextUI/Output/Facade.phpdXk0phpunit/TextUI/Output/Printer/DefaultPrinter.php -d -Dݹr-phpunit/TextUI/Output/Printer/NullPrinter.php4d4F /)phpunit/TextUI/Output/Printer/Printer.phpdG(phpunit/TextUI/Output/SummaryPrinter.phpjdj /phpunit/TextUI/Output/TestDox/ResultPrinter.php($d($zD*phpunit/TextUI/ShellExitCodeCalculator.phpdL̤phpunit/TextUI/TestRunner.phpd:+phpunit/TextUI/TestSuiteFilterProcessor.phpdjphpunit/Util/Cloner.phpdU+phpunit/Util/Color.php4d4K.phpunit/Util/ErrorHandler.phpdn!'9phpunit/Util/Exception/DirectoryDoesNotExistException.phpd=$phpunit/Util/Exception/Exception.phpd94phpunit/Util/Exception/InvalidDirectoryException.phpdN/phpunit/Util/Exception/InvalidJsonException.phpd)s1phpunit/Util/Exception/InvalidSocketException.phpddf:phpunit/Util/Exception/InvalidVersionOperatorException.phpdw?phpunit/Util/Exception/NoTestCaseObjectOnCallStackException.phpxdxi.phpunit/Util/Exception/PhpProcessException.phpdXt-'phpunit/Util/Exception/XmlException.phpd;phpunit/Util/ExcludeList.phpdVӓphpunit/Util/Filesystem.phppdpssphpunit/Util/Filter.php d #8Фphpunit/Util/GlobalState.phpidi{wphpunit/Util/Json.php -d -'phpunit/Util/PHP/AbstractPhpProcess.php !d !&phpunit/Util/PHP/DefaultPhpProcess.phpd+phpunit/Util/PHP/Template/TestCaseClass.tpl d .S,phpunit/Util/PHP/Template/TestCaseMethod.tpl d 2.Ť*phpunit/Util/PHP/Template/PhptTestCase.tpld`J&phpunit/Util/PHP/WindowsPhpProcess.phpdSphpunit/Util/Reflection.php3d3gMYphpunit/Util/Test.phpd߉(phpunit/Util/ThrowableToStringMapper.phpdS *phpunit/Util/VersionComparisonOperator.php3d3:Uphpunit/Util/Xml.phpd.phpunit/Util/Xml/Exception.phpdӤ0phpunit/Util/Xml/FailedSchemaDetectionResult.phpd#Sphpunit/Util/Xml/Loader.php d JC*phpunit/Util/Xml/SchemaDetectionResult.phpd38u#phpunit/Util/Xml/SchemaDetector.php7d7 ^}!phpunit/Util/Xml/SchemaFinder.phpd)%phpunit/Util/Xml/SnapshotNodeList.phpXdXm)sebastian-comparator/ObjectComparator.php -d -rXƤ+sebastian-comparator/ResourceComparator.phpIdIN')sebastian-comparator/ScalarComparator.php d D~&3sebastian-comparator/SplObjectStorageComparator.phpd'sebastian-comparator/TypeComparator.phpd-sebastian-comparator/exceptions/Exception.phpvdvEᵤ4sebastian-comparator/exceptions/RuntimeException.phpdV'#sebastian-complexity/Calculator.php d hg.sebastian-complexity/Complexity/Complexity.phpd'8sebastian-complexity/Complexity/ComplexityCollection.phpd2@sebastian-complexity/Complexity/ComplexityCollectionIterator.phpd=+ma,sebastian-complexity/Exception/Exception.phpvdv73sebastian-complexity/Exception/RuntimeException.phpdCdWsebastian-complexity/LICENSEdP@٤=sebastian-complexity/Visitor/ComplexityCalculatingVisitor.php d ڤGsebastian-complexity/Visitor/CyclomaticComplexityCalculatingVisitor.phpdx!esebastian-diff/Chunk.phpdsebastian-diff/Diff.php`d`&sebastian-diff/Differ.phpdה3sebastian-diff/Exception/ConfigurationException.php!d!&sebastian-diff/Exception/Exception.phpjdj05sebastian-diff/Exception/InvalidArgumentException.phpdqsebastian-diff/LICENSEdTsebastian-diff/Line.phpdǺ5sebastian-diff/LongestCommonSubsequenceCalculator.phpd}e7zDsebastian-diff/MemoryEfficientLongestCommonSubsequenceCalculator.phpdåf14sebastian-diff/Output/AbstractChunkOutputBuilder.phpds/sebastian-diff/Output/DiffOnlyOutputBuilder.phpydy"4sebastian-diff/Output/DiffOutputBuilderInterface.phpdV8sebastian-diff/Output/StrictUnifiedDiffOutputBuilder.phpU(dU(ߢ"2sebastian-diff/Output/UnifiedDiffOutputBuilder.phpdɅ|sebastian-diff/Parser.php\ d\ S1pBsebastian-diff/TimeEfficientLongestCommonSubsequenceCalculator.phpd5,!sebastian-environment/Console.phpdP1Ťsebastian-environment/LICENSEdWj!sebastian-environment/Runtime.php)d)@sebastian-exporter/Exporter.php#d#~ksebastian-exporter/LICENSEdT'sebastian-global-state/CodeExporter.phph dh :}&sebastian-global-state/ExcludeList.php d :$sebastian-global-state/LICENSEd$#sebastian-global-state/Restorer.php d 0|#sebastian-global-state/Snapshot.php,'d,' /sebastian-global-state/exceptions/Exception.phpydyJ6sebastian-global-state/exceptions/RuntimeException.phpd;#sebastian-lines-of-code/Counter.php d d/sebastian-lines-of-code/Exception/Exception.phpzdz aV>sebastian-lines-of-code/Exception/IllogicalValuesException.phpdG<sebastian-lines-of-code/Exception/NegativeValueException.phpd -ڤ6sebastian-lines-of-code/Exception/RuntimeException.phpdKsebastian-lines-of-code/LICENSEdP@٤/sebastian-lines-of-code/LineCountingVisitor.phpzdzV:p'sebastian-lines-of-code/LinesOfCode.php d *sebastian-object-enumerator/Enumerator.phpd_.sebastian-object-reflector/ObjectReflector.phpd9m 'sebastian-recursion-context/Context.phpd!#sebastian-recursion-context/LICENSEdTsebastian-type/LICENSEd sebastian-type/Parameter.phpd~]#sebastian-type/ReflectionMapper.phpd 8sebastian-type/TypeName.phpdh&sebastian-type/exception/Exception.phpjdjbᮧ-sebastian-type/exception/RuntimeException.phpd%$sebastian-type/type/CallableType.phpdĊP!sebastian-type/type/FalseType.phpbdb_&)sebastian-type/type/GenericObjectType.php d c(sebastian-type/type/IntersectionType.php -d -¤$sebastian-type/type/IterableType.phpd3դ!sebastian-type/type/MixedType.php'd'o!sebastian-type/type/NeverType.phpdFҹ sebastian-type/type/NullType.php"d"9$F"sebastian-type/type/ObjectType.php%d%"sebastian-type/type/SimpleType.php,d,0"sebastian-type/type/StaticType.phpd", sebastian-type/type/TrueType.php]d]<iפsebastian-type/type/Type.phpdR!sebastian-type/type/UnionType.php* d* AA#sebastian-type/type/UnknownType.phpdǤ sebastian-type/type/VoidType.phpdsebastian-version/LICENSEdVosebastian-version/Version.phpd.7theseer-tokenizer/Exception.phpndn'Ǥtheseer-tokenizer/LICENSEdR ("theseer-tokenizer/NamespaceUri.phpHdH=C+theseer-tokenizer/NamespaceUriException.phpydy'Hetheseer-tokenizer/Token.phpd4%theseer-tokenizer/TokenCollection.php -d -a.theseer-tokenizer/TokenCollectionException.php|d|`g-theseer-tokenizer/Tokenizer.php -d -zl#theseer-tokenizer/XMLSerializer.phpdg; .phpstorm.meta.phpdOphpunit/phpunit: 10.0.16 +phpunit-10.5.8.phar composer.lockqeq2v manifest.txtetW'myclabs-deep-copy/DeepCopy/DeepCopy.phpeLä7myclabs-deep-copy/DeepCopy/Exception/CloneException.phpe {ˤ:myclabs-deep-copy/DeepCopy/Exception/PropertyException.phpe3Gz5myclabs-deep-copy/DeepCopy/Filter/ChainableFilter.phpeTE Gmyclabs-deep-copy/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php +e +DgLmyclabs-deep-copy/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.phpe)$Bmyclabs-deep-copy/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.phpe),myclabs-deep-copy/DeepCopy/Filter/Filter.phpdedM0myclabs-deep-copy/DeepCopy/Filter/KeepFilter.phpeYn3myclabs-deep-copy/DeepCopy/Filter/ReplaceFilter.phpe3myclabs-deep-copy/DeepCopy/Filter/SetNullFilter.phpe䊉Dmyclabs-deep-copy/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.phpepr.myclabs-deep-copy/DeepCopy/Matcher/Matcher.phpe6myclabs-deep-copy/DeepCopy/Matcher/PropertyMatcher.phpe=Bv:myclabs-deep-copy/DeepCopy/Matcher/PropertyNameMatcher.phpeR:myclabs-deep-copy/DeepCopy/Matcher/PropertyTypeMatcher.php2e2ZQͤ:myclabs-deep-copy/DeepCopy/Reflection/ReflectionHelper.php5e5ىAmyclabs-deep-copy/DeepCopy/TypeFilter/Date/DateIntervalFilter.phpeƤ7myclabs-deep-copy/DeepCopy/TypeFilter/ReplaceFilter.phpez;myclabs-deep-copy/DeepCopy/TypeFilter/ShallowCopyFilter.phpeؤ?myclabs-deep-copy/DeepCopy/TypeFilter/Spl/ArrayObjectFilter.phpe^Amyclabs-deep-copy/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.phpev|Gmyclabs-deep-copy/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.phpeT+4myclabs-deep-copy/DeepCopy/TypeFilter/TypeFilter.phpeVD6myclabs-deep-copy/DeepCopy/TypeMatcher/TypeMatcher.phpeQBŤ(myclabs-deep-copy/DeepCopy/deep_copy.phperxmyclabs-deep-copy/LICENSE5e5ʭ˄nikic-php-parser/LICENSEe*&nikic-php-parser/PhpParser/Builder.phpe61nikic-php-parser/PhpParser/Builder/ClassConst.phpei a-nikic-php-parser/PhpParser/Builder/Class_.phpReR.ٜΤ2nikic-php-parser/PhpParser/Builder/Declaration.phpe ]/nikic-php-parser/PhpParser/Builder/EnumCase.phpe@E,nikic-php-parser/PhpParser/Builder/Enum_.php e y3nikic-php-parser/PhpParser/Builder/FunctionLike.php.e.0nikic-php-parser/PhpParser/Builder/Function_.phpxex V1nikic-php-parser/PhpParser/Builder/Interface_.phpS +eS +]-nikic-php-parser/PhpParser/Builder/Method.phpeQ]1nikic-php-parser/PhpParser/Builder/Namespace_.phpbeb#㽃,nikic-php-parser/PhpParser/Builder/Param.php+e+ŵyˤ/nikic-php-parser/PhpParser/Builder/Property.phpe+Ҥ/nikic-php-parser/PhpParser/Builder/TraitUse.phpeo9nikic-php-parser/PhpParser/Builder/TraitUseAdaptation.phpeu1-nikic-php-parser/PhpParser/Builder/Trait_.php# e# QDK+nikic-php-parser/PhpParser/Builder/Use_.phpeڙ)-nikic-php-parser/PhpParser/BuilderFactory.php(e(v9-nikic-php-parser/PhpParser/BuilderHelpers.php$e$m&nikic-php-parser/PhpParser/Comment.phpeӥ?w*nikic-php-parser/PhpParser/Comment/Doc.phpxexp;nikic-php-parser/PhpParser/ConstExprEvaluationException.phpyey('1nikic-php-parser/PhpParser/ConstExprEvaluator.php &e &;n$nikic-php-parser/PhpParser/Error.phpeb+nikic-php-parser/PhpParser/ErrorHandler.php6e6ȓ6nikic-php-parser/PhpParser/ErrorHandler/Collecting.phpe-94nikic-php-parser/PhpParser/ErrorHandler/Throwing.phpeT`0nikic-php-parser/PhpParser/Internal/DiffElem.phpe@.nikic-php-parser/PhpParser/Internal/Differ.phpeW=Anikic-php-parser/PhpParser/Internal/PrintableNewAnonClassNode.php] +e] +fѤ5nikic-php-parser/PhpParser/Internal/TokenPolyfill.php$e$㸫_3nikic-php-parser/PhpParser/Internal/TokenStream.php!e!**nikic-php-parser/PhpParser/JsonDecoder.php e _*?$nikic-php-parser/PhpParser/Lexer.php.e.1.nikic-php-parser/PhpParser/Lexer/Emulative.phpK eK LDnikic-php-parser/PhpParser/Lexer/TokenEmulator/AttributeEmulator.phpeUP&Dnikic-php-parser/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.phpet Hnikic-php-parser/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.phpeK`Bnikic-php-parser/PhpParser/Lexer/TokenEmulator/KeywordEmulator.phpeN֤Enikic-php-parser/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.phpe\Hnikic-php-parser/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php/e/3Pnikic-php-parser/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.phpey}Hnikic-php-parser/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.php`e`oBnikic-php-parser/PhpParser/Lexer/TokenEmulator/ReverseEmulator.phpeb@nikic-php-parser/PhpParser/Lexer/TokenEmulator/TokenEmulator.phpPeP?*(nikic-php-parser/PhpParser/Modifiers.phpe~*nikic-php-parser/PhpParser/NameContext.php~&e~&"Aդ#nikic-php-parser/PhpParser/Node.phpe]'nikic-php-parser/PhpParser/Node/Arg.phpe{3-nikic-php-parser/PhpParser/Node/ArrayItem.phpeU -nikic-php-parser/PhpParser/Node/Attribute.phpVeV|)2nikic-php-parser/PhpParser/Node/AttributeGroup.phpeYh.nikic-php-parser/PhpParser/Node/ClosureUse.phpe^ s/nikic-php-parser/PhpParser/Node/ComplexType.phpSeS(*nikic-php-parser/PhpParser/Node/Const_.phpeD/nikic-php-parser/PhpParser/Node/DeclareItem.phpe.5(nikic-php-parser/PhpParser/Node/Expr.phpeh傤6nikic-php-parser/PhpParser/Node/Expr/ArrayDimFetch.phpQeQ 2nikic-php-parser/PhpParser/Node/Expr/ArrayItem.php\e\%դ/nikic-php-parser/PhpParser/Node/Expr/Array_.phphehf6nikic-php-parser/PhpParser/Node/Expr/ArrowFunction.php4 +e4 +T@G/nikic-php-parser/PhpParser/Node/Expr/Assign.php!e!d1nikic-php-parser/PhpParser/Node/Expr/AssignOp.phpek;V<nikic-php-parser/PhpParser/Node/Expr/AssignOp/BitwiseAnd.phpeu;nikic-php-parser/PhpParser/Node/Expr/AssignOp/BitwiseOr.phpe;<nikic-php-parser/PhpParser/Node/Expr/AssignOp/BitwiseXor.phpelϚ:nikic-php-parser/PhpParser/Node/Expr/AssignOp/Coalesce.phpeq,8nikic-php-parser/PhpParser/Node/Expr/AssignOp/Concat.phpe5nikic-php-parser/PhpParser/Node/Expr/AssignOp/Div.phpeYP +7nikic-php-parser/PhpParser/Node/Expr/AssignOp/Minus.phpe隤5nikic-php-parser/PhpParser/Node/Expr/AssignOp/Mod.phpe]10Y5nikic-php-parser/PhpParser/Node/Expr/AssignOp/Mul.phpeπ/6nikic-php-parser/PhpParser/Node/Expr/AssignOp/Plus.phpe&|5nikic-php-parser/PhpParser/Node/Expr/AssignOp/Pow.phpeyV;nikic-php-parser/PhpParser/Node/Expr/AssignOp/ShiftLeft.phpe<nikic-php-parser/PhpParser/Node/Expr/AssignOp/ShiftRight.phpes*2nikic-php-parser/PhpParser/Node/Expr/AssignRef.phpReRB1nikic-php-parser/PhpParser/Node/Expr/BinaryOp.php^e^~[<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.phpPeP6L6;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BitwiseOr.phpNeN_|<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BitwiseXor.phpPeP~Ƥ<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BooleanAnd.phpQeQ5v;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/BooleanOr.phpOeOeӸ:nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Coalesce.phpMeMY 8nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Concat.phpHeH @q5nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Div.phpBeBi7nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Equal.phpGeGݙʤ9nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Greater.phpJeJ4ͤ@nikic-php-parser/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.phpYeY^ز;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Identical.phpPeP"<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/LogicalAnd.phpReRi;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/LogicalOr.phpOeO@<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/LogicalXor.phpReR4e7nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Minus.phpFeF$Lˤ5nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Mod.phpBeBʤ5nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Mul.phpBeB|:nikic-php-parser/PhpParser/Node/Expr/BinaryOp/NotEqual.phpMeM>nikic-php-parser/PhpParser/Node/Expr/BinaryOp/NotIdentical.phpVeVh< +6nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Plus.phpDeD' ,5nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Pow.phpCeC;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/ShiftLeft.phpOeOQ#<nikic-php-parser/PhpParser/Node/Expr/BinaryOp/ShiftRight.phpQeQǤ9nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Smaller.phpJeJf@nikic-php-parser/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.phpYeY⍤;nikic-php-parser/PhpParser/Node/Expr/BinaryOp/Spaceship.phpPePHƉ.3nikic-php-parser/PhpParser/Node/Expr/BitwiseNot.phpek3nikic-php-parser/PhpParser/Node/Expr/BooleanNot.phpe-ڷ1nikic-php-parser/PhpParser/Node/Expr/CallLike.phpecH-nikic-php-parser/PhpParser/Node/Expr/Cast.phpNeNb4nikic-php-parser/PhpParser/Node/Expr/Cast/Array_.phpeI|3nikic-php-parser/PhpParser/Node/Expr/Cast/Bool_.phpe V]S4nikic-php-parser/PhpParser/Node/Expr/Cast/Double.phpeEfG2nikic-php-parser/PhpParser/Node/Expr/Cast/Int_.phpec5nikic-php-parser/PhpParser/Node/Expr/Cast/Object_.phpe5nikic-php-parser/PhpParser/Node/Expr/Cast/String_.phpe4nikic-php-parser/PhpParser/Node/Expr/Cast/Unset_.phpe1Ӥ8nikic-php-parser/PhpParser/Node/Expr/ClassConstFetch.php e UH/nikic-php-parser/PhpParser/Node/Expr/Clone_.phpe0nikic-php-parser/PhpParser/Node/Expr/Closure.php\ e\ .3nikic-php-parser/PhpParser/Node/Expr/ClosureUse.php]e].Eʮ3nikic-php-parser/PhpParser/Node/Expr/ConstFetch.phpeFe0դ/nikic-php-parser/PhpParser/Node/Expr/Empty_.phpeb.nikic-php-parser/PhpParser/Node/Expr/Error.phpe&6nikic-php-parser/PhpParser/Node/Expr/ErrorSuppress.phpeJ.nikic-php-parser/PhpParser/Node/Expr/Eval_.phpe..nikic-php-parser/PhpParser/Node/Expr/Exit_.phpe(vT1nikic-php-parser/PhpParser/Node/Expr/FuncCall.php e KÑ1nikic-php-parser/PhpParser/Node/Expr/Include_.phpe 4nikic-php-parser/PhpParser/Node/Expr/Instanceof_.phpe9/nikic-php-parser/PhpParser/Node/Expr/Isset_.phpe==s.nikic-php-parser/PhpParser/Node/Expr/List_.phpe+/nikic-php-parser/PhpParser/Node/Expr/Match_.php1e1 D3nikic-php-parser/PhpParser/Node/Expr/MethodCall.php<e<A-nikic-php-parser/PhpParser/Node/Expr/New_.phpeۤ;nikic-php-parser/PhpParser/Node/Expr/NullsafeMethodCall.phpSeS?Y>nikic-php-parser/PhpParser/Node/Expr/NullsafePropertyFetch.phpe0nikic-php-parser/PhpParser/Node/Expr/PostDec.phpe"J;0nikic-php-parser/PhpParser/Node/Expr/PostInc.phpeN /nikic-php-parser/PhpParser/Node/Expr/PreDec.phpe( i/nikic-php-parser/PhpParser/Node/Expr/PreInc.phpe֤/nikic-php-parser/PhpParser/Node/Expr/Print_.phpeC6nikic-php-parser/PhpParser/Node/Expr/PropertyFetch.phpe.2nikic-php-parser/PhpParser/Node/Expr/ShellExec.php>e>ц3nikic-php-parser/PhpParser/Node/Expr/StaticCall.phpGeGRZmr<nikic-php-parser/PhpParser/Node/Expr/StaticPropertyFetch.php)e)}P0nikic-php-parser/PhpParser/Node/Expr/Ternary.phpexڟ/nikic-php-parser/PhpParser/Node/Expr/Throw_.phpe3nikic-php-parser/PhpParser/Node/Expr/UnaryMinus.phpe&2nikic-php-parser/PhpParser/Node/Expr/UnaryPlus.phpeP1nikic-php-parser/PhpParser/Node/Expr/Variable.phpecޤ2nikic-php-parser/PhpParser/Node/Expr/YieldFrom.phpe>Q/nikic-php-parser/PhpParser/Node/Expr/Yield_.phpiei㬤0nikic-php-parser/PhpParser/Node/FunctionLike.phpeS.nikic-php-parser/PhpParser/Node/Identifier.php&e&km:nikic-php-parser/PhpParser/Node/InterpolatedStringPart.phpmem^#4nikic-php-parser/PhpParser/Node/IntersectionType.phpeL,nikic-php-parser/PhpParser/Node/MatchArm.phpe=[(nikic-php-parser/PhpParser/Node/Name.php e YӴ7nikic-php-parser/PhpParser/Node/Name/FullyQualified.phpe 1nikic-php-parser/PhpParser/Node/Name/Relative.phpeǛEf0nikic-php-parser/PhpParser/Node/NullableType.phpe4%)nikic-php-parser/PhpParser/Node/Param.phpD +eD +0nikic-php-parser/PhpParser/Node/PropertyItem.phpSeSE *nikic-php-parser/PhpParser/Node/Scalar.phpkek,ߤ2nikic-php-parser/PhpParser/Node/Scalar/DNumber.phpVeV73nikic-php-parser/PhpParser/Node/Scalar/Encapsed.phpbeb"=nikic-php-parser/PhpParser/Node/Scalar/EncapsedStringPart.phpiei)r1nikic-php-parser/PhpParser/Node/Scalar/Float_.php[e[)M(/nikic-php-parser/PhpParser/Node/Scalar/Int_.php e =nikic-php-parser/PhpParser/Node/Scalar/InterpolatedString.phpeK#2nikic-php-parser/PhpParser/Node/Scalar/LNumber.phpTeT35nikic-php-parser/PhpParser/Node/Scalar/MagicConst.phprer}<nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Class_.phpTeT㨘X9nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Dir.phpMeMal:nikic-php-parser/PhpParser/Node/Scalar/MagicConst/File.phpPeP#?nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Function_.php]e]HnY:nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Line.phpPePM4<nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Method.phpVeVΤ@nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Namespace_.php`e`><nikic-php-parser/PhpParser/Node/Scalar/MagicConst/Trait_.phpTeTd2nikic-php-parser/PhpParser/Node/Scalar/String_.phpe-nikic-php-parser/PhpParser/Node/StaticVar.phpe 1(nikic-php-parser/PhpParser/Node/Stmt.phpev2/.nikic-php-parser/PhpParser/Node/Stmt/Block.phpe/nikic-php-parser/PhpParser/Node/Stmt/Break_.phpe(⤌.nikic-php-parser/PhpParser/Node/Stmt/Case_.phpez/nikic-php-parser/PhpParser/Node/Stmt/Catch_.phpoeo綳3nikic-php-parser/PhpParser/Node/Stmt/ClassConst.phpMeM֤2nikic-php-parser/PhpParser/Node/Stmt/ClassLike.php e BF4nikic-php-parser/PhpParser/Node/Stmt/ClassMethod.phpes됤/nikic-php-parser/PhpParser/Node/Stmt/Class_.php e *[/nikic-php-parser/PhpParser/Node/Stmt/Const_.phpe]l2nikic-php-parser/PhpParser/Node/Stmt/Continue_.phpeϋKɤ7nikic-php-parser/PhpParser/Node/Stmt/DeclareDeclare.php^e^T_1nikic-php-parser/PhpParser/Node/Stmt/Declare_.phpei>,nikic-php-parser/PhpParser/Node/Stmt/Do_.phpNeN".nikic-php-parser/PhpParser/Node/Stmt/Echo_.phpeh=0nikic-php-parser/PhpParser/Node/Stmt/ElseIf_.phpUeU_դ.nikic-php-parser/PhpParser/Node/Stmt/Else_.phper1nikic-php-parser/PhpParser/Node/Stmt/EnumCase.phpe]Ɇ.nikic-php-parser/PhpParser/Node/Stmt/Enum_.phpDeD%U3nikic-php-parser/PhpParser/Node/Stmt/Expression.phpe-`U1nikic-php-parser/PhpParser/Node/Stmt/Finally_.phpef f-nikic-php-parser/PhpParser/Node/Stmt/For_.phpe`ߤ1nikic-php-parser/PhpParser/Node/Stmt/Foreach_.phpea2nikic-php-parser/PhpParser/Node/Stmt/Function_.php +e +VŤ0nikic-php-parser/PhpParser/Node/Stmt/Global_.phpe~.nikic-php-parser/PhpParser/Node/Stmt/Goto_.phpe l<1nikic-php-parser/PhpParser/Node/Stmt/GroupUse.phpPeP#5nikic-php-parser/PhpParser/Node/Stmt/HaltCompiler.phpeĬ,nikic-php-parser/PhpParser/Node/Stmt/If_.phpe~3nikic-php-parser/PhpParser/Node/Stmt/InlineHTML.phpeݤ3nikic-php-parser/PhpParser/Node/Stmt/Interface_.phpHeH.nikic-php-parser/PhpParser/Node/Stmt/Label.phpe떤3nikic-php-parser/PhpParser/Node/Stmt/Namespace_.phpenikic-php-parser/PhpParser/NodeVisitor/FirstFindingVisitor.phpek7nikic-php-parser/PhpParser/NodeVisitor/NameResolver.php&e&[r@nikic-php-parser/PhpParser/NodeVisitor/NodeConnectingVisitor.phpe)ߤBnikic-php-parser/PhpParser/NodeVisitor/ParentConnectingVisitor.php{e{52nikic-php-parser/PhpParser/NodeVisitorAbstract.phpeU _%nikic-php-parser/PhpParser/Parser.phpe.*nikic-php-parser/PhpParser/Parser/Php7.phpeIeeIؤ*nikic-php-parser/PhpParser/Parser/Php8.phpKeK0-nikic-php-parser/PhpParser/ParserAbstract.phpe"ƒv,nikic-php-parser/PhpParser/ParserFactory.phpe3)nikic-php-parser/PhpParser/PhpVersion.phpeR,nikic-php-parser/PhpParser/PrettyPrinter.phpe3W+5nikic-php-parser/PhpParser/PrettyPrinter/Standard.phpe`c{4nikic-php-parser/PhpParser/PrettyPrinterAbstract.phpe,dȤ$nikic-php-parser/PhpParser/Token.phpeK[3nikic-php-parser/PhpParser/compatibility_tokens.phpieiMiѤobject-enumerator/LICENSEefobject-reflector/LICENSEeR6phar-io-manifest/LICENSE`e`p+phar-io-manifest/ManifestDocumentMapper.phpe:#phar-io-manifest/ManifestLoader.phpe.-a'phar-io-manifest/ManifestSerializer.phperp:phar-io-manifest/exceptions/ElementCollectionException.phpe I)phar-io-manifest/exceptions/Exception.phpe?phar-io-manifest/exceptions/InvalidApplicationNameException.phpe:@>5phar-io-manifest/exceptions/InvalidEmailException.phpe<3phar-io-manifest/exceptions/InvalidUrlException.phpe 9phar-io-manifest/exceptions/ManifestDocumentException.phpe!P4@phar-io-manifest/exceptions/ManifestDocumentLoadingException.phpHeHǃ?phar-io-manifest/exceptions/ManifestDocumentMapperException.phpe:9z8phar-io-manifest/exceptions/ManifestElementException.phpeA47phar-io-manifest/exceptions/ManifestLoaderException.phpeD>'phar-io-manifest/values/Application.phpeI$ۤ+phar-io-manifest/values/ApplicationName.php;e;D"phar-io-manifest/values/Author.phpeF,phar-io-manifest/values/AuthorCollection.phpeo4phar-io-manifest/values/AuthorCollectionIterator.php3e3џ,phar-io-manifest/values/BundledComponent.php@e@DP`6phar-io-manifest/values/BundledComponentCollection.php e ¾W6>phar-io-manifest/values/BundledComponentCollectionIterator.phpeVh0phar-io-manifest/values/CopyrightInformation.phpPeP ai!phar-io-manifest/values/Email.phpNeNZ&%phar-io-manifest/values/Extension.phpeq}#phar-io-manifest/values/Library.phpeO#phar-io-manifest/values/License.phpe&!o$phar-io-manifest/values/Manifest.php +e +=La3phar-io-manifest/values/PhpExtensionRequirement.phpe11phar-io-manifest/values/PhpVersionRequirement.phpem?'phar-io-manifest/values/Requirement.phped1phar-io-manifest/values/RequirementCollection.phpeP9phar-io-manifest/values/RequirementCollectionIterator.phpjejܭ: phar-io-manifest/values/Type.phpe=%phar-io-manifest/values/Url.phpe͚&phar-io-manifest/xml/AuthorElement.phprer<0phar-io-manifest/xml/AuthorElementCollection.php,e,-'phar-io-manifest/xml/BundlesElement.phpSeSWN>)phar-io-manifest/xml/ComponentElement.phpyeyݤ3phar-io-manifest/xml/ComponentElementCollection.php5e5(\(phar-io-manifest/xml/ContainsElement.phpnenf)phar-io-manifest/xml/CopyrightElement.phpe7*phar-io-manifest/xml/ElementCollection.phpe@ #phar-io-manifest/xml/ExtElement.php e y>-phar-io-manifest/xml/ExtElementCollection.php#e#E)phar-io-manifest/xml/ExtensionElement.php}e}0'phar-io-manifest/xml/LicenseElement.phpoeo%:')phar-io-manifest/xml/ManifestDocument.php + e + 4(phar-io-manifest/xml/ManifestElement.php4e4#phar-io-manifest/xml/PhpElement.phpeB:5(phar-io-manifest/xml/RequiresElement.php$e$>!phar-io-version/BuildMetaData.phpephar-io-version/LICENSE&e&Ҫ $phar-io-version/PreReleaseSuffix.phpe:phar-io-version/Version.phpeu#+phar-io-version/VersionConstraintParser.phpT eT Ф*phar-io-version/VersionConstraintValue.phpH +eH +F{~4!phar-io-version/VersionNumber.phpeO19phar-io-version/constraints/AbstractVersionConstraint.phpexB9phar-io-version/constraints/AndVersionConstraintGroup.phpeY4phar-io-version/constraints/AnyVersionConstraint.phpReR #6phar-io-version/constraints/ExactVersionConstraint.phpe!Ephar-io-version/constraints/GreaterThanOrEqualToVersionConstraint.phpeVU8phar-io-version/constraints/OrVersionConstraintGroup.phpeM%Fphar-io-version/constraints/SpecificMajorAndMinorVersionConstraint.phpeɍ>phar-io-version/constraints/SpecificMajorVersionConstraint.phpe`9q:1phar-io-version/constraints/VersionConstraint.phpeeDq(phar-io-version/exceptions/Exception.phpe$eb?phar-io-version/exceptions/InvalidPreReleaseSuffixException.phpeҵ6phar-io-version/exceptions/InvalidVersionException.phpe4/S7phar-io-version/exceptions/NoBuildMetaDataException.phpe]:phar-io-version/exceptions/NoPreReleaseSuffixException.phpeT4Dphar-io-version/exceptions/UnsupportedVersionConstraintException.phpe9"php-code-coverage/CodeCoverage.phpAeAc4php-code-coverage/Data/ProcessedCodeCoverageData.php\'e\'.php-code-coverage/Data/RawCodeCoverageData.php#e#&#php-code-coverage/Driver/Driver.php e cհ'php-code-coverage/Driver/PcovDriver.phpe=%php-code-coverage/Driver/Selector.php1e15)php-code-coverage/Driver/XdebugDriver.php e …3jJphp-code-coverage/Exception/BranchAndPathCoverageNotSupportedException.phpe77Fphp-code-coverage/Exception/DeadCodeDetectionNotSupportedException.phpeCphp-code-coverage/Exception/DirectoryCouldNotBeCreatedException.phpe)php-code-coverage/Exception/Exception.php}e}z>php-code-coverage/Exception/FileCouldNotBeWrittenException.phper8php-code-coverage/Exception/InvalidArgumentException.phpeK.nFphp-code-coverage/Exception/NoCodeCoverageDriverAvailableException.php/e/6R]php-code-coverage/Exception/NoCodeCoverageDriverWithPathCoverageSupportAvailableException.phpaea"A/php-code-coverage/Exception/ParserException.phpe,/Dphp-code-coverage/Exception/PathExistsButIsNotDirectoryException.phpe.29php-code-coverage/Exception/PcovNotAvailableException.phpaeaj3php-code-coverage/Exception/ReflectionException.phpek)?php-code-coverage/Exception/ReportAlreadyFinalizedException.php:e:d%6Iphp-code-coverage/Exception/StaticAnalysisCacheNotConfiguredException.phpe}6php-code-coverage/Exception/TestIdMissingException.phpe +Cphp-code-coverage/Exception/UnintentionallyCoveredCodeException.phpe}=php-code-coverage/Exception/WriteOperationFailedException.phpe(e;php-code-coverage/Exception/XdebugNotAvailableException.phpeeeNG9php-code-coverage/Exception/XdebugNotEnabledException.phpxex@_;,php-code-coverage/Exception/XmlException.phpeWܤphp-code-coverage/Filter.phpc ec Z,php-code-coverage/LICENSEe-~y֤'php-code-coverage/Node/AbstractNode.php5e5Ğ"php-code-coverage/Node/Builder.phpOeOi$php-code-coverage/Node/CrapIndex.phpe8\$php-code-coverage/Node/Directory.phpF$eF$äphp-code-coverage/Node/File.php[We[WL¤#php-code-coverage/Node/Iterator.phpxex8A)#php-code-coverage/Report/Clover.php6(e6(&php-code-coverage/Report/Cobertura.php?1e?1W0#php-code-coverage/Report/Crap4j.php)e)wҤ(php-code-coverage/Report/Html/Colors.phpeX`/php-code-coverage/Report/Html/CustomCssFile.php6e6"2bS(php-code-coverage/Report/Html/Facade.phpe&'*php-code-coverage/Report/Html/Renderer.php e G4php-code-coverage/Report/Html/Renderer/Dashboard.php!e!/Ѥ4php-code-coverage/Report/Html/Renderer/Directory.php5e5V/g/php-code-coverage/Report/Html/Renderer/File.php܊e܊kBphp-code-coverage/Report/Html/Renderer/Template/branches.html.disteh2+Fphp-code-coverage/Report/Html/Renderer/Template/coverage_bar.html.dist'e'O}Mphp-code-coverage/Report/Html/Renderer/Template/coverage_bar_branch.html.dist'e'O}Ephp-code-coverage/Report/Html/Renderer/Template/css/bootstrap.min.cssyeyĤ>php-code-coverage/Report/Html/Renderer/Template/css/custom.csseAphp-code-coverage/Report/Html/Renderer/Template/css/nv.d3.min.cssX%eX%0,@php-code-coverage/Report/Html/Renderer/Template/css/octicons.cssXeX'#=php-code-coverage/Report/Html/Renderer/Template/css/style.cssH +eH +BѺCphp-code-coverage/Report/Html/Renderer/Template/dashboard.html.disteDJphp-code-coverage/Report/Html/Renderer/Template/dashboard_branch.html.disteDCphp-code-coverage/Report/Html/Renderer/Template/directory.html.disteՆJphp-code-coverage/Report/Html/Renderer/Template/directory_branch.html.disten2]Hphp-code-coverage/Report/Html/Renderer/Template/directory_item.html.distAeAdsOphp-code-coverage/Report/Html/Renderer/Template/directory_item_branch.html.dist;e;mۤ>php-code-coverage/Report/Html/Renderer/Template/file.html.distP eP j*Ephp-code-coverage/Report/Html/Renderer/Template/file_branch.html.dist e ㉞Cphp-code-coverage/Report/Html/Renderer/Template/file_item.html.distrer/yJphp-code-coverage/Report/Html/Renderer/Template/file_item_branch.html.distlel-Cphp-code-coverage/Report/Html/Renderer/Template/icons/file-code.svg0e0QUUHphp-code-coverage/Report/Html/Renderer/Template/icons/file-directory.svgeZCphp-code-coverage/Report/Html/Renderer/Template/js/bootstrap.min.jscec"#<php-code-coverage/Report/Html/Renderer/Template/js/d3.min.jsPePhb:php-code-coverage/Report/Html/Renderer/Template/js/file.jseb䆤@php-code-coverage/Report/Html/Renderer/Template/js/jquery.min.js@^e@^ ?php-code-coverage/Report/Html/Renderer/Template/js/nv.d3.min.jsReRphp-code-coverage/Report/Html/Renderer/Template/line.html.diste{?php-code-coverage/Report/Html/Renderer/Template/lines.html.disteeedf Ephp-code-coverage/Report/Html/Renderer/Template/method_item.html.distejפLphp-code-coverage/Report/Html/Renderer/Template/method_item_branch.html.disteyĎk?php-code-coverage/Report/Html/Renderer/Template/paths.html.diste*'ݤ php-code-coverage/Report/PHP.phpe<[!php-code-coverage/Report/Text.php&e&ਤ'php-code-coverage/Report/Thresholds.phpSeS 1php-code-coverage/Report/Xml/BuildInformation.phpezݤ)php-code-coverage/Report/Xml/Coverage.phpe׍d*php-code-coverage/Report/Xml/Directory.phpeAf'php-code-coverage/Report/Xml/Facade.php!e!t7 &%php-code-coverage/Report/Xml/File.phpe4E'php-code-coverage/Report/Xml/Method.phpDeDC#T%php-code-coverage/Report/Xml/Node.phpe(php-code-coverage/Report/Xml/Project.phpfefPe'php-code-coverage/Report/Xml/Report.php e HC'php-code-coverage/Report/Xml/Source.phpsesCaꀤ&php-code-coverage/Report/Xml/Tests.phpelXΤ'php-code-coverage/Report/Xml/Totals.phpeAx%php-code-coverage/Report/Xml/Unit.phpej0php-code-coverage/StaticAnalysis/CacheWarmer.php`e`_%פ8php-code-coverage/StaticAnalysis/CachingFileAnalyser.phpet;php-code-coverage/StaticAnalysis/CodeUnitFindingVisitor.php%e%&`Bphp-code-coverage/StaticAnalysis/ExecutableLinesFindingVisitor.php,e,p(1php-code-coverage/StaticAnalysis/FileAnalyser.phpe5?php-code-coverage/StaticAnalysis/IgnoredLinesFindingVisitor.php e \GԤ8php-code-coverage/StaticAnalysis/ParsingFileAnalyser.phpeBah$php-code-coverage/TestSize/Known.phpXeXzK$php-code-coverage/TestSize/Large.phpe'r %php-code-coverage/TestSize/Medium.phpe{`$php-code-coverage/TestSize/Small.phpeŖ_'php-code-coverage/TestSize/TestSize.phpe8&php-code-coverage/TestSize/Unknown.phpiei%,(php-code-coverage/TestStatus/Failure.phphehK8B&php-code-coverage/TestStatus/Known.phpe(php-code-coverage/TestStatus/Success.phphehcp+php-code-coverage/TestStatus/TestStatus.phpe%!(php-code-coverage/TestStatus/Unknown.phpmem[%php-code-coverage/Util/Filesystem.phpe%php-code-coverage/Util/Percentage.php^e^5?:php-code-coverage/Version.phpe#ؤ%php-file-iterator/ExcludeIterator.php.e.&php-file-iterator/Facade.phpelphp-file-iterator/Factory.php +e +>AqOphp-file-iterator/Iterator.php e Jphp-file-iterator/LICENSEe-~y֤php-invoker/Invoker.phpec$php-invoker/exceptions/Exception.phprervvduDphp-invoker/exceptions/ProcessControlExtensionNotLoadedException.phpe +php-invoker/exceptions/TimeoutException.phpe.php-text-template/LICENSEe-~y֤php-text-template/Template.phpV eV *`4*php-text-template/exceptions/Exception.phpyeyn9php-text-template/exceptions/InvalidArgumentException.phpeaM1php-text-template/exceptions/RuntimeException.phpeYm'php-timer/Duration.php e 2php-timer/LICENSEe$php-timer/ResourceUsageFormatter.phpe Hphp-timer/Timer.phpeQ>El"php-timer/exceptions/Exception.phpneniuۤ/php-timer/exceptions/NoActiveTimerException.phpel٤Ephp-timer/exceptions/TimeSinceStartOfRequestNotAvailableException.phpe$b phpunit.xsdGFeGF1&`1phpunit/Event/Dispatcher/CollectingDispatcher.phpe!0phpunit/Event/Dispatcher/DeferringDispatcher.php:e:&u-phpunit/Event/Dispatcher/DirectDispatcher.phpY eY s'phpunit/Event/Dispatcher/Dispatcher.phpe8Ť3phpunit/Event/Dispatcher/SubscribableDispatcher.phpePl{K,phpunit/Event/Emitter/DispatchingEmitter.phprerd!phpunit/Event/Emitter/Emitter.phpT*eT*%?-phpunit/Event/Events/Application/Finished.phpep,7phpunit/Event/Events/Application/FinishedSubscriber.php7e7,~դ,phpunit/Event/Events/Application/Started.phpeW6phpunit/Event/Events/Application/StartedSubscriber.php5e5fphpunit/Event/Events/Event.php e w(phpunit/Event/Events/EventCollection.phpOeOak0phpunit/Event/Events/EventCollectionIterator.phpe`N7phpunit/Event/Events/Test/Assertion/AssertionFailed.phpe>LAphpunit/Event/Events/Test/Assertion/AssertionFailedSubscriber.phpIeIkc:phpunit/Event/Events/Test/Assertion/AssertionSucceeded.phpe@Dphpunit/Event/Events/Test/Assertion/AssertionSucceededSubscriber.phpOeO)Rդ2phpunit/Event/Events/Test/ComparatorRegistered.php e <phpunit/Event/Events/Test/ComparatorRegisteredSubscriber.phpAeA8VBphpunit/Event/Events/Test/HookMethod/AfterLastTestMethodCalled.phpmem֤Lphpunit/Event/Events/Test/HookMethod/AfterLastTestMethodCalledSubscriber.phpKeKĶLDphpunit/Event/Events/Test/HookMethod/AfterLastTestMethodFinished.phpded)Nphpunit/Event/Events/Test/HookMethod/AfterLastTestMethodFinishedSubscriber.phpOeO>phpunit/Event/Events/Test/HookMethod/AfterTestMethodCalled.phpdedHphpunit/Event/Events/Test/HookMethod/AfterTestMethodCalledSubscriber.phpCeCߊ@phpunit/Event/Events/Test/HookMethod/AfterTestMethodFinished.php[e[o΀Jphpunit/Event/Events/Test/HookMethod/AfterTestMethodFinishedSubscriber.phpGeGV)Dphpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodCalled.phpqeq,UNphpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodCalledSubscriber.phpOeOҘI Ephpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodErrored.phpeOphpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodErroredSubscriber.phpQeQFphpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodFinished.phphehZPphpunit/Event/Events/Test/HookMethod/BeforeFirstTestMethodFinishedSubscriber.phpSeS/h?phpunit/Event/Events/Test/HookMethod/BeforeTestMethodCalled.phpfef![Iphpunit/Event/Events/Test/HookMethod/BeforeTestMethodCalledSubscriber.phpEeEphpunit/Event/Events/Test/HookMethod/PostConditionFinished.php]e]Hphpunit/Event/Events/Test/HookMethod/PostConditionFinishedSubscriber.phpCeCkxŤ;phpunit/Event/Events/Test/HookMethod/PreConditionCalled.phpdedtդEphpunit/Event/Events/Test/HookMethod/PreConditionCalledSubscriber.php=e=T#=phpunit/Event/Events/Test/HookMethod/PreConditionFinished.php[e[ƄGphpunit/Event/Events/Test/HookMethod/PreConditionFinishedSubscriber.phpAeAm3phpunit/Event/Events/Test/Issue/ConsideredRisky.phpe=phpunit/Event/Events/Test/Issue/ConsideredRiskySubscriber.php7e7¤8phpunit/Event/Events/Test/Issue/DeprecationTriggered.php" e"  Bphpunit/Event/Events/Test/Issue/DeprecationTriggeredSubscriber.phpAeA8d2phpunit/Event/Events/Test/Issue/ErrorTriggered.php~ e~ <phpunit/Event/Events/Test/Issue/ErrorTriggeredSubscriber.php5e53phpunit/Event/Events/Test/Issue/NoticeTriggered.php +e +4$=phpunit/Event/Events/Test/Issue/NoticeTriggeredSubscriber.php7e7xp;phpunit/Event/Events/Test/Issue/PhpDeprecationTriggered.php) e) IgbEphpunit/Event/Events/Test/Issue/PhpDeprecationTriggeredSubscriber.phpGeGdS6phpunit/Event/Events/Test/Issue/PhpNoticeTriggered.php e AS@phpunit/Event/Events/Test/Issue/PhpNoticeTriggeredSubscriber.php=e=L07phpunit/Event/Events/Test/Issue/PhpWarningTriggered.php e vAphpunit/Event/Events/Test/Issue/PhpWarningTriggeredSubscriber.php?e?Xޤ?phpunit/Event/Events/Test/Issue/PhpunitDeprecationTriggered.phpheh#ѤIphpunit/Event/Events/Test/Issue/PhpunitDeprecationTriggeredSubscriber.phpOeOjt9phpunit/Event/Events/Test/Issue/PhpunitErrorTriggered.phpueupjCphpunit/Event/Events/Test/Issue/PhpunitErrorTriggeredSubscriber.phpCeC;phpunit/Event/Events/Test/Issue/PhpunitWarningTriggered.php`e`@@ŤEphpunit/Event/Events/Test/Issue/PhpunitWarningTriggeredSubscriber.phpGeGM4phpunit/Event/Events/Test/Issue/WarningTriggered.php +e +ݤ>phpunit/Event/Events/Test/Issue/WarningTriggeredSubscriber.php9e9#A@@phpunit/Event/Events/Test/Lifecycle/DataProviderMethodCalled.php2e2%|Jphpunit/Event/Events/Test/Lifecycle/DataProviderMethodCalledSubscriber.phpIeIQNBphpunit/Event/Events/Test/Lifecycle/DataProviderMethodFinished.php,e,Lphpunit/Event/Events/Test/Lifecycle/DataProviderMethodFinishedSubscriber.phpMeMN0phpunit/Event/Events/Test/Lifecycle/Finished.php{e{ դ:phpunit/Event/Events/Test/Lifecycle/FinishedSubscriber.php)e)Qb9phpunit/Event/Events/Test/Lifecycle/PreparationFailed.phpsesx\Cphpunit/Event/Events/Test/Lifecycle/PreparationFailedSubscriber.php;e;W:phpunit/Event/Events/Test/Lifecycle/PreparationStarted.phpueuX[`Dphpunit/Event/Events/Test/Lifecycle/PreparationStartedSubscriber.php=e=w 0phpunit/Event/Events/Test/Lifecycle/Prepared.php`e`ISϤ:phpunit/Event/Events/Test/Lifecycle/PreparedSubscriber.php)e)Ѥy-phpunit/Event/Events/Test/Outcome/Errored.phpes7phpunit/Event/Events/Test/Outcome/ErroredSubscriber.php'e' >,phpunit/Event/Events/Test/Outcome/Failed.phpe6phpunit/Event/Events/Test/Outcome/FailedSubscriber.php%e%ǩ6phpunit/Event/Events/Test/Outcome/MarkedIncomplete.phpe6;@phpunit/Event/Events/Test/Outcome/MarkedIncompleteSubscriber.php9e96Ф,phpunit/Event/Events/Test/Outcome/Passed.php\e\6phpunit/Event/Events/Test/Outcome/PassedSubscriber.php%e%pE-phpunit/Event/Events/Test/Outcome/Skipped.phpeoKȏ7phpunit/Event/Events/Test/Outcome/SkippedSubscriber.php'e'%I5phpunit/Event/Events/Test/PrintedUnexpectedOutput.phpeOg?phpunit/Event/Events/Test/PrintedUnexpectedOutputSubscriber.phpGeG`ɐ:phpunit/Event/Events/Test/TestDouble/MockObjectCreated.phpe{͵Dphpunit/Event/Events/Test/TestDouble/MockObjectCreatedSubscriber.php;e;h{6Jphpunit/Event/Events/Test/TestDouble/MockObjectForAbstractClassCreated.phpeҽTphpunit/Event/Events/Test/TestDouble/MockObjectForAbstractClassCreatedSubscriber.php[e[ +vUphpunit/Event/Events/Test/TestDouble/MockObjectForIntersectionOfInterfacesCreated.phpXeXr_phpunit/Event/Events/Test/TestDouble/MockObjectForIntersectionOfInterfacesCreatedSubscriber.phpqeq/uBphpunit/Event/Events/Test/TestDouble/MockObjectForTraitCreated.phpe> Lphpunit/Event/Events/Test/TestDouble/MockObjectForTraitCreatedSubscriber.phpKeK#TBphpunit/Event/Events/Test/TestDouble/MockObjectFromWsdlCreated.php +e +ȌkLphpunit/Event/Events/Test/TestDouble/MockObjectFromWsdlCreatedSubscriber.phpKeKIAphpunit/Event/Events/Test/TestDouble/PartialMockObjectCreated.php=e=sUKphpunit/Event/Events/Test/TestDouble/PartialMockObjectCreatedSubscriber.phpIeI2!9phpunit/Event/Events/Test/TestDouble/TestProxyCreated.phpeͤCphpunit/Event/Events/Test/TestDouble/TestProxyCreatedSubscriber.php9e9K8phpunit/Event/Events/Test/TestDouble/TestStubCreated.phpesʤBphpunit/Event/Events/Test/TestDouble/TestStubCreatedSubscriber.php7e7d#Sphpunit/Event/Events/Test/TestDouble/TestStubForIntersectionOfInterfacesCreated.phpTeT̪ ]phpunit/Event/Events/Test/TestDouble/TestStubForIntersectionOfInterfacesCreatedSubscriber.phpmemKѕ=5phpunit/Event/Events/TestRunner/BootstrapFinished.phpiei?phpunit/Event/Events/TestRunner/BootstrapFinishedSubscriber.phpGeGaݤ.phpunit/Event/Events/TestRunner/Configured.php}e}u8phpunit/Event/Events/TestRunner/ConfiguredSubscriber.php9e9դ8phpunit/Event/Events/TestRunner/DeprecationTriggered.phptetӤzBphpunit/Event/Events/TestRunner/DeprecationTriggeredSubscriber.phpMeMd5phpunit/Event/Events/TestRunner/EventFacadeSealed.phpe{J?phpunit/Event/Events/TestRunner/EventFacadeSealedSubscriber.phpGeG{ 4phpunit/Event/Events/TestRunner/ExecutionAborted.phpeȃx>phpunit/Event/Events/TestRunner/ExecutionAbortedSubscriber.phpEeE W5phpunit/Event/Events/TestRunner/ExecutionFinished.phpeБW?phpunit/Event/Events/TestRunner/ExecutionFinishedSubscriber.phpGeGH4phpunit/Event/Events/TestRunner/ExecutionStarted.phpecic>phpunit/Event/Events/TestRunner/ExecutionStartedSubscriber.phpEeES9phpunit/Event/Events/TestRunner/ExtensionBootstrapped.phpyey%קCphpunit/Event/Events/TestRunner/ExtensionBootstrappedSubscriber.phpOeOpɞ2;phpunit/Event/Events/TestRunner/ExtensionLoadedFromPhar.phpe䟉Ephpunit/Event/Events/TestRunner/ExtensionLoadedFromPharSubscriber.phpSeSR^1,phpunit/Event/Events/TestRunner/Finished.php{e{zǡ6phpunit/Event/Events/TestRunner/FinishedSubscriber.php5e5̤=phpunit/Event/Events/TestRunner/GarbageCollectionDisabled.phpe\$Gphpunit/Event/Events/TestRunner/GarbageCollectionDisabledSubscriber.phpWeWJj<phpunit/Event/Events/TestRunner/GarbageCollectionEnabled.phpeFphpunit/Event/Events/TestRunner/GarbageCollectionEnabledSubscriber.phpUeU77>phpunit/Event/Events/TestRunner/GarbageCollectionTriggered.phpe2ɤHphpunit/Event/Events/TestRunner/GarbageCollectionTriggeredSubscriber.phpYeY &ݤ+phpunit/Event/Events/TestRunner/Started.phpyey5phpunit/Event/Events/TestRunner/StartedSubscriber.php3e3 4phpunit/Event/Events/TestRunner/WarningTriggered.phplel.Cv>phpunit/Event/Events/TestRunner/WarningTriggeredSubscriber.phpEeE8K+phpunit/Event/Events/TestSuite/Filtered.phpeo5phpunit/Event/Events/TestSuite/FilteredSubscriber.php3e3|+phpunit/Event/Events/TestSuite/Finished.phpeĤt5phpunit/Event/Events/TestSuite/FinishedSubscriber.php3e3զ)phpunit/Event/Events/TestSuite/Loaded.phpeX(\*3phpunit/Event/Events/TestSuite/LoadedSubscriber.php/e/^7*phpunit/Event/Events/TestSuite/Skipped.phpep%4phpunit/Event/Events/TestSuite/SkippedSubscriber.php1e1D!)phpunit/Event/Events/TestSuite/Sorted.php'e'j 3phpunit/Event/Events/TestSuite/SortedSubscriber.php/e/ Ȥ*phpunit/Event/Events/TestSuite/Started.phpeз1٤4phpunit/Event/Events/TestSuite/StartedSubscriber.php1e1i5k9phpunit/Event/Exception/EventAlreadyAssignedException.php e 0ɤ8phpunit/Event/Exception/EventFacadeIsSealedException.php +e +J ؤ%phpunit/Event/Exception/Exception.phpLeLgx4phpunit/Event/Exception/InvalidArgumentException.phpe䀤1phpunit/Event/Exception/InvalidEventException.phpeE>6phpunit/Event/Exception/InvalidSubscriberException.phpeSg$phpunit/Event/Exception/MapError.phpeRGphpunit/Event/Exception/MoreThanOneDataSetFromDataProviderException.php0e0R=8phpunit/Event/Exception/NoComparisonFailureException.phpe{k>phpunit/Event/Exception/NoDataSetFromDataProviderException.php'e'@~8phpunit/Event/Exception/NoPreviousThrowableException.php +e +~@phpunit/Event/Exception/NoTestCaseObjectOnCallStackException.phpe,phpunit/Event/Exception/RuntimeException.phpeLDphpunit/Event/Exception/SubscriberTypeAlreadyRegisteredException.phpeįK1phpunit/Event/Exception/UnknownEventException.phpe}5phpunit/Event/Exception/UnknownEventTypeException.phpe/<6phpunit/Event/Exception/UnknownSubscriberException.phpe ˤ:phpunit/Event/Exception/UnknownSubscriberTypeException.php e &'*phpunit/Event/Facade.php"e")phpunit/Event/Subscriber.phpedlkphpunit/Event/Tracer.phper7phpunit/Event/TypeMap.php5e5pF'#phpunit/Event/Value/ClassMethod.phpeB)phpunit/Event/Value/ComparisonFailure.phpek;0phpunit/Event/Value/ComparisonFailureBuilder.phpevZ/phpunit/Event/Value/Runtime/OperatingSystem.phpegA! #phpunit/Event/Value/Runtime/PHP.php e P'phpunit/Event/Value/Runtime/PHPUnit.phpoeo3'phpunit/Event/Value/Runtime/Runtime.phpek?J*phpunit/Event/Value/Telemetry/Duration.php e *t8phpunit/Event/Value/Telemetry/GarbageCollectorStatus.phpWeW;ä@phpunit/Event/Value/Telemetry/GarbageCollectorStatusProvider.phpeN (phpunit/Event/Value/Telemetry/HRTime.php e Fɤ&phpunit/Event/Value/Telemetry/Info.php +e +gHh!-phpunit/Event/Value/Telemetry/MemoryMeter.php:e:XH-phpunit/Event/Value/Telemetry/MemoryUsage.phpgeg-Ephpunit/Event/Value/Telemetry/Php81GarbageCollectorStatusProvider.phpjej9Ephpunit/Event/Value/Telemetry/Php83GarbageCollectorStatusProvider.phper*phpunit/Event/Value/Telemetry/Snapshot.phpe +.+phpunit/Event/Value/Telemetry/StopWatch.phpeF4S(phpunit/Event/Value/Telemetry/System.php<e<fK3phpunit/Event/Value/Telemetry/SystemMemoryMeter.php~e~q`e1phpunit/Event/Value/Telemetry/SystemStopWatch.phpe H};phpunit/Event/Value/Telemetry/SystemStopWatchWithOffset.phpReR +]qC!phpunit/Event/Value/Test/Phpt.php`e`B!phpunit/Event/Value/Test/Test.phpei +phpunit/Event/Value/Test/TestCollection.php1e1J3T3phpunit/Event/Value/Test/TestCollectionIterator.phpebx:phpunit/Event/Value/Test/TestData/DataFromDataProvider.php e bJ<phpunit/Event/Value/Test/TestData/DataFromTestDependency.phpe.phpunit/Event/Value/Test/TestData/TestData.phpen~8phpunit/Event/Value/Test/TestData/TestDataCollection.php +e +*^@phpunit/Event/Value/Test/TestData/TestDataCollectionIterator.phpeA$phpunit/Event/Value/Test/TestDox.php e Kyx+phpunit/Event/Value/Test/TestDoxBuilder.phpeU'phpunit/Event/Value/Test/TestMethod.phpe O.phpunit/Event/Value/Test/TestMethodBuilder.php e LJT+phpunit/Event/Value/TestSuite/TestSuite.phpe2phpunit/Event/Value/TestSuite/TestSuiteBuilder.php e {7phpunit/Event/Value/TestSuite/TestSuiteForTestClass.phpeN&Hphpunit/Event/Value/TestSuite/TestSuiteForTestMethodWithDataProvider.phpeФ3phpunit/Event/Value/TestSuite/TestSuiteWithName.phpe4d !phpunit/Event/Value/Throwable.php_ e_  (phpunit/Event/Value/ThrowableBuilder.php e _phpunit/Exception.phpLeLߊphpunit/Framework/Assert.phpe;i&phpunit/Framework/Assert/Functions.php,\e,\¬&phpunit/Framework/Attributes/After.phpe~jL¤+phpunit/Framework/Attributes/AfterClass.phpe׎.phpunit/Framework/Attributes/BackupGlobals.phpemEO7phpunit/Framework/Attributes/BackupStaticProperties.phpeh'phpunit/Framework/Attributes/Before.phpe;,phpunit/Framework/Attributes/BeforeClass.phpe\3phpunit/Framework/Attributes/CodeCoverageIgnore.phpnenpw,phpunit/Framework/Attributes/CoversClass.phpeCb/phpunit/Framework/Attributes/CoversFunction.phpeΐX.phpunit/Framework/Attributes/CoversNothing.phpe&ޏ-phpunit/Framework/Attributes/DataProvider.phpeM5phpunit/Framework/Attributes/DataProviderExternal.phpeh5(phpunit/Framework/Attributes/Depends.phpeO0phpunit/Framework/Attributes/DependsExternal.phpe +p>phpunit/Framework/Attributes/DependsExternalUsingDeepClone.phpeWgAphpunit/Framework/Attributes/DependsExternalUsingShallowClone.php e //phpunit/Framework/Attributes/DependsOnClass.phpe4=phpunit/Framework/Attributes/DependsOnClassUsingDeepClone.phpe'@phpunit/Framework/Attributes/DependsOnClassUsingShallowClone.phpe}E6phpunit/Framework/Attributes/DependsUsingDeepClone.phperˌ9phpunit/Framework/Attributes/DependsUsingShallowClone.phpe& 9phpunit/Framework/Attributes/DoesNotPerformAssertions.php)e)J.~@phpunit/Framework/Attributes/ExcludeGlobalVariableFromBackup.phpeL༤@phpunit/Framework/Attributes/ExcludeStaticPropertyFromBackup.php2e2&phpunit/Framework/Attributes/Group.phpeio;phpunit/Framework/Attributes/IgnoreClassForCodeCoverage.phpe3phpunit/Framework/Attributes/IgnoreDeprecations.php#e#]e>phpunit/Framework/Attributes/IgnoreFunctionForCodeCoverage.phped6`<phpunit/Framework/Attributes/IgnoreMethodForCodeCoverage.phpPePQ&phpunit/Framework/Attributes/Large.phpe"mn'phpunit/Framework/Attributes/Medium.phpe'2.phpunit/Framework/Attributes/PostCondition.phpeK-phpunit/Framework/Attributes/PreCondition.phpeؕ@4phpunit/Framework/Attributes/PreserveGlobalState.phpeM|1phpunit/Framework/Attributes/RequiresFunction.phped/phpunit/Framework/Attributes/RequiresMethod.phpeG +8phpunit/Framework/Attributes/RequiresOperatingSystem.phpe>phpunit/Framework/Attributes/RequiresOperatingSystemFamily.phpe-",phpunit/Framework/Attributes/RequiresPhp.phpen5phpunit/Framework/Attributes/RequiresPhpExtension.phpveve(a0phpunit/Framework/Attributes/RequiresPhpunit.phpeIt0phpunit/Framework/Attributes/RequiresSetting.phpeLP:phpunit/Framework/Attributes/RunClassInSeparateProcess.phpe:5phpunit/Framework/Attributes/RunInSeparateProcess.php e <phpunit/Framework/Attributes/RunTestsInSeparateProcesses.phpeĪ&phpunit/Framework/Attributes/Small.phpew~%phpunit/Framework/Attributes/Test.phpe#(phpunit/Framework/Attributes/TestDox.phpe{)phpunit/Framework/Attributes/TestWith.phpe[4-phpunit/Framework/Attributes/TestWithJson.phperzC'phpunit/Framework/Attributes/Ticket.phpe 2*phpunit/Framework/Attributes/UsesClass.phpeVF-phpunit/Framework/Attributes/UsesFunction.phpeN5ﻤ4phpunit/Framework/Attributes/WithoutErrorHandler.php +e +0phpunit/Framework/Constraint/Boolean/IsFalse.phpbebBVu/phpunit/Framework/Constraint/Boolean/IsTrue.php_e_)phpunit/Framework/Constraint/Callback.phpe.@-2phpunit/Framework/Constraint/Cardinality/Count.php e ^.8phpunit/Framework/Constraint/Cardinality/GreaterThan.phpVeVl=O4phpunit/Framework/Constraint/Cardinality/IsEmpty.phpded+R-5phpunit/Framework/Constraint/Cardinality/LessThan.phpPePդ5phpunit/Framework/Constraint/Cardinality/SameSize.phpeBs+phpunit/Framework/Constraint/Constraint.php e vߤ1phpunit/Framework/Constraint/Equality/IsEqual.php_ e_ ?phpunit/Framework/Constraint/Equality/IsEqualCanonicalizing.php +e +Ф=phpunit/Framework/Constraint/Equality/IsEqualIgnoringCase.php +e +F:phpunit/Framework/Constraint/Equality/IsEqualWithDelta.php e \̤4phpunit/Framework/Constraint/Exception/Exception.phpvevz8phpunit/Framework/Constraint/Exception/ExceptionCode.phpeMGphpunit/Framework/Constraint/Exception/ExceptionMessageIsOrContains.phpeSphpunit/Framework/Constraint/Exception/ExceptionMessageMatchesRegularExpression.phpNeNiK;phpunit/Framework/Constraint/Filesystem/DirectoryExists.phpeyy6phpunit/Framework/Constraint/Filesystem/FileExists.phpeC 6phpunit/Framework/Constraint/Filesystem/IsReadable.phpeȅ]6phpunit/Framework/Constraint/Filesystem/IsWritable.phpe +phpunit/Framework/Constraint/IsAnything.phpe{Ϝ,phpunit/Framework/Constraint/IsIdentical.phpe^j,phpunit/Framework/Constraint/JsonMatches.php e '4|.phpunit/Framework/Constraint/Math/IsFinite.php|e|G˴w0phpunit/Framework/Constraint/Math/IsInfinite.phpe3ߡ+phpunit/Framework/Constraint/Math/IsNan.phppepZMw4phpunit/Framework/Constraint/Object/ObjectEquals.phptet{`9phpunit/Framework/Constraint/Object/ObjectHasProperty.phpef8phpunit/Framework/Constraint/Operator/BinaryOperator.php] e]  4phpunit/Framework/Constraint/Operator/LogicalAnd.php]e]F4phpunit/Framework/Constraint/Operator/LogicalNot.phpK eK 3phpunit/Framework/Constraint/Operator/LogicalOr.phpAeA(K4phpunit/Framework/Constraint/Operator/LogicalXor.phpe2phpunit/Framework/Constraint/Operator/Operator.php,e,{7phpunit/Framework/Constraint/Operator/UnaryOperator.phpe.{-.phpunit/Framework/Constraint/String/IsJson.php4 e4 [ڤ9phpunit/Framework/Constraint/String/RegularExpression.php`e`m6phpunit/Framework/Constraint/String/StringContains.phpVeV2[6phpunit/Framework/Constraint/String/StringEndsWith.phpermMphpunit/Framework/Constraint/String/StringEqualsStringIgnoringLineEndings.php:e:IlFphpunit/Framework/Constraint/String/StringMatchesFormatDescription.php e m}t8phpunit/Framework/Constraint/String/StringStartsWith.phpei.Qդ8phpunit/Framework/Constraint/Traversable/ArrayHasKey.phpeL괤3phpunit/Framework/Constraint/Traversable/IsList.phpZeZ\)F@phpunit/Framework/Constraint/Traversable/TraversableContains.phpehEphpunit/Framework/Constraint/Traversable/TraversableContainsEqual.php)e)%Iphpunit/Framework/Constraint/Traversable/TraversableContainsIdentical.phpeyDphpunit/Framework/Constraint/Traversable/TraversableContainsOnly.phpTeTW?2phpunit/Framework/Constraint/Type/IsInstanceOf.phpeVm",phpunit/Framework/Constraint/Type/IsNull.php^e^Vɭ,phpunit/Framework/Constraint/Type/IsType.phpe!ޕ+phpunit/Framework/DataProviderTestSuite.phpeUa4phpunit/Framework/Exception/AssertionFailedError.phpe5phpunit/Framework/Exception/CodeCoverageException.phpe[4phpunit/Framework/Exception/EmptyStringException.phpe!)phpunit/Framework/Exception/Exception.phpeR*,:phpunit/Framework/Exception/ExpectationFailedException.phpeA>phpunit/Framework/Exception/GeneratorNotSupportedException.phpe(d9phpunit/Framework/Exception/Incomplete/IncompleteTest.phpe,+>phpunit/Framework/Exception/Incomplete/IncompleteTestError.phpeםܤ8phpunit/Framework/Exception/InvalidArgumentException.phpe:(<phpunit/Framework/Exception/InvalidCoversTargetException.phpeo苤<phpunit/Framework/Exception/InvalidDataProviderException.phpe.ڜɤ:phpunit/Framework/Exception/InvalidDependencyException.phpe}9phpunit/Framework/Exception/NoChildTestSuiteException.phpeP$Nphpunit/Framework/Exception/ObjectEquals/ActualValueIsNotAnObjectException.phpAeA<ؤ`phpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotAcceptParameterTypeException.phpe@bphpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareBoolReturnTypeException.phpePigphpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareExactlyOneParameterException.phpeFaphpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotDeclareParameterTypeException.phpeENRphpunit/Framework/Exception/ObjectEquals/ComparisonMethodDoesNotExistException.phpeui8phpunit/Framework/Exception/PhptAssertionFailedError.php2e2_9phpunit/Framework/Exception/ProcessIsolationException.phpeH:3phpunit/Framework/Exception/Skipped/SkippedTest.phpeS.=phpunit/Framework/Exception/Skipped/SkippedTestSuiteError.phpexCphpunit/Framework/Exception/Skipped/SkippedWithMessageException.phpez$@phpunit/Framework/Exception/UnknownClassOrInterfaceException.phpeӤ4phpunit/Framework/Exception/UnknownTypeException.phpnen(j.phpunit/Framework/ExecutionOrderDependency.phpeX>2&3phpunit/Framework/MockObject/ConfigurableMethod.phpeVkRAphpunit/Framework/MockObject/Exception/BadMethodCallException.phpeΫXGphpunit/Framework/MockObject/Exception/CannotUseAddMethodsException.php5e5{Hphpunit/Framework/MockObject/Exception/CannotUseOnlyMethodsException.phpe/(4phpunit/Framework/MockObject/Exception/Exception.phpeB'Kphpunit/Framework/MockObject/Exception/IncompatibleReturnValueException.phpyey|/Hphpunit/Framework/MockObject/Exception/MatchBuilderNotFoundException.phpeLphpunit/Framework/MockObject/Exception/MatcherAlreadyRegisteredException.phpez'Lphpunit/Framework/MockObject/Exception/MethodCannotBeConfiguredException.phpe}QOphpunit/Framework/MockObject/Exception/MethodNameAlreadyConfiguredException.phpeӁƤKphpunit/Framework/MockObject/Exception/MethodNameNotConfiguredException.php~e~x1)Uphpunit/Framework/MockObject/Exception/MethodParametersAlreadyConfiguredException.phpe rHphpunit/Framework/MockObject/Exception/NeverReturningMethodException.phpmem+">phpunit/Framework/MockObject/Exception/ReflectionException.phpe.ؔLphpunit/Framework/MockObject/Exception/ReturnValueNotConfiguredException.php<e<Qo;phpunit/Framework/MockObject/Exception/RuntimeException.phpe_|Pphpunit/Framework/MockObject/Generator/Exception/ClassAlreadyExistsException.phpeϠPphpunit/Framework/MockObject/Generator/Exception/ClassIsEnumerationException.phpeYJphpunit/Framework/MockObject/Generator/Exception/ClassIsFinalException.phpeQMphpunit/Framework/MockObject/Generator/Exception/ClassIsReadonlyException.phpeYMphpunit/Framework/MockObject/Generator/Exception/DuplicateMethodException.phpe.٤>phpunit/Framework/MockObject/Generator/Exception/Exception.phpeOphpunit/Framework/MockObject/Generator/Exception/InvalidMethodNameException.phpelDcphpunit/Framework/MockObject/Generator/Exception/OriginalConstructorInvocationRequiredException.phpeDKƤHphpunit/Framework/MockObject/Generator/Exception/ReflectionException.phpeq3Ephpunit/Framework/MockObject/Generator/Exception/RuntimeException.phpe}ʻWphpunit/Framework/MockObject/Generator/Exception/SoapExtensionNotAvailableException.phpen5Jphpunit/Framework/MockObject/Generator/Exception/UnknownClassException.phpeZMJphpunit/Framework/MockObject/Generator/Exception/UnknownTraitException.php +e +9ѤIphpunit/Framework/MockObject/Generator/Exception/UnknownTypeException.phpe#J4phpunit/Framework/MockObject/Generator/Generator.php^~e^~Yw'4phpunit/Framework/MockObject/Generator/MockClass.phpdedN|5phpunit/Framework/MockObject/Generator/MockMethod.php)e)i8phpunit/Framework/MockObject/Generator/MockMethodSet.phpqeqR4phpunit/Framework/MockObject/Generator/MockTrait.phpe:3phpunit/Framework/MockObject/Generator/MockType.phpedp[9phpunit/Framework/MockObject/Generator/TemplateLoader.phpeqWp@phpunit/Framework/MockObject/Generator/templates/deprecation.tpl;e;O5sCphpunit/Framework/MockObject/Generator/templates/doubled_method.tpl8e8)դJphpunit/Framework/MockObject/Generator/templates/doubled_static_method.tple 4RAphpunit/Framework/MockObject/Generator/templates/intersection.tplLeL-XCphpunit/Framework/MockObject/Generator/templates/proxied_method.tple Fphpunit/Framework/MockObject/Generator/templates/test_double_class.tplfef' @phpunit/Framework/MockObject/Generator/templates/trait_class.tplQeQ<Ȥ?phpunit/Framework/MockObject/Generator/templates/wsdl_class.tple@phpunit/Framework/MockObject/Generator/templates/wsdl_method.tpl<e<i,phpunit/Framework/MockObject/MockBuilder.phpp/ep/ ?phpunit/Framework/MockObject/Runtime/Api/DoubledCloneMethod.php2e2.I3phpunit/Framework/MockObject/Runtime/Api/Method.php e G(:phpunit/Framework/MockObject/Runtime/Api/MockObjectApi.php}e} +?phpunit/Framework/MockObject/Runtime/Api/ProxiedCloneMethod.phpMeMf4phpunit/Framework/MockObject/Runtime/Api/StubApi.php5e59phpunit/Framework/MockObject/Runtime/Builder/Identity.php[e[$X3{Aphpunit/Framework/MockObject/Runtime/Builder/InvocationMocker.php#e#rBphpunit/Framework/MockObject/Runtime/Builder/InvocationStubber.phpeeU@phpunit/Framework/MockObject/Runtime/Builder/MethodNameMatch.phpe:'@phpunit/Framework/MockObject/Runtime/Builder/ParametersMatch.phpNeNx)5phpunit/Framework/MockObject/Runtime/Builder/Stub.phpe(=phpunit/Framework/MockObject/Runtime/Interface/MockObject.phpetEphpunit/Framework/MockObject/Runtime/Interface/MockObjectInternal.phpe c7phpunit/Framework/MockObject/Runtime/Interface/Stub.phpeliH?phpunit/Framework/MockObject/Runtime/Interface/StubInternal.phpded٤3phpunit/Framework/MockObject/Runtime/Invocation.phpe.pOA:phpunit/Framework/MockObject/Runtime/InvocationHandler.phpe0phpunit/Framework/MockObject/Runtime/Matcher.phpe=phpunit/Framework/MockObject/Runtime/MethodNameConstraint.phpeӶ=phpunit/Framework/MockObject/Runtime/ReturnValueGenerator.phpkek=phpunit/Framework/MockObject/Runtime/Rule/AnyInvokedCount.phpe3;phpunit/Framework/MockObject/Runtime/Rule/AnyParameters.phpeU=phpunit/Framework/MockObject/Runtime/Rule/InvocationOrder.phpeH NAphpunit/Framework/MockObject/Runtime/Rule/InvokedAtLeastCount.phpeiԤ@phpunit/Framework/MockObject/Runtime/Rule/InvokedAtLeastOnce.phpe @phpunit/Framework/MockObject/Runtime/Rule/InvokedAtMostCount.phpeN:phpunit/Framework/MockObject/Runtime/Rule/InvokedCount.phpZ eZ 8phpunit/Framework/MockObject/Runtime/Rule/MethodName.phpeʆ8phpunit/Framework/MockObject/Runtime/Rule/Parameters.php9e9ڳj<phpunit/Framework/MockObject/Runtime/Rule/ParametersRule.phpel^L>phpunit/Framework/MockObject/Runtime/Stub/ConsecutiveCalls.phpe7phpunit/Framework/MockObject/Runtime/Stub/Exception.php;e; Ҥ<phpunit/Framework/MockObject/Runtime/Stub/ReturnArgument.php4e4`<phpunit/Framework/MockObject/Runtime/Stub/ReturnCallback.phpieit=phpunit/Framework/MockObject/Runtime/Stub/ReturnReference.phpeuߔ8phpunit/Framework/MockObject/Runtime/Stub/ReturnSelf.phpeר ݤ8phpunit/Framework/MockObject/Runtime/Stub/ReturnStub.phpe`[<phpunit/Framework/MockObject/Runtime/Stub/ReturnValueMap.phpeʤ2phpunit/Framework/MockObject/Runtime/Stub/Stub.phpzez!phpunit/Framework/Reorderable.phpe˯$phpunit/Framework/SelfDescribing.php +e +sphpunit/Framework/Test.phpeǺ!phpunit/Framework/TestBuilder.php%e%݇Ӥphpunit/Framework/TestCase.phpSeS+ߤ phpunit/Framework/TestRunner.php68e68wHʤ$phpunit/Framework/TestSize/Known.phpe)T Ф$phpunit/Framework/TestSize/Large.php/e/N`i%phpunit/Framework/TestSize/Medium.php2e2b{$phpunit/Framework/TestSize/Small.php#e#24'phpunit/Framework/TestSize/TestSize.php5e5ˮ&phpunit/Framework/TestSize/Unknown.phpeg,phpunit/Framework/TestStatus/Deprecation.phpev&phpunit/Framework/TestStatus/Error.phpe'qH(phpunit/Framework/TestStatus/Failure.phpe:+phpunit/Framework/TestStatus/Incomplete.phpe&phpunit/Framework/TestStatus/Known.phpjej7'phpunit/Framework/TestStatus/Notice.phpe!D炤&phpunit/Framework/TestStatus/Risky.phpep(phpunit/Framework/TestStatus/Skipped.phpex(phpunit/Framework/TestStatus/Success.phpeAg+phpunit/Framework/TestStatus/TestStatus.php^e^UF(phpunit/Framework/TestStatus/Unknown.phpeV(phpunit/Framework/TestStatus/Warning.phpeqZiphpunit/Framework/TestSuite.php1De1DԤ'phpunit/Framework/TestSuiteIterator.php3e3.Kphpunit/Logging/EventLogger.phpeytphpunit/Logging/Exception.phpe%٤(phpunit/Logging/JUnit/JunitXmlLogger.phpE/eE/)%/phpunit/Logging/JUnit/Subscriber/Subscriber.phpeyJ;:phpunit/Logging/JUnit/Subscriber/TestErroredSubscriber.php e 9phpunit/Logging/JUnit/Subscriber/TestFailedSubscriber.phpeZ;phpunit/Logging/JUnit/Subscriber/TestFinishedSubscriber.phpeA0pCphpunit/Logging/JUnit/Subscriber/TestMarkedIncompleteSubscriber.php?e?"3ǤDphpunit/Logging/JUnit/Subscriber/TestPreparationFailedSubscriber.php?e?1eEphpunit/Logging/JUnit/Subscriber/TestPreparationStartedSubscriber.phpKeK pܤ;phpunit/Logging/JUnit/Subscriber/TestPreparedSubscriber.php e oˤJphpunit/Logging/JUnit/Subscriber/TestRunnerExecutionFinishedSubscriber.phpeĤ:phpunit/Logging/JUnit/Subscriber/TestSkippedSubscriber.php e @phpunit/Logging/JUnit/Subscriber/TestSuiteFinishedSubscriber.phpeVG?phpunit/Logging/JUnit/Subscriber/TestSuiteStartedSubscriber.phpe?2phpunit/Logging/TeamCity/Subscriber/Subscriber.phpeGEphpunit/Logging/TeamCity/Subscriber/TestConsideredRiskySubscriber.php?e?s&U=phpunit/Logging/TeamCity/Subscriber/TestErroredSubscriber.phpeФ<phpunit/Logging/TeamCity/Subscriber/TestFailedSubscriber.php e U>phpunit/Logging/TeamCity/Subscriber/TestFinishedSubscriber.phpei&iFphpunit/Logging/TeamCity/Subscriber/TestMarkedIncompleteSubscriber.phpEeE >phpunit/Logging/TeamCity/Subscriber/TestPreparedSubscriber.phpe Mphpunit/Logging/TeamCity/Subscriber/TestRunnerExecutionFinishedSubscriber.phpe,=phpunit/Logging/TeamCity/Subscriber/TestSkippedSubscriber.phpemF֤Cphpunit/Logging/TeamCity/Subscriber/TestSuiteFinishedSubscriber.phpexBphpunit/Logging/TeamCity/Subscriber/TestSuiteStartedSubscriber.phpe}G9+phpunit/Logging/TeamCity/TeamCityLogger.php$e$yj(phpunit/Logging/TestDox/HtmlRenderer.php e lE*phpunit/Logging/TestDox/NamePrettifier.php!e!;Y-phpunit/Logging/TestDox/PlainTextRenderer.phpe<phpunit/Logging/TestDox/TestResult/Subscriber/Subscriber.phpe'ĤOphpunit/Logging/TestDox/TestResult/Subscriber/TestConsideredRiskySubscriber.phpeAGphpunit/Logging/TestDox/TestResult/Subscriber/TestErroredSubscriber.phpe;m Fphpunit/Logging/TestDox/TestResult/Subscriber/TestFailedSubscriber.phpeF,Hphpunit/Logging/TestDox/TestResult/Subscriber/TestFinishedSubscriber.phpePGPphpunit/Logging/TestDox/TestResult/Subscriber/TestMarkedIncompleteSubscriber.phpe {Fphpunit/Logging/TestDox/TestResult/Subscriber/TestPassedSubscriber.phpe)#Hphpunit/Logging/TestDox/TestResult/Subscriber/TestPreparedSubscriber.phpe.Gphpunit/Logging/TestDox/TestResult/Subscriber/TestSkippedSubscriber.phpe<ӤTphpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredDeprecationSubscriber.phpeo!Ophpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredNoticeSubscriber.phpeZWphpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpDeprecationSubscriber.php e uRphpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpNoticeSubscriber.phpe$ ɤSphpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpWarningSubscriber.phpe_a[phpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpunitDeprecationSubscriber.php$e$𛭤Uphpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpunitErrorSubscriber.phpeWphpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredPhpunitWarningSubscriber.php e -.Pphpunit/Logging/TestDox/TestResult/Subscriber/TestTriggeredWarningSubscriber.phpeB1phpunit/Logging/TestDox/TestResult/TestResult.phpefE.{;phpunit/Logging/TestDox/TestResult/TestResultCollection.phpeCphpunit/Logging/TestDox/TestResult/TestResultCollectionIterator.phpex:phpunit/Logging/TestDox/TestResult/TestResultCollector.php&e&/phpunit/Metadata/After.php]e]}p֤phpunit/Metadata/AfterClass.phplel{ۤ%phpunit/Metadata/Api/CodeCoverage.php$e$B& %phpunit/Metadata/Api/DataProvider.phpM!eM!p%phpunit/Metadata/Api/Dependencies.php e  eɤphpunit/Metadata/Api/Groups.php9 e9 z/[C$phpunit/Metadata/Api/HookMethods.phpu eu ` %phpunit/Metadata/Api/Requirements.phpe>c8"phpunit/Metadata/BackupGlobals.phpep<媤+phpunit/Metadata/BackupStaticProperties.phpe̤phpunit/Metadata/Before.php`e`X phpunit/Metadata/BeforeClass.phpoeokphpunit/Metadata/Covers.php+e+][ phpunit/Metadata/CoversClass.php@e@'phpunit/Metadata/CoversDefaultClass.phpXeX[~#phpunit/Metadata/CoversFunction.phpKeK Qä"phpunit/Metadata/CoversNothing.phpueu\`!phpunit/Metadata/DataProvider.phpe*'#phpunit/Metadata/DependsOnClass.phpe{9Y$phpunit/Metadata/DependsOnMethod.phpel,ؤ-phpunit/Metadata/DoesNotPerformAssertions.phpeaTphpunit/Metadata/Exception/AnnotationsAreNotSupportedForInternalClassesException.php:e:,Ȥ(phpunit/Metadata/Exception/Exception.phpOeOwAphpunit/Metadata/Exception/InvalidVersionRequirementException.phpePR<phpunit/Metadata/Exception/NoVersionRequirementException.phpe?+睤2phpunit/Metadata/Exception/ReflectionException.phpen4phpunit/Metadata/ExcludeGlobalVariableFromBackup.phpeU4phpunit/Metadata/ExcludeStaticPropertyFromBackup.phpephpunit/Metadata/Group.php=e=U/phpunit/Metadata/IgnoreClassForCodeCoverage.phpek'phpunit/Metadata/IgnoreDeprecations.phpe0Hi2phpunit/Metadata/IgnoreFunctionForCodeCoverage.phpeyA3s0phpunit/Metadata/IgnoreMethodForCodeCoverage.phpeV:;Bphpunit/Metadata/Metadata.php[e[J'phpunit/Metadata/MetadataCollection.php<.e<.7/phpunit/Metadata/MetadataCollectionIterator.phpe2I/phpunit/Metadata/Parser/Annotation/DocBlock.phpP"eP"nV/phpunit/Metadata/Parser/Annotation/Registry.php e ],phpunit/Metadata/Parser/AnnotationParser.phpaDeaDկ+phpunit/Metadata/Parser/AttributeParser.phpWeWt)phpunit/Metadata/Parser/CachingParser.phpePy~"phpunit/Metadata/Parser/Parser.phpeOv'phpunit/Metadata/Parser/ParserChain.phpe +nY$phpunit/Metadata/Parser/Registry.phpMeM2e"phpunit/Metadata/PostCondition.phpueuX !phpunit/Metadata/PreCondition.phprer\AI<(phpunit/Metadata/PreserveGlobalState.phpe%phpunit/Metadata/RequiresFunction.phpsesh#phpunit/Metadata/RequiresMethod.phpeФ,phpunit/Metadata/RequiresOperatingSystem.phpe/2phpunit/Metadata/RequiresOperatingSystemFamily.phpe.E phpunit/Metadata/RequiresPhp.php%e% E)phpunit/Metadata/RequiresPhpExtension.phpe{k:$phpunit/Metadata/RequiresPhpunit.php1e1$phpunit/Metadata/RequiresSetting.phpez{ڤ.phpunit/Metadata/RunClassInSeparateProcess.phpe9)phpunit/Metadata/RunInSeparateProcess.phpe&0phpunit/Metadata/RunTestsInSeparateProcesses.phpeez(phpunit/Metadata/Test.phpZeZ.ophpunit/Metadata/TestDox.php e (phpunit/Metadata/TestWith.phpeL:phpunit/Metadata/Uses.php%e%Fphpunit/Metadata/UsesClass.php:e:rY%phpunit/Metadata/UsesDefaultClass.phpReR"!!phpunit/Metadata/UsesFunction.phpBeBqɤ2phpunit/Metadata/Version/ComparisonRequirement.phpheh52phpunit/Metadata/Version/ConstraintRequirement.phpew㳤(phpunit/Metadata/Version/Requirement.phpea p_(phpunit/Metadata/WithoutErrorHandler.phpe#+@$phpunit/Runner/Baseline/Baseline.phpeAphpunit/Runner/Baseline/Exception/CannotLoadBaselineException.phpe\8Bphpunit/Runner/Baseline/Exception/FileDoesNotHaveLineException.phpeM%phpunit/Runner/Baseline/Generator.php e *Y!phpunit/Runner/Baseline/Issue.php e 95¤"phpunit/Runner/Baseline/Reader.phpn en G2phpunit/Runner/Baseline/RelativePathCalculator.php +e +1phpunit/Runner/Baseline/Subscriber/Subscriber.phpe>>kIphpunit/Runner/Baseline/Subscriber/TestTriggeredDeprecationSubscriber.phpeP53Dphpunit/Runner/Baseline/Subscriber/TestTriggeredNoticeSubscriber.phpnen6=Lphpunit/Runner/Baseline/Subscriber/TestTriggeredPhpDeprecationSubscriber.phpeO դGphpunit/Runner/Baseline/Subscriber/TestTriggeredPhpNoticeSubscriber.php}e}KPHphpunit/Runner/Baseline/Subscriber/TestTriggeredPhpWarningSubscriber.phpeD-lEphpunit/Runner/Baseline/Subscriber/TestTriggeredWarningSubscriber.phpsesk2"phpunit/Runner/Baseline/Writer.phpe-,phpunit/Runner/CodeCoverage.phpt2et2}phpunit/Runner/ErrorHandler.phppep.~j8phpunit/Runner/Exception/ClassCannotBeFoundException.phpec@phpunit/Runner/Exception/ClassDoesNotExtendTestCaseException.phpen5phpunit/Runner/Exception/ClassIsAbstractException.phpep7o>phpunit/Runner/Exception/DirectoryCannotBeCreatedException.phpe:Vr+phpunit/Runner/Exception/ErrorException.phpee"&phpunit/Runner/Exception/Exception.phpenHA6phpunit/Runner/Exception/FileDoesNotExistException.phpeg K2phpunit/Runner/Exception/InvalidOrderException.phpe8Kڤ5phpunit/Runner/Exception/InvalidPhptFileException.phpezA>4phpunit/Runner/Exception/NoIgnoredEventException.phpe3Uǚ;phpunit/Runner/Exception/ParameterDoesNotExistException.phpe]wQDphpunit/Runner/Exception/PhptExternalFileCannotBeLoadedException.phpej0phpunit/Runner/Exception/ReflectionException.phpe^ss<phpunit/Runner/Exception/UnsupportedPhptSectionException.phpe &phpunit/Runner/Extension/Extension.phpeVZ2phpunit/Runner/Extension/ExtensionBootstrapper.php[ e[ Zq3#phpunit/Runner/Extension/Facade.php +e +TŃ0phpunit/Runner/Extension/ParameterCollection.phpenZ[c'phpunit/Runner/Extension/PharLoader.phpeD 4phpunit/Runner/Filter/ExcludeGroupFilterIterator.phplelH}H!phpunit/Runner/Filter/Factory.phpeX/-phpunit/Runner/Filter/GroupFilterIterator.php9e9.&?4phpunit/Runner/Filter/IncludeGroupFilterIterator.phpkekSw,phpunit/Runner/Filter/NameFilterIterator.php e uc.phpunit/Runner/Filter/TestIdFilterIterator.phpe/=phpunit/Runner/GarbageCollection/GarbageCollectionHandler.phpetKphpunit/Runner/GarbageCollection/Subscriber/ExecutionFinishedSubscriber.phpeRJphpunit/Runner/GarbageCollection/Subscriber/ExecutionStartedSubscriber.phpe+0:phpunit/Runner/GarbageCollection/Subscriber/Subscriber.php"e"eFphpunit/Runner/GarbageCollection/Subscriber/TestFinishedSubscriber.php[e[Hphpunit/Runner/PhptTestCase.phpZUeZU`-Ϥ1phpunit/Runner/ResultCache/DefaultResultCache.php e X-.phpunit/Runner/ResultCache/NullResultCache.phpeS*phpunit/Runner/ResultCache/ResultCache.phpe3Gb1phpunit/Runner/ResultCache/ResultCacheHandler.phpe4phpunit/Runner/ResultCache/Subscriber/Subscriber.phpeM#Gphpunit/Runner/ResultCache/Subscriber/TestConsideredRiskySubscriber.phpe$k?phpunit/Runner/ResultCache/Subscriber/TestErroredSubscriber.phpe4}Fr>phpunit/Runner/ResultCache/Subscriber/TestFailedSubscriber.phpe )@phpunit/Runner/ResultCache/Subscriber/TestFinishedSubscriber.phpUeUVHphpunit/Runner/ResultCache/Subscriber/TestMarkedIncompleteSubscriber.phpe.6@phpunit/Runner/ResultCache/Subscriber/TestPreparedSubscriber.phpeΤ?phpunit/Runner/ResultCache/Subscriber/TestSkippedSubscriber.phpOeODÇEphpunit/Runner/ResultCache/Subscriber/TestSuiteFinishedSubscriber.phpeߤDphpunit/Runner/ResultCache/Subscriber/TestSuiteStartedSubscriber.phpe0DĤ'phpunit/Runner/TestResult/Collector.php!Ie!I$phpunit/Runner/TestResult/Facade.php e X#phpunit/Runner/TestResult/Issue.php e ysh)phpunit/Runner/TestResult/PassedTests.php$ e$ kWOphpunit/Runner/TestResult/Subscriber/BeforeTestClassMethodErroredSubscriber.php.e.$|;Cphpunit/Runner/TestResult/Subscriber/ExecutionStartedSubscriber.php$e$ޙ63phpunit/Runner/TestResult/Subscriber/Subscriber.phpe񡠒Fphpunit/Runner/TestResult/Subscriber/TestConsideredRiskySubscriber.phpe}9r4>phpunit/Runner/TestResult/Subscriber/TestErroredSubscriber.phpeܤ=phpunit/Runner/TestResult/Subscriber/TestFailedSubscriber.phpe?%+?phpunit/Runner/TestResult/Subscriber/TestFinishedSubscriber.phpeۤGphpunit/Runner/TestResult/Subscriber/TestMarkedIncompleteSubscriber.phpelH?phpunit/Runner/TestResult/Subscriber/TestPreparedSubscriber.phpe<¤Qphpunit/Runner/TestResult/Subscriber/TestRunnerTriggeredDeprecationSubscriber.phpeYMphpunit/Runner/TestResult/Subscriber/TestRunnerTriggeredWarningSubscriber.phpex>phpunit/Runner/TestResult/Subscriber/TestSkippedSubscriber.phpeADphpunit/Runner/TestResult/Subscriber/TestSuiteFinishedSubscriber.phpeCphpunit/Runner/TestResult/Subscriber/TestSuiteSkippedSubscriber.phpeFCphpunit/Runner/TestResult/Subscriber/TestSuiteStartedSubscriber.phpe bZKphpunit/Runner/TestResult/Subscriber/TestTriggeredDeprecationSubscriber.phpesXcEphpunit/Runner/TestResult/Subscriber/TestTriggeredErrorSubscriber.phpe{9Fphpunit/Runner/TestResult/Subscriber/TestTriggeredNoticeSubscriber.phpeߋ%Nphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpDeprecationSubscriber.phpeeLOԤIphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpNoticeSubscriber.phpe dJphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpWarningSubscriber.phpeèMRphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpunitDeprecationSubscriber.php0e0gﰤLphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpunitErrorSubscriber.php e T5Nphpunit/Runner/TestResult/Subscriber/TestTriggeredPhpunitWarningSubscriber.phpeDnGphpunit/Runner/TestResult/Subscriber/TestTriggeredWarningSubscriber.phpeɤ(phpunit/Runner/TestResult/TestResult.php<e<&u;"phpunit/Runner/TestSuiteLoader.phpe[ +uФ"phpunit/Runner/TestSuiteSorter.phpR%eR%phpunit/Runner/Version.phpesphpunit/TextUI/Application.phpOeOx"phpunit/TextUI/Command/Command.phpeO㍤9phpunit/TextUI/Command/Commands/AtLeastVersionCommand.phpeTؼ@phpunit/TextUI/Command/Commands/GenerateConfigurationCommand.phpeor5phpunit/TextUI/Command/Commands/ListGroupsCommand.phpe,e9phpunit/TextUI/Command/Commands/ListTestSuitesCommand.phpeKn:phpunit/TextUI/Command/Commands/ListTestsAsTextCommand.phpeE>9phpunit/TextUI/Command/Commands/ListTestsAsXmlCommand.phpe >?phpunit/TextUI/Command/Commands/MigrateConfigurationCommand.phpe+3phpunit/TextUI/Command/Commands/ShowHelpCommand.php/e/>>#6phpunit/TextUI/Command/Commands/ShowVersionCommand.phpSeS7phpunit/TextUI/Command/Commands/VersionCheckCommand.phpe"Ƥ@phpunit/TextUI/Command/Commands/WarmCodeCoverageCacheCommand.php e )!phpunit/TextUI/Command/Result.phpcec{(phpunit/TextUI/Configuration/Builder.phpe4a(,phpunit/TextUI/Configuration/Cli/Builder.phpfZefZv2phpunit/TextUI/Configuration/Cli/Configuration.phpe#c.phpunit/TextUI/Configuration/Cli/Exception.phpe%zE?phpunit/TextUI/Configuration/Cli/XmlConfigurationFileFinder.phpe`L;phpunit/TextUI/Configuration/CodeCoverageFilterRegistry.phpe .phpunit/TextUI/Configuration/Configuration.php~e~a]8Dphpunit/TextUI/Configuration/Exception/CannotFindSchemaException.php&e&ؔ}Sphpunit/TextUI/Configuration/Exception/CodeCoverageReportNotConfiguredException.php$e$Nphpunit/TextUI/Configuration/Exception/ConfigurationCannotBeBuiltException.phpeZ$&4phpunit/TextUI/Configuration/Exception/Exception.phpeGphpunit/TextUI/Configuration/Exception/FilterNotConfiguredException.phpegGLphpunit/TextUI/Configuration/Exception/IncludePathNotConfiguredException.phpexHphpunit/TextUI/Configuration/Exception/LoggingNotConfiguredException.phpeY%>phpunit/TextUI/Configuration/Exception/NoBaselineException.phpeP!:?phpunit/TextUI/Configuration/Exception/NoBootstrapException.phpe`lƤDphpunit/TextUI/Configuration/Exception/NoCacheDirectoryException.phpeCAphpunit/TextUI/Configuration/Exception/NoCliArgumentException.phpe|J?RGphpunit/TextUI/Configuration/Exception/NoConfigurationFileException.phpeMLphpunit/TextUI/Configuration/Exception/NoCoverageCacheDirectoryException.phpe;Cphpunit/TextUI/Configuration/Exception/NoCustomCssFileException.phpeʑ0Fphpunit/TextUI/Configuration/Exception/NoDefaultTestSuiteException.phpe Lphpunit/TextUI/Configuration/Exception/NoPharExtensionDirectoryException.phpe)R'phpunit/TextUI/Configuration/Merger.phped.s}+phpunit/TextUI/Configuration/PhpHandler.php\e\y)phpunit/TextUI/Configuration/Registry.phpK eK /B-phpunit/TextUI/Configuration/SourceFilter.phpe^:ؤ-phpunit/TextUI/Configuration/SourceMapper.php e ff1phpunit/TextUI/Configuration/TestSuiteBuilder.phpe ă/phpunit/TextUI/Configuration/Value/Constant.php>e>o<9phpunit/TextUI/Configuration/Value/ConstantCollection.phpeW6bAphpunit/TextUI/Configuration/Value/ConstantCollectionIterator.phpeg]0phpunit/TextUI/Configuration/Value/Directory.phpe3F:phpunit/TextUI/Configuration/Value/DirectoryCollection.php e ?aBphpunit/TextUI/Configuration/Value/DirectoryCollectionIterator.phpeہW9phpunit/TextUI/Configuration/Value/ExtensionBootstrap.phper[Cphpunit/TextUI/Configuration/Value/ExtensionBootstrapCollection.phpeѤKphpunit/TextUI/Configuration/Value/ExtensionBootstrapCollectionIterator.phpe( V+phpunit/TextUI/Configuration/Value/File.php/e/w5phpunit/TextUI/Configuration/Value/FileCollection.phpe'P=phpunit/TextUI/Configuration/Value/FileCollectionIterator.phpnenj6phpunit/TextUI/Configuration/Value/FilterDirectory.phpepS@phpunit/TextUI/Configuration/Value/FilterDirectoryCollection.phpDeDJHphpunit/TextUI/Configuration/Value/FilterDirectoryCollectionIterator.phpe񭥤,phpunit/TextUI/Configuration/Value/Group.phpekפ6phpunit/TextUI/Configuration/Value/GroupCollection.php8e8+Bm>phpunit/TextUI/Configuration/Value/GroupCollectionIterator.phpyeywX1phpunit/TextUI/Configuration/Value/IniSetting.php1e1;phpunit/TextUI/Configuration/Value/IniSettingCollection.phpe^Cphpunit/TextUI/Configuration/Value/IniSettingCollectionIterator.phpe8Ф*phpunit/TextUI/Configuration/Value/Php.phpYeY畉-phpunit/TextUI/Configuration/Value/Source.phpe-Ȥ4phpunit/TextUI/Configuration/Value/TestDirectory.phpeF >phpunit/TextUI/Configuration/Value/TestDirectoryCollection.php-e-zȤFphpunit/TextUI/Configuration/Value/TestDirectoryCollectionIterator.phpea>k/phpunit/TextUI/Configuration/Value/TestFile.phpe)tФ9phpunit/TextUI/Configuration/Value/TestFileCollection.phpeAphpunit/TextUI/Configuration/Value/TestFileCollectionIterator.phpep0phpunit/TextUI/Configuration/Value/TestSuite.phpe䣉:phpunit/TextUI/Configuration/Value/TestSuiteCollection.phpePBphpunit/TextUI/Configuration/Value/TestSuiteCollectionIterator.phpe;E/phpunit/TextUI/Configuration/Value/Variable.phpe@9phpunit/TextUI/Configuration/Value/VariableCollection.phpeїAphpunit/TextUI/Configuration/Value/VariableCollectionIterator.phpeՑ>phpunit/TextUI/Configuration/Xml/CodeCoverage/CodeCoverage.phpe?phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Clover.phpeƣˠBphpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Cobertura.phpe5?phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Crap4j.phppep^=phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Html.php +e +CD<phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Php.phpeCC|=phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Text.php}e}<phpunit/TextUI/Configuration/Xml/CodeCoverage/Report/Xml.phpe:H-2phpunit/TextUI/Configuration/Xml/Configuration.php e lE<9phpunit/TextUI/Configuration/Xml/DefaultConfiguration.php e uԤ.phpunit/TextUI/Configuration/Xml/Exception.phpeN5+.phpunit/TextUI/Configuration/Xml/Generator.phpeX]!+phpunit/TextUI/Configuration/Xml/Groups.phpded8=Ӥ@phpunit/TextUI/Configuration/Xml/LoadedFromFileConfiguration.phpe-[+phpunit/TextUI/Configuration/Xml/Loader.phpσeσ`Ӥ2phpunit/TextUI/Configuration/Xml/Logging/Junit.phpeФ4phpunit/TextUI/Configuration/Xml/Logging/Logging.php +e +#5phpunit/TextUI/Configuration/Xml/Logging/TeamCity.phpeϦ9phpunit/TextUI/Configuration/Xml/Logging/TestDox/Html.phpeB*$9phpunit/TextUI/Configuration/Xml/Logging/TestDox/Text.phpe?phpunit/TextUI/Configuration/Xml/Migration/MigrationBuilder.php` e` HHHphpunit/TextUI/Configuration/Xml/Migration/MigrationBuilderException.phpeUWĝAphpunit/TextUI/Configuration/Xml/Migration/MigrationException.phpe\ZIphpunit/TextUI/Configuration/Xml/Migration/Migrations/ConvertLogTypes.phpehoePphpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageCloverToReport.phpXeXijPphpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageCrap4jToReport.phpe$i'Nphpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageHtmlToReport.phpeՄjMphpunit/TextUI/Configuration/Xml/Migration/Migrations/CoveragePhpToReport.phpFeF^ӤNphpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageTextToReport.phpeV_Mphpunit/TextUI/Configuration/Xml/Migration/Migrations/CoverageXmlToReport.phpKeK_ Zphpunit/TextUI/Configuration/Xml/Migration/Migrations/IntroduceCacheDirectoryAttribute.php\e\Rphpunit/TextUI/Configuration/Xml/Migration/Migrations/IntroduceCoverageElement.phpeUNphpunit/TextUI/Configuration/Xml/Migration/Migrations/LogToReportMigration.phpeUCphpunit/TextUI/Configuration/Xml/Migration/Migrations/Migration.phpe'ephpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveAttributesFromFilterWhitelistToCoverage.phpeU%5Zphpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveAttributesFromRootToCoverage.phpe"OYphpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveCoverageDirectoriesToSource.phpWeWyzYphpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveWhitelistExcludesToCoverage.phpe +Yphpunit/TextUI/Configuration/Xml/Migration/Migrations/MoveWhitelistIncludesToCoverage.phpe8;sphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveBeStrictAboutResourceUsageDuringSmallTestsAttribute.phpe yhphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveBeStrictAboutTodoAnnotatedTestsAttribute.phpmemXphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCacheResultFileAttribute.php=e=ۨǤTphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCacheTokensAttribute.php1e1T9`phpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveConversionToExceptionsAttributes.php e fphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCoverageElementCacheDirectoryAttribute.phpemphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveCoverageElementProcessUncoveredFilesAttribute.phpe[ Kphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveEmptyFilter.php{e{KIphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveListeners.php'e'nHphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveLogTypes.phpieiOphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveLoggingElements.php)e).Vphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveNoInteractionAttribute.php7e7⼿Qphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemovePrinterAttributes.phpe}Tphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveTestDoxGroupsElement.php6e6DYphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveTestSuiteLoaderAttributes.phpesUPphpunit/TextUI/Configuration/Xml/Migration/Migrations/RemoveVerboseAttribute.php%e%J_phpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameBackupStaticAttributesAttribute.php$e$CȤfphpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameBeStrictAboutCoversAnnotationAttribute.phpNeNb^phpunit/TextUI/Configuration/Xml/Migration/Migrations/RenameForceCoversAnnotationAttribute.php"e" Nphpunit/TextUI/Configuration/Xml/Migration/Migrations/UpdateSchemaLocation.phpe 7phpunit/TextUI/Configuration/Xml/Migration/Migrator.php:e:zk?phpunit/TextUI/Configuration/Xml/Migration/SnapshotNodeList.phpgegi,phpunit/TextUI/Configuration/Xml/PHPUnit.php;e;,K6Ophpunit/TextUI/Configuration/Xml/SchemaDetector/FailedSchemaDetectionResult.phpe,F6¤Iphpunit/TextUI/Configuration/Xml/SchemaDetector/SchemaDetectionResult.php.e.͋*ӤBphpunit/TextUI/Configuration/Xml/SchemaDetector/SchemaDetector.phpeR~Sphpunit/TextUI/Configuration/Xml/SchemaDetector/SuccessfulSchemaDetectionResult.php,e,k1phpunit/TextUI/Configuration/Xml/SchemaFinder.phpeVNˤ4phpunit/TextUI/Configuration/Xml/TestSuiteMapper.phpebH?phpunit/TextUI/Configuration/Xml/Validator/ValidationResult.phpe]8phpunit/TextUI/Configuration/Xml/Validator/Validator.php1e1EŤ;phpunit/TextUI/Exception/DirectoryDoesNotExistException.phpe-ʤ&phpunit/TextUI/Exception/Exception.phpeD{i=phpunit/TextUI/Exception/ExtensionsNotConfiguredException.phpe3f.3phpunit/TextUI/Exception/InvalidSocketException.phpe0phpunit/TextUI/Exception/ReflectionException.phpeJuv-phpunit/TextUI/Exception/RuntimeException.phpe ;phpunit/TextUI/Exception/TestDirectoryNotFoundException.phpenL6phpunit/TextUI/Exception/TestFileNotFoundException.phpe?lphpunit/TextUI/Help.phpn2en2)ȤAphpunit/TextUI/Output/Default/ProgressPrinter/ProgressPrinter.phpx0ex06vcphpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/BeforeTestClassMethodErroredSubscriber.phpFeFC8%Gphpunit/TextUI/Output/Default/ProgressPrinter/Subscriber/Subscriber.php;e;e> *sebastian-comparator/NumericComparator.phpe]>m)sebastian-comparator/ObjectComparator.php +e +rXƤ+sebastian-comparator/ResourceComparator.phpIeIN')sebastian-comparator/ScalarComparator.php e D~&3sebastian-comparator/SplObjectStorageComparator.phpe'sebastian-comparator/TypeComparator.phpe-sebastian-comparator/exceptions/Exception.phpvevEᵤ4sebastian-comparator/exceptions/RuntimeException.phpeV'#sebastian-complexity/Calculator.phpe(͂.sebastian-complexity/Complexity/Complexity.php2e2 +U[8sebastian-complexity/Complexity/ComplexityCollection.php +e +ʼz@sebastian-complexity/Complexity/ComplexityCollectionIterator.phpe]Y,sebastian-complexity/Exception/Exception.phpvev73sebastian-complexity/Exception/RuntimeException.phpeCdWsebastian-complexity/LICENSEeP@٤=sebastian-complexity/Visitor/ComplexityCalculatingVisitor.php e Gsebastian-complexity/Visitor/CyclomaticComplexityCalculatingVisitor.phpeܽsebastian-diff/Chunk.php e sebastian-diff/Diff.phpWeWXsebastian-diff/Differ.phpeה3sebastian-diff/Exception/ConfigurationException.php!e!&sebastian-diff/Exception/Exception.phpjej05sebastian-diff/Exception/InvalidArgumentException.phpeqsebastian-diff/LICENSEeTsebastian-diff/Line.phpemg5sebastian-diff/LongestCommonSubsequenceCalculator.phpe}e7zDsebastian-diff/MemoryEfficientLongestCommonSubsequenceCalculator.phpy ey [DQ4sebastian-diff/Output/AbstractChunkOutputBuilder.phpes/sebastian-diff/Output/DiffOnlyOutputBuilder.phpyey"4sebastian-diff/Output/DiffOutputBuilderInterface.phpeV8sebastian-diff/Output/StrictUnifiedDiffOutputBuilder.phpU(eU(ߢ"2sebastian-diff/Output/UnifiedDiffOutputBuilder.phpeɅ|sebastian-diff/Parser.php e cGBsebastian-diff/TimeEfficientLongestCommonSubsequenceCalculator.php. e. N!sebastian-environment/Console.phpeP1Ťsebastian-environment/LICENSEeWj!sebastian-environment/Runtime.phpeB^sebastian-exporter/Exporter.php"e"5sebastian-exporter/LICENSEeT'sebastian-global-state/CodeExporter.phph eh :}&sebastian-global-state/ExcludeList.php e :$sebastian-global-state/LICENSEe$#sebastian-global-state/Restorer.php2 e2 Rɤ#sebastian-global-state/Snapshot.php&e&r/sebastian-global-state/exceptions/Exception.phpyeyJ6sebastian-global-state/exceptions/RuntimeException.phpe;#sebastian-lines-of-code/Counter.phpeD/sebastian-lines-of-code/Exception/Exception.phpzez aV>sebastian-lines-of-code/Exception/IllogicalValuesException.phpeG<sebastian-lines-of-code/Exception/NegativeValueException.phpe +ڤ6sebastian-lines-of-code/Exception/RuntimeException.phpeKsebastian-lines-of-code/LICENSEeP@٤/sebastian-lines-of-code/LineCountingVisitor.phpe ^'sebastian-lines-of-code/LinesOfCode.php e (EФ*sebastian-object-enumerator/Enumerator.phpe_.sebastian-object-reflector/ObjectReflector.phpe9m 'sebastian-recursion-context/Context.phpe!#sebastian-recursion-context/LICENSEeTsebastian-type/LICENSEe sebastian-type/Parameter.phpe~]#sebastian-type/ReflectionMapper.phpe 8sebastian-type/TypeName.phpeh&sebastian-type/exception/Exception.phpjejbᮧ-sebastian-type/exception/RuntimeException.phpe%$sebastian-type/type/CallableType.phpeĊP!sebastian-type/type/FalseType.phpbeb_&)sebastian-type/type/GenericObjectType.php e c(sebastian-type/type/IntersectionType.php +e +¤$sebastian-type/type/IterableType.phpe3դ!sebastian-type/type/MixedType.php'e'o!sebastian-type/type/NeverType.phpeFҹ sebastian-type/type/NullType.php"e"9$F"sebastian-type/type/ObjectType.php%e%"sebastian-type/type/SimpleType.php,e,0"sebastian-type/type/StaticType.phpe", sebastian-type/type/TrueType.php]e]<iפsebastian-type/type/Type.phpeR!sebastian-type/type/UnionType.php* e* AA#sebastian-type/type/UnknownType.phpeǤ sebastian-type/type/VoidType.phpesebastian-version/LICENSEeVosebastian-version/Version.phpe.7theseer-tokenizer/Exception.phpnen'Ǥtheseer-tokenizer/LICENSEeR ("theseer-tokenizer/NamespaceUri.phpHeH=C+theseer-tokenizer/NamespaceUriException.phpyey'Hetheseer-tokenizer/Token.phpe4%theseer-tokenizer/TokenCollection.php +e +a.theseer-tokenizer/TokenCollectionException.php|e|`g-theseer-tokenizer/Tokenizer.php! e! X(֤#theseer-tokenizer/XMLSerializer.phpeg; .phpstorm.meta.phpeɒs{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "e06728e5442edec84af96f94a889b4a7", + "packages": [ + { + "name": "myclabs/deep-copy", + "version": "1.11.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2023-03-08T13:26:56+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.0.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4a21235f7e56e713259a6f76bf4b5ea08502b9dc", + "reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.0" + }, + "time": "2024-01-07T17:17:35+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "10.1.11", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "78c3b7625965c2513ee96569a4dbb62601784145" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/78c3b7625965c2513ee96569a4dbb62601784145", + "reference": "78c3b7625965c2513ee96569a4dbb62601784145", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-text-template": "^3.0", + "sebastian/code-unit-reverse-lookup": "^3.0", + "sebastian/complexity": "^3.0", + "sebastian/environment": "^6.0", + "sebastian/lines-of-code": "^2.0", + "sebastian/version": "^4.0", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.1" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "10.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.11" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T15:38:30+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "4.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", + "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T06:24:48+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:56:09+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-31T14:07:24+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "6.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:57:52+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/efdc130dbbbb8ef0b545a994fd811725c5282cae", + "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:58:15+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:58:43+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:59:15+00:00" + }, + { + "name": "sebastian/comparator", + "version": "5.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2db5010a484d53ebf536087a70b4a5423c102372" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372", + "reference": "2db5010a484d53ebf536087a70b4a5423c102372", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-08-14T13:18:12+00:00" + }, + { + "name": "sebastian/complexity", + "version": "3.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "68ff824baeae169ec9f2137158ee529584553799" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", + "reference": "68ff824baeae169ec9f2137158ee529584553799", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T08:37:17+00:00" + }, + { + "name": "sebastian/diff", + "version": "5.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "fbf413a49e54f6b9b17e12d900ac7f6101591b7f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/fbf413a49e54f6b9b17e12d900ac7f6101591b7f", + "reference": "fbf413a49e54f6b9b17e12d900ac7f6101591b7f", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/5.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-22T10:55:06+00:00" + }, + { + "name": "sebastian/environment", + "version": "6.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/43c751b41d74f96cbbd4e07b7aec9675651e2951", + "reference": "43c751b41d74f96cbbd4e07b7aec9675651e2951", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/6.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-04-11T05:39:26+00:00" + }, + { + "name": "sebastian/exporter", + "version": "5.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "64f51654862e0f5e318db7e9dcc2292c63cdbddc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/64f51654862e0f5e318db7e9dcc2292c63cdbddc", + "reference": "64f51654862e0f5e318db7e9dcc2292c63cdbddc", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-09-24T13:22:09+00:00" + }, + { + "name": "sebastian/global-state", + "version": "6.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/7ea9ead78f6d380d2a667864c132c2f7b83055e4", + "reference": "7ea9ead78f6d380d2a667864c132c2f7b83055e4", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-07-19T07:19:23+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", + "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18 || ^5.0", + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-12-21T08:38:20+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:08:32+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:06:18+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:05:40+00:00" + }, + { + "name": "sebastian/type", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "phpunit/phpunit": "^10.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T07:10:45+00:00" + }, + { + "name": "sebastian/version", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-07T11:34:05+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96", + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.2.2" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2023-11-20T00:12:19+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": ">=8.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*" + }, + "platform-dev": [], + "platform-overrides": { + "php": "8.1.0" + }, + "plugin-api-version": "2.6.0" +} +phpunit/phpunit: 10.5.8 myclabs/deep-copy: 1.11.1 -nikic/php-parser: v4.15.4 +nikic/php-parser: v5.0.0 phar-io/manifest: 2.0.3 phar-io/version: 3.2.1 -phpunit/php-code-coverage: 10.0.2 -phpunit/php-file-iterator: 4.0.1 +phpunit/php-code-coverage: 10.1.11 +phpunit/php-file-iterator: 4.1.0 phpunit/php-invoker: 4.0.0 -phpunit/php-text-template: 3.0.0 +phpunit/php-text-template: 3.0.1 phpunit/php-timer: 6.0.0 sebastian/cli-parser: 2.0.0 sebastian/code-unit: 2.0.0 sebastian/code-unit-reverse-lookup: 3.0.0 -sebastian/comparator: 5.0.0 -sebastian/complexity: 3.0.0 -sebastian/diff: 5.0.0 -sebastian/environment: 6.0.0 -sebastian/exporter: 5.0.0 -sebastian/global-state: 6.0.0 -sebastian/lines-of-code: 2.0.0 +sebastian/comparator: 5.0.1 +sebastian/complexity: 3.2.0 +sebastian/diff: 5.1.0 +sebastian/environment: 6.0.1 +sebastian/exporter: 5.1.1 +sebastian/global-state: 6.0.1 +sebastian/lines-of-code: 2.0.2 sebastian/object-enumerator: 5.0.0 sebastian/object-reflector: 3.0.0 sebastian/recursion-context: 5.0.0 sebastian/type: 4.0.0 sebastian/version: 4.0.1 -theseer/tokenizer: 1.2.1 +theseer/tokenizer: 1.2.2 */ + protected array $attributes = []; + /** @var list */ + protected array $constants = []; + /** @var list */ + protected array $attributeGroups = []; + /** @var Identifier|Node\Name|Node\ComplexType|null */ + protected ?Node $type = null; /** * Creates a class constant builder * - * @param string|Identifier $name Name + * @param string|Identifier $name Name * @param Node\Expr|bool|null|int|float|string|array $value Value */ public function __construct($name, $value) @@ -3922,7 +5627,7 @@ class ClassConst implements PhpParser\Builder /** * Add another constant to const group * - * @param string|Identifier $name Name + * @param string|Identifier $name Name * @param Node\Expr|bool|null|int|float|string|array $value Value * * @return $this The builder instance (for fluid interface) @@ -3939,7 +5644,7 @@ class ClassConst implements PhpParser\Builder */ public function makePublic() { - $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PUBLIC); + $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PUBLIC); return $this; } /** @@ -3949,7 +5654,7 @@ class ClassConst implements PhpParser\Builder */ public function makeProtected() { - $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PROTECTED); + $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PROTECTED); return $this; } /** @@ -3959,7 +5664,7 @@ class ClassConst implements PhpParser\Builder */ public function makePrivate() { - $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PRIVATE); + $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PRIVATE); return $this; } /** @@ -3969,7 +5674,7 @@ class ClassConst implements PhpParser\Builder */ public function makeFinal() { - $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_FINAL); + $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::FINAL); return $this; } /** @@ -3996,6 +5701,18 @@ class ClassConst implements PhpParser\Builder $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); return $this; } + /** + * Sets the constant type. + * + * @param string|Node\Name|Identifier|Node\ComplexType $type + * + * @return $this + */ + public function setType($type) + { + $this->type = BuilderHelpers::normalizeType($type); + return $this; + } /** * Returns the built class node. * @@ -4003,7 +5720,7 @@ class ClassConst implements PhpParser\Builder */ public function getNode() : PhpParser\Node { - return new Stmt\ClassConst($this->constants, $this->flags, $this->attributes, $this->attributeGroups); + return new Stmt\ClassConst($this->constants, $this->flags, $this->attributes, $this->attributeGroups, $this->type); } } */ + protected array $implements = []; + protected int $flags = 0; + /** @var list */ + protected array $uses = []; + /** @var list */ + protected array $constants = []; + /** @var list */ + protected array $properties = []; + /** @var list */ + protected array $methods = []; + /** @var list */ + protected array $attributeGroups = []; /** * Creates a class builder. * @@ -4070,7 +5793,7 @@ class Class_ extends Declaration */ public function makeAbstract() { - $this->flags = BuilderHelpers::addClassModifier($this->flags, Stmt\Class_::MODIFIER_ABSTRACT); + $this->flags = BuilderHelpers::addClassModifier($this->flags, Modifiers::ABSTRACT); return $this; } /** @@ -4080,12 +5803,17 @@ class Class_ extends Declaration */ public function makeFinal() { - $this->flags = BuilderHelpers::addClassModifier($this->flags, Stmt\Class_::MODIFIER_FINAL); + $this->flags = BuilderHelpers::addClassModifier($this->flags, Modifiers::FINAL); return $this; } + /** + * Makes the class readonly. + * + * @return $this The builder instance (for fluid interface) + */ public function makeReadonly() { - $this->flags = BuilderHelpers::addClassModifier($this->flags, Stmt\Class_::MODIFIER_READONLY); + $this->flags = BuilderHelpers::addClassModifier($this->flags, Modifiers::READONLY); return $this; } /** @@ -4098,12 +5826,17 @@ class Class_ extends Declaration public function addStmt($stmt) { $stmt = BuilderHelpers::normalizeNode($stmt); - $targets = [Stmt\TraitUse::class => &$this->uses, Stmt\ClassConst::class => &$this->constants, Stmt\Property::class => &$this->properties, Stmt\ClassMethod::class => &$this->methods]; - $class = \get_class($stmt); - if (!isset($targets[$class])) { + if ($stmt instanceof Stmt\Property) { + $this->properties[] = $stmt; + } elseif ($stmt instanceof Stmt\ClassMethod) { + $this->methods[] = $stmt; + } elseif ($stmt instanceof Stmt\TraitUse) { + $this->uses[] = $stmt; + } elseif ($stmt instanceof Stmt\ClassConst) { + $this->constants[] = $stmt; + } else { throw new \LogicException(\sprintf('Unexpected node of type "%s"', $stmt->getType())); } - $targets[$class][] = $stmt; return $this; } /** @@ -4137,12 +5870,20 @@ use PHPUnit\PhpParser; use PHPUnit\PhpParser\BuilderHelpers; abstract class Declaration implements PhpParser\Builder { - protected $attributes = []; + /** @var array */ + protected array $attributes = []; + /** + * Adds a statement. + * + * @param PhpParser\Node\Stmt|PhpParser\Builder $stmt The statement to add + * + * @return $this The builder instance (for fluid interface) + */ public abstract function addStmt($stmt); /** * Adds multiple statements. * - * @param array $stmts The statements to add + * @param (PhpParser\Node\Stmt|PhpParser\Builder)[] $stmts The statements to add * * @return $this The builder instance (for fluid interface) */ @@ -4178,15 +5919,18 @@ use PHPUnit\PhpParser\Node\Identifier; use PHPUnit\PhpParser\Node\Stmt; class EnumCase implements PhpParser\Builder { + /** @var Identifier|string */ protected $name; - protected $value = null; - protected $attributes = []; - /** @var Node\AttributeGroup[] */ - protected $attributeGroups = []; + /** @var ?Node\Expr */ + protected ?Node\Expr $value = null; + /** @var array */ + protected array $attributes = []; + /** @var list */ + protected array $attributeGroups = []; /** * Creates an enum case builder. * - * @param string|Identifier $name Name + * @param string|Identifier $name Name */ public function __construct($name) { @@ -4251,15 +5995,20 @@ use PHPUnit\PhpParser\Node\Name; use PHPUnit\PhpParser\Node\Stmt; class Enum_ extends Declaration { - protected $name; - protected $scalarType = null; - protected $implements = []; - protected $uses = []; - protected $enumCases = []; - protected $constants = []; - protected $methods = []; - /** @var Node\AttributeGroup[] */ - protected $attributeGroups = []; + protected string $name; + protected ?Identifier $scalarType = null; + /** @var list */ + protected array $implements = []; + /** @var list */ + protected array $uses = []; + /** @var list */ + protected array $enumCases = []; + /** @var list */ + protected array $constants = []; + /** @var list */ + protected array $methods = []; + /** @var list */ + protected array $attributeGroups = []; /** * Creates an enum builder. * @@ -4272,7 +6021,7 @@ class Enum_ extends Declaration /** * Sets the scalar type. * - * @param string|Identifier $type + * @param string|Identifier $scalarType * * @return $this */ @@ -4305,12 +6054,17 @@ class Enum_ extends Declaration public function addStmt($stmt) { $stmt = BuilderHelpers::normalizeNode($stmt); - $targets = [Stmt\TraitUse::class => &$this->uses, Stmt\EnumCase::class => &$this->enumCases, Stmt\ClassConst::class => &$this->constants, Stmt\ClassMethod::class => &$this->methods]; - $class = \get_class($stmt); - if (!isset($targets[$class])) { + if ($stmt instanceof Stmt\EnumCase) { + $this->enumCases[] = $stmt; + } elseif ($stmt instanceof Stmt\ClassMethod) { + $this->methods[] = $stmt; + } elseif ($stmt instanceof Stmt\TraitUse) { + $this->uses[] = $stmt; + } elseif ($stmt instanceof Stmt\ClassConst) { + $this->constants[] = $stmt; + } else { throw new \LogicException(\sprintf('Unexpected node of type "%s"', $stmt->getType())); } - $targets[$class][] = $stmt; return $this; } /** @@ -4344,10 +6098,11 @@ use PHPUnit\PhpParser\BuilderHelpers; use PHPUnit\PhpParser\Node; abstract class FunctionLike extends Declaration { - protected $returnByRef = \false; - protected $params = []; - /** @var string|Node\Name|Node\NullableType|null */ - protected $returnType = null; + protected bool $returnByRef = \false; + /** @var Node\Param[] */ + protected array $params = []; + /** @var Node\Identifier|Node\Name|Node\ComplexType|null */ + protected ?Node $returnType = null; /** * Make the function return by reference. * @@ -4377,7 +6132,7 @@ abstract class FunctionLike extends Declaration /** * Adds multiple parameters. * - * @param array $params The parameters to add + * @param (Node\Param|Param)[] $params The parameters to add * * @return $this The builder instance (for fluid interface) */ @@ -4412,10 +6167,11 @@ use PHPUnit\PhpParser\Node; use PHPUnit\PhpParser\Node\Stmt; class Function_ extends FunctionLike { - protected $name; - protected $stmts = []; - /** @var Node\AttributeGroup[] */ - protected $attributeGroups = []; + protected string $name; + /** @var list */ + protected array $stmts = []; + /** @var list */ + protected array $attributeGroups = []; /** * Creates a function builder. * @@ -4471,12 +6227,15 @@ use PHPUnit\PhpParser\Node\Name; use PHPUnit\PhpParser\Node\Stmt; class Interface_ extends Declaration { - protected $name; - protected $extends = []; - protected $constants = []; - protected $methods = []; - /** @var Node\AttributeGroup[] */ - protected $attributeGroups = []; + protected string $name; + /** @var list */ + protected array $extends = []; + /** @var list */ + protected array $constants = []; + /** @var list */ + protected array $methods = []; + /** @var list */ + protected array $attributeGroups = []; /** * Creates an interface builder. * @@ -4550,16 +6309,17 @@ namespace PHPUnit\PhpParser\Builder; use PHPUnit\PhpParser; use PHPUnit\PhpParser\BuilderHelpers; +use PHPUnit\PhpParser\Modifiers; use PHPUnit\PhpParser\Node; use PHPUnit\PhpParser\Node\Stmt; class Method extends FunctionLike { - protected $name; - protected $flags = 0; - /** @var array|null */ - protected $stmts = []; - /** @var Node\AttributeGroup[] */ - protected $attributeGroups = []; + protected string $name; + protected int $flags = 0; + /** @var list|null */ + protected ?array $stmts = []; + /** @var list */ + protected array $attributeGroups = []; /** * Creates a method builder. * @@ -4576,7 +6336,7 @@ class Method extends FunctionLike */ public function makePublic() { - $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PUBLIC); + $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PUBLIC); return $this; } /** @@ -4586,7 +6346,7 @@ class Method extends FunctionLike */ public function makeProtected() { - $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PROTECTED); + $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PROTECTED); return $this; } /** @@ -4596,7 +6356,7 @@ class Method extends FunctionLike */ public function makePrivate() { - $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PRIVATE); + $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PRIVATE); return $this; } /** @@ -4606,7 +6366,7 @@ class Method extends FunctionLike */ public function makeStatic() { - $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_STATIC); + $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::STATIC); return $this; } /** @@ -4619,7 +6379,7 @@ class Method extends FunctionLike if (!empty($this->stmts)) { throw new \LogicException('Cannot make method with statements abstract'); } - $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_ABSTRACT); + $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::ABSTRACT); $this->stmts = null; // abstract methods don't have statements return $this; @@ -4631,7 +6391,7 @@ class Method extends FunctionLike */ public function makeFinal() { - $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_FINAL); + $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::FINAL); return $this; } /** @@ -4682,8 +6442,9 @@ use PHPUnit\PhpParser\Node; use PHPUnit\PhpParser\Node\Stmt; class Namespace_ extends Declaration { - private $name; - private $stmts = []; + private ?Node\Name $name; + /** @var Stmt[] */ + private array $stmts = []; /** * Creates a namespace builder. * @@ -4722,17 +6483,19 @@ namespace PHPUnit\PhpParser\Builder; use PHPUnit\PhpParser; use PHPUnit\PhpParser\BuilderHelpers; +use PHPUnit\PhpParser\Modifiers; use PHPUnit\PhpParser\Node; class Param implements PhpParser\Builder { - protected $name; - protected $default = null; - /** @var Node\Identifier|Node\Name|Node\NullableType|null */ - protected $type = null; - protected $byRef = \false; - protected $variadic = \false; - /** @var Node\AttributeGroup[] */ - protected $attributeGroups = []; + protected string $name; + protected ?Node\Expr $default = null; + /** @var Node\Identifier|Node\Name|Node\ComplexType|null */ + protected ?Node $type = null; + protected bool $byRef = \false; + protected int $flags = 0; + protected bool $variadic = \false; + /** @var list */ + protected array $attributeGroups = []; /** * Creates a parameter builder. * @@ -4770,36 +6533,63 @@ class Param implements PhpParser\Builder return $this; } /** - * Sets type for the parameter. + * Make the parameter accept the value by reference. * - * @param string|Node\Name|Node\Identifier|Node\ComplexType $type Parameter type + * @return $this The builder instance (for fluid interface) + */ + public function makeByRef() + { + $this->byRef = \true; + return $this; + } + /** + * Make the parameter variadic * * @return $this The builder instance (for fluid interface) + */ + public function makeVariadic() + { + $this->variadic = \true; + return $this; + } + /** + * Makes the (promoted) parameter public. * - * @deprecated Use setType() instead + * @return $this The builder instance (for fluid interface) */ - public function setTypeHint($type) + public function makePublic() { - return $this->setType($type); + $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PUBLIC); + return $this; } /** - * Make the parameter accept the value by reference. + * Makes the (promoted) parameter protected. * * @return $this The builder instance (for fluid interface) */ - public function makeByRef() + public function makeProtected() { - $this->byRef = \true; + $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PROTECTED); return $this; } /** - * Make the parameter variadic + * Makes the (promoted) parameter private. * * @return $this The builder instance (for fluid interface) */ - public function makeVariadic() + public function makePrivate() { - $this->variadic = \true; + $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PRIVATE); + return $this; + } + /** + * Makes the (promoted) parameter readonly. + * + * @return $this The builder instance (for fluid interface) + */ + public function makeReadonly() + { + $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::READONLY); return $this; } /** @@ -4821,7 +6611,7 @@ class Param implements PhpParser\Builder */ public function getNode() : Node { - return new Node\Param(new Node\Expr\Variable($this->name), $this->default, $this->type, $this->byRef, $this->variadic, [], 0, $this->attributeGroups); + return new Node\Param(new Node\Expr\Variable($this->name), $this->default, $this->type, $this->byRef, $this->variadic, [], $this->flags, $this->attributeGroups); } } */ + protected array $attributes = []; + /** @var null|Identifier|Name|ComplexType */ + protected ?Node $type = null; + /** @var list */ + protected array $attributeGroups = []; /** * Creates a property builder. * @@ -4862,7 +6654,7 @@ class Property implements PhpParser\Builder */ public function makePublic() { - $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PUBLIC); + $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PUBLIC); return $this; } /** @@ -4872,7 +6664,7 @@ class Property implements PhpParser\Builder */ public function makeProtected() { - $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PROTECTED); + $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PROTECTED); return $this; } /** @@ -4882,7 +6674,7 @@ class Property implements PhpParser\Builder */ public function makePrivate() { - $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PRIVATE); + $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PRIVATE); return $this; } /** @@ -4892,7 +6684,7 @@ class Property implements PhpParser\Builder */ public function makeStatic() { - $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_STATIC); + $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::STATIC); return $this; } /** @@ -4902,7 +6694,7 @@ class Property implements PhpParser\Builder */ public function makeReadonly() { - $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_READONLY); + $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::READONLY); return $this; } /** @@ -4960,7 +6752,7 @@ class Property implements PhpParser\Builder */ public function getNode() : PhpParser\Node { - return new Stmt\Property($this->flags !== 0 ? $this->flags : Stmt\Class_::MODIFIER_PUBLIC, [new Stmt\PropertyProperty($this->name, $this->default)], $this->attributes, $this->type, $this->attributeGroups); + return new Stmt\Property($this->flags !== 0 ? $this->flags : Modifiers::PUBLIC, [new Node\PropertyItem($this->name, $this->default)], $this->attributes, $this->type, $this->attributeGroups); } } type !== self::TYPE_ALIAS) { throw new \LogicException('Cannot set alias for not alias adaptation buider'); } - $this->alias = $alias; + $this->alias = BuilderHelpers::normalizeIdentifier($alias); return $this; } /** - * Sets adaptated method public. + * Sets adapted method public. * * @return $this The builder instance (for fluid interface) */ public function makePublic() { - $this->setModifier(Stmt\Class_::MODIFIER_PUBLIC); + $this->setModifier(Modifiers::PUBLIC); return $this; } /** - * Sets adaptated method protected. + * Sets adapted method protected. * * @return $this The builder instance (for fluid interface) */ public function makeProtected() { - $this->setModifier(Stmt\Class_::MODIFIER_PROTECTED); + $this->setModifier(Modifiers::PROTECTED); return $this; } /** - * Sets adaptated method private. + * Sets adapted method private. * * @return $this The builder instance (for fluid interface) */ public function makePrivate() { - $this->setModifier(Stmt\Class_::MODIFIER_PRIVATE); + $this->setModifier(Modifiers::PRIVATE); return $this; } /** @@ -5129,7 +6924,7 @@ class TraitUseAdaptation implements Builder } return $this; } - protected function setModifier(int $modifier) + protected function setModifier(int $modifier) : void { if ($this->type === self::TYPE_UNDEFINED) { $this->type = self::TYPE_ALIAS; @@ -5171,12 +6966,17 @@ use PHPUnit\PhpParser\Node; use PHPUnit\PhpParser\Node\Stmt; class Trait_ extends Declaration { - protected $name; - protected $uses = []; - protected $properties = []; - protected $methods = []; - /** @var Node\AttributeGroup[] */ - protected $attributeGroups = []; + protected string $name; + /** @var list */ + protected array $uses = []; + /** @var list */ + protected array $constants = []; + /** @var list */ + protected array $properties = []; + /** @var list */ + protected array $methods = []; + /** @var list */ + protected array $attributeGroups = []; /** * Creates an interface builder. * @@ -5202,6 +7002,8 @@ class Trait_ extends Declaration $this->methods[] = $stmt; } elseif ($stmt instanceof Stmt\TraitUse) { $this->uses[] = $stmt; + } elseif ($stmt instanceof Stmt\ClassConst) { + $this->constants[] = $stmt; } else { throw new \LogicException(\sprintf('Unexpected node of type "%s"', $stmt->getType())); } @@ -5226,7 +7028,7 @@ class Trait_ extends Declaration */ public function getNode() : PhpParser\Node { - return new Stmt\Trait_($this->name, ['stmts' => \array_merge($this->uses, $this->properties, $this->methods), 'attrGroups' => $this->attributeGroups], $this->attributes); + return new Stmt\Trait_($this->name, ['stmts' => \array_merge($this->uses, $this->constants, $this->properties, $this->methods), 'attrGroups' => $this->attributeGroups], $this->attributes); } } name, $this->alias)], $this->type); + return new Stmt\Use_([new Node\UseItem($this->name, $this->alias)], $this->type); } } */ public function args(array $args) : array { @@ -5536,9 +7333,7 @@ class BuilderFactory * Creates a function call node. * * @param string|Name|Expr $name Function name - * @param array $args Function arguments - * - * @return Expr\FuncCall + * @param array $args Function arguments */ public function funcCall($name, array $args = []) : Expr\FuncCall { @@ -5547,11 +7342,9 @@ class BuilderFactory /** * Creates a method call node. * - * @param Expr $var Variable the method is called on + * @param Expr $var Variable the method is called on * @param string|Identifier|Expr $name Method name - * @param array $args Method arguments - * - * @return Expr\MethodCall + * @param array $args Method arguments */ public function methodCall(Expr $var, $name, array $args = []) : Expr\MethodCall { @@ -5560,11 +7353,9 @@ class BuilderFactory /** * Creates a static method call node. * - * @param string|Name|Expr $class Class name - * @param string|Identifier|Expr $name Method name - * @param array $args Method arguments - * - * @return Expr\StaticCall + * @param string|Name|Expr $class Class name + * @param string|Identifier|Expr $name Method name + * @param array $args Method arguments */ public function staticCall($class, $name, array $args = []) : Expr\StaticCall { @@ -5574,9 +7365,7 @@ class BuilderFactory * Creates an object creation node. * * @param string|Name|Expr $class Class name - * @param array $args Constructor arguments - * - * @return Expr\New_ + * @param array $args Constructor arguments */ public function new($class, array $args = []) : Expr\New_ { @@ -5586,8 +7375,6 @@ class BuilderFactory * Creates a constant fetch node. * * @param string|Name $name Constant name - * - * @return Expr\ConstFetch */ public function constFetch($name) : Expr\ConstFetch { @@ -5596,10 +7383,8 @@ class BuilderFactory /** * Creates a property fetch node. * - * @param Expr $var Variable holding object + * @param Expr $var Variable holding object * @param string|Identifier|Expr $name Property name - * - * @return Expr\PropertyFetch */ public function propertyFetch(Expr $var, $name) : Expr\PropertyFetch { @@ -5608,21 +7393,17 @@ class BuilderFactory /** * Creates a class constant fetch node. * - * @param string|Name|Expr $class Class name - * @param string|Identifier $name Constant name - * - * @return Expr\ClassConstFetch + * @param string|Name|Expr $class Class name + * @param string|Identifier|Expr $name Constant name */ public function classConstFetch($class, $name) : Expr\ClassConstFetch { - return new Expr\ClassConstFetch(BuilderHelpers::normalizeNameOrExpr($class), BuilderHelpers::normalizeIdentifier($name)); + return new Expr\ClassConstFetch(BuilderHelpers::normalizeNameOrExpr($class), BuilderHelpers::normalizeIdentifierOrExpr($name)); } /** * Creates nested Concat nodes from a list of expressions. * * @param Expr|string ...$exprs Expressions or literal strings - * - * @return Concat */ public function concat(...$exprs) : Concat { @@ -5638,7 +7419,6 @@ class BuilderFactory } /** * @param string|Expr $expr - * @return Expr */ private function normalizeStringExpr($expr) : Expr { @@ -5840,10 +7620,10 @@ final class BuilderHelpers return new Expr\ConstFetch(new Name($value ? 'true' : 'false')); } if (\is_int($value)) { - return new Scalar\LNumber($value); + return new Scalar\Int_($value); } if (\is_float($value)) { - return new Scalar\DNumber($value); + return new Scalar\Float_($value); } if (\is_string($value)) { return new Scalar\String_($value); @@ -5854,10 +7634,10 @@ final class BuilderHelpers foreach ($value as $itemKey => $itemValue) { // for consecutive, numeric keys don't generate keys if (null !== $lastKey && ++$lastKey === $itemKey) { - $items[] = new Expr\ArrayItem(self::normalizeValue($itemValue)); + $items[] = new Node\ArrayItem(self::normalizeValue($itemValue)); } else { $lastKey = null; - $items[] = new Expr\ArrayItem(self::normalizeValue($itemValue), self::normalizeValue($itemKey)); + $items[] = new Node\ArrayItem(self::normalizeValue($itemValue), self::normalizeValue($itemKey)); } } return new Expr\Array_($items); @@ -5902,13 +7682,13 @@ final class BuilderHelpers * Adds a modifier and returns new modifier bitmask. * * @param int $modifiers Existing modifiers - * @param int $modifier Modifier to set + * @param int $modifier Modifier to set * * @return int New modifiers */ public static function addModifier(int $modifiers, int $modifier) : int { - Stmt\Class_::verifyModifier($modifiers, $modifier); + Modifiers::verifyModifier($modifiers, $modifier); return $modifiers | $modifier; } /** @@ -5917,7 +7697,7 @@ final class BuilderHelpers */ public static function addClassModifier(int $existingModifiers, int $modifierToSet) : int { - Stmt\Class_::verifyClassModifier($existingModifiers, $modifierToSet); + Modifiers::verifyClassModifier($existingModifiers, $modifierToSet); return $existingModifiers | $modifierToSet; } } @@ -5928,20 +7708,20 @@ namespace PHPUnit\PhpParser; class Comment implements \JsonSerializable { - protected $text; - protected $startLine; - protected $startFilePos; - protected $startTokenPos; - protected $endLine; - protected $endFilePos; - protected $endTokenPos; + protected string $text; + protected int $startLine; + protected int $startFilePos; + protected int $startTokenPos; + protected int $endLine; + protected int $endFilePos; + protected int $endTokenPos; /** * Constructs a comment node. * - * @param string $text Comment text (including comment delimiters like /*) - * @param int $startLine Line number the comment started on - * @param int $startFilePos File offset the comment started on - * @param int $startTokenPos Token offset the comment started on + * @param string $text Comment text (including comment delimiters like /*) + * @param int $startLine Line number the comment started on + * @param int $startFilePos File offset the comment started on + * @param int $startTokenPos Token offset the comment started on */ public function __construct(string $text, int $startLine = -1, int $startFilePos = -1, int $startTokenPos = -1, int $endLine = -1, int $endFilePos = -1, int $endTokenPos = -1) { @@ -6016,39 +7796,6 @@ class Comment implements \JsonSerializable { return $this->endTokenPos; } - /** - * Gets the line number the comment started on. - * - * @deprecated Use getStartLine() instead - * - * @return int Line number - */ - public function getLine() : int - { - return $this->startLine; - } - /** - * Gets the file offset the comment started on. - * - * @deprecated Use getStartFilePos() instead - * - * @return int File offset - */ - public function getFilePos() : int - { - return $this->startFilePos; - } - /** - * Gets the token offset the comment started on. - * - * @deprecated Use getStartTokenPos() instead - * - * @return int Token offset - */ - public function getTokenPos() : int - { - return $this->startTokenPos; - } /** * Gets the comment text. * @@ -6063,19 +7810,20 @@ class Comment implements \JsonSerializable * * "Reformatted" here means that we try to clean up the whitespace at the * starts of the lines. This is necessary because we receive the comments - * without trailing whitespace on the first line, but with trailing whitespace + * without leading whitespace on the first line, but with leading whitespace * on all subsequent lines. * - * @return mixed|string + * Additionally, this normalizes CRLF newlines to LF newlines. */ - public function getReformattedText() + public function getReformattedText() : string { - $text = \trim($this->text); + $text = \str_replace("\r\n", "\n", $this->text); $newlinePos = \strpos($text, "\n"); if (\false === $newlinePos) { // Single line comments don't need further processing return $text; - } elseif (\preg_match('((*BSR_ANYCRLF)(*ANYCRLF)^.*(?:\\R\\s+\\*.*)+$)', $text)) { + } + if (\preg_match('(^.*(?:\\n\\s+\\*.*)+$)', $text)) { // Multi line comment of the type // // /* @@ -6084,8 +7832,9 @@ class Comment implements \JsonSerializable // */ // // is handled by replacing the whitespace sequences before the * by a single space - return \preg_replace('(^\\s+\\*)m', ' *', $this->text); - } elseif (\preg_match('(^/\\*\\*?\\s*[\\r\\n])', $text) && \preg_match('(\\n(\\s*)\\*/$)', $text, $matches)) { + return \preg_replace('(^\\s+\\*)m', ' *', $text); + } + if (\preg_match('(^/\\*\\*?\\s*\\n)', $text) && \preg_match('(\\n(\\s*)\\*/$)', $text, $matches)) { // Multi line comment of the type // // /* @@ -6097,7 +7846,8 @@ class Comment implements \JsonSerializable // */ on all lines. So if the last line is " */", then " " is removed at the // start of all lines. return \preg_replace('(^' . \preg_quote($matches[1]) . ')m', '', $text); - } elseif (\preg_match('(^/\\*\\*?\\s*(?!\\s))', $text, $matches)) { + } + if (\preg_match('(^/\\*\\*?\\s*(?!\\s))', $text, $matches)) { // Multi line comment of the type // // /* Some text. @@ -6125,7 +7875,7 @@ class Comment implements \JsonSerializable private function getShortestWhitespacePrefixLen(string $str) : int { $lines = \explode("\n", $str); - $shortestPrefixLen = \INF; + $shortestPrefixLen = \PHP_INT_MAX; foreach ($lines as $line) { \preg_match('(^\\s*)', $line, $matches); $prefixLen = \strlen($matches[0]); @@ -6136,8 +7886,7 @@ class Comment implements \JsonSerializable return $shortestPrefixLen; } /** - * @return array - * @psalm-return array{nodeType:string, text:mixed, line:mixed, filePos:mixed} + * @return array{nodeType:string, text:mixed, line:mixed, filePos:mixed} */ public function jsonSerialize() : array { @@ -6166,6 +7915,7 @@ class Doc extends \PHPUnit\PhpParser\Comment } fallbackEvaluator = $fallbackEvaluator ?? function (Expr $expr) { throw new ConstExprEvaluationException("Expression of type {$expr->getType()} cannot be evaluated"); @@ -6268,9 +8020,10 @@ class ConstExprEvaluator { return $this->evaluate($expr); } + /** @return mixed */ private function evaluate(Expr $expr) { - if ($expr instanceof Scalar\LNumber || $expr instanceof Scalar\DNumber || $expr instanceof Scalar\String_) { + if ($expr instanceof Scalar\Int_ || $expr instanceof Scalar\Float_ || $expr instanceof Scalar\String_) { return $expr->value; } if ($expr instanceof Expr\Array_) { @@ -6303,7 +8056,7 @@ class ConstExprEvaluator } return ($this->fallbackEvaluator)($expr); } - private function evaluateArray(Expr\Array_ $expr) + private function evaluateArray(Expr\Array_ $expr) : array { $array = []; foreach ($expr->items as $item) { @@ -6317,6 +8070,7 @@ class ConstExprEvaluator } return $array; } + /** @return mixed */ private function evaluateTernary(Expr\Ternary $expr) { if (null === $expr->if) { @@ -6324,6 +8078,7 @@ class ConstExprEvaluator } return $this->evaluate($expr->cond) ? $this->evaluate($expr->if) : $this->evaluate($expr->else); } + /** @return mixed */ private function evaluateBinaryOp(Expr\BinaryOp $expr) { if ($expr instanceof Expr\BinaryOp\Coalesce && $expr->left instanceof Expr\ArrayDimFetch) { @@ -6392,6 +8147,7 @@ class ConstExprEvaluator } throw new \Exception('Should not happen'); } + /** @return mixed */ private function evaluateConstFetch(Expr\ConstFetch $expr) { $name = $expr->name->toLowerString(); @@ -6413,23 +8169,19 @@ namespace PHPUnit\PhpParser; class Error extends \RuntimeException { - protected $rawMessage; - protected $attributes; + protected string $rawMessage; + /** @var array */ + protected array $attributes; /** * Creates an Exception signifying a parse error. * - * @param string $message Error message - * @param array|int $attributes Attributes of node/token where error occurred - * (or start line of error -- deprecated) + * @param string $message Error message + * @param array $attributes Attributes of node/token where error occurred */ - public function __construct(string $message, $attributes = []) + public function __construct(string $message, array $attributes = []) { $this->rawMessage = $message; - if (\is_array($attributes)) { - $this->attributes = $attributes; - } else { - $this->attributes = ['startLine' => $attributes]; - } + $this->attributes = $attributes; $this->updateMessage(); } /** @@ -6462,7 +8214,7 @@ class Error extends \RuntimeException /** * Gets the attributes of the node/token the error occurred at. * - * @return array + * @return array */ public function getAttributes() : array { @@ -6471,9 +8223,9 @@ class Error extends \RuntimeException /** * Sets the attributes of the node/token the error occurred at. * - * @param array $attributes + * @param array $attributes */ - public function setAttributes(array $attributes) + public function setAttributes(array $attributes) : void { $this->attributes = $attributes; $this->updateMessage(); @@ -6483,7 +8235,7 @@ class Error extends \RuntimeException * * @param string $message Error message */ - public function setRawMessage(string $message) + public function setRawMessage(string $message) : void { $this->rawMessage = $message; $this->updateMessage(); @@ -6493,7 +8245,7 @@ class Error extends \RuntimeException * * @param int $line Error start line */ - public function setStartLine(int $line) + public function setStartLine(int $line) : void { $this->attributes['startLine'] = $line; $this->updateMessage(); @@ -6502,8 +8254,6 @@ class Error extends \RuntimeException * Returns whether the error has start and end column information. * * For column information enable the startFilePos and endFilePos in the lexer options. - * - * @return bool */ public function hasColumnInfo() : bool { @@ -6513,7 +8263,6 @@ class Error extends \RuntimeException * Gets the start column (1-based) into the line where the error started. * * @param string $code Source code of the file - * @return int */ public function getStartColumn(string $code) : int { @@ -6526,7 +8275,6 @@ class Error extends \RuntimeException * Gets the end column (1-based) into the line where the error ended. * * @param string $code Source code of the file - * @return int */ public function getEndColumn(string $code) : int { @@ -6550,7 +8298,7 @@ class Error extends \RuntimeException * Converts a file offset into a column. * * @param string $code Source code that $pos indexes into - * @param int $pos 0-based position in $code + * @param int $pos 0-based position in $code * * @return int 1-based column (relative to start of line) */ @@ -6568,7 +8316,7 @@ class Error extends \RuntimeException /** * Updates the exception message after a change to rawMessage or rawLine. */ - protected function updateMessage() + protected function updateMessage() : void { $this->message = $this->rawMessage; if (-1 === $this->getStartLine()) { @@ -6590,7 +8338,7 @@ interface ErrorHandler * * @param Error $error The error that needs to be handled */ - public function handleError(Error $error); + public function handleError(Error $error) : void; } errors[] = $error; } @@ -6623,8 +8371,6 @@ class Collecting implements ErrorHandler } /** * Check whether there are any errors. - * - * @return bool */ public function hasErrors() : bool { @@ -6633,7 +8379,7 @@ class Collecting implements ErrorHandler /** * Reset/clear collected errors. */ - public function clearErrors() + public function clearErrors() : void { $this->errors = []; } @@ -6652,7 +8398,7 @@ use PHPUnit\PhpParser\ErrorHandler; */ class Throwing implements ErrorHandler { - public function handleError(Error $error) + public function handleError(Error $error) : void { throw $error; } @@ -6667,16 +8413,21 @@ namespace PHPUnit\PhpParser\Internal; */ class DiffElem { - const TYPE_KEEP = 0; - const TYPE_REMOVE = 1; - const TYPE_ADD = 2; - const TYPE_REPLACE = 3; + public const TYPE_KEEP = 0; + public const TYPE_REMOVE = 1; + public const TYPE_ADD = 2; + public const TYPE_REPLACE = 3; /** @var int One of the TYPE_* constants */ - public $type; + public int $type; /** @var mixed Is null for add operations */ public $old; /** @var mixed Is null for remove operations */ public $new; + /** + * @param int $type One of the TYPE_* constants + * @param mixed $old Is null for add operations + * @param mixed $new Is null for remove operations + */ public function __construct(int $type, $old, $new) { $this->type = $type; @@ -6695,15 +8446,17 @@ namespace PHPUnit\PhpParser\Internal; * Myers, Eugene W. "An O (ND) difference algorithm and its variations." * Algorithmica 1.1 (1986): 251-266. * + * @template T * @internal */ class Differ { + /** @var callable(T, T): bool */ private $isEqual; /** * Create differ over the given equality relation. * - * @param callable $isEqual Equality relation with signature function($a, $b) : bool + * @param callable(T, T): bool $isEqual Equality relation */ public function __construct(callable $isEqual) { @@ -6712,13 +8465,15 @@ class Differ /** * Calculate diff (edit script) from $old to $new. * - * @param array $old Original array - * @param array $new New array + * @param T[] $old Original array + * @param T[] $new New array * * @return DiffElem[] Diff (edit script) */ - public function diff(array $old, array $new) + public function diff(array $old, array $new) : array { + $old = \array_values($old); + $new = \array_values($new); list($trace, $x, $y) = $this->calculateTrace($old, $new); return $this->extractDiff($trace, $x, $y, $old, $new); } @@ -6728,19 +8483,24 @@ class Differ * If a sequence of remove operations is followed by the same number of add operations, these * will be coalesced into replace operations. * - * @param array $old Original array - * @param array $new New array + * @param T[] $old Original array + * @param T[] $new New array * * @return DiffElem[] Diff (edit script), including replace operations */ - public function diffWithReplacements(array $old, array $new) + public function diffWithReplacements(array $old, array $new) : array { return $this->coalesceReplacements($this->diff($old, $new)); } - private function calculateTrace(array $a, array $b) + /** + * @param T[] $old + * @param T[] $new + * @return array{array>, int, int} + */ + private function calculateTrace(array $old, array $new) : array { - $n = \count($a); - $m = \count($b); + $n = \count($old); + $m = \count($new); $max = $n + $m; $v = [1 => 0]; $trace = []; @@ -6753,7 +8513,7 @@ class Differ $x = $v[$k - 1] + 1; } $y = $x - $k; - while ($x < $n && $y < $m && ($this->isEqual)($a[$x], $b[$y])) { + while ($x < $n && $y < $m && ($this->isEqual)($old[$x], $new[$y])) { $x++; $y++; } @@ -6765,7 +8525,13 @@ class Differ } throw new \Exception('Should not happen'); } - private function extractDiff(array $trace, int $x, int $y, array $a, array $b) + /** + * @param array> $trace + * @param T[] $old + * @param T[] $new + * @return DiffElem[] + */ + private function extractDiff(array $trace, int $x, int $y, array $old, array $new) : array { $result = []; for ($d = \count($trace) - 1; $d >= 0; $d--) { @@ -6779,7 +8545,7 @@ class Differ $prevX = $v[$prevK]; $prevY = $prevX - $prevK; while ($x > $prevX && $y > $prevY) { - $result[] = new DiffElem(DiffElem::TYPE_KEEP, $a[$x - 1], $b[$y - 1]); + $result[] = new DiffElem(DiffElem::TYPE_KEEP, $old[$x - 1], $new[$y - 1]); $x--; $y--; } @@ -6787,11 +8553,11 @@ class Differ break; } while ($x > $prevX) { - $result[] = new DiffElem(DiffElem::TYPE_REMOVE, $a[$x - 1], null); + $result[] = new DiffElem(DiffElem::TYPE_REMOVE, $old[$x - 1], null); $x--; } while ($y > $prevY) { - $result[] = new DiffElem(DiffElem::TYPE_ADD, null, $b[$y - 1]); + $result[] = new DiffElem(DiffElem::TYPE_ADD, null, $new[$y - 1]); $y--; } } @@ -6803,7 +8569,7 @@ class Differ * @param DiffElem[] $diff * @return DiffElem[] */ - private function coalesceReplacements(array $diff) + private function coalesceReplacements(array $diff) : array { $newDiff = []; $c = \count($diff); @@ -6856,31 +8622,42 @@ use PHPUnit\PhpParser\Node\Expr; class PrintableNewAnonClassNode extends Expr { /** @var Node\AttributeGroup[] PHP attribute groups */ - public $attrGroups; - /** @var Node\Arg[] Arguments */ - public $args; + public array $attrGroups; + /** @var int Modifiers */ + public int $flags; + /** @var (Node\Arg|Node\VariadicPlaceholder)[] Arguments */ + public array $args; /** @var null|Node\Name Name of extended class */ - public $extends; + public ?Node\Name $extends; /** @var Node\Name[] Names of implemented interfaces */ - public $implements; + public array $implements; /** @var Node\Stmt[] Statements */ - public $stmts; - public function __construct(array $attrGroups, array $args, Node\Name $extends = null, array $implements, array $stmts, array $attributes) + public array $stmts; + /** + * @param Node\AttributeGroup[] $attrGroups PHP attribute groups + * @param (Node\Arg|Node\VariadicPlaceholder)[] $args Arguments + * @param Node\Name|null $extends Name of extended class + * @param Node\Name[] $implements Names of implemented interfaces + * @param Node\Stmt[] $stmts Statements + * @param array $attributes Attributes + */ + public function __construct(array $attrGroups, int $flags, array $args, ?Node\Name $extends, array $implements, array $stmts, array $attributes) { parent::__construct($attributes); $this->attrGroups = $attrGroups; + $this->flags = $flags; $this->args = $args; $this->extends = $extends; $this->implements = $implements; $this->stmts = $stmts; } - public static function fromNewNode(Expr\New_ $newNode) + public static function fromNewNode(Expr\New_ $newNode) : self { $class = $newNode->class; \assert($class instanceof Node\Stmt\Class_); // We don't assert that $class->name is null here, to allow consumers to assign unique names // to anonymous classes for their own purposes. We simplify ignore the name here. - return new self($class->attrGroups, $newNode->args, $class->extends, $class->implements, $class->stmts, $newNode->getAttributes()); + return new self($class->attrGroups, $class->flags, $newNode->args, $class->extends, $class->implements, $class->stmts, $newNode->getAttributes()); } public function getType() : string { @@ -6888,7 +8665,215 @@ class PrintableNewAnonClassNode extends Expr } public function getSubNodeNames() : array { - return ['attrGroups', 'args', 'extends', 'implements', 'stmts']; + return ['attrGroups', 'flags', 'args', 'extends', 'implements', 'stmts']; + } +} += 80000) { + class TokenPolyfill extends \PhpToken + { + } + return; +} +/** + * This is a polyfill for the PhpToken class introduced in PHP 8.0. We do not actually polyfill + * PhpToken, because composer might end up picking a different polyfill implementation, which does + * not meet our requirements. + * + * @internal + */ +class TokenPolyfill +{ + /** @var int The ID of the token. Either a T_* constant of a character code < 256. */ + public int $id; + /** @var string The textual content of the token. */ + public string $text; + /** @var int The 1-based starting line of the token (or -1 if unknown). */ + public int $line; + /** @var int The 0-based starting position of the token (or -1 if unknown). */ + public int $pos; + /** @var array Tokens ignored by the PHP parser. */ + private const IGNORABLE_TOKENS = [\T_WHITESPACE => \true, \T_COMMENT => \true, \T_DOC_COMMENT => \true, \T_OPEN_TAG => \true]; + /** @var array Tokens that may be part of a T_NAME_* identifier. */ + private static array $identifierTokens; + /** + * Create a Token with the given ID and text, as well optional line and position information. + */ + public final function __construct(int $id, string $text, int $line = -1, int $pos = -1) + { + $this->id = $id; + $this->text = $text; + $this->line = $line; + $this->pos = $pos; + } + /** + * Get the name of the token. For single-char tokens this will be the token character. + * Otherwise it will be a T_* style name, or null if the token ID is unknown. + */ + public function getTokenName() : ?string + { + if ($this->id < 256) { + return \chr($this->id); + } + $name = \token_name($this->id); + return $name === 'UNKNOWN' ? null : $name; + } + /** + * Check whether the token is of the given kind. The kind may be either an integer that matches + * the token ID, a string that matches the token text, or an array of integers/strings. In the + * latter case, the function returns true if any of the kinds in the array match. + * + * @param int|string|(int|string)[] $kind + */ + public function is($kind) : bool + { + if (\is_int($kind)) { + return $this->id === $kind; + } + if (\is_string($kind)) { + return $this->text === $kind; + } + if (\is_array($kind)) { + foreach ($kind as $entry) { + if (\is_int($entry)) { + if ($this->id === $entry) { + return \true; + } + } elseif (\is_string($entry)) { + if ($this->text === $entry) { + return \true; + } + } else { + throw new \TypeError('Argument #1 ($kind) must only have elements of type string|int, ' . \gettype($entry) . ' given'); + } + } + return \false; + } + throw new \TypeError('Argument #1 ($kind) must be of type string|int|array, ' . \gettype($kind) . ' given'); + } + /** + * Check whether this token would be ignored by the PHP parser. Returns true for T_WHITESPACE, + * T_COMMENT, T_DOC_COMMENT and T_OPEN_TAG, and false for everything else. + */ + public function isIgnorable() : bool + { + return isset(self::IGNORABLE_TOKENS[$this->id]); + } + /** + * Return the textual content of the token. + */ + public function __toString() : string + { + return $this->text; + } + /** + * Tokenize the given source code and return an array of tokens. + * + * This performs certain canonicalizations to match the PHP 8.0 token format: + * * Bad characters are represented using T_BAD_CHARACTER rather than omitted. + * * T_COMMENT does not include trailing newlines, instead the newline is part of a following + * T_WHITESPACE token. + * * Namespaced names are represented using T_NAME_* tokens. + * + * @return static[] + */ + public static function tokenize(string $code, int $flags = 0) : array + { + self::init(); + $tokens = []; + $line = 1; + $pos = 0; + $origTokens = \token_get_all($code, $flags); + $numTokens = \count($origTokens); + for ($i = 0; $i < $numTokens; $i++) { + $token = $origTokens[$i]; + if (\is_string($token)) { + if (\strlen($token) === 2) { + // b" and B" are tokenized as single-char tokens, even though they aren't. + $tokens[] = new static(\ord('"'), $token, $line, $pos); + $pos += 2; + } else { + $tokens[] = new static(\ord($token), $token, $line, $pos); + $pos++; + } + } else { + $id = $token[0]; + $text = $token[1]; + // Emulate PHP 8.0 comment format, which does not include trailing whitespace anymore. + if ($id === \T_COMMENT && \substr($text, 0, 2) !== '/*' && \preg_match('/(\\r\\n|\\n|\\r)$/D', $text, $matches)) { + $trailingNewline = $matches[0]; + $text = \substr($text, 0, -\strlen($trailingNewline)); + $tokens[] = new static($id, $text, $line, $pos); + $pos += \strlen($text); + if ($i + 1 < $numTokens && $origTokens[$i + 1][0] === \T_WHITESPACE) { + // Move trailing newline into following T_WHITESPACE token, if it already exists. + $origTokens[$i + 1][1] = $trailingNewline . $origTokens[$i + 1][1]; + $origTokens[$i + 1][2]--; + } else { + // Otherwise, we need to create a new T_WHITESPACE token. + $tokens[] = new static(\T_WHITESPACE, $trailingNewline, $line, $pos); + $line++; + $pos += \strlen($trailingNewline); + } + continue; + } + // Emulate PHP 8.0 T_NAME_* tokens, by combining sequences of T_NS_SEPARATOR and + // T_STRING into a single token. + if ($id === \T_NS_SEPARATOR || isset(self::$identifierTokens[$id])) { + $newText = $text; + $lastWasSeparator = $id === \T_NS_SEPARATOR; + for ($j = $i + 1; $j < $numTokens; $j++) { + if ($lastWasSeparator) { + if (!isset(self::$identifierTokens[$origTokens[$j][0]])) { + break; + } + $lastWasSeparator = \false; + } else { + if ($origTokens[$j][0] !== \T_NS_SEPARATOR) { + break; + } + $lastWasSeparator = \true; + } + $newText .= $origTokens[$j][1]; + } + if ($lastWasSeparator) { + // Trailing separator is not part of the name. + $j--; + $newText = \substr($newText, 0, -1); + } + if ($j > $i + 1) { + if ($id === \T_NS_SEPARATOR) { + $id = \T_NAME_FULLY_QUALIFIED; + } elseif ($id === \T_NAMESPACE) { + $id = \T_NAME_RELATIVE; + } else { + $id = \T_NAME_QUALIFIED; + } + $tokens[] = new static($id, $newText, $line, $pos); + $pos += \strlen($newText); + $i = $j - 1; + continue; + } + } + $tokens[] = new static($id, $text, $line, $pos); + $line += \substr_count($text, "\n"); + $pos += \strlen($text); + } + } + return $tokens; + } + /** Initialize private static state needed by tokenize(). */ + private static function init() : void + { + if (isset(self::$identifierTokens)) { + return; + } + // Based on semi_reserved production. + self::$identifierTokens = \array_fill_keys([\T_STRING, \T_STATIC, \T_ABSTRACT, \T_FINAL, \T_PRIVATE, \T_PROTECTED, \T_PUBLIC, \T_READONLY, \T_INCLUDE, \T_INCLUDE_ONCE, \T_EVAL, \T_REQUIRE, \T_REQUIRE_ONCE, \T_LOGICAL_OR, \T_LOGICAL_XOR, \T_LOGICAL_AND, \T_INSTANCEOF, \T_NEW, \T_CLONE, \T_EXIT, \T_IF, \T_ELSEIF, \T_ELSE, \T_ENDIF, \T_ECHO, \T_DO, \T_WHILE, \T_ENDWHILE, \T_FOR, \T_ENDFOR, \T_FOREACH, \T_ENDFOREACH, \T_DECLARE, \T_ENDDECLARE, \T_AS, \T_TRY, \T_CATCH, \T_FINALLY, \T_THROW, \T_USE, \T_INSTEADOF, \T_GLOBAL, \T_VAR, \T_UNSET, \T_ISSET, \T_EMPTY, \T_CONTINUE, \T_GOTO, \T_FUNCTION, \T_CONST, \T_RETURN, \T_PRINT, \T_YIELD, \T_LIST, \T_SWITCH, \T_ENDSWITCH, \T_CASE, \T_DEFAULT, \T_BREAK, \T_ARRAY, \T_CALLABLE, \T_EXTENDS, \T_IMPLEMENTS, \T_NAMESPACE, \T_TRAIT, \T_INTERFACE, \T_CLASS, \T_CLASS_C, \T_TRAIT_C, \T_FUNC_C, \T_METHOD_C, \T_LINE, \T_FILE, \T_DIR, \T_NS_C, \T_HALT_COMPILER, \T_FN, \T_MATCH], \true); } } tokens; $pos--; for (; $pos >= 0; $pos--) { - $tokenType = $tokens[$pos][0]; - if ($tokenType === $expectedTokenType) { + $token = $tokens[$pos]; + if ($token->is($expectedTokenType)) { return \true; } - if ($tokenType !== \T_WHITESPACE && $tokenType !== \T_COMMENT && $tokenType !== \T_DOC_COMMENT) { + if (!$token->isIgnorable()) { break; } } @@ -6971,7 +8953,7 @@ class TokenStream * * During this check whitespace and comments are skipped. * - * @param int $pos Position after which the token should occur + * @param int $pos Position after which the token should occur * @param int|string $expectedTokenType Token to check for * * @return bool Whether the expected token was found @@ -6980,39 +8962,41 @@ class TokenStream { $tokens = $this->tokens; $pos++; - for (; $pos < \count($tokens); $pos++) { - $tokenType = $tokens[$pos][0]; - if ($tokenType === $expectedTokenType) { + for ($c = \count($tokens); $pos < $c; $pos++) { + $token = $tokens[$pos]; + if ($token->is($expectedTokenType)) { return \true; } - if ($tokenType !== \T_WHITESPACE && $tokenType !== \T_COMMENT && $tokenType !== \T_DOC_COMMENT) { + if (!$token->isIgnorable()) { break; } } return \false; } - public function skipLeft(int $pos, $skipTokenType) + /** @param int|string|(int|string)[] $skipTokenType */ + public function skipLeft(int $pos, $skipTokenType) : int { $tokens = $this->tokens; $pos = $this->skipLeftWhitespace($pos); if ($skipTokenType === \T_WHITESPACE) { return $pos; } - if ($tokens[$pos][0] !== $skipTokenType) { + if (!$tokens[$pos]->is($skipTokenType)) { // Shouldn't happen. The skip token MUST be there throw new \Exception('Encountered unexpected token'); } $pos--; return $this->skipLeftWhitespace($pos); } - public function skipRight(int $pos, $skipTokenType) + /** @param int|string|(int|string)[] $skipTokenType */ + public function skipRight(int $pos, $skipTokenType) : int { $tokens = $this->tokens; $pos = $this->skipRightWhitespace($pos); if ($skipTokenType === \T_WHITESPACE) { return $pos; } - if ($tokens[$pos][0] !== $skipTokenType) { + if (!$tokens[$pos]->is($skipTokenType)) { // Shouldn't happen. The skip token MUST be there throw new \Exception('Encountered unexpected token'); } @@ -7025,12 +9009,11 @@ class TokenStream * @param int $pos Token position * @return int Non-whitespace token position */ - public function skipLeftWhitespace(int $pos) + public function skipLeftWhitespace(int $pos) : int { $tokens = $this->tokens; for (; $pos >= 0; $pos--) { - $type = $tokens[$pos][0]; - if ($type !== \T_WHITESPACE && $type !== \T_COMMENT && $type !== \T_DOC_COMMENT) { + if (!$tokens[$pos]->isIgnorable()) { break; } } @@ -7042,23 +9025,22 @@ class TokenStream * @param int $pos Token position * @return int Non-whitespace token position */ - public function skipRightWhitespace(int $pos) + public function skipRightWhitespace(int $pos) : int { $tokens = $this->tokens; for ($count = \count($tokens); $pos < $count; $pos++) { - $type = $tokens[$pos][0]; - if ($type !== \T_WHITESPACE && $type !== \T_COMMENT && $type !== \T_DOC_COMMENT) { + if (!$tokens[$pos]->isIgnorable()) { break; } } return $pos; } - public function findRight(int $pos, $findTokenType) + /** @param int|string|(int|string)[] $findTokenType */ + public function findRight(int $pos, $findTokenType) : int { $tokens = $this->tokens; for ($count = \count($tokens); $pos < $count; $pos++) { - $type = $tokens[$pos][0]; - if ($type === $findTokenType) { + if ($tokens[$pos]->is($findTokenType)) { return $pos; } } @@ -7072,20 +9054,16 @@ class TokenStream * @param int|string $tokenType Token type to look for * @return bool Whether the token occurs in the given range */ - public function haveTokenInRange(int $startPos, int $endPos, $tokenType) + public function haveTokenInRange(int $startPos, int $endPos, $tokenType) : bool { $tokens = $this->tokens; for ($pos = $startPos; $pos < $endPos; $pos++) { - if ($tokens[$pos][0] === $tokenType) { + if ($tokens[$pos]->is($tokenType)) { return \true; } } return \false; } - public function haveBracesInRange(int $startPos, int $endPos) - { - return $this->haveTokenInRange($startPos, $endPos, '{') || $this->haveTokenInRange($startPos, $endPos, \T_CURLY_OPEN) || $this->haveTokenInRange($startPos, $endPos, '}'); - } public function haveTagInRange(int $startPos, int $endPos) : bool { return $this->haveTokenInRange($startPos, $endPos, \T_OPEN_TAG) || $this->haveTokenInRange($startPos, $endPos, \T_CLOSE_TAG); @@ -7104,8 +9082,8 @@ class TokenStream /** * Get the code corresponding to a token offset range, optionally adjusted for indentation. * - * @param int $from Token start position (inclusive) - * @param int $to Token end position (exclusive) + * @param int $from Token start position (inclusive) + * @param int $to Token end position (exclusive) * @param int $indent By how much the code should be indented (can be negative as well) * * @return string Code corresponding to token range, adjusted for indentation @@ -7116,23 +9094,19 @@ class TokenStream $result = ''; for ($pos = $from; $pos < $to; $pos++) { $token = $tokens[$pos]; - if (\is_array($token)) { - $type = $token[0]; - $content = $token[1]; - if ($type === \T_CONSTANT_ENCAPSED_STRING || $type === \T_ENCAPSED_AND_WHITESPACE) { - $result .= $content; + $id = $token->id; + $text = $token->text; + if ($id === \T_CONSTANT_ENCAPSED_STRING || $id === \T_ENCAPSED_AND_WHITESPACE) { + $result .= $text; + } else { + // TODO Handle non-space indentation + if ($indent < 0) { + $result .= \str_replace("\n" . \str_repeat(" ", -$indent), "\n", $text); + } elseif ($indent > 0) { + $result .= \str_replace("\n", "\n" . \str_repeat(" ", $indent), $text); } else { - // TODO Handle non-space indentation - if ($indent < 0) { - $result .= \str_replace("\n" . \str_repeat(" ", -$indent), "\n", $content); - } elseif ($indent > 0) { - $result .= \str_replace("\n", "\n" . \str_repeat(" ", $indent), $content); - } else { - $result .= $content; - } + $result .= $text; } - } else { - $result .= $token; } } return $result; @@ -7142,14 +9116,14 @@ class TokenStream * * @return int[] Token position to indentation map */ - private function calcIndentMap() + private function calcIndentMap() : array { $indentMap = []; $indent = 0; foreach ($this->tokens as $token) { $indentMap[] = $indent; - if ($token[0] === \T_WHITESPACE) { - $content = $token[1]; + if ($token->id === \T_WHITESPACE) { + $content = $token->text; $newlinePos = \strrpos($content, "\n"); if (\false !== $newlinePos) { $indent = \strlen($content) - $newlinePos - 1; @@ -7168,8 +9142,9 @@ namespace PHPUnit\PhpParser; class JsonDecoder { - /** @var \ReflectionClass[] Node type to reflection class map */ - private $reflectionClassCache; + /** @var \ReflectionClass[] Node type to reflection class map */ + private array $reflectionClassCache; + /** @return mixed */ public function decode(string $json) { $value = \json_decode($json, \true); @@ -7178,6 +9153,10 @@ class JsonDecoder } return $this->decodeRecursive($value); } + /** + * @param mixed $value + * @return mixed + */ private function decodeRecursive($value) { if (\is_array($value)) { @@ -7206,7 +9185,6 @@ class JsonDecoder throw new \RuntimeException('Node type must be a string'); } $reflectionClass = $this->reflectionClassFromNodeType($nodeType); - /** @var Node $node */ $node = $reflectionClass->newInstanceWithoutConstructor(); if (isset($value['attributes'])) { if (!\is_array($value['attributes'])) { @@ -7230,6 +9208,7 @@ class JsonDecoder } return new $className($value['text'], $value['line'] ?? -1, $value['filePos'] ?? -1, $value['tokenPos'] ?? -1, $value['endLine'] ?? -1, $value['endFilePos'] ?? -1, $value['endTokenPos'] ?? -1); } + /** @return \ReflectionClass */ private function reflectionClassFromNodeType(string $nodeType) : \ReflectionClass { if (!isset($this->reflectionClassCache[$nodeType])) { @@ -7238,6 +9217,7 @@ class JsonDecoder } return $this->reflectionClassCache[$nodeType]; } + /** @return class-string */ private function classNameFromNodeType(string $nodeType) : string { $className = 'PhpParser\\Node\\' . \strtr($nodeType, '_', '\\'); @@ -7256,464 +9236,90 @@ class JsonDecoder declare (strict_types=1); namespace PHPUnit\PhpParser; -use PHPUnit\PhpParser\Parser\Tokens; +require __DIR__ . '/compatibility_tokens.php'; class Lexer { - protected $code; - protected $tokens; - protected $pos; - protected $line; - protected $filePos; - protected $prevCloseTagHasNewline; - protected $tokenMap; - protected $dropTokens; - protected $identifierTokens; - private $attributeStartLineUsed; - private $attributeEndLineUsed; - private $attributeStartTokenPosUsed; - private $attributeEndTokenPosUsed; - private $attributeStartFilePosUsed; - private $attributeEndFilePosUsed; - private $attributeCommentsUsed; - /** - * Creates a Lexer. - * - * @param array $options Options array. Currently only the 'usedAttributes' option is supported, - * which is an array of attributes to add to the AST nodes. Possible - * attributes are: 'comments', 'startLine', 'endLine', 'startTokenPos', - * 'endTokenPos', 'startFilePos', 'endFilePos'. The option defaults to the - * first three. For more info see getNextToken() docs. - */ - public function __construct(array $options = []) - { - // Create Map from internal tokens to PhpParser tokens. - $this->defineCompatibilityTokens(); - $this->tokenMap = $this->createTokenMap(); - $this->identifierTokens = $this->createIdentifierTokenMap(); - // map of tokens to drop while lexing (the map is only used for isset lookup, - // that's why the value is simply set to 1; the value is never actually used.) - $this->dropTokens = \array_fill_keys([\T_WHITESPACE, \T_OPEN_TAG, \T_COMMENT, \T_DOC_COMMENT, \T_BAD_CHARACTER], 1); - $defaultAttributes = ['comments', 'startLine', 'endLine']; - $usedAttributes = \array_fill_keys($options['usedAttributes'] ?? $defaultAttributes, \true); - // Create individual boolean properties to make these checks faster. - $this->attributeStartLineUsed = isset($usedAttributes['startLine']); - $this->attributeEndLineUsed = isset($usedAttributes['endLine']); - $this->attributeStartTokenPosUsed = isset($usedAttributes['startTokenPos']); - $this->attributeEndTokenPosUsed = isset($usedAttributes['endTokenPos']); - $this->attributeStartFilePosUsed = isset($usedAttributes['startFilePos']); - $this->attributeEndFilePosUsed = isset($usedAttributes['endFilePos']); - $this->attributeCommentsUsed = isset($usedAttributes['comments']); - } - /** - * Initializes the lexer for lexing the provided source code. - * - * This function does not throw if lexing errors occur. Instead, errors may be retrieved using - * the getErrors() method. - * - * @param string $code The source code to lex + /** + * Tokenize the provided source code. + * + * The token array is in the same format as provided by the PhpToken::tokenize() method in + * PHP 8.0. The tokens are instances of PhpParser\Token, to abstract over a polyfill + * implementation in earlier PHP version. + * + * The token array is terminated by a sentinel token with token ID 0. + * The token array does not discard any tokens (i.e. whitespace and comments are included). + * The token position attributes are against this token array. + * + * @param string $code The source code to tokenize. * @param ErrorHandler|null $errorHandler Error handler to use for lexing errors. Defaults to - * ErrorHandler\Throwing + * ErrorHandler\Throwing. + * @return Token[] Tokens */ - public function startLexing(string $code, ErrorHandler $errorHandler = null) + public function tokenize(string $code, ?ErrorHandler $errorHandler = null) : array { if (null === $errorHandler) { $errorHandler = new ErrorHandler\Throwing(); } - $this->code = $code; - // keep the code around for __halt_compiler() handling - $this->pos = -1; - $this->line = 1; - $this->filePos = 0; - // If inline HTML occurs without preceding code, treat it as if it had a leading newline. - // This ensures proper composability, because having a newline is the "safe" assumption. - $this->prevCloseTagHasNewline = \true; $scream = \ini_set('xdebug.scream', '0'); - $this->tokens = @\token_get_all($code); - $this->postprocessTokens($errorHandler); + $tokens = @Token::tokenize($code); + $this->postprocessTokens($tokens, $errorHandler); if (\false !== $scream) { \ini_set('xdebug.scream', $scream); } - } - private function handleInvalidCharacterRange($start, $end, $line, ErrorHandler $errorHandler) - { - $tokens = []; - for ($i = $start; $i < $end; $i++) { - $chr = $this->code[$i]; - if ($chr === "\x00") { - // PHP cuts error message after null byte, so need special case - $errorMsg = 'Unexpected null byte'; - } else { - $errorMsg = \sprintf('Unexpected character "%s" (ASCII %d)', $chr, \ord($chr)); - } - $tokens[] = [\T_BAD_CHARACTER, $chr, $line]; - $errorHandler->handleError(new Error($errorMsg, ['startLine' => $line, 'endLine' => $line, 'startFilePos' => $i, 'endFilePos' => $i])); - } return $tokens; } - /** - * Check whether comment token is unterminated. - * - * @return bool - */ - private function isUnterminatedComment($token) : bool - { - return ($token[0] === \T_COMMENT || $token[0] === \T_DOC_COMMENT) && \substr($token[1], 0, 2) === '/*' && \substr($token[1], -2) !== '*/'; - } - protected function postprocessTokens(ErrorHandler $errorHandler) + private function handleInvalidCharacter(Token $token, ErrorHandler $errorHandler) : void { - // PHP's error handling for token_get_all() is rather bad, so if we want detailed - // error information we need to compute it ourselves. Invalid character errors are - // detected by finding "gaps" in the token array. Unterminated comments are detected - // by checking if a trailing comment has a "*/" at the end. - // - // Additionally, we perform a number of canonicalizations here: - // * Use the PHP 8.0 comment format, which does not include trailing whitespace anymore. - // * Use PHP 8.0 T_NAME_* tokens. - // * Use PHP 8.1 T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG and - // T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG tokens used to disambiguate intersection types. - $filePos = 0; - $line = 1; - $numTokens = \count($this->tokens); - for ($i = 0; $i < $numTokens; $i++) { - $token = $this->tokens[$i]; - // Since PHP 7.4 invalid characters are represented by a T_BAD_CHARACTER token. - // In this case we only need to emit an error. - if ($token[0] === \T_BAD_CHARACTER) { - $this->handleInvalidCharacterRange($filePos, $filePos + 1, $line, $errorHandler); - } - if ($token[0] === \T_COMMENT && \substr($token[1], 0, 2) !== '/*' && \preg_match('/(\\r\\n|\\n|\\r)$/D', $token[1], $matches)) { - $trailingNewline = $matches[0]; - $token[1] = \substr($token[1], 0, -\strlen($trailingNewline)); - $this->tokens[$i] = $token; - if (isset($this->tokens[$i + 1]) && $this->tokens[$i + 1][0] === \T_WHITESPACE) { - // Move trailing newline into following T_WHITESPACE token, if it already exists. - $this->tokens[$i + 1][1] = $trailingNewline . $this->tokens[$i + 1][1]; - $this->tokens[$i + 1][2]--; - } else { - // Otherwise, we need to create a new T_WHITESPACE token. - \array_splice($this->tokens, $i + 1, 0, [[\T_WHITESPACE, $trailingNewline, $line]]); - $numTokens++; - } - } - // Emulate PHP 8 T_NAME_* tokens, by combining sequences of T_NS_SEPARATOR and T_STRING - // into a single token. - if (\is_array($token) && ($token[0] === \T_NS_SEPARATOR || isset($this->identifierTokens[$token[0]]))) { - $lastWasSeparator = $token[0] === \T_NS_SEPARATOR; - $text = $token[1]; - for ($j = $i + 1; isset($this->tokens[$j]); $j++) { - if ($lastWasSeparator) { - if (!isset($this->identifierTokens[$this->tokens[$j][0]])) { - break; - } - $lastWasSeparator = \false; - } else { - if ($this->tokens[$j][0] !== \T_NS_SEPARATOR) { - break; - } - $lastWasSeparator = \true; - } - $text .= $this->tokens[$j][1]; - } - if ($lastWasSeparator) { - // Trailing separator is not part of the name. - $j--; - $text = \substr($text, 0, -1); - } - if ($j > $i + 1) { - if ($token[0] === \T_NS_SEPARATOR) { - $type = \T_NAME_FULLY_QUALIFIED; - } else { - if ($token[0] === \T_NAMESPACE) { - $type = \T_NAME_RELATIVE; - } else { - $type = \T_NAME_QUALIFIED; - } - } - $token = [$type, $text, $line]; - \array_splice($this->tokens, $i, $j - $i, [$token]); - $numTokens -= $j - $i - 1; - } - } - if ($token === '&') { - $next = $i + 1; - while (isset($this->tokens[$next]) && $this->tokens[$next][0] === \T_WHITESPACE) { - $next++; - } - $followedByVarOrVarArg = isset($this->tokens[$next]) && ($this->tokens[$next][0] === \T_VARIABLE || $this->tokens[$next][0] === \T_ELLIPSIS); - $this->tokens[$i] = $token = [$followedByVarOrVarArg ? \T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG : \T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG, '&', $line]; - } - $tokenValue = \is_string($token) ? $token : $token[1]; - $tokenLen = \strlen($tokenValue); - if (\substr($this->code, $filePos, $tokenLen) !== $tokenValue) { - // Something is missing, must be an invalid character - $nextFilePos = \strpos($this->code, $tokenValue, $filePos); - $badCharTokens = $this->handleInvalidCharacterRange($filePos, $nextFilePos, $line, $errorHandler); - $filePos = (int) $nextFilePos; - \array_splice($this->tokens, $i, 0, $badCharTokens); - $numTokens += \count($badCharTokens); - $i += \count($badCharTokens); - } - $filePos += $tokenLen; - $line += \substr_count($tokenValue, "\n"); - } - if ($filePos !== \strlen($this->code)) { - if (\substr($this->code, $filePos, 2) === '/*') { - // Unlike PHP, HHVM will drop unterminated comments entirely - $comment = \substr($this->code, $filePos); - $errorHandler->handleError(new Error('Unterminated comment', ['startLine' => $line, 'endLine' => $line + \substr_count($comment, "\n"), 'startFilePos' => $filePos, 'endFilePos' => $filePos + \strlen($comment)])); - // Emulate the PHP behavior - $isDocComment = isset($comment[3]) && $comment[3] === '*'; - $this->tokens[] = [$isDocComment ? \T_DOC_COMMENT : \T_COMMENT, $comment, $line]; - } else { - // Invalid characters at the end of the input - $badCharTokens = $this->handleInvalidCharacterRange($filePos, \strlen($this->code), $line, $errorHandler); - $this->tokens = \array_merge($this->tokens, $badCharTokens); - } - return; - } - if (\count($this->tokens) > 0) { - // Check for unterminated comment - $lastToken = $this->tokens[\count($this->tokens) - 1]; - if ($this->isUnterminatedComment($lastToken)) { - $errorHandler->handleError(new Error('Unterminated comment', ['startLine' => $line - \substr_count($lastToken[1], "\n"), 'endLine' => $line, 'startFilePos' => $filePos - \strlen($lastToken[1]), 'endFilePos' => $filePos])); - } - } - } - /** - * Fetches the next token. - * - * The available attributes are determined by the 'usedAttributes' option, which can - * be specified in the constructor. The following attributes are supported: - * - * * 'comments' => Array of PhpParser\Comment or PhpParser\Comment\Doc instances, - * representing all comments that occurred between the previous - * non-discarded token and the current one. - * * 'startLine' => Line in which the node starts. - * * 'endLine' => Line in which the node ends. - * * 'startTokenPos' => Offset into the token array of the first token in the node. - * * 'endTokenPos' => Offset into the token array of the last token in the node. - * * 'startFilePos' => Offset into the code string of the first character that is part of the node. - * * 'endFilePos' => Offset into the code string of the last character that is part of the node. - * - * @param mixed $value Variable to store token content in - * @param mixed $startAttributes Variable to store start attributes in - * @param mixed $endAttributes Variable to store end attributes in - * - * @return int Token id - */ - public function getNextToken(&$value = null, &$startAttributes = null, &$endAttributes = null) : int - { - $startAttributes = []; - $endAttributes = []; - while (1) { - if (isset($this->tokens[++$this->pos])) { - $token = $this->tokens[$this->pos]; - } else { - // EOF token with ID 0 - $token = "\x00"; - } - if ($this->attributeStartLineUsed) { - $startAttributes['startLine'] = $this->line; - } - if ($this->attributeStartTokenPosUsed) { - $startAttributes['startTokenPos'] = $this->pos; - } - if ($this->attributeStartFilePosUsed) { - $startAttributes['startFilePos'] = $this->filePos; - } - if (\is_string($token)) { - $value = $token; - if (isset($token[1])) { - // bug in token_get_all - $this->filePos += 2; - $id = \ord('"'); - } else { - $this->filePos += 1; - $id = \ord($token); - } - } elseif (!isset($this->dropTokens[$token[0]])) { - $value = $token[1]; - $id = $this->tokenMap[$token[0]]; - if (\T_CLOSE_TAG === $token[0]) { - $this->prevCloseTagHasNewline = \false !== \strpos($token[1], "\n") || \false !== \strpos($token[1], "\r"); - } elseif (\T_INLINE_HTML === $token[0]) { - $startAttributes['hasLeadingNewline'] = $this->prevCloseTagHasNewline; - } - $this->line += \substr_count($value, "\n"); - $this->filePos += \strlen($value); - } else { - $origLine = $this->line; - $origFilePos = $this->filePos; - $this->line += \substr_count($token[1], "\n"); - $this->filePos += \strlen($token[1]); - if (\T_COMMENT === $token[0] || \T_DOC_COMMENT === $token[0]) { - if ($this->attributeCommentsUsed) { - $comment = \T_DOC_COMMENT === $token[0] ? new Comment\Doc($token[1], $origLine, $origFilePos, $this->pos, $this->line, $this->filePos - 1, $this->pos) : new Comment($token[1], $origLine, $origFilePos, $this->pos, $this->line, $this->filePos - 1, $this->pos); - $startAttributes['comments'][] = $comment; - } - } - continue; - } - if ($this->attributeEndLineUsed) { - $endAttributes['endLine'] = $this->line; - } - if ($this->attributeEndTokenPosUsed) { - $endAttributes['endTokenPos'] = $this->pos; - } - if ($this->attributeEndFilePosUsed) { - $endAttributes['endFilePos'] = $this->filePos - 1; - } - return $id; + $chr = $token->text; + if ($chr === "\x00") { + // PHP cuts error message after null byte, so need special case + $errorMsg = 'Unexpected null byte'; + } else { + $errorMsg = \sprintf('Unexpected character "%s" (ASCII %d)', $chr, \ord($chr)); } - throw new \RuntimeException('Reached end of lexer loop'); + $errorHandler->handleError(new Error($errorMsg, ['startLine' => $token->line, 'endLine' => $token->line, 'startFilePos' => $token->pos, 'endFilePos' => $token->pos])); } - /** - * Returns the token array for current code. - * - * The token array is in the same format as provided by the - * token_get_all() function and does not discard tokens (i.e. - * whitespace and comments are included). The token position - * attributes are against this token array. - * - * @return array Array of tokens in token_get_all() format - */ - public function getTokens() : array + private function isUnterminatedComment(Token $token) : bool { - return $this->tokens; + return $token->is([\T_COMMENT, \T_DOC_COMMENT]) && \substr($token->text, 0, 2) === '/*' && \substr($token->text, -2) !== '*/'; } /** - * Handles __halt_compiler() by returning the text after it. - * - * @return string Remaining text + * @param list $tokens */ - public function handleHaltCompiler() : string - { - // text after T_HALT_COMPILER, still including (); - $textAfter = \substr($this->code, $this->filePos); - // ensure that it is followed by (); - // this simplifies the situation, by not allowing any comments - // in between of the tokens. - if (!\preg_match('~^\\s*\\(\\s*\\)\\s*(?:;|\\?>\\r?\\n?)~', $textAfter, $matches)) { - throw new Error('__HALT_COMPILER must be followed by "();"'); - } - // prevent the lexer from returning any further tokens - $this->pos = \count($this->tokens); - // return with (); removed - return \substr($textAfter, \strlen($matches[0])); - } - private function defineCompatibilityTokens() + protected function postprocessTokens(array &$tokens, ErrorHandler $errorHandler) : void { - static $compatTokensDefined = \false; - if ($compatTokensDefined) { + // This function reports errors (bad characters and unterminated comments) in the token + // array, and performs certain canonicalizations: + // * Use PHP 8.1 T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG and + // T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG tokens used to disambiguate intersection types. + // * Add a sentinel token with ID 0. + $numTokens = \count($tokens); + if ($numTokens === 0) { + // Empty input edge case: Just add the sentinel token. + $tokens[] = new Token(0, "\x00", 1, 0); return; } - $compatTokens = [ - // PHP 7.4 - 'T_BAD_CHARACTER', - 'T_FN', - 'T_COALESCE_EQUAL', - // PHP 8.0 - 'T_NAME_QUALIFIED', - 'T_NAME_FULLY_QUALIFIED', - 'T_NAME_RELATIVE', - 'T_MATCH', - 'T_NULLSAFE_OBJECT_OPERATOR', - 'T_ATTRIBUTE', - // PHP 8.1 - 'T_ENUM', - 'T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG', - 'T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG', - 'T_READONLY', - ]; - // PHP-Parser might be used together with another library that also emulates some or all - // of these tokens. Perform a sanity-check that all already defined tokens have been - // assigned a unique ID. - $usedTokenIds = []; - foreach ($compatTokens as $token) { - if (\defined($token)) { - $tokenId = \constant($token); - $clashingToken = $usedTokenIds[$tokenId] ?? null; - if ($clashingToken !== null) { - throw new \Error(\sprintf('Token %s has same ID as token %s, ' . 'you may be using a library with broken token emulation', $token, $clashingToken)); - } - $usedTokenIds[$tokenId] = $token; - } - } - // Now define any tokens that have not yet been emulated. Try to assign IDs from -1 - // downwards, but skip any IDs that may already be in use. - $newTokenId = -1; - foreach ($compatTokens as $token) { - if (!\defined($token)) { - while (isset($usedTokenIds[$newTokenId])) { - $newTokenId--; - } - \define($token, $newTokenId); - $newTokenId--; + for ($i = 0; $i < $numTokens; $i++) { + $token = $tokens[$i]; + if ($token->id === \T_BAD_CHARACTER) { + $this->handleInvalidCharacter($token, $errorHandler); } - } - $compatTokensDefined = \true; - } - /** - * Creates the token map. - * - * The token map maps the PHP internal token identifiers - * to the identifiers used by the Parser. Additionally it - * maps T_OPEN_TAG_WITH_ECHO to T_ECHO and T_CLOSE_TAG to ';'. - * - * @return array The token map - */ - protected function createTokenMap() : array - { - $tokenMap = []; - // 256 is the minimum possible token number, as everything below - // it is an ASCII value - for ($i = 256; $i < 1000; ++$i) { - if (\T_DOUBLE_COLON === $i) { - // T_DOUBLE_COLON is equivalent to T_PAAMAYIM_NEKUDOTAYIM - $tokenMap[$i] = Tokens::T_PAAMAYIM_NEKUDOTAYIM; - } elseif (\T_OPEN_TAG_WITH_ECHO === $i) { - // T_OPEN_TAG_WITH_ECHO with dropped T_OPEN_TAG results in T_ECHO - $tokenMap[$i] = Tokens::T_ECHO; - } elseif (\T_CLOSE_TAG === $i) { - // T_CLOSE_TAG is equivalent to ';' - $tokenMap[$i] = \ord(';'); - } elseif ('UNKNOWN' !== ($name = \token_name($i))) { - if ('T_HASHBANG' === $name) { - // HHVM uses a special token for #! hashbang lines - $tokenMap[$i] = Tokens::T_INLINE_HTML; - } elseif (\defined($name = Tokens::class . '::' . $name)) { - // Other tokens can be mapped directly - $tokenMap[$i] = \constant($name); + if ($token->id === \ord('&')) { + $next = $i + 1; + while (isset($tokens[$next]) && $tokens[$next]->id === \T_WHITESPACE) { + $next++; } + $followedByVarOrVarArg = isset($tokens[$next]) && $tokens[$next]->is([\T_VARIABLE, \T_ELLIPSIS]); + $token->id = $followedByVarOrVarArg ? \T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG : \T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG; } } - // HHVM uses a special token for numbers that overflow to double - if (\defined('T_ONUMBER')) { - $tokenMap[\T_ONUMBER] = Tokens::T_DNUMBER; + // Check for unterminated comment + $lastToken = $tokens[$numTokens - 1]; + if ($this->isUnterminatedComment($lastToken)) { + $errorHandler->handleError(new Error('Unterminated comment', ['startLine' => $lastToken->line, 'endLine' => $lastToken->getEndLine(), 'startFilePos' => $lastToken->pos, 'endFilePos' => $lastToken->getEndPos()])); } - // HHVM also has a separate token for the __COMPILER_HALT_OFFSET__ constant - if (\defined('T_COMPILER_HALT_OFFSET')) { - $tokenMap[\T_COMPILER_HALT_OFFSET] = Tokens::T_STRING; - } - // Assign tokens for which we define compatibility constants, as token_name() does not know them. - $tokenMap[\T_FN] = Tokens::T_FN; - $tokenMap[\T_COALESCE_EQUAL] = Tokens::T_COALESCE_EQUAL; - $tokenMap[\T_NAME_QUALIFIED] = Tokens::T_NAME_QUALIFIED; - $tokenMap[\T_NAME_FULLY_QUALIFIED] = Tokens::T_NAME_FULLY_QUALIFIED; - $tokenMap[\T_NAME_RELATIVE] = Tokens::T_NAME_RELATIVE; - $tokenMap[\T_MATCH] = Tokens::T_MATCH; - $tokenMap[\T_NULLSAFE_OBJECT_OPERATOR] = Tokens::T_NULLSAFE_OBJECT_OPERATOR; - $tokenMap[\T_ATTRIBUTE] = Tokens::T_ATTRIBUTE; - $tokenMap[\T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG] = Tokens::T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG; - $tokenMap[\T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG] = Tokens::T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG; - $tokenMap[\T_ENUM] = Tokens::T_ENUM; - $tokenMap[\T_READONLY] = Tokens::T_READONLY; - return $tokenMap; - } - private function createIdentifierTokenMap() : array - { - // Based on semi_reserved production. - return \array_fill_keys([\T_STRING, \T_STATIC, \T_ABSTRACT, \T_FINAL, \T_PRIVATE, \T_PROTECTED, \T_PUBLIC, \T_READONLY, \T_INCLUDE, \T_INCLUDE_ONCE, \T_EVAL, \T_REQUIRE, \T_REQUIRE_ONCE, \T_LOGICAL_OR, \T_LOGICAL_XOR, \T_LOGICAL_AND, \T_INSTANCEOF, \T_NEW, \T_CLONE, \T_EXIT, \T_IF, \T_ELSEIF, \T_ELSE, \T_ENDIF, \T_ECHO, \T_DO, \T_WHILE, \T_ENDWHILE, \T_FOR, \T_ENDFOR, \T_FOREACH, \T_ENDFOREACH, \T_DECLARE, \T_ENDDECLARE, \T_AS, \T_TRY, \T_CATCH, \T_FINALLY, \T_THROW, \T_USE, \T_INSTEADOF, \T_GLOBAL, \T_VAR, \T_UNSET, \T_ISSET, \T_EMPTY, \T_CONTINUE, \T_GOTO, \T_FUNCTION, \T_CONST, \T_RETURN, \T_PRINT, \T_YIELD, \T_LIST, \T_SWITCH, \T_ENDSWITCH, \T_CASE, \T_DEFAULT, \T_BREAK, \T_ARRAY, \T_CALLABLE, \T_EXTENDS, \T_IMPLEMENTS, \T_NAMESPACE, \T_TRAIT, \T_INTERFACE, \T_CLASS, \T_CLASS_C, \T_TRAIT_C, \T_FUNC_C, \T_METHOD_C, \T_LINE, \T_FILE, \T_DIR, \T_NS_C, \T_HALT_COMPILER, \T_FN, \T_MATCH], \true); + // Add sentinel token. + $tokens[] = new Token(0, "\x00", $lastToken->getEndLine(), $lastToken->getEndPos()); } } */ + private array $emulators = []; + private PhpVersion $targetPhpVersion; + private PhpVersion $hostPhpVersion; /** - * @param mixed[] $options Lexer options. In addition to the usual options, - * accepts a 'phpVersion' string that specifies the - * version to emulate. Defaults to newest supported. + * @param PhpVersion|null $phpVersion PHP version to emulate. Defaults to newest supported. */ - public function __construct(array $options = []) + public function __construct(?PhpVersion $phpVersion = null) { - $this->targetPhpVersion = $options['phpVersion'] ?? Emulative::PHP_8_2; - unset($options['phpVersion']); - parent::__construct($options); - $emulators = [new FlexibleDocStringEmulator(), new FnTokenEmulator(), new MatchTokenEmulator(), new CoaleseEqualTokenEmulator(), new NumericLiteralSeparatorEmulator(), new NullsafeTokenEmulator(), new AttributeEmulator(), new EnumTokenEmulator(), new ReadonlyTokenEmulator(), new ExplicitOctalEmulator(), new ReadonlyFunctionTokenEmulator()]; + $this->targetPhpVersion = $phpVersion ?? PhpVersion::getNewestSupported(); + $this->hostPhpVersion = PhpVersion::getHostVersion(); + $emulators = [new MatchTokenEmulator(), new NullsafeTokenEmulator(), new AttributeEmulator(), new EnumTokenEmulator(), new ReadonlyTokenEmulator(), new ExplicitOctalEmulator(), new ReadonlyFunctionTokenEmulator()]; // Collect emulators that are relevant for the PHP version we're running // and the PHP version we're targeting for emulation. foreach ($emulators as $emulator) { $emulatorPhpVersion = $emulator->getPhpVersion(); if ($this->isForwardEmulationNeeded($emulatorPhpVersion)) { $this->emulators[] = $emulator; - } else { - if ($this->isReverseEmulationNeeded($emulatorPhpVersion)) { - $this->emulators[] = new ReverseEmulator($emulator); - } + } elseif ($this->isReverseEmulationNeeded($emulatorPhpVersion)) { + $this->emulators[] = new ReverseEmulator($emulator); } } } - public function startLexing(string $code, ErrorHandler $errorHandler = null) + public function tokenize(string $code, ?ErrorHandler $errorHandler = null) : array { $emulators = \array_filter($this->emulators, function ($emulator) use($code) { return $emulator->isEmulationNeeded($code); }); if (empty($emulators)) { // Nothing to emulate, yay - parent::startLexing($code, $errorHandler); - return; + return parent::tokenize($code, $errorHandler); + } + if ($errorHandler === null) { + $errorHandler = new ErrorHandler\Throwing(); } $this->patches = []; foreach ($emulators as $emulator) { $code = $emulator->preprocessCode($code, $this->patches); } $collector = new ErrorHandler\Collecting(); - parent::startLexing($code, $collector); + $tokens = parent::tokenize($code, $collector); $this->sortPatches(); - $this->fixupTokens(); + $tokens = $this->fixupTokens($tokens); $errors = $collector->getErrors(); if (!empty($errors)) { $this->fixupErrors($errors); @@ -7800,18 +9400,19 @@ class Emulative extends Lexer } } foreach ($emulators as $emulator) { - $this->tokens = $emulator->emulate($code, $this->tokens); + $tokens = $emulator->emulate($code, $tokens); } + return $tokens; } - private function isForwardEmulationNeeded(string $emulatorPhpVersion) : bool + private function isForwardEmulationNeeded(PhpVersion $emulatorPhpVersion) : bool { - return \version_compare(\PHP_VERSION, $emulatorPhpVersion, '<') && \version_compare($this->targetPhpVersion, $emulatorPhpVersion, '>='); + return $this->hostPhpVersion->older($emulatorPhpVersion) && $this->targetPhpVersion->newerOrEqual($emulatorPhpVersion); } - private function isReverseEmulationNeeded(string $emulatorPhpVersion) : bool + private function isReverseEmulationNeeded(PhpVersion $emulatorPhpVersion) : bool { - return \version_compare(\PHP_VERSION, $emulatorPhpVersion, '>=') && \version_compare($this->targetPhpVersion, $emulatorPhpVersion, '<'); + return $this->hostPhpVersion->newerOrEqual($emulatorPhpVersion) && $this->targetPhpVersion->older($emulatorPhpVersion); } - private function sortPatches() + private function sortPatches() : void { // Patches may be contributed by different emulators. // Make sure they are sorted by increasing patch position. @@ -7819,83 +9420,72 @@ class Emulative extends Lexer return $p1[0] <=> $p2[0]; }); } - private function fixupTokens() + /** + * @param list $tokens + * @return list + */ + private function fixupTokens(array $tokens) : array { if (\count($this->patches) === 0) { - return; + return $tokens; } // Load first patch $patchIdx = 0; list($patchPos, $patchType, $patchText) = $this->patches[$patchIdx]; // We use a manual loop over the tokens, because we modify the array on the fly - $pos = 0; - for ($i = 0, $c = \count($this->tokens); $i < $c; $i++) { - $token = $this->tokens[$i]; - if (\is_string($token)) { - if ($patchPos === $pos) { - // Only support replacement for string tokens. - \assert($patchType === 'replace'); - $this->tokens[$i] = $patchText; - // Fetch the next patch - $patchIdx++; - if ($patchIdx >= \count($this->patches)) { - // No more patches, we're done - return; - } - list($patchPos, $patchType, $patchText) = $this->patches[$patchIdx]; - } - $pos += \strlen($token); - continue; - } - $len = \strlen($token[1]); - $posDelta = 0; + $posDelta = 0; + $lineDelta = 0; + for ($i = 0, $c = \count($tokens); $i < $c; $i++) { + $token = $tokens[$i]; + $pos = $token->pos; + $token->pos += $posDelta; + $token->line += $lineDelta; + $localPosDelta = 0; + $len = \strlen($token->text); while ($patchPos >= $pos && $patchPos < $pos + $len) { $patchTextLen = \strlen($patchText); if ($patchType === 'remove') { if ($patchPos === $pos && $patchTextLen === $len) { // Remove token entirely - \array_splice($this->tokens, $i, 1, []); + \array_splice($tokens, $i, 1, []); $i--; $c--; } else { // Remove from token string - $this->tokens[$i][1] = \substr_replace($token[1], '', $patchPos - $pos + $posDelta, $patchTextLen); - $posDelta -= $patchTextLen; + $token->text = \substr_replace($token->text, '', $patchPos - $pos + $localPosDelta, $patchTextLen); + $localPosDelta -= $patchTextLen; } + $lineDelta -= \substr_count($patchText, "\n"); } elseif ($patchType === 'add') { // Insert into the token string - $this->tokens[$i][1] = \substr_replace($token[1], $patchText, $patchPos - $pos + $posDelta, 0); - $posDelta += $patchTextLen; + $token->text = \substr_replace($token->text, $patchText, $patchPos - $pos + $localPosDelta, 0); + $localPosDelta += $patchTextLen; + $lineDelta += \substr_count($patchText, "\n"); + } elseif ($patchType === 'replace') { + // Replace inside the token string + $token->text = \substr_replace($token->text, $patchText, $patchPos - $pos + $localPosDelta, $patchTextLen); } else { - if ($patchType === 'replace') { - // Replace inside the token string - $this->tokens[$i][1] = \substr_replace($token[1], $patchText, $patchPos - $pos + $posDelta, $patchTextLen); - } else { - \assert(\false); - } + \assert(\false); } // Fetch the next patch $patchIdx++; if ($patchIdx >= \count($this->patches)) { - // No more patches, we're done - return; + // No more patches. However, we still need to adjust position. + $patchPos = \PHP_INT_MAX; + break; } list($patchPos, $patchType, $patchText) = $this->patches[$patchIdx]; - // Multiple patches may apply to the same token. Reload the current one to check - // If the new patch applies - $token = $this->tokens[$i]; } - $pos += $len; + $posDelta += $localPosDelta; } - // A patch did not apply - \assert(\false); + return $tokens; } /** * Fixup line and position information in errors. * * @param Error[] $errors */ - private function fixupErrors(array $errors) + private function fixupErrors(array $errors) : void { foreach ($errors as $error) { $attrs = $error->getAttributes(); @@ -7910,11 +9500,9 @@ class Emulative extends Lexer if ($patchType === 'add') { $posDelta += \strlen($patchText); $lineDelta += \substr_count($patchText, "\n"); - } else { - if ($patchType === 'remove') { - $posDelta -= \strlen($patchText); - $lineDelta -= \substr_count($patchText, "\n"); - } + } elseif ($patchType === 'remove') { + $posDelta -= \strlen($patchText); + $lineDelta -= \substr_count($patchText, "\n"); } } $attrs['startFilePos'] += $posDelta; @@ -7930,12 +9518,13 @@ class Emulative extends Lexer declare (strict_types=1); namespace PHPUnit\PhpParser\Lexer\TokenEmulator; -use PHPUnit\PhpParser\Lexer\Emulative; +use PHPUnit\PhpParser\PhpVersion; +use PHPUnit\PhpParser\Token; final class AttributeEmulator extends TokenEmulator { - public function getPhpVersion() : string + public function getPhpVersion() : PhpVersion { - return Emulative::PHP_8_0; + return PhpVersion::fromComponents(8, 0); } public function isEmulationNeeded(string $code) : bool { @@ -7945,16 +9534,13 @@ final class AttributeEmulator extends TokenEmulator { // We need to manually iterate and manage a count because we'll change // the tokens array on the way. - $line = 1; for ($i = 0, $c = \count($tokens); $i < $c; ++$i) { - if ($tokens[$i] === '#' && isset($tokens[$i + 1]) && $tokens[$i + 1] === '[') { - \array_splice($tokens, $i, 2, [[\T_ATTRIBUTE, '#[', $line]]); + $token = $tokens[$i]; + if ($token->text === '#' && isset($tokens[$i + 1]) && $tokens[$i + 1]->text === '[') { + \array_splice($tokens, $i, 2, [new Token(\T_ATTRIBUTE, '#[', $token->line, $token->pos)]); $c--; continue; } - if (\is_array($tokens[$i])) { - $line += \substr_count($tokens[$i][1], "\n"); - } } return $tokens; } @@ -7980,53 +9566,12 @@ final class AttributeEmulator extends TokenEmulator declare (strict_types=1); namespace PHPUnit\PhpParser\Lexer\TokenEmulator; -use PHPUnit\PhpParser\Lexer\Emulative; -final class CoaleseEqualTokenEmulator extends TokenEmulator -{ - public function getPhpVersion() : string - { - return Emulative::PHP_7_4; - } - public function isEmulationNeeded(string $code) : bool - { - return \strpos($code, '??=') !== \false; - } - public function emulate(string $code, array $tokens) : array - { - // We need to manually iterate and manage a count because we'll change - // the tokens array on the way - $line = 1; - for ($i = 0, $c = \count($tokens); $i < $c; ++$i) { - if (isset($tokens[$i + 1])) { - if ($tokens[$i][0] === \T_COALESCE && $tokens[$i + 1] === '=') { - \array_splice($tokens, $i, 2, [[\T_COALESCE_EQUAL, '??=', $line]]); - $c--; - continue; - } - } - if (\is_array($tokens[$i])) { - $line += \substr_count($tokens[$i][1], "\n"); - } - } - return $tokens; - } - public function reverseEmulate(string $code, array $tokens) : array - { - // ??= was not valid code previously, don't bother. - return $tokens; - } -} -id === \T_WHITESPACE && $tokens[$pos + 2]->id === \T_STRING; } } resolveIntegerOrFloatToken($tokens[$i + 1][1]); - \array_splice($tokens, $i, 2, [[$tokenKind, '0' . $tokens[$i + 1][1], $tokens[$i][2]]]); + $token = $tokens[$i]; + if ($token->id == \T_LNUMBER && $token->text === '0' && isset($tokens[$i + 1]) && $tokens[$i + 1]->id == \T_STRING && \preg_match('/[oO][0-7]+(?:_[0-7]+)*/', $tokens[$i + 1]->text)) { + $tokenKind = $this->resolveIntegerOrFloatToken($tokens[$i + 1]->text); + \array_splice($tokens, $i, 2, [new Token($tokenKind, '0' . $tokens[$i + 1]->text, $token->line, $token->pos)]); $c--; } } @@ -8086,124 +9633,36 @@ class ExplicitOctalEmulator extends TokenEmulator declare (strict_types=1); namespace PHPUnit\PhpParser\Lexer\TokenEmulator; -use PHPUnit\PhpParser\Lexer\Emulative; -final class FlexibleDocStringEmulator extends TokenEmulator -{ - const FLEXIBLE_DOC_STRING_REGEX = <<<'REGEX' -/<<<[ \t]*(['"]?)([a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*)\1\r?\n -(?:.*\r?\n)*? -(?\h*)\2(?![a-zA-Z0-9_\x80-\xff])(?(?:;?[\r\n])?)/x -REGEX; - public function getPhpVersion() : string - { - return Emulative::PHP_7_3; - } - public function isEmulationNeeded(string $code) : bool - { - return \strpos($code, '<<<') !== \false; - } - public function emulate(string $code, array $tokens) : array - { - // Handled by preprocessing + fixup. - return $tokens; - } - public function reverseEmulate(string $code, array $tokens) : array - { - // Not supported. - return $tokens; - } - public function preprocessCode(string $code, array &$patches) : string - { - if (!\preg_match_all(self::FLEXIBLE_DOC_STRING_REGEX, $code, $matches, \PREG_SET_ORDER | \PREG_OFFSET_CAPTURE)) { - // No heredoc/nowdoc found - return $code; - } - // Keep track of how much we need to adjust string offsets due to the modifications we - // already made - $posDelta = 0; - foreach ($matches as $match) { - $indentation = $match['indentation'][0]; - $indentationStart = $match['indentation'][1]; - $separator = $match['separator'][0]; - $separatorStart = $match['separator'][1]; - if ($indentation === '' && $separator !== '') { - // Ordinary heredoc/nowdoc - continue; - } - if ($indentation !== '') { - // Remove indentation - $indentationLen = \strlen($indentation); - $code = \substr_replace($code, '', $indentationStart + $posDelta, $indentationLen); - $patches[] = [$indentationStart + $posDelta, 'add', $indentation]; - $posDelta -= $indentationLen; - } - if ($separator === '') { - // Insert newline as separator - $code = \substr_replace($code, "\n", $separatorStart + $posDelta, 0); - $patches[] = [$separatorStart + $posDelta, 'remove', "\n"]; - $posDelta += 1; - } - } - return $code; - } -} -getKeywordString()) !== \false; } + /** @param Token[] $tokens */ protected function isKeywordContext(array $tokens, int $pos) : bool { $previousNonSpaceToken = $this->getPreviousNonSpaceToken($tokens, $pos); - return $previousNonSpaceToken === null || $previousNonSpaceToken[0] !== \T_OBJECT_OPERATOR; + return $previousNonSpaceToken === null || $previousNonSpaceToken->id !== \T_OBJECT_OPERATOR; } public function emulate(string $code, array $tokens) : array { $keywordString = $this->getKeywordString(); foreach ($tokens as $i => $token) { - if ($token[0] === \T_STRING && \strtolower($token[1]) === $keywordString && $this->isKeywordContext($tokens, $i)) { - $tokens[$i][0] = $this->getKeywordToken(); + if ($token->id === \T_STRING && \strtolower($token->text) === $keywordString && $this->isKeywordContext($tokens, $i)) { + $token->id = $this->getKeywordToken(); } } return $tokens; } - /** - * @param mixed[] $tokens - * @return array|string|null - */ - private function getPreviousNonSpaceToken(array $tokens, int $start) + /** @param Token[] $tokens */ + private function getPreviousNonSpaceToken(array $tokens, int $start) : ?Token { for ($i = $start - 1; $i >= 0; --$i) { - if ($tokens[$i][0] === \T_WHITESPACE) { + if ($tokens[$i]->id === \T_WHITESPACE) { continue; } return $tokens[$i]; @@ -8213,9 +9672,9 @@ abstract class KeywordEmulator extends TokenEmulator public function reverseEmulate(string $code, array $tokens) : array { $keywordToken = $this->getKeywordToken(); - foreach ($tokens as $i => $token) { - if ($token[0] === $keywordToken) { - $tokens[$i][0] = \T_STRING; + foreach ($tokens as $token) { + if ($token->id === $keywordToken) { + $token->id = \T_STRING; } } return $tokens; @@ -8226,12 +9685,12 @@ abstract class KeywordEmulator extends TokenEmulator declare (strict_types=1); namespace PHPUnit\PhpParser\Lexer\TokenEmulator; -use PHPUnit\PhpParser\Lexer\Emulative; +use PHPUnit\PhpParser\PhpVersion; final class MatchTokenEmulator extends KeywordEmulator { - public function getPhpVersion() : string + public function getPhpVersion() : PhpVersion { - return Emulative::PHP_8_0; + return PhpVersion::fromComponents(8, 0); } public function getKeywordString() : string { @@ -8247,12 +9706,13 @@ final class MatchTokenEmulator extends KeywordEmulator declare (strict_types=1); namespace PHPUnit\PhpParser\Lexer\TokenEmulator; -use PHPUnit\PhpParser\Lexer\Emulative; +use PHPUnit\PhpParser\PhpVersion; +use PHPUnit\PhpParser\Token; final class NullsafeTokenEmulator extends TokenEmulator { - public function getPhpVersion() : string + public function getPhpVersion() : PhpVersion { - return Emulative::PHP_8_0; + return PhpVersion::fromComponents(8, 0); } public function isEmulationNeeded(string $code) : bool { @@ -8262,26 +9722,24 @@ final class NullsafeTokenEmulator extends TokenEmulator { // We need to manually iterate and manage a count because we'll change // the tokens array on the way - $line = 1; for ($i = 0, $c = \count($tokens); $i < $c; ++$i) { - if ($tokens[$i] === '?' && isset($tokens[$i + 1]) && $tokens[$i + 1][0] === \T_OBJECT_OPERATOR) { - \array_splice($tokens, $i, 2, [[\T_NULLSAFE_OBJECT_OPERATOR, '?->', $line]]); + $token = $tokens[$i]; + if ($token->text === '?' && isset($tokens[$i + 1]) && $tokens[$i + 1]->id === \T_OBJECT_OPERATOR) { + \array_splice($tokens, $i, 2, [new Token(\T_NULLSAFE_OBJECT_OPERATOR, '?->', $token->line, $token->pos)]); $c--; continue; } // Handle ?-> inside encapsed string. - if ($tokens[$i][0] === \T_ENCAPSED_AND_WHITESPACE && isset($tokens[$i - 1]) && $tokens[$i - 1][0] === \T_VARIABLE && \preg_match('/^\\?->([a-zA-Z_\\x80-\\xff][a-zA-Z0-9_\\x80-\\xff]*)/', $tokens[$i][1], $matches)) { - $replacement = [[\T_NULLSAFE_OBJECT_OPERATOR, '?->', $line], [\T_STRING, $matches[1], $line]]; - if (\strlen($matches[0]) !== \strlen($tokens[$i][1])) { - $replacement[] = [\T_ENCAPSED_AND_WHITESPACE, \substr($tokens[$i][1], \strlen($matches[0])), $line]; + if ($token->id === \T_ENCAPSED_AND_WHITESPACE && isset($tokens[$i - 1]) && $tokens[$i - 1]->id === \T_VARIABLE && \preg_match('/^\\?->([a-zA-Z_\\x80-\\xff][a-zA-Z0-9_\\x80-\\xff]*)/', $token->text, $matches)) { + $replacement = [new Token(\T_NULLSAFE_OBJECT_OPERATOR, '?->', $token->line, $token->pos), new Token(\T_STRING, $matches[1], $token->line, $token->pos + 3)]; + $matchLen = \strlen($matches[0]); + if ($matchLen !== \strlen($token->text)) { + $replacement[] = new Token(\T_ENCAPSED_AND_WHITESPACE, \substr($token->text, $matchLen), $token->line, $token->pos + $matchLen); } \array_splice($tokens, $i, 1, $replacement); $c += \count($replacement) - 1; continue; } - if (\is_array($tokens[$i])) { - $line += \substr_count($tokens[$i][1], "\n"); - } } return $tokens; } @@ -8296,95 +9754,7 @@ final class NullsafeTokenEmulator extends TokenEmulator declare (strict_types=1); namespace PHPUnit\PhpParser\Lexer\TokenEmulator; -use PHPUnit\PhpParser\Lexer\Emulative; -final class NumericLiteralSeparatorEmulator extends TokenEmulator -{ - const BIN = '(?:0b[01]+(?:_[01]+)*)'; - const HEX = '(?:0x[0-9a-f]+(?:_[0-9a-f]+)*)'; - const DEC = '(?:[0-9]+(?:_[0-9]+)*)'; - const SIMPLE_FLOAT = '(?:' . self::DEC . '\\.' . self::DEC . '?|\\.' . self::DEC . ')'; - const EXP = '(?:e[+-]?' . self::DEC . ')'; - const FLOAT = '(?:' . self::SIMPLE_FLOAT . self::EXP . '?|' . self::DEC . self::EXP . ')'; - const NUMBER = '~' . self::FLOAT . '|' . self::BIN . '|' . self::HEX . '|' . self::DEC . '~iA'; - public function getPhpVersion() : string - { - return Emulative::PHP_7_4; - } - public function isEmulationNeeded(string $code) : bool - { - return \preg_match('~[0-9]_[0-9]~', $code) || \preg_match('~0x[0-9a-f]+_[0-9a-f]~i', $code); - } - public function emulate(string $code, array $tokens) : array - { - // We need to manually iterate and manage a count because we'll change - // the tokens array on the way - $codeOffset = 0; - for ($i = 0, $c = \count($tokens); $i < $c; ++$i) { - $token = $tokens[$i]; - $tokenLen = \strlen(\is_array($token) ? $token[1] : $token); - if ($token[0] !== \T_LNUMBER && $token[0] !== \T_DNUMBER) { - $codeOffset += $tokenLen; - continue; - } - $res = \preg_match(self::NUMBER, $code, $matches, 0, $codeOffset); - \assert($res, "No number at number token position"); - $match = $matches[0]; - $matchLen = \strlen($match); - if ($matchLen === $tokenLen) { - // Original token already holds the full number. - $codeOffset += $tokenLen; - continue; - } - $tokenKind = $this->resolveIntegerOrFloatToken($match); - $newTokens = [[$tokenKind, $match, $token[2]]]; - $numTokens = 1; - $len = $tokenLen; - while ($matchLen > $len) { - $nextToken = $tokens[$i + $numTokens]; - $nextTokenText = \is_array($nextToken) ? $nextToken[1] : $nextToken; - $nextTokenLen = \strlen($nextTokenText); - $numTokens++; - if ($matchLen < $len + $nextTokenLen) { - // Split trailing characters into a partial token. - \assert(\is_array($nextToken), "Partial token should be an array token"); - $partialText = \substr($nextTokenText, $matchLen - $len); - $newTokens[] = [$nextToken[0], $partialText, $nextToken[2]]; - break; - } - $len += $nextTokenLen; - } - \array_splice($tokens, $i, $numTokens, $newTokens); - $c -= $numTokens - \count($newTokens); - $codeOffset += $matchLen; - } - return $tokens; - } - private function resolveIntegerOrFloatToken(string $str) : int - { - $str = \str_replace('_', '', $str); - if (\stripos($str, '0b') === 0) { - $num = \bindec($str); - } elseif (\stripos($str, '0x') === 0) { - $num = \hexdec($str); - } elseif (\stripos($str, '0') === 0 && \ctype_digit($str)) { - $num = \octdec($str); - } else { - $num = +$str; - } - return \is_float($num) ? \T_DNUMBER : \T_LNUMBER; - } - public function reverseEmulate(string $code, array $tokens) : array - { - // Numeric separators were not legal code previously, don't bother. - return $tokens; - } -} -text === '(' || $tokens[$pos + 1]->id === \T_WHITESPACE && isset($tokens[$pos + 2]) && $tokens[$pos + 2]->text === '(')); } } emulator = $emulator; } - public function getPhpVersion() : string + public function getPhpVersion() : PhpVersion { return $this->emulator->getPhpVersion(); } @@ -8483,19 +9854,24 @@ final class ReverseEmulator extends TokenEmulator declare (strict_types=1); namespace PHPUnit\PhpParser\Lexer\TokenEmulator; +use PHPUnit\PhpParser\PhpVersion; +use PHPUnit\PhpParser\Token; /** @internal */ abstract class TokenEmulator { - public abstract function getPhpVersion() : string; + public abstract function getPhpVersion() : PhpVersion; public abstract function isEmulationNeeded(string $code) : bool; /** - * @return array Modified Tokens + * @param Token[] $tokens Original tokens + * @return Token[] Modified Tokens */ public abstract function emulate(string $code, array $tokens) : array; /** - * @return array Modified Tokens + * @param Token[] $tokens Original tokens + * @return Token[] Modified Tokens */ public abstract function reverseEmulate(string $code, array $tokens) : array; + /** @param array{int, string, string}[] $patches */ public function preprocessCode(string $code, array &$patches) : string { return $code; @@ -8506,19 +9882,81 @@ abstract class TokenEmulator declare (strict_types=1); namespace PHPUnit\PhpParser; +/** + * Modifiers used (as a bit mask) by various flags subnodes, for example on classes, functions, + * properties and constants. + */ +final class Modifiers +{ + public const PUBLIC = 1; + public const PROTECTED = 2; + public const PRIVATE = 4; + public const STATIC = 8; + public const ABSTRACT = 16; + public const FINAL = 32; + public const READONLY = 64; + public const VISIBILITY_MASK = 1 | 2 | 4; + /** + * @internal + */ + public static function verifyClassModifier(int $a, int $b) : void + { + if ($a & Modifiers::ABSTRACT && $b & Modifiers::ABSTRACT) { + throw new Error('Multiple abstract modifiers are not allowed'); + } + if ($a & Modifiers::FINAL && $b & Modifiers::FINAL) { + throw new Error('Multiple final modifiers are not allowed'); + } + if ($a & Modifiers::READONLY && $b & Modifiers::READONLY) { + throw new Error('Multiple readonly modifiers are not allowed'); + } + if ($a & 48 && $b & 48) { + throw new Error('Cannot use the final modifier on an abstract class'); + } + } + /** + * @internal + */ + public static function verifyModifier(int $a, int $b) : void + { + if ($a & Modifiers::VISIBILITY_MASK && $b & Modifiers::VISIBILITY_MASK) { + throw new Error('Multiple access type modifiers are not allowed'); + } + if ($a & Modifiers::ABSTRACT && $b & Modifiers::ABSTRACT) { + throw new Error('Multiple abstract modifiers are not allowed'); + } + if ($a & Modifiers::STATIC && $b & Modifiers::STATIC) { + throw new Error('Multiple static modifiers are not allowed'); + } + if ($a & Modifiers::FINAL && $b & Modifiers::FINAL) { + throw new Error('Multiple final modifiers are not allowed'); + } + if ($a & Modifiers::READONLY && $b & Modifiers::READONLY) { + throw new Error('Multiple readonly modifiers are not allowed'); + } + if ($a & 48 && $b & 48) { + throw new Error('Cannot use the final modifier on an abstract class member'); + } + } +} + [aliasName => originalName]] */ - protected $aliases = []; + protected array $aliases = []; /** @var Name[][] Same as $aliases but preserving original case */ - protected $origAliases = []; + protected array $origAliases = []; /** @var ErrorHandler Error handler */ - protected $errorHandler; + protected ErrorHandler $errorHandler; /** * Create a name context. * @@ -8535,7 +9973,7 @@ class NameContext * * @param Name|null $namespace Null is the global namespace */ - public function startNamespace(Name $namespace = null) + public function startNamespace(?Name $namespace = null) : void { $this->namespace = $namespace; $this->origAliases = $this->aliases = [Stmt\Use_::TYPE_NORMAL => [], Stmt\Use_::TYPE_FUNCTION => [], Stmt\Use_::TYPE_CONSTANT => []]; @@ -8543,12 +9981,12 @@ class NameContext /** * Add an alias / import. * - * @param Name $name Original name - * @param string $aliasName Aliased name - * @param int $type One of Stmt\Use_::TYPE_* - * @param array $errorAttrs Attributes to use to report an error + * @param Name $name Original name + * @param string $aliasName Aliased name + * @param Stmt\Use_::TYPE_* $type One of Stmt\Use_::TYPE_* + * @param array $errorAttrs Attributes to use to report an error */ - public function addAlias(Name $name, string $aliasName, int $type, array $errorAttrs = []) + public function addAlias(Name $name, string $aliasName, int $type, array $errorAttrs = []) : void { // Constant names are case sensitive, everything else case insensitive if ($type === Stmt\Use_::TYPE_CONSTANT) { @@ -8569,7 +10007,7 @@ class NameContext * * @return null|Name Namespace (or null if global namespace) */ - public function getNamespace() + public function getNamespace() : ?Name { return $this->namespace; } @@ -8577,11 +10015,11 @@ class NameContext * Get resolved name. * * @param Name $name Name to resolve - * @param int $type One of Stmt\Use_::TYPE_{FUNCTION|CONSTANT} + * @param Stmt\Use_::TYPE_* $type One of Stmt\Use_::TYPE_{FUNCTION|CONSTANT} * * @return null|Name Resolved name, or null if static resolution is not possible */ - public function getResolvedName(Name $name, int $type) + public function getResolvedName(Name $name, int $type) : ?Name { // don't resolve special class names if ($type === Stmt\Use_::TYPE_NORMAL && $name->isSpecialClassName()) { @@ -8624,7 +10062,7 @@ class NameContext * Get possible ways of writing a fully qualified name (e.g., by making use of aliases). * * @param string $name Fully-qualified name (without leading namespace separator) - * @param int $type One of Stmt\Use_::TYPE_* + * @param Stmt\Use_::TYPE_* $type One of Stmt\Use_::TYPE_* * * @return Name[] Possible representations of the name */ @@ -8674,7 +10112,7 @@ class NameContext * Get shortest representation of this fully-qualified name. * * @param string $name Fully-qualified name (without leading namespace separator) - * @param int $type One of Stmt\Use_::TYPE_* + * @param Stmt\Use_::TYPE_* $type One of Stmt\Use_::TYPE_* * * @return Name Shortest representation */ @@ -8693,7 +10131,7 @@ class NameContext } return $shortestName; } - private function resolveAlias(Name $name, $type) + private function resolveAlias(Name $name, int $type) : ?FullyQualified { $firstPart = $name->getFirst(); if ($name->isQualified()) { @@ -8714,7 +10152,7 @@ class NameContext // No applicable aliases return null; } - private function getNamespaceRelativeName(string $name, string $lcName, int $type) + private function getNamespaceRelativeName(string $name, string $lcName, int $type) : ?Name { if (null === $this->namespace) { return new Name($name); @@ -8732,7 +10170,7 @@ class NameContext } return null; } - private function normalizeConstName(string $name) + private function normalizeConstName(string $name) : string { $nsSep = \strrpos($name, '\\'); if (\false === $nsSep) { @@ -8760,13 +10198,15 @@ interface Node /** * Gets the names of the sub nodes. * - * @return array Names of sub nodes + * @return string[] Names of sub nodes */ public function getSubNodeNames() : array; /** * Gets line the node started in (alias of getStartLine). * * @return int Start line (or -1 if not available) + * + * @deprecated Use getStartLine() instead */ public function getLine() : int; /** @@ -8834,7 +10274,7 @@ interface Node * * @return null|Comment\Doc Doc comment object or null */ - public function getDocComment(); + public function getDocComment() : ?Comment\Doc; /** * Sets the doc comment of the node. * @@ -8842,27 +10282,21 @@ interface Node * * @param Comment\Doc $docComment Doc comment to set */ - public function setDocComment(Comment\Doc $docComment); + public function setDocComment(Comment\Doc $docComment) : void; /** * Sets an attribute on a node. * - * @param string $key - * @param mixed $value + * @param mixed $value */ - public function setAttribute(string $key, $value); + public function setAttribute(string $key, $value) : void; /** * Returns whether an attribute exists. - * - * @param string $key - * - * @return bool */ public function hasAttribute(string $key) : bool; /** * Returns the value of an attribute. * - * @param string $key - * @param mixed $default + * @param mixed $default * * @return mixed */ @@ -8870,43 +10304,42 @@ interface Node /** * Returns all the attributes of this node. * - * @return array + * @return array */ public function getAttributes() : array; /** * Replaces all the attributes of this node. * - * @param array $attributes + * @param array $attributes */ - public function setAttributes(array $attributes); + public function setAttributes(array $attributes) : void; } $attributes Additional attributes * @param Identifier|null $name Parameter name (for named parameters) */ - public function __construct(Expr $value, bool $byRef = \false, bool $unpack = \false, array $attributes = [], Identifier $name = null) + public function __construct(Expr $value, bool $byRef = \false, bool $unpack = \false, array $attributes = [], ?Identifier $name = null) { $this->attributes = $attributes; $this->name = $name; @@ -8928,18 +10361,61 @@ class Arg extends NodeAbstract declare (strict_types=1); namespace PHPUnit\PhpParser\Node; +use PHPUnit\PhpParser\NodeAbstract; +class ArrayItem extends NodeAbstract +{ + /** @var null|Expr Key */ + public ?Expr $key; + /** @var Expr Value */ + public Expr $value; + /** @var bool Whether to assign by reference */ + public bool $byRef; + /** @var bool Whether to unpack the argument */ + public bool $unpack; + /** + * Constructs an array item node. + * + * @param Expr $value Value + * @param null|Expr $key Key + * @param bool $byRef Whether to assign by reference + * @param array $attributes Additional attributes + */ + public function __construct(Expr $value, ?Expr $key = null, bool $byRef = \false, array $attributes = [], bool $unpack = \false) + { + $this->attributes = $attributes; + $this->key = $key; + $this->value = $value; + $this->byRef = $byRef; + $this->unpack = $unpack; + } + public function getSubNodeNames() : array + { + return ['key', 'value', 'byRef', 'unpack']; + } + public function getType() : string + { + return 'ArrayItem'; + } +} +// @deprecated compatibility alias +\class_alias(ArrayItem::class, Expr\ArrayItem::class); + Attribute arguments */ + public array $args; /** - * @param Node\Name $name Attribute name - * @param Arg[] $args Attribute arguments - * @param array $attributes Additional node attributes + * @param Node\Name $name Attribute name + * @param list $args Attribute arguments + * @param array $attributes Additional node attributes */ public function __construct(Name $name, array $args = [], array $attributes = []) { @@ -8961,15 +10437,14 @@ class Attribute extends NodeAbstract declare (strict_types=1); namespace PHPUnit\PhpParser\Node; -use PHPUnit\PhpParser\Node; use PHPUnit\PhpParser\NodeAbstract; class AttributeGroup extends NodeAbstract { /** @var Attribute[] Attributes */ - public $attrs; + public array $attrs; /** * @param Attribute[] $attrs PHP attributes - * @param array $attributes Additional node attributes + * @param array $attributes Additional node attributes */ public function __construct(array $attrs, array $attributes = []) { @@ -8990,6 +10465,42 @@ class AttributeGroup extends NodeAbstract declare (strict_types=1); namespace PHPUnit\PhpParser\Node; +use PHPUnit\PhpParser\NodeAbstract; +class ClosureUse extends NodeAbstract +{ + /** @var Expr\Variable Variable to use */ + public Expr\Variable $var; + /** @var bool Whether to use by reference */ + public bool $byRef; + /** + * Constructs a closure use node. + * + * @param Expr\Variable $var Variable to use + * @param bool $byRef Whether to use by reference + * @param array $attributes Additional attributes + */ + public function __construct(Expr\Variable $var, bool $byRef = \false, array $attributes = []) + { + $this->attributes = $attributes; + $this->var = $var; + $this->byRef = $byRef; + } + public function getSubNodeNames() : array + { + return ['var', 'byRef']; + } + public function getType() : string + { + return 'ClosureUse'; + } +} +// @deprecated compatibility alias +\class_alias(ClosureUse::class, Expr\ClosureUse::class); + $attributes Additional attributes */ public function __construct($name, Expr $value, array $attributes = []) { @@ -9040,6 +10551,43 @@ class Const_ extends NodeAbstract declare (strict_types=1); namespace PHPUnit\PhpParser\Node; +use PHPUnit\PhpParser\Node; +use PHPUnit\PhpParser\NodeAbstract; +class DeclareItem extends NodeAbstract +{ + /** @var Node\Identifier Key */ + public Identifier $key; + /** @var Node\Expr Value */ + public Expr $value; + /** + * Constructs a declare key=>value pair node. + * + * @param string|Node\Identifier $key Key + * @param Node\Expr $value Value + * @param array $attributes Additional attributes + */ + public function __construct($key, Node\Expr $value, array $attributes = []) + { + $this->attributes = $attributes; + $this->key = \is_string($key) ? new Node\Identifier($key) : $key; + $this->value = $value; + } + public function getSubNodeNames() : array + { + return ['key', 'value']; + } + public function getType() : string + { + return 'DeclareItem'; + } +} +// @deprecated compatibility alias +\class_alias(DeclareItem::class, Stmt\DeclareDeclare::class); + $attributes Additional attributes */ - public function __construct(Expr $var, Expr $dim = null, array $attributes = []) + public function __construct(Expr $var, ?Expr $dim = null, array $attributes = []) { $this->attributes = $attributes; $this->var = $var; @@ -9081,64 +10629,30 @@ class ArrayDimFetch extends Expr attributes = $attributes; - $this->key = $key; - $this->value = $value; - $this->byRef = $byRef; - $this->unpack = $unpack; - } - public function getSubNodeNames() : array - { - return ['key', 'value', 'byRef', 'unpack']; - } - public function getType() : string - { - return 'Expr_ArrayItem'; - } -} +require __DIR__ . '/../ArrayItem.php'; $attributes Additional attributes */ public function __construct(array $items = [], array $attributes = []) { @@ -9164,36 +10678,42 @@ use PHPUnit\PhpParser\Node\Expr; use PHPUnit\PhpParser\Node\FunctionLike; class ArrowFunction extends Expr implements FunctionLike { - /** @var bool */ - public $static; - /** @var bool */ - public $byRef; + /** @var bool Whether the closure is static */ + public bool $static; + /** @var bool Whether to return by reference */ + public bool $byRef; /** @var Node\Param[] */ - public $params = []; + public array $params = []; /** @var null|Node\Identifier|Node\Name|Node\ComplexType */ - public $returnType; - /** @var Expr */ - public $expr; + public ?Node $returnType; + /** @var Expr Expression body */ + public Expr $expr; /** @var Node\AttributeGroup[] */ - public $attrGroups; - /** - * @param array $subNodes Array of the following optional subnodes: - * 'static' => false : Whether the closure is static - * 'byRef' => false : Whether to return by reference - * 'params' => array() : Parameters - * 'returnType' => null : Return type - * 'expr' => Expr : Expression body - * 'attrGroups' => array() : PHP attribute groups - * @param array $attributes Additional attributes - */ - public function __construct(array $subNodes = [], array $attributes = []) + public array $attrGroups; + /** + * @param array{ + * expr: Expr, + * static?: bool, + * byRef?: bool, + * params?: Node\Param[], + * returnType?: null|Node\Identifier|Node\Name|Node\ComplexType, + * attrGroups?: Node\AttributeGroup[] + * } $subNodes Array of the following subnodes: + * 'expr' : Expression body + * 'static' => false : Whether the closure is static + * 'byRef' => false : Whether to return by reference + * 'params' => array() : Parameters + * 'returnType' => null : Return type + * 'attrGroups' => array() : PHP attribute groups + * @param array $attributes Additional attributes + */ + public function __construct(array $subNodes, array $attributes = []) { $this->attributes = $attributes; $this->static = $subNodes['static'] ?? \false; $this->byRef = $subNodes['byRef'] ?? \false; $this->params = $subNodes['params'] ?? []; - $returnType = $subNodes['returnType'] ?? null; - $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType; + $this->returnType = $subNodes['returnType'] ?? null; $this->expr = $subNodes['expr']; $this->attrGroups = $subNodes['attrGroups'] ?? []; } @@ -9238,15 +10758,15 @@ use PHPUnit\PhpParser\Node\Expr; class Assign extends Expr { /** @var Expr Variable */ - public $var; + public Expr $var; /** @var Expr Expression */ - public $expr; + public Expr $expr; /** * Constructs an assignment node. * - * @param Expr $var Variable - * @param Expr $expr Expression - * @param array $attributes Additional attributes + * @param Expr $var Variable + * @param Expr $expr Expression + * @param array $attributes Additional attributes */ public function __construct(Expr $var, Expr $expr, array $attributes = []) { @@ -9272,15 +10792,15 @@ use PHPUnit\PhpParser\Node\Expr; abstract class AssignOp extends Expr { /** @var Expr Variable */ - public $var; + public Expr $var; /** @var Expr Expression */ - public $expr; + public Expr $expr; /** * Constructs a compound assignment operation node. * - * @param Expr $var Variable - * @param Expr $expr Expression - * @param array $attributes Additional attributes + * @param Expr $var Variable + * @param Expr $expr Expression + * @param array $attributes Additional attributes */ public function __construct(Expr $var, Expr $expr, array $attributes = []) { @@ -9471,15 +10991,15 @@ use PHPUnit\PhpParser\Node\Expr; class AssignRef extends Expr { /** @var Expr Variable reference is assigned to */ - public $var; + public Expr $var; /** @var Expr Variable which is referenced */ - public $expr; + public Expr $expr; /** * Constructs an assignment node. * - * @param Expr $var Variable - * @param Expr $expr Expression - * @param array $attributes Additional attributes + * @param Expr $var Variable + * @param Expr $expr Expression + * @param array $attributes Additional attributes */ public function __construct(Expr $var, Expr $expr, array $attributes = []) { @@ -9505,15 +11025,15 @@ use PHPUnit\PhpParser\Node\Expr; abstract class BinaryOp extends Expr { /** @var Expr The left hand side expression */ - public $left; + public Expr $left; /** @var Expr The right hand side expression */ - public $right; + public Expr $right; /** * Constructs a binary operator node. * - * @param Expr $left The left hand side expression - * @param Expr $right The right hand side expression - * @param array $attributes Additional attributes + * @param Expr $left The left hand side expression + * @param Expr $right The right hand side expression + * @param array $attributes Additional attributes */ public function __construct(Expr $left, Expr $right, array $attributes = []) { @@ -9530,8 +11050,6 @@ abstract class BinaryOp extends Expr * * In the case there are multiple possible sigils for an operator, this method does not * necessarily return the one used in the parsed code. - * - * @return string */ public abstract function getOperatorSigil() : string; } @@ -10003,12 +11521,12 @@ use PHPUnit\PhpParser\Node\Expr; class BitwiseNot extends Expr { /** @var Expr Expression */ - public $expr; + public Expr $expr; /** * Constructs a bitwise not node. * - * @param Expr $expr Expression - * @param array $attributes Additional attributes + * @param Expr $expr Expression + * @param array $attributes Additional attributes */ public function __construct(Expr $expr, array $attributes = []) { @@ -10033,12 +11551,12 @@ use PHPUnit\PhpParser\Node\Expr; class BooleanNot extends Expr { /** @var Expr Expression */ - public $expr; + public Expr $expr; /** * Constructs a boolean not node. * - * @param Expr $expr Expression - * @param array $attributes Additional attributes + * @param Expr $expr Expression + * @param array $attributes Additional attributes */ public function __construct(Expr $expr, array $attributes = []) { @@ -10076,12 +11594,8 @@ abstract class CallLike extends Expr */ public function isFirstClassCallable() : bool { - foreach ($this->getRawArgs() as $arg) { - if ($arg instanceof VariadicPlaceholder) { - return \true; - } - } - return \false; + $rawArgs = $this->getRawArgs(); + return \count($rawArgs) === 1 && \current($rawArgs) instanceof VariadicPlaceholder; } /** * Assert that this is not a first-class callable and return only ordinary Args. @@ -10103,12 +11617,12 @@ use PHPUnit\PhpParser\Node\Expr; abstract class Cast extends Expr { /** @var Expr Expression */ - public $expr; + public Expr $expr; /** * Constructs a cast node. * - * @param Expr $expr Expression - * @param array $attributes Additional attributes + * @param Expr $expr Expression + * @param array $attributes Additional attributes */ public function __construct(Expr $expr, array $attributes = []) { @@ -10155,11 +11669,11 @@ use PHPUnit\PhpParser\Node\Expr\Cast; class Double extends Cast { // For use in "kind" attribute - const KIND_DOUBLE = 1; + public const KIND_DOUBLE = 1; // "double" syntax - const KIND_FLOAT = 2; + public const KIND_FLOAT = 2; // "float" syntax - const KIND_REAL = 3; + public const KIND_REAL = 3; // "real" syntax public function getType() : string { @@ -10223,23 +11737,24 @@ class Unset_ extends Cast declare (strict_types=1); namespace PHPUnit\PhpParser\Node\Expr; +use PHPUnit\PhpParser\Node; use PHPUnit\PhpParser\Node\Expr; use PHPUnit\PhpParser\Node\Identifier; use PHPUnit\PhpParser\Node\Name; class ClassConstFetch extends Expr { /** @var Name|Expr Class name */ - public $class; - /** @var Identifier|Error Constant name */ - public $name; + public Node $class; + /** @var Identifier|Expr|Error Constant name */ + public Node $name; /** * Constructs a class const fetch node. * - * @param Name|Expr $class Class name - * @param string|Identifier|Error $name Constant name - * @param array $attributes Additional attributes + * @param Name|Expr $class Class name + * @param string|Identifier|Expr|Error $name Constant name + * @param array $attributes Additional attributes */ - public function __construct($class, $name, array $attributes = []) + public function __construct(Node $class, $name, array $attributes = []) { $this->attributes = $attributes; $this->class = $class; @@ -10263,12 +11778,12 @@ use PHPUnit\PhpParser\Node\Expr; class Clone_ extends Expr { /** @var Expr Expression */ - public $expr; + public Expr $expr; /** * Constructs a clone node. * - * @param Expr $expr Expression - * @param array $attributes Additional attributes + * @param Expr $expr Expression + * @param array $attributes Additional attributes */ public function __construct(Expr $expr, array $attributes = []) { @@ -10290,36 +11805,45 @@ declare (strict_types=1); namespace PHPUnit\PhpParser\Node\Expr; use PHPUnit\PhpParser\Node; +use PHPUnit\PhpParser\Node\ClosureUse; use PHPUnit\PhpParser\Node\Expr; use PHPUnit\PhpParser\Node\FunctionLike; class Closure extends Expr implements FunctionLike { /** @var bool Whether the closure is static */ - public $static; + public bool $static; /** @var bool Whether to return by reference */ - public $byRef; + public bool $byRef; /** @var Node\Param[] Parameters */ - public $params; + public array $params; /** @var ClosureUse[] use()s */ - public $uses; + public array $uses; /** @var null|Node\Identifier|Node\Name|Node\ComplexType Return type */ - public $returnType; + public ?Node $returnType; /** @var Node\Stmt[] Statements */ - public $stmts; + public array $stmts; /** @var Node\AttributeGroup[] PHP attribute groups */ - public $attrGroups; + public array $attrGroups; /** * Constructs a lambda function node. * - * @param array $subNodes Array of the following optional subnodes: - * 'static' => false : Whether the closure is static - * 'byRef' => false : Whether to return by reference - * 'params' => array(): Parameters - * 'uses' => array(): use()s - * 'returnType' => null : Return type - * 'stmts' => array(): Statements - * 'attrGroups' => array(): PHP attributes groups - * @param array $attributes Additional attributes + * @param array{ + * static?: bool, + * byRef?: bool, + * params?: Node\Param[], + * uses?: ClosureUse[], + * returnType?: null|Node\Identifier|Node\Name|Node\ComplexType, + * stmts?: Node\Stmt[], + * attrGroups?: Node\AttributeGroup[], + * } $subNodes Array of the following optional subnodes: + * 'static' => false : Whether the closure is static + * 'byRef' => false : Whether to return by reference + * 'params' => array(): Parameters + * 'uses' => array(): use()s + * 'returnType' => null : Return type + * 'stmts' => array(): Statements + * 'attrGroups' => array(): PHP attributes groups + * @param array $attributes Additional attributes */ public function __construct(array $subNodes = [], array $attributes = []) { @@ -10328,8 +11852,7 @@ class Closure extends Expr implements FunctionLike $this->byRef = $subNodes['byRef'] ?? \false; $this->params = $subNodes['params'] ?? []; $this->uses = $subNodes['uses'] ?? []; - $returnType = $subNodes['returnType'] ?? null; - $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType; + $this->returnType = $subNodes['returnType'] ?? null; $this->stmts = $subNodes['stmts'] ?? []; $this->attrGroups = $subNodes['attrGroups'] ?? []; } @@ -10366,37 +11889,9 @@ class Closure extends Expr implements FunctionLike attributes = $attributes; - $this->var = $var; - $this->byRef = $byRef; - } - public function getSubNodeNames() : array - { - return ['var', 'byRef']; - } - public function getType() : string - { - return 'Expr_ClosureUse'; - } -} +require __DIR__ . '/../ClosureUse.php'; $attributes Additional attributes */ public function __construct(Name $name, array $attributes = []) { @@ -10437,12 +11932,12 @@ use PHPUnit\PhpParser\Node\Expr; class Empty_ extends Expr { /** @var Expr Expression */ - public $expr; + public Expr $expr; /** * Constructs an empty() node. * - * @param Expr $expr Expression - * @param array $attributes Additional attributes + * @param Expr $expr Expression + * @param array $attributes Additional attributes */ public function __construct(Expr $expr, array $attributes = []) { @@ -10475,7 +11970,7 @@ class Error extends Expr /** * Constructs an error node. * - * @param array $attributes Additional attributes + * @param array $attributes Additional attributes */ public function __construct(array $attributes = []) { @@ -10499,12 +11994,12 @@ use PHPUnit\PhpParser\Node\Expr; class ErrorSuppress extends Expr { /** @var Expr Expression */ - public $expr; + public Expr $expr; /** * Constructs an error suppress node. * - * @param Expr $expr Expression - * @param array $attributes Additional attributes + * @param Expr $expr Expression + * @param array $attributes Additional attributes */ public function __construct(Expr $expr, array $attributes = []) { @@ -10529,12 +12024,12 @@ use PHPUnit\PhpParser\Node\Expr; class Eval_ extends Expr { /** @var Expr Expression */ - public $expr; + public Expr $expr; /** * Constructs an eval() node. * - * @param Expr $expr Expression - * @param array $attributes Additional attributes + * @param Expr $expr Expression + * @param array $attributes Additional attributes */ public function __construct(Expr $expr, array $attributes = []) { @@ -10559,17 +12054,17 @@ use PHPUnit\PhpParser\Node\Expr; class Exit_ extends Expr { /* For use in "kind" attribute */ - const KIND_EXIT = 1; - const KIND_DIE = 2; + public const KIND_EXIT = 1; + public const KIND_DIE = 2; /** @var null|Expr Expression */ - public $expr; + public ?Expr $expr; /** * Constructs an exit() node. * - * @param null|Expr $expr Expression - * @param array $attributes Additional attributes + * @param null|Expr $expr Expression + * @param array $attributes Additional attributes */ - public function __construct(Expr $expr = null, array $attributes = []) + public function __construct(?Expr $expr = null, array $attributes = []) { $this->attributes = $attributes; $this->expr = $expr; @@ -10593,17 +12088,17 @@ use PHPUnit\PhpParser\Node\Expr; class FuncCall extends CallLike { /** @var Node\Name|Expr Function name */ - public $name; + public Node $name; /** @var array Arguments */ - public $args; + public array $args; /** * Constructs a function call node. * - * @param Node\Name|Expr $name Function name - * @param array $args Arguments - * @param array $attributes Additional attributes + * @param Node\Name|Expr $name Function name + * @param array $args Arguments + * @param array $attributes Additional attributes */ - public function __construct($name, array $args = [], array $attributes = []) + public function __construct(Node $name, array $args = [], array $attributes = []) { $this->attributes = $attributes; $this->name = $name; @@ -10630,20 +12125,20 @@ namespace PHPUnit\PhpParser\Node\Expr; use PHPUnit\PhpParser\Node\Expr; class Include_ extends Expr { - const TYPE_INCLUDE = 1; - const TYPE_INCLUDE_ONCE = 2; - const TYPE_REQUIRE = 3; - const TYPE_REQUIRE_ONCE = 4; + public const TYPE_INCLUDE = 1; + public const TYPE_INCLUDE_ONCE = 2; + public const TYPE_REQUIRE = 3; + public const TYPE_REQUIRE_ONCE = 4; /** @var Expr Expression */ - public $expr; + public Expr $expr; /** @var int Type of include */ - public $type; + public int $type; /** * Constructs an include node. * - * @param Expr $expr Expression - * @param int $type Type of include - * @param array $attributes Additional attributes + * @param Expr $expr Expression + * @param int $type Type of include + * @param array $attributes Additional attributes */ public function __construct(Expr $expr, int $type, array $attributes = []) { @@ -10665,22 +12160,23 @@ class Include_ extends Expr declare (strict_types=1); namespace PHPUnit\PhpParser\Node\Expr; +use PHPUnit\PhpParser\Node; use PHPUnit\PhpParser\Node\Expr; use PHPUnit\PhpParser\Node\Name; class Instanceof_ extends Expr { /** @var Expr Expression */ - public $expr; + public Expr $expr; /** @var Name|Expr Class name */ - public $class; + public Node $class; /** * Constructs an instanceof check node. * - * @param Expr $expr Expression - * @param Name|Expr $class Class name - * @param array $attributes Additional attributes + * @param Expr $expr Expression + * @param Name|Expr $class Class name + * @param array $attributes Additional attributes */ - public function __construct(Expr $expr, $class, array $attributes = []) + public function __construct(Expr $expr, Node $class, array $attributes = []) { $this->attributes = $attributes; $this->expr = $expr; @@ -10704,12 +12200,12 @@ use PHPUnit\PhpParser\Node\Expr; class Isset_ extends Expr { /** @var Expr[] Variables */ - public $vars; + public array $vars; /** * Constructs an array node. * - * @param Expr[] $vars Variables - * @param array $attributes Additional attributes + * @param Expr[] $vars Variables + * @param array $attributes Additional attributes */ public function __construct(array $vars, array $attributes = []) { @@ -10730,16 +12226,22 @@ class Isset_ extends Expr declare (strict_types=1); namespace PHPUnit\PhpParser\Node\Expr; +use PHPUnit\PhpParser\Node\ArrayItem; use PHPUnit\PhpParser\Node\Expr; class List_ extends Expr { + // For use in "kind" attribute + public const KIND_LIST = 1; + // list() syntax + public const KIND_ARRAY = 2; + // [] syntax /** @var (ArrayItem|null)[] List of items to assign to */ - public $items; + public array $items; /** * Constructs a list() destructuring node. * - * @param (ArrayItem|null)[] $items List of items to assign to - * @param array $attributes Additional attributes + * @param (ArrayItem|null)[] $items List of items to assign to + * @param array $attributes Additional attributes */ public function __construct(array $items, array $attributes = []) { @@ -10764,12 +12266,14 @@ use PHPUnit\PhpParser\Node; use PHPUnit\PhpParser\Node\MatchArm; class Match_ extends Node\Expr { - /** @var Node\Expr */ - public $cond; + /** @var Node\Expr Condition */ + public Node\Expr $cond; /** @var MatchArm[] */ - public $arms; + public array $arms; /** + * @param Node\Expr $cond Condition * @param MatchArm[] $arms + * @param array $attributes Additional attributes */ public function __construct(Node\Expr $cond, array $arms = [], array $attributes = []) { @@ -10791,6 +12295,7 @@ class Match_ extends Node\Expr declare (strict_types=1); namespace PHPUnit\PhpParser\Node\Expr; +use PHPUnit\PhpParser\Node; use PHPUnit\PhpParser\Node\Arg; use PHPUnit\PhpParser\Node\Expr; use PHPUnit\PhpParser\Node\Identifier; @@ -10798,18 +12303,18 @@ use PHPUnit\PhpParser\Node\VariadicPlaceholder; class MethodCall extends CallLike { /** @var Expr Variable holding object */ - public $var; + public Expr $var; /** @var Identifier|Expr Method name */ - public $name; + public Node $name; /** @var array Arguments */ - public $args; + public array $args; /** * Constructs a function call node. * - * @param Expr $var Variable holding object - * @param string|Identifier|Expr $name Method name - * @param array $args Arguments - * @param array $attributes Additional attributes + * @param Expr $var Variable holding object + * @param string|Identifier|Expr $name Method name + * @param array $args Arguments + * @param array $attributes Additional attributes */ public function __construct(Expr $var, $name, array $args = [], array $attributes = []) { @@ -10843,17 +12348,17 @@ use PHPUnit\PhpParser\Node\VariadicPlaceholder; class New_ extends CallLike { /** @var Node\Name|Expr|Node\Stmt\Class_ Class name */ - public $class; + public Node $class; /** @var array Arguments */ - public $args; + public array $args; /** * Constructs a function call node. * - * @param Node\Name|Expr|Node\Stmt\Class_ $class Class name (or class node for anonymous classes) - * @param array $args Arguments - * @param array $attributes Additional attributes + * @param Node\Name|Expr|Node\Stmt\Class_ $class Class name (or class node for anonymous classes) + * @param array $args Arguments + * @param array $attributes Additional attributes */ - public function __construct($class, array $args = [], array $attributes = []) + public function __construct(Node $class, array $args = [], array $attributes = []) { $this->attributes = $attributes; $this->class = $class; @@ -10877,6 +12382,7 @@ class New_ extends CallLike declare (strict_types=1); namespace PHPUnit\PhpParser\Node\Expr; +use PHPUnit\PhpParser\Node; use PHPUnit\PhpParser\Node\Arg; use PHPUnit\PhpParser\Node\Expr; use PHPUnit\PhpParser\Node\Identifier; @@ -10884,18 +12390,18 @@ use PHPUnit\PhpParser\Node\VariadicPlaceholder; class NullsafeMethodCall extends CallLike { /** @var Expr Variable holding object */ - public $var; + public Expr $var; /** @var Identifier|Expr Method name */ - public $name; + public Node $name; /** @var array Arguments */ - public $args; + public array $args; /** * Constructs a nullsafe method call node. * - * @param Expr $var Variable holding object - * @param string|Identifier|Expr $name Method name - * @param array $args Arguments - * @param array $attributes Additional attributes + * @param Expr $var Variable holding object + * @param string|Identifier|Expr $name Method name + * @param array $args Arguments + * @param array $attributes Additional attributes */ public function __construct(Expr $var, $name, array $args = [], array $attributes = []) { @@ -10922,20 +12428,21 @@ class NullsafeMethodCall extends CallLike declare (strict_types=1); namespace PHPUnit\PhpParser\Node\Expr; +use PHPUnit\PhpParser\Node; use PHPUnit\PhpParser\Node\Expr; use PHPUnit\PhpParser\Node\Identifier; class NullsafePropertyFetch extends Expr { /** @var Expr Variable holding object */ - public $var; + public Expr $var; /** @var Identifier|Expr Property name */ - public $name; + public Node $name; /** * Constructs a nullsafe property fetch node. * - * @param Expr $var Variable holding object - * @param string|Identifier|Expr $name Property name - * @param array $attributes Additional attributes + * @param Expr $var Variable holding object + * @param string|Identifier|Expr $name Property name + * @param array $attributes Additional attributes */ public function __construct(Expr $var, $name, array $attributes = []) { @@ -10961,12 +12468,12 @@ use PHPUnit\PhpParser\Node\Expr; class PostDec extends Expr { /** @var Expr Variable */ - public $var; + public Expr $var; /** * Constructs a post decrement node. * - * @param Expr $var Variable - * @param array $attributes Additional attributes + * @param Expr $var Variable + * @param array $attributes Additional attributes */ public function __construct(Expr $var, array $attributes = []) { @@ -10991,12 +12498,12 @@ use PHPUnit\PhpParser\Node\Expr; class PostInc extends Expr { /** @var Expr Variable */ - public $var; + public Expr $var; /** * Constructs a post increment node. * - * @param Expr $var Variable - * @param array $attributes Additional attributes + * @param Expr $var Variable + * @param array $attributes Additional attributes */ public function __construct(Expr $var, array $attributes = []) { @@ -11021,12 +12528,12 @@ use PHPUnit\PhpParser\Node\Expr; class PreDec extends Expr { /** @var Expr Variable */ - public $var; + public Expr $var; /** * Constructs a pre decrement node. * - * @param Expr $var Variable - * @param array $attributes Additional attributes + * @param Expr $var Variable + * @param array $attributes Additional attributes */ public function __construct(Expr $var, array $attributes = []) { @@ -11051,12 +12558,12 @@ use PHPUnit\PhpParser\Node\Expr; class PreInc extends Expr { /** @var Expr Variable */ - public $var; + public Expr $var; /** * Constructs a pre increment node. * - * @param Expr $var Variable - * @param array $attributes Additional attributes + * @param Expr $var Variable + * @param array $attributes Additional attributes */ public function __construct(Expr $var, array $attributes = []) { @@ -11081,12 +12588,12 @@ use PHPUnit\PhpParser\Node\Expr; class Print_ extends Expr { /** @var Expr Expression */ - public $expr; + public Expr $expr; /** * Constructs an print() node. * - * @param Expr $expr Expression - * @param array $attributes Additional attributes + * @param Expr $expr Expression + * @param array $attributes Additional attributes */ public function __construct(Expr $expr, array $attributes = []) { @@ -11107,20 +12614,21 @@ class Print_ extends Expr declare (strict_types=1); namespace PHPUnit\PhpParser\Node\Expr; +use PHPUnit\PhpParser\Node; use PHPUnit\PhpParser\Node\Expr; use PHPUnit\PhpParser\Node\Identifier; class PropertyFetch extends Expr { /** @var Expr Variable holding object */ - public $var; + public Expr $var; /** @var Identifier|Expr Property name */ - public $name; + public Node $name; /** * Constructs a function call node. * - * @param Expr $var Variable holding object - * @param string|Identifier|Expr $name Property name - * @param array $attributes Additional attributes + * @param Expr $var Variable holding object + * @param string|Identifier|Expr $name Property name + * @param array $attributes Additional attributes */ public function __construct(Expr $var, $name, array $attributes = []) { @@ -11143,15 +12651,16 @@ declare (strict_types=1); namespace PHPUnit\PhpParser\Node\Expr; use PHPUnit\PhpParser\Node\Expr; +use PHPUnit\PhpParser\Node\InterpolatedStringPart; class ShellExec extends Expr { - /** @var array Encapsed string array */ - public $parts; + /** @var (Expr|InterpolatedStringPart)[] Interpolated string array */ + public array $parts; /** * Constructs a shell exec (backtick) node. * - * @param array $parts Encapsed string array - * @param array $attributes Additional attributes + * @param (Expr|InterpolatedStringPart)[] $parts Interpolated string array + * @param array $attributes Additional attributes */ public function __construct(array $parts, array $attributes = []) { @@ -11180,20 +12689,20 @@ use PHPUnit\PhpParser\Node\VariadicPlaceholder; class StaticCall extends CallLike { /** @var Node\Name|Expr Class name */ - public $class; + public Node $class; /** @var Identifier|Expr Method name */ - public $name; + public Node $name; /** @var array Arguments */ - public $args; + public array $args; /** * Constructs a static method call node. * - * @param Node\Name|Expr $class Class name - * @param string|Identifier|Expr $name Method name - * @param array $args Arguments - * @param array $attributes Additional attributes + * @param Node\Name|Expr $class Class name + * @param string|Identifier|Expr $name Method name + * @param array $args Arguments + * @param array $attributes Additional attributes */ - public function __construct($class, $name, array $args = [], array $attributes = []) + public function __construct(Node $class, $name, array $args = [], array $attributes = []) { $this->attributes = $attributes; $this->class = $class; @@ -11218,23 +12727,24 @@ class StaticCall extends CallLike declare (strict_types=1); namespace PHPUnit\PhpParser\Node\Expr; +use PHPUnit\PhpParser\Node; use PHPUnit\PhpParser\Node\Expr; use PHPUnit\PhpParser\Node\Name; use PHPUnit\PhpParser\Node\VarLikeIdentifier; class StaticPropertyFetch extends Expr { /** @var Name|Expr Class name */ - public $class; + public Node $class; /** @var VarLikeIdentifier|Expr Property name */ - public $name; + public Node $name; /** * Constructs a static property fetch node. * - * @param Name|Expr $class Class name - * @param string|VarLikeIdentifier|Expr $name Property name - * @param array $attributes Additional attributes + * @param Name|Expr $class Class name + * @param string|VarLikeIdentifier|Expr $name Property name + * @param array $attributes Additional attributes */ - public function __construct($class, $name, array $attributes = []) + public function __construct(Node $class, $name, array $attributes = []) { $this->attributes = $attributes; $this->class = $class; @@ -11258,20 +12768,20 @@ use PHPUnit\PhpParser\Node\Expr; class Ternary extends Expr { /** @var Expr Condition */ - public $cond; + public Expr $cond; /** @var null|Expr Expression for true */ - public $if; + public ?Expr $if; /** @var Expr Expression for false */ - public $else; + public Expr $else; /** * Constructs a ternary operator node. * - * @param Expr $cond Condition - * @param null|Expr $if Expression for true - * @param Expr $else Expression for false - * @param array $attributes Additional attributes + * @param Expr $cond Condition + * @param null|Expr $if Expression for true + * @param Expr $else Expression for false + * @param array $attributes Additional attributes */ - public function __construct(Expr $cond, $if, Expr $else, array $attributes = []) + public function __construct(Expr $cond, ?Expr $if, Expr $else, array $attributes = []) { $this->attributes = $attributes; $this->cond = $cond; @@ -11296,12 +12806,12 @@ use PHPUnit\PhpParser\Node; class Throw_ extends Node\Expr { /** @var Node\Expr Expression */ - public $expr; + public Node\Expr $expr; /** * Constructs a throw expression node. * - * @param Node\Expr $expr Expression - * @param array $attributes Additional attributes + * @param Node\Expr $expr Expression + * @param array $attributes Additional attributes */ public function __construct(Node\Expr $expr, array $attributes = []) { @@ -11326,12 +12836,12 @@ use PHPUnit\PhpParser\Node\Expr; class UnaryMinus extends Expr { /** @var Expr Expression */ - public $expr; + public Expr $expr; /** * Constructs a unary minus node. * - * @param Expr $expr Expression - * @param array $attributes Additional attributes + * @param Expr $expr Expression + * @param array $attributes Additional attributes */ public function __construct(Expr $expr, array $attributes = []) { @@ -11356,12 +12866,12 @@ use PHPUnit\PhpParser\Node\Expr; class UnaryPlus extends Expr { /** @var Expr Expression */ - public $expr; + public Expr $expr; /** * Constructs a unary plus node. * - * @param Expr $expr Expression - * @param array $attributes Additional attributes + * @param Expr $expr Expression + * @param array $attributes Additional attributes */ public function __construct(Expr $expr, array $attributes = []) { @@ -11390,8 +12900,8 @@ class Variable extends Expr /** * Constructs a variable node. * - * @param string|Expr $name Name - * @param array $attributes Additional attributes + * @param string|Expr $name Name + * @param array $attributes Additional attributes */ public function __construct($name, array $attributes = []) { @@ -11416,12 +12926,12 @@ use PHPUnit\PhpParser\Node\Expr; class YieldFrom extends Expr { /** @var Expr Expression to yield from */ - public $expr; + public Expr $expr; /** * Constructs an "yield from" node. * - * @param Expr $expr Expression - * @param array $attributes Additional attributes + * @param Expr $expr Expression + * @param array $attributes Additional attributes */ public function __construct(Expr $expr, array $attributes = []) { @@ -11446,17 +12956,17 @@ use PHPUnit\PhpParser\Node\Expr; class Yield_ extends Expr { /** @var null|Expr Key expression */ - public $key; + public ?Expr $key; /** @var null|Expr Value expression */ - public $value; + public ?Expr $value; /** * Constructs a yield expression node. * - * @param null|Expr $value Value expression - * @param null|Expr $key Key expression - * @param array $attributes Additional attributes + * @param null|Expr $value Value expression + * @param null|Expr $key Key expression + * @param array $attributes Additional attributes */ - public function __construct(Expr $value = null, Expr $key = null, array $attributes = []) + public function __construct(?Expr $value = null, ?Expr $key = null, array $attributes = []) { $this->attributes = $attributes; $this->key = $key; @@ -11481,8 +12991,6 @@ interface FunctionLike extends Node { /** * Whether to return by reference - * - * @return bool */ public function returnsByRef() : bool; /** @@ -11502,7 +13010,7 @@ interface FunctionLike extends Node * * @return Stmt[]|null */ - public function getStmts(); + public function getStmts() : ?array; /** * Get PHP attribute groups. * @@ -11522,13 +13030,14 @@ use PHPUnit\PhpParser\NodeAbstract; class Identifier extends NodeAbstract { /** @var string Identifier as string */ - public $name; - private static $specialClassNames = ['self' => \true, 'parent' => \true, 'static' => \true]; + public string $name; + /** @var array */ + private static array $specialClassNames = ['self' => \true, 'parent' => \true, 'static' => \true]; /** * Constructs an identifier node. * - * @param string $name Identifier as string - * @param array $attributes Additional attributes + * @param string $name Identifier as string + * @param array $attributes Additional attributes */ public function __construct(string $name, array $attributes = []) { @@ -11586,15 +13095,46 @@ declare (strict_types=1); namespace PHPUnit\PhpParser\Node; use PHPUnit\PhpParser\NodeAbstract; +class InterpolatedStringPart extends NodeAbstract +{ + /** @var string String value */ + public string $value; + /** + * Constructs a node representing a string part of an interpolated string. + * + * @param string $value String value + * @param array $attributes Additional attributes + */ + public function __construct(string $value, array $attributes = []) + { + $this->attributes = $attributes; + $this->value = $value; + } + public function getSubNodeNames() : array + { + return ['value']; + } + public function getType() : string + { + return 'InterpolatedStringPart'; + } +} +// @deprecated compatibility alias +\class_alias(InterpolatedStringPart::class, Scalar\EncapsedStringPart::class); + $attributes Additional attributes */ public function __construct(array $types, array $attributes = []) { @@ -11619,14 +13159,14 @@ use PHPUnit\PhpParser\Node; use PHPUnit\PhpParser\NodeAbstract; class MatchArm extends NodeAbstract { - /** @var null|Node\Expr[] */ - public $conds; + /** @var null|list */ + public ?array $conds; /** @var Node\Expr */ - public $body; + public Expr $body; /** - * @param null|Node\Expr[] $conds + * @param null|list $conds */ - public function __construct($conds, Node\Expr $body, array $attributes = []) + public function __construct(?array $conds, Node\Expr $body, array $attributes = []) { $this->conds = $conds; $this->body = $body; @@ -11649,23 +13189,33 @@ namespace PHPUnit\PhpParser\Node; use PHPUnit\PhpParser\NodeAbstract; class Name extends NodeAbstract { - /** @var string[] Parts of the name */ - public $parts; - private static $specialClassNames = ['self' => \true, 'parent' => \true, 'static' => \true]; + /** @var string Name as string */ + public string $name; + /** @var array */ + private static array $specialClassNames = ['self' => \true, 'parent' => \true, 'static' => \true]; /** * Constructs a name node. * - * @param string|string[]|self $name Name as string, part array or Name instance (copy ctor) - * @param array $attributes Additional attributes + * @param string|string[]|self $name Name as string, part array or Name instance (copy ctor) + * @param array $attributes Additional attributes */ - public function __construct($name, array $attributes = []) + public final function __construct($name, array $attributes = []) { $this->attributes = $attributes; - $this->parts = self::prepareName($name); + $this->name = self::prepareName($name); } public function getSubNodeNames() : array { - return ['parts']; + return ['name']; + } + /** + * Get parts of name (split by the namespace separator). + * + * @return string[] Parts of name + */ + public function getParts() : array + { + return \explode('\\', $this->name); } /** * Gets the first part of the name, i.e. everything before the first namespace separator. @@ -11674,7 +13224,10 @@ class Name extends NodeAbstract */ public function getFirst() : string { - return $this->parts[0]; + if (\false !== ($pos = \strpos($this->name, '\\'))) { + return \substr($this->name, 0, $pos); + } + return $this->name; } /** * Gets the last part of the name, i.e. everything after the last namespace separator. @@ -11683,7 +13236,10 @@ class Name extends NodeAbstract */ public function getLast() : string { - return $this->parts[\count($this->parts) - 1]; + if (\false !== ($pos = \strrpos($this->name, '\\'))) { + return \substr($this->name, $pos + 1); + } + return $this->name; } /** * Checks whether the name is unqualified. (E.g. Name) @@ -11692,7 +13248,7 @@ class Name extends NodeAbstract */ public function isUnqualified() : bool { - return 1 === \count($this->parts); + return \false === \strpos($this->name, '\\'); } /** * Checks whether the name is qualified. (E.g. Name\Name) @@ -11701,7 +13257,7 @@ class Name extends NodeAbstract */ public function isQualified() : bool { - return 1 < \count($this->parts); + return \false !== \strpos($this->name, '\\'); } /** * Checks whether the name is fully qualified. (E.g. \Name) @@ -11729,7 +13285,7 @@ class Name extends NodeAbstract */ public function toString() : string { - return \implode('\\', $this->parts); + return $this->name; } /** * Returns a string representation of the name as it would occur in code (e.g., including @@ -11749,7 +13305,7 @@ class Name extends NodeAbstract */ public function toLowerString() : string { - return \strtolower(\implode('\\', $this->parts)); + return \strtolower($this->name); } /** * Checks whether the identifier is a special class name (self, parent or static). @@ -11758,7 +13314,7 @@ class Name extends NodeAbstract */ public function isSpecialClassName() : bool { - return \count($this->parts) === 1 && isset(self::$specialClassNames[\strtolower($this->parts[0])]); + return isset(self::$specialClassNames[\strtolower($this->name)]); } /** * Returns a string representation of the name by imploding the namespace parts with the @@ -11768,7 +13324,7 @@ class Name extends NodeAbstract */ public function __toString() : string { - return \implode('\\', $this->parts); + return $this->name; } /** * Gets a slice of a name (similar to array_slice). @@ -11781,14 +13337,22 @@ class Name extends NodeAbstract * * Offset and length have the same meaning as in array_slice(). * - * @param int $offset Offset to start the slice at (may be negative) + * @param int $offset Offset to start the slice at (may be negative) * @param int|null $length Length of the slice (may be negative) * * @return static|null Sliced name */ - public function slice(int $offset, int $length = null) + public function slice(int $offset, ?int $length = null) { - $numParts = \count($this->parts); + if ($offset === 1 && $length === null) { + // Short-circuit the common case. + if (\false !== ($pos = \strpos($this->name, '\\'))) { + return new static(\substr($this->name, $pos + 1)); + } + return null; + } + $parts = \explode('\\', $this->name); + $numParts = \count($parts); $realOffset = $offset < 0 ? $offset + $numParts : $offset; if ($realOffset < 0 || $realOffset > $numParts) { throw new \OutOfBoundsException(\sprintf('Offset %d is out of bounds', $offset)); @@ -11805,7 +13369,7 @@ class Name extends NodeAbstract // Empty slice is represented as null return null; } - return new static(\array_slice($this->parts, $realOffset, $realLength), $this->attributes); + return new static(\array_slice($parts, $realOffset, $realLength), $this->attributes); } /** * Concatenate two names, yielding a new Name instance. @@ -11818,9 +13382,9 @@ class Name extends NodeAbstract * Name::concat($namespace, $shortName) * where $namespace is a Name node or null will work as expected. * - * @param string|string[]|self|null $name1 The first name - * @param string|string[]|self|null $name2 The second name - * @param array $attributes Attributes to assign to concatenated name + * @param string|string[]|self|null $name1 The first name + * @param string|string[]|self|null $name2 The second name + * @param array $attributes Attributes to assign to concatenated name * * @return static|null Concatenated name */ @@ -11828,36 +13392,40 @@ class Name extends NodeAbstract { if (null === $name1 && null === $name2) { return null; - } elseif (null === $name1) { - return new static(self::prepareName($name2), $attributes); - } elseif (null === $name2) { - return new static(self::prepareName($name1), $attributes); + } + if (null === $name1) { + return new static($name2, $attributes); + } + if (null === $name2) { + return new static($name1, $attributes); } else { - return new static(\array_merge(self::prepareName($name1), self::prepareName($name2)), $attributes); + return new static(self::prepareName($name1) . '\\' . self::prepareName($name2), $attributes); } } /** * Prepares a (string, array or Name node) name for use in name changing methods by converting - * it to an array. + * it to a string. * * @param string|string[]|self $name Name to prepare * - * @return string[] Prepared name + * @return string Prepared name */ - private static function prepareName($name) : array + private static function prepareName($name) : string { if (\is_string($name)) { if ('' === $name) { throw new \InvalidArgumentException('Name cannot be empty'); } - return \explode('\\', $name); - } elseif (\is_array($name)) { + return $name; + } + if (\is_array($name)) { if (empty($name)) { throw new \InvalidArgumentException('Name cannot be empty'); } - return $name; - } elseif ($name instanceof self) { - return $name->parts; + return \implode('\\', $name); + } + if ($name instanceof self) { + return $name->name; } throw new \InvalidArgumentException('Expected string, array of parts or Name instance'); } @@ -11975,20 +13543,21 @@ class Relative extends \PHPUnit\PhpParser\Node\Name declare (strict_types=1); namespace PHPUnit\PhpParser\Node; +use PHPUnit\PhpParser\Node; class NullableType extends ComplexType { /** @var Identifier|Name Type */ - public $type; + public Node $type; /** * Constructs a nullable type (wrapping another type). * - * @param string|Identifier|Name $type Type - * @param array $attributes Additional attributes + * @param Identifier|Name $type Type + * @param array $attributes Additional attributes */ - public function __construct($type, array $attributes = []) + public function __construct(Node $type, array $attributes = []) { $this->attributes = $attributes; - $this->type = \is_string($type) ? new Identifier($type) : $type; + $this->type = $type; } public function getSubNodeNames() : array { @@ -12004,39 +13573,41 @@ class NullableType extends ComplexType declare (strict_types=1); namespace PHPUnit\PhpParser\Node; +use PHPUnit\PhpParser\Modifiers; +use PHPUnit\PhpParser\Node; use PHPUnit\PhpParser\NodeAbstract; class Param extends NodeAbstract { /** @var null|Identifier|Name|ComplexType Type declaration */ - public $type; + public ?Node $type; /** @var bool Whether parameter is passed by reference */ - public $byRef; + public bool $byRef; /** @var bool Whether this is a variadic argument */ - public $variadic; + public bool $variadic; /** @var Expr\Variable|Expr\Error Parameter variable */ - public $var; + public Expr $var; /** @var null|Expr Default value */ - public $default; - /** @var int */ - public $flags; + public ?Expr $default; + /** @var int Optional visibility flags */ + public int $flags; /** @var AttributeGroup[] PHP attribute groups */ - public $attrGroups; + public array $attrGroups; /** * Constructs a parameter node. * - * @param Expr\Variable|Expr\Error $var Parameter variable - * @param null|Expr $default Default value - * @param null|string|Identifier|Name|ComplexType $type Type declaration - * @param bool $byRef Whether is passed by reference - * @param bool $variadic Whether this is a variadic argument - * @param array $attributes Additional attributes - * @param int $flags Optional visibility flags - * @param AttributeGroup[] $attrGroups PHP attribute groups + * @param Expr\Variable|Expr\Error $var Parameter variable + * @param null|Expr $default Default value + * @param null|Identifier|Name|ComplexType $type Type declaration + * @param bool $byRef Whether is passed by reference + * @param bool $variadic Whether this is a variadic argument + * @param array $attributes Additional attributes + * @param int $flags Optional visibility flags + * @param list $attrGroups PHP attribute groups */ - public function __construct($var, Expr $default = null, $type = null, bool $byRef = \false, bool $variadic = \false, array $attributes = [], int $flags = 0, array $attrGroups = []) + public function __construct(Expr $var, ?Expr $default = null, ?Node $type = null, bool $byRef = \false, bool $variadic = \false, array $attributes = [], int $flags = 0, array $attrGroups = []) { $this->attributes = $attributes; - $this->type = \is_string($type) ? new Identifier($type) : $type; + $this->type = $type; $this->byRef = $byRef; $this->variadic = $variadic; $this->var = $var; @@ -12052,7 +13623,67 @@ class Param extends NodeAbstract { return 'Param'; } + /** + * Whether this parameter uses constructor property promotion. + */ + public function isPromoted() : bool + { + return $this->flags !== 0; + } + public function isPublic() : bool + { + return (bool) ($this->flags & Modifiers::PUBLIC); + } + public function isProtected() : bool + { + return (bool) ($this->flags & Modifiers::PROTECTED); + } + public function isPrivate() : bool + { + return (bool) ($this->flags & Modifiers::PRIVATE); + } + public function isReadonly() : bool + { + return (bool) ($this->flags & Modifiers::READONLY); + } +} + $attributes Additional attributes + */ + public function __construct($name, ?Node\Expr $default = null, array $attributes = []) + { + $this->attributes = $attributes; + $this->name = \is_string($name) ? new Node\VarLikeIdentifier($name) : $name; + $this->default = $default; + } + public function getSubNodeNames() : array + { + return ['name', 'default']; + } + public function getType() : string + { + return 'PropertyItem'; + } } +// @deprecated compatibility alias +\class_alias(PropertyItem::class, Stmt\PropertyProperty::class); $attributes Additional attributes */ public function __construct(float $value, array $attributes = []) { @@ -12089,11 +13738,11 @@ class DNumber extends Scalar /** * @param mixed[] $attributes */ - public static function fromString(string $str, array $attributes = []) : DNumber + public static function fromString(string $str, array $attributes = []) : Float_ { $attributes['rawValue'] = $str; $float = self::parse($str); - return new DNumber($float, $attributes); + return new Float_($float, $attributes); } /** * @internal @@ -12129,70 +13778,11 @@ class DNumber extends Scalar } public function getType() : string { - return 'Scalar_DNumber'; - } -} -attributes = $attributes; - $this->parts = $parts; - } - public function getSubNodeNames() : array - { - return ['parts']; - } - public function getType() : string - { - return 'Scalar_Encapsed'; - } -} -attributes = $attributes; - $this->value = $value; - } - public function getSubNodeNames() : array - { - return ['value']; - } - public function getType() : string - { - return 'Scalar_EncapsedStringPart'; + return 'Scalar_Float'; } } +// @deprecated compatibility alias +\class_alias(Float_::class, DNumber::class); $attributes Additional attributes */ public function __construct(int $value, array $attributes = []) { @@ -12225,29 +13815,29 @@ class LNumber extends Scalar return ['value']; } /** - * Constructs an LNumber node from a string number literal. + * Constructs an Int node from a string number literal. * - * @param string $str String number literal (decimal, octal, hex or binary) - * @param array $attributes Additional attributes - * @param bool $allowInvalidOctal Whether to allow invalid octal numbers (PHP 5) + * @param string $str String number literal (decimal, octal, hex or binary) + * @param array $attributes Additional attributes + * @param bool $allowInvalidOctal Whether to allow invalid octal numbers (PHP 5) * - * @return LNumber The constructed LNumber, including kind attribute + * @return Int_ The constructed LNumber, including kind attribute */ - public static function fromString(string $str, array $attributes = [], bool $allowInvalidOctal = \false) : LNumber + public static function fromString(string $str, array $attributes = [], bool $allowInvalidOctal = \false) : Int_ { $attributes['rawValue'] = $str; $str = \str_replace('_', '', $str); if ('0' !== $str[0] || '0' === $str) { - $attributes['kind'] = LNumber::KIND_DEC; - return new LNumber((int) $str, $attributes); + $attributes['kind'] = Int_::KIND_DEC; + return new Int_((int) $str, $attributes); } if ('x' === $str[1] || 'X' === $str[1]) { - $attributes['kind'] = LNumber::KIND_HEX; - return new LNumber(\hexdec($str), $attributes); + $attributes['kind'] = Int_::KIND_HEX; + return new Int_(\hexdec($str), $attributes); } if ('b' === $str[1] || 'B' === $str[1]) { - $attributes['kind'] = LNumber::KIND_BIN; - return new LNumber(\bindec($str), $attributes); + $attributes['kind'] = Int_::KIND_BIN; + return new Int_(\bindec($str), $attributes); } if (!$allowInvalidOctal && \strpbrk($str, '89')) { throw new Error('Invalid numeric literal', $attributes); @@ -12257,14 +13847,56 @@ class LNumber extends Scalar $str = \substr($str, 2); } // use intval instead of octdec to get proper cutting behavior with malformed numbers - $attributes['kind'] = LNumber::KIND_OCT; - return new LNumber(\intval($str, 8), $attributes); + $attributes['kind'] = Int_::KIND_OCT; + return new Int_(\intval($str, 8), $attributes); } public function getType() : string { - return 'Scalar_LNumber'; + return 'Scalar_Int'; } } +// @deprecated compatibility alias +\class_alias(Int_::class, LNumber::class); + $attributes Additional attributes + */ + public function __construct(array $parts, array $attributes = []) + { + $this->attributes = $attributes; + $this->parts = $parts; + } + public function getSubNodeNames() : array + { + return ['parts']; + } + public function getType() : string + { + return 'Scalar_InterpolatedString'; + } +} +// @deprecated compatibility alias +\class_alias(InterpolatedString::class, Encapsed::class); + $attributes Additional attributes */ public function __construct(array $attributes = []) { @@ -12439,18 +14071,19 @@ use PHPUnit\PhpParser\Node\Scalar; class String_ extends Scalar { /* For use in "kind" attribute */ - const KIND_SINGLE_QUOTED = 1; - const KIND_DOUBLE_QUOTED = 2; - const KIND_HEREDOC = 3; - const KIND_NOWDOC = 4; + public const KIND_SINGLE_QUOTED = 1; + public const KIND_DOUBLE_QUOTED = 2; + public const KIND_HEREDOC = 3; + public const KIND_NOWDOC = 4; /** @var string String value */ - public $value; - protected static $replacements = ['\\' => '\\', '$' => '$', 'n' => "\n", 'r' => "\r", 't' => "\t", 'f' => "\f", 'v' => "\v", 'e' => "\x1b"]; + public string $value; + /** @var array Escaped character to its decoded value */ + protected static array $replacements = ['\\' => '\\', '$' => '$', 'n' => "\n", 'r' => "\r", 't' => "\t", 'f' => "\f", 'v' => "\v", 'e' => "\x1b"]; /** * Constructs a string scalar node. * - * @param string $value Value of the string - * @param array $attributes Additional attributes + * @param string $value Value of the string + * @param array $attributes Additional attributes */ public function __construct(string $value, array $attributes = []) { @@ -12462,6 +14095,7 @@ class String_ extends Scalar return ['value']; } /** + * @param array $attributes * @param bool $parseUnicodeEscape Whether to parse PHP 7 \u escapes */ public static function fromString(string $str, array $attributes = [], bool $parseUnicodeEscape = \true) : self @@ -12498,13 +14132,13 @@ class String_ extends Scalar * * Parses escape sequences in strings (all string types apart from single quoted). * - * @param string $str String without quotes + * @param string $str String without quotes * @param null|string $quote Quote type * @param bool $parseUnicodeEscape Whether to parse PHP 7 \u escapes * * @return string String with escape sequences parsed */ - public static function parseEscapeSequences(string $str, $quote, bool $parseUnicodeEscape = \true) : string + public static function parseEscapeSequences(string $str, ?string $quote, bool $parseUnicodeEscape = \true) : string { if (null !== $quote) { $str = \str_replace('\\' . $quote, $quote, $str); @@ -12517,10 +14151,14 @@ class String_ extends Scalar $str = $matches[1]; if (isset(self::$replacements[$str])) { return self::$replacements[$str]; - } elseif ('x' === $str[0] || 'X' === $str[0]) { + } + if ('x' === $str[0] || 'X' === $str[0]) { return \chr(\hexdec(\substr($str, 1))); - } elseif ('u' === $str[0]) { - return self::codePointToUtf8(\hexdec($matches[2])); + } + if ('u' === $str[0]) { + $dec = \hexdec($matches[2]); + // If it overflowed to float, treat as INT_MAX, it will throw an error anyway. + return self::codePointToUtf8(\is_int($dec) ? $dec : \PHP_INT_MAX); } else { return \chr(\octdec($str)); } @@ -12559,6 +14197,43 @@ class String_ extends Scalar declare (strict_types=1); namespace PHPUnit\PhpParser\Node; +use PHPUnit\PhpParser\Node; +use PHPUnit\PhpParser\NodeAbstract; +class StaticVar extends NodeAbstract +{ + /** @var Expr\Variable Variable */ + public Expr\Variable $var; + /** @var null|Node\Expr Default value */ + public ?Expr $default; + /** + * Constructs a static variable node. + * + * @param Expr\Variable $var Name + * @param null|Node\Expr $default Default value + * @param array $attributes Additional attributes + */ + public function __construct(Expr\Variable $var, ?Node\Expr $default = null, array $attributes = []) + { + $this->attributes = $attributes; + $this->var = $var; + $this->default = $default; + } + public function getSubNodeNames() : array + { + return ['var', 'default']; + } + public function getType() : string + { + return 'StaticVar'; + } +} +// @deprecated compatibility alias +\class_alias(StaticVar::class, Stmt\StaticVar::class); + $attributes Additional attributes + */ + public function __construct(array $stmts, array $attributes = []) + { + $this->attributes = $attributes; + $this->stmts = $stmts; + } + public function getType() : string + { + return 'Stmt_Block'; + } + public function getSubNodeNames() : array + { + return ['stmts']; + } +} + $attributes Additional attributes */ - public function __construct(Node\Expr $num = null, array $attributes = []) + public function __construct(?Node\Expr $num = null, array $attributes = []) { $this->attributes = $attributes; $this->num = $num; @@ -12602,17 +14307,17 @@ use PHPUnit\PhpParser\Node; class Case_ extends Node\Stmt { /** @var null|Node\Expr Condition (null for default) */ - public $cond; + public ?Node\Expr $cond; /** @var Node\Stmt[] Statements */ - public $stmts; + public array $stmts; /** * Constructs a case node. * - * @param null|Node\Expr $cond Condition (null for default) - * @param Node\Stmt[] $stmts Statements - * @param array $attributes Additional attributes + * @param null|Node\Expr $cond Condition (null for default) + * @param Node\Stmt[] $stmts Statements + * @param array $attributes Additional attributes */ - public function __construct($cond, array $stmts = [], array $attributes = []) + public function __construct(?Node\Expr $cond, array $stmts = [], array $attributes = []) { $this->attributes = $attributes; $this->cond = $cond; @@ -12637,20 +14342,20 @@ use PHPUnit\PhpParser\Node\Expr; class Catch_ extends Node\Stmt { /** @var Node\Name[] Types of exceptions to catch */ - public $types; + public array $types; /** @var Expr\Variable|null Variable for exception */ - public $var; + public ?Expr\Variable $var; /** @var Node\Stmt[] Statements */ - public $stmts; + public array $stmts; /** * Constructs a catch node. * - * @param Node\Name[] $types Types of exceptions to catch - * @param Expr\Variable|null $var Variable for exception - * @param Node\Stmt[] $stmts Statements - * @param array $attributes Additional attributes + * @param Node\Name[] $types Types of exceptions to catch + * @param Expr\Variable|null $var Variable for exception + * @param Node\Stmt[] $stmts Statements + * @param array $attributes Additional attributes */ - public function __construct(array $types, Expr\Variable $var = null, array $stmts = [], array $attributes = []) + public function __construct(array $types, ?Expr\Variable $var = null, array $stmts = [], array $attributes = []) { $this->attributes = $attributes; $this->types = $types; @@ -12671,69 +14376,66 @@ class Catch_ extends Node\Stmt declare (strict_types=1); namespace PHPUnit\PhpParser\Node\Stmt; +use PHPUnit\PhpParser\Modifiers; use PHPUnit\PhpParser\Node; class ClassConst extends Node\Stmt { /** @var int Modifiers */ - public $flags; + public int $flags; /** @var Node\Const_[] Constant declarations */ - public $consts; - /** @var Node\AttributeGroup[] */ - public $attrGroups; + public array $consts; + /** @var Node\AttributeGroup[] PHP attribute groups */ + public array $attrGroups; + /** @var Node\Identifier|Node\Name|Node\ComplexType|null Type declaration */ + public ?Node $type; /** * Constructs a class const list node. * - * @param Node\Const_[] $consts Constant declarations - * @param int $flags Modifiers - * @param array $attributes Additional attributes - * @param Node\AttributeGroup[] $attrGroups PHP attribute groups + * @param Node\Const_[] $consts Constant declarations + * @param int $flags Modifiers + * @param array $attributes Additional attributes + * @param list $attrGroups PHP attribute groups + * @param null|Node\Identifier|Node\Name|Node\ComplexType $type Type declaration */ - public function __construct(array $consts, int $flags = 0, array $attributes = [], array $attrGroups = []) + public function __construct(array $consts, int $flags = 0, array $attributes = [], array $attrGroups = [], ?Node $type = null) { $this->attributes = $attributes; $this->flags = $flags; $this->consts = $consts; $this->attrGroups = $attrGroups; + $this->type = $type; } public function getSubNodeNames() : array { - return ['attrGroups', 'flags', 'consts']; + return ['attrGroups', 'flags', 'type', 'consts']; } /** * Whether constant is explicitly or implicitly public. - * - * @return bool */ public function isPublic() : bool { - return ($this->flags & Class_::MODIFIER_PUBLIC) !== 0 || ($this->flags & Class_::VISIBILITY_MODIFIER_MASK) === 0; + return ($this->flags & Modifiers::PUBLIC) !== 0 || ($this->flags & Modifiers::VISIBILITY_MASK) === 0; } /** * Whether constant is protected. - * - * @return bool */ public function isProtected() : bool { - return (bool) ($this->flags & Class_::MODIFIER_PROTECTED); + return (bool) ($this->flags & Modifiers::PROTECTED); } /** * Whether constant is private. - * - * @return bool */ public function isPrivate() : bool { - return (bool) ($this->flags & Class_::MODIFIER_PRIVATE); + return (bool) ($this->flags & Modifiers::PRIVATE); } /** * Whether constant is final. - * - * @return bool */ public function isFinal() : bool { - return (bool) ($this->flags & Class_::MODIFIER_FINAL); + return (bool) ($this->flags & Modifiers::FINAL); } public function getType() : string { @@ -12746,16 +14448,17 @@ declare (strict_types=1); namespace PHPUnit\PhpParser\Node\Stmt; use PHPUnit\PhpParser\Node; +use PHPUnit\PhpParser\Node\PropertyItem; abstract class ClassLike extends Node\Stmt { /** @var Node\Identifier|null Name */ - public $name; + public ?Node\Identifier $name; /** @var Node\Stmt[] Statements */ - public $stmts; + public array $stmts; /** @var Node\AttributeGroup[] PHP attribute groups */ - public $attrGroups; + public array $attrGroups; /** @var Node\Name|null Namespaced name (if using NameResolver) */ - public $namespacedName; + public ?Node\Name $namespacedName; /** * @return TraitUse[] */ @@ -12802,12 +14505,12 @@ abstract class ClassLike extends Node\Stmt * * @return Property|null Property node or null if the property does not exist */ - public function getProperty(string $name) + public function getProperty(string $name) : ?Property { foreach ($this->stmts as $stmt) { if ($stmt instanceof Property) { foreach ($stmt->props as $prop) { - if ($prop instanceof PropertyProperty && $name === $prop->name->toString()) { + if ($prop instanceof PropertyItem && $name === $prop->name->toString()) { return $stmt; } } @@ -12837,7 +14540,7 @@ abstract class ClassLike extends Node\Stmt * * @return ClassMethod|null Method node or null if the method does not exist */ - public function getMethod(string $name) + public function getMethod(string $name) : ?ClassMethod { $lowerName = \strtolower($name); foreach ($this->stmts as $stmt) { @@ -12853,37 +14556,46 @@ abstract class ClassLike extends Node\Stmt declare (strict_types=1); namespace PHPUnit\PhpParser\Node\Stmt; +use PHPUnit\PhpParser\Modifiers; use PHPUnit\PhpParser\Node; use PHPUnit\PhpParser\Node\FunctionLike; class ClassMethod extends Node\Stmt implements FunctionLike { /** @var int Flags */ - public $flags; + public int $flags; /** @var bool Whether to return by reference */ - public $byRef; + public bool $byRef; /** @var Node\Identifier Name */ - public $name; + public Node\Identifier $name; /** @var Node\Param[] Parameters */ - public $params; + public array $params; /** @var null|Node\Identifier|Node\Name|Node\ComplexType Return type */ - public $returnType; + public ?Node $returnType; /** @var Node\Stmt[]|null Statements */ - public $stmts; + public ?array $stmts; /** @var Node\AttributeGroup[] PHP attribute groups */ - public $attrGroups; - private static $magicNames = ['__construct' => \true, '__destruct' => \true, '__call' => \true, '__callstatic' => \true, '__get' => \true, '__set' => \true, '__isset' => \true, '__unset' => \true, '__sleep' => \true, '__wakeup' => \true, '__tostring' => \true, '__set_state' => \true, '__clone' => \true, '__invoke' => \true, '__debuginfo' => \true, '__serialize' => \true, '__unserialize' => \true]; + public array $attrGroups; + /** @var array */ + private static array $magicNames = ['__construct' => \true, '__destruct' => \true, '__call' => \true, '__callstatic' => \true, '__get' => \true, '__set' => \true, '__isset' => \true, '__unset' => \true, '__sleep' => \true, '__wakeup' => \true, '__tostring' => \true, '__set_state' => \true, '__clone' => \true, '__invoke' => \true, '__debuginfo' => \true, '__serialize' => \true, '__unserialize' => \true]; /** * Constructs a class method node. * * @param string|Node\Identifier $name Name - * @param array $subNodes Array of the following optional subnodes: - * 'flags => MODIFIER_PUBLIC: Flags - * 'byRef' => false : Whether to return by reference - * 'params' => array() : Parameters - * 'returnType' => null : Return type - * 'stmts' => array() : Statements - * 'attrGroups' => array() : PHP attribute groups - * @param array $attributes Additional attributes + * @param array{ + * flags?: int, + * byRef?: bool, + * params?: Node\Param[], + * returnType?: null|Node\Identifier|Node\Name|Node\ComplexType, + * stmts?: Node\Stmt[]|null, + * attrGroups?: Node\AttributeGroup[], + * } $subNodes Array of the following optional subnodes: + * 'flags => 0 : Flags + * 'byRef' => false : Whether to return by reference + * 'params' => array() : Parameters + * 'returnType' => null : Return type + * 'stmts' => array() : Statements + * 'attrGroups' => array() : PHP attribute groups + * @param array $attributes Additional attributes */ public function __construct($name, array $subNodes = [], array $attributes = []) { @@ -12892,8 +14604,7 @@ class ClassMethod extends Node\Stmt implements FunctionLike $this->byRef = $subNodes['byRef'] ?? \false; $this->name = \is_string($name) ? new Node\Identifier($name) : $name; $this->params = $subNodes['params'] ?? []; - $returnType = $subNodes['returnType'] ?? null; - $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType; + $this->returnType = $subNodes['returnType'] ?? null; $this->stmts = \array_key_exists('stmts', $subNodes) ? $subNodes['stmts'] : []; $this->attrGroups = $subNodes['attrGroups'] ?? []; } @@ -12913,7 +14624,7 @@ class ClassMethod extends Node\Stmt implements FunctionLike { return $this->returnType; } - public function getStmts() + public function getStmts() : ?array { return $this->stmts; } @@ -12923,62 +14634,48 @@ class ClassMethod extends Node\Stmt implements FunctionLike } /** * Whether the method is explicitly or implicitly public. - * - * @return bool */ public function isPublic() : bool { - return ($this->flags & Class_::MODIFIER_PUBLIC) !== 0 || ($this->flags & Class_::VISIBILITY_MODIFIER_MASK) === 0; + return ($this->flags & Modifiers::PUBLIC) !== 0 || ($this->flags & Modifiers::VISIBILITY_MASK) === 0; } /** * Whether the method is protected. - * - * @return bool */ public function isProtected() : bool { - return (bool) ($this->flags & Class_::MODIFIER_PROTECTED); + return (bool) ($this->flags & Modifiers::PROTECTED); } /** * Whether the method is private. - * - * @return bool */ public function isPrivate() : bool { - return (bool) ($this->flags & Class_::MODIFIER_PRIVATE); + return (bool) ($this->flags & Modifiers::PRIVATE); } /** * Whether the method is abstract. - * - * @return bool */ public function isAbstract() : bool { - return (bool) ($this->flags & Class_::MODIFIER_ABSTRACT); + return (bool) ($this->flags & Modifiers::ABSTRACT); } /** * Whether the method is final. - * - * @return bool */ public function isFinal() : bool { - return (bool) ($this->flags & Class_::MODIFIER_FINAL); + return (bool) ($this->flags & Modifiers::FINAL); } /** * Whether the method is static. - * - * @return bool */ public function isStatic() : bool { - return (bool) ($this->flags & Class_::MODIFIER_STATIC); + return (bool) ($this->flags & Modifiers::STATIC); } /** * Whether the method is magic. - * - * @return bool */ public function isMagic() : bool { @@ -12994,36 +14691,50 @@ class ClassMethod extends Node\Stmt implements FunctionLike declare (strict_types=1); namespace PHPUnit\PhpParser\Node\Stmt; -use PHPUnit\PhpParser\Error; +use PHPUnit\PhpParser\Modifiers; use PHPUnit\PhpParser\Node; class Class_ extends ClassLike { - const MODIFIER_PUBLIC = 1; - const MODIFIER_PROTECTED = 2; - const MODIFIER_PRIVATE = 4; - const MODIFIER_STATIC = 8; - const MODIFIER_ABSTRACT = 16; - const MODIFIER_FINAL = 32; - const MODIFIER_READONLY = 64; - const VISIBILITY_MODIFIER_MASK = 7; + /** @deprecated Use Modifiers::PUBLIC instead */ + public const MODIFIER_PUBLIC = 1; + /** @deprecated Use Modifiers::PROTECTED instead */ + public const MODIFIER_PROTECTED = 2; + /** @deprecated Use Modifiers::PRIVATE instead */ + public const MODIFIER_PRIVATE = 4; + /** @deprecated Use Modifiers::STATIC instead */ + public const MODIFIER_STATIC = 8; + /** @deprecated Use Modifiers::ABSTRACT instead */ + public const MODIFIER_ABSTRACT = 16; + /** @deprecated Use Modifiers::FINAL instead */ + public const MODIFIER_FINAL = 32; + /** @deprecated Use Modifiers::READONLY instead */ + public const MODIFIER_READONLY = 64; + /** @deprecated Use Modifiers::VISIBILITY_MASK instead */ + public const VISIBILITY_MODIFIER_MASK = 7; // 1 | 2 | 4 - /** @var int Type */ - public $flags; + /** @var int Modifiers */ + public int $flags; /** @var null|Node\Name Name of extended class */ - public $extends; + public ?Node\Name $extends; /** @var Node\Name[] Names of implemented interfaces */ - public $implements; + public array $implements; /** * Constructs a class node. * * @param string|Node\Identifier|null $name Name - * @param array $subNodes Array of the following optional subnodes: - * 'flags' => 0 : Flags - * 'extends' => null : Name of extended class - * 'implements' => array(): Names of implemented interfaces - * 'stmts' => array(): Statements - * 'attrGroups' => array(): PHP attribute groups - * @param array $attributes Additional attributes + * @param array{ + * flags?: int, + * extends?: Node\Name|null, + * implements?: Node\Name[], + * stmts?: Node\Stmt[], + * attrGroups?: Node\AttributeGroup[], + * } $subNodes Array of the following optional subnodes: + * 'flags' => 0 : Flags + * 'extends' => null : Name of extended class + * 'implements' => array(): Names of implemented interfaces + * 'stmts' => array(): Statements + * 'attrGroups' => array(): PHP attribute groups + * @param array $attributes Additional attributes */ public function __construct($name, array $subNodes = [], array $attributes = []) { @@ -13041,77 +14752,29 @@ class Class_ extends ClassLike } /** * Whether the class is explicitly abstract. - * - * @return bool */ public function isAbstract() : bool { - return (bool) ($this->flags & self::MODIFIER_ABSTRACT); + return (bool) ($this->flags & Modifiers::ABSTRACT); } /** * Whether the class is final. - * - * @return bool */ public function isFinal() : bool { - return (bool) ($this->flags & self::MODIFIER_FINAL); + return (bool) ($this->flags & Modifiers::FINAL); } public function isReadonly() : bool { - return (bool) ($this->flags & self::MODIFIER_READONLY); + return (bool) ($this->flags & Modifiers::READONLY); } /** * Whether the class is anonymous. - * - * @return bool */ public function isAnonymous() : bool { return null === $this->name; } - /** - * @internal - */ - public static function verifyClassModifier($a, $b) - { - if ($a & self::MODIFIER_ABSTRACT && $b & self::MODIFIER_ABSTRACT) { - throw new Error('Multiple abstract modifiers are not allowed'); - } - if ($a & self::MODIFIER_FINAL && $b & self::MODIFIER_FINAL) { - throw new Error('Multiple final modifiers are not allowed'); - } - if ($a & self::MODIFIER_READONLY && $b & self::MODIFIER_READONLY) { - throw new Error('Multiple readonly modifiers are not allowed'); - } - if ($a & 48 && $b & 48) { - throw new Error('Cannot use the final modifier on an abstract class'); - } - } - /** - * @internal - */ - public static function verifyModifier($a, $b) - { - if ($a & self::VISIBILITY_MODIFIER_MASK && $b & self::VISIBILITY_MODIFIER_MASK) { - throw new Error('Multiple access type modifiers are not allowed'); - } - if ($a & self::MODIFIER_ABSTRACT && $b & self::MODIFIER_ABSTRACT) { - throw new Error('Multiple abstract modifiers are not allowed'); - } - if ($a & self::MODIFIER_STATIC && $b & self::MODIFIER_STATIC) { - throw new Error('Multiple static modifiers are not allowed'); - } - if ($a & self::MODIFIER_FINAL && $b & self::MODIFIER_FINAL) { - throw new Error('Multiple final modifiers are not allowed'); - } - if ($a & self::MODIFIER_READONLY && $b & self::MODIFIER_READONLY) { - throw new Error('Multiple readonly modifiers are not allowed'); - } - if ($a & 48 && $b & 48) { - throw new Error('Cannot use the final modifier on an abstract class member'); - } - } public function getType() : string { return 'Stmt_Class'; @@ -13126,12 +14789,12 @@ use PHPUnit\PhpParser\Node; class Const_ extends Node\Stmt { /** @var Node\Const_[] Constant declarations */ - public $consts; + public array $consts; /** * Constructs a const list node. * - * @param Node\Const_[] $consts Constant declarations - * @param array $attributes Additional attributes + * @param Node\Const_[] $consts Constant declarations + * @param array $attributes Additional attributes */ public function __construct(array $consts, array $attributes = []) { @@ -13156,14 +14819,14 @@ use PHPUnit\PhpParser\Node; class Continue_ extends Node\Stmt { /** @var null|Node\Expr Number of loops to continue */ - public $num; + public ?Node\Expr $num; /** * Constructs a continue node. * - * @param null|Node\Expr $num Number of loops to continue - * @param array $attributes Additional attributes + * @param null|Node\Expr $num Number of loops to continue + * @param array $attributes Additional attributes */ - public function __construct(Node\Expr $num = null, array $attributes = []) + public function __construct(?Node\Expr $num = null, array $attributes = []) { $this->attributes = $attributes; $this->num = $num; @@ -13180,57 +14843,30 @@ class Continue_ extends Node\Stmt value pair node. - * - * @param string|Node\Identifier $key Key - * @param Node\Expr $value Value - * @param array $attributes Additional attributes - */ - public function __construct($key, Node\Expr $value, array $attributes = []) - { - $this->attributes = $attributes; - $this->key = \is_string($key) ? new Node\Identifier($key) : $key; - $this->value = $value; - } - public function getSubNodeNames() : array - { - return ['key', 'value']; - } - public function getType() : string - { - return 'Stmt_DeclareDeclare'; - } -} +require __DIR__ . '/../DeclareItem.php'; $attributes Additional attributes */ - public function __construct(array $declares, array $stmts = null, array $attributes = []) + public function __construct(array $declares, ?array $stmts = null, array $attributes = []) { $this->attributes = $attributes; $this->declares = $declares; @@ -13254,15 +14890,15 @@ use PHPUnit\PhpParser\Node; class Do_ extends Node\Stmt { /** @var Node\Stmt[] Statements */ - public $stmts; + public array $stmts; /** @var Node\Expr Condition */ - public $cond; + public Node\Expr $cond; /** * Constructs a do while node. * - * @param Node\Expr $cond Condition - * @param Node\Stmt[] $stmts Statements - * @param array $attributes Additional attributes + * @param Node\Expr $cond Condition + * @param Node\Stmt[] $stmts Statements + * @param array $attributes Additional attributes */ public function __construct(Node\Expr $cond, array $stmts = [], array $attributes = []) { @@ -13288,12 +14924,12 @@ use PHPUnit\PhpParser\Node; class Echo_ extends Node\Stmt { /** @var Node\Expr[] Expressions */ - public $exprs; + public array $exprs; /** * Constructs an echo node. * - * @param Node\Expr[] $exprs Expressions - * @param array $attributes Additional attributes + * @param Node\Expr[] $exprs Expressions + * @param array $attributes Additional attributes */ public function __construct(array $exprs, array $attributes = []) { @@ -13318,15 +14954,15 @@ use PHPUnit\PhpParser\Node; class ElseIf_ extends Node\Stmt { /** @var Node\Expr Condition */ - public $cond; + public Node\Expr $cond; /** @var Node\Stmt[] Statements */ - public $stmts; + public array $stmts; /** * Constructs an elseif node. * - * @param Node\Expr $cond Condition - * @param Node\Stmt[] $stmts Statements - * @param array $attributes Additional attributes + * @param Node\Expr $cond Condition + * @param Node\Stmt[] $stmts Statements + * @param array $attributes Additional attributes */ public function __construct(Node\Expr $cond, array $stmts = [], array $attributes = []) { @@ -13352,12 +14988,12 @@ use PHPUnit\PhpParser\Node; class Else_ extends Node\Stmt { /** @var Node\Stmt[] Statements */ - public $stmts; + public array $stmts; /** * Constructs an else node. * - * @param Node\Stmt[] $stmts Statements - * @param array $attributes Additional attributes + * @param Node\Stmt[] $stmts Statements + * @param array $attributes Additional attributes */ public function __construct(array $stmts = [], array $attributes = []) { @@ -13383,18 +15019,18 @@ use PHPUnit\PhpParser\Node\AttributeGroup; class EnumCase extends Node\Stmt { /** @var Node\Identifier Enum case name */ - public $name; + public Node\Identifier $name; /** @var Node\Expr|null Enum case expression */ - public $expr; + public ?Node\Expr $expr; /** @var Node\AttributeGroup[] PHP attribute groups */ - public $attrGroups; + public array $attrGroups; /** - * @param string|Node\Identifier $name Enum case name - * @param Node\Expr|null $expr Enum case expression - * @param AttributeGroup[] $attrGroups PHP attribute groups - * @param array $attributes Additional attributes + * @param string|Node\Identifier $name Enum case name + * @param Node\Expr|null $expr Enum case expression + * @param list $attrGroups PHP attribute groups + * @param array $attributes Additional attributes */ - public function __construct($name, Node\Expr $expr = null, array $attrGroups = [], array $attributes = []) + public function __construct($name, ?Node\Expr $expr = null, array $attrGroups = [], array $attributes = []) { parent::__construct($attributes); $this->name = \is_string($name) ? new Node\Identifier($name) : $name; @@ -13419,17 +15055,22 @@ use PHPUnit\PhpParser\Node; class Enum_ extends ClassLike { /** @var null|Node\Identifier Scalar Type */ - public $scalarType; + public ?Node $scalarType; /** @var Node\Name[] Names of implemented interfaces */ - public $implements; + public array $implements; /** - * @param string|Node\Identifier|null $name Name - * @param array $subNodes Array of the following optional subnodes: - * 'scalarType' => null : Scalar type - * 'implements' => array() : Names of implemented interfaces - * 'stmts' => array() : Statements - * 'attrGroups' => array() : PHP attribute groups - * @param array $attributes Additional attributes + * @param string|Node\Identifier|null $name Name + * @param array{ + * scalarType?: Node\Identifier|null, + * implements?: Node\Name[], + * stmts?: Node\Stmt[], + * attrGroups?: Node\AttributeGroup[], + * } $subNodes Array of the following optional subnodes: + * 'scalarType' => null : Scalar type + * 'implements' => array() : Names of implemented interfaces + * 'stmts' => array() : Statements + * 'attrGroups' => array() : PHP attribute groups + * @param array $attributes Additional attributes */ public function __construct($name, array $subNodes = [], array $attributes = []) { @@ -13461,12 +15102,12 @@ use PHPUnit\PhpParser\Node; class Expression extends Node\Stmt { /** @var Node\Expr Expression */ - public $expr; + public Node\Expr $expr; /** * Constructs an expression statement. * - * @param Node\Expr $expr Expression - * @param array $attributes Additional attributes + * @param Node\Expr $expr Expression + * @param array $attributes Additional attributes */ public function __construct(Node\Expr $expr, array $attributes = []) { @@ -13491,12 +15132,12 @@ use PHPUnit\PhpParser\Node; class Finally_ extends Node\Stmt { /** @var Node\Stmt[] Statements */ - public $stmts; + public array $stmts; /** * Constructs a finally node. * - * @param Node\Stmt[] $stmts Statements - * @param array $attributes Additional attributes + * @param Node\Stmt[] $stmts Statements + * @param array $attributes Additional attributes */ public function __construct(array $stmts = [], array $attributes = []) { @@ -13521,22 +15162,27 @@ use PHPUnit\PhpParser\Node; class For_ extends Node\Stmt { /** @var Node\Expr[] Init expressions */ - public $init; + public array $init; /** @var Node\Expr[] Loop conditions */ - public $cond; + public array $cond; /** @var Node\Expr[] Loop expressions */ - public $loop; + public array $loop; /** @var Node\Stmt[] Statements */ - public $stmts; + public array $stmts; /** * Constructs a for loop node. * - * @param array $subNodes Array of the following optional subnodes: - * 'init' => array(): Init expressions - * 'cond' => array(): Loop conditions - * 'loop' => array(): Loop expressions - * 'stmts' => array(): Statements - * @param array $attributes Additional attributes + * @param array{ + * init?: Node\Expr[], + * cond?: Node\Expr[], + * loop?: Node\Expr[], + * stmts?: Node\Stmt[], + * } $subNodes Array of the following optional subnodes: + * 'init' => array(): Init expressions + * 'cond' => array(): Loop conditions + * 'loop' => array(): Loop expressions + * 'stmts' => array(): Statements + * @param array $attributes Additional attributes */ public function __construct(array $subNodes = [], array $attributes = []) { @@ -13564,25 +15210,29 @@ use PHPUnit\PhpParser\Node; class Foreach_ extends Node\Stmt { /** @var Node\Expr Expression to iterate */ - public $expr; + public Node\Expr $expr; /** @var null|Node\Expr Variable to assign key to */ - public $keyVar; + public ?Node\Expr $keyVar; /** @var bool Whether to assign value by reference */ - public $byRef; + public bool $byRef; /** @var Node\Expr Variable to assign value to */ - public $valueVar; + public Node\Expr $valueVar; /** @var Node\Stmt[] Statements */ - public $stmts; + public array $stmts; /** * Constructs a foreach node. * - * @param Node\Expr $expr Expression to iterate - * @param Node\Expr $valueVar Variable to assign value to - * @param array $subNodes Array of the following optional subnodes: - * 'keyVar' => null : Variable to assign key to - * 'byRef' => false : Whether to assign value by reference - * 'stmts' => array(): Statements - * @param array $attributes Additional attributes + * @param Node\Expr $expr Expression to iterate + * @param Node\Expr $valueVar Variable to assign value to + * @param array{ + * keyVar?: Node\Expr|null, + * byRef?: bool, + * stmts?: Node\Stmt[], + * } $subNodes Array of the following optional subnodes: + * 'keyVar' => null : Variable to assign key to + * 'byRef' => false : Whether to assign value by reference + * 'stmts' => array(): Statements + * @param array $attributes Additional attributes */ public function __construct(Node\Expr $expr, Node\Expr $valueVar, array $subNodes = [], array $attributes = []) { @@ -13612,30 +15262,36 @@ use PHPUnit\PhpParser\Node\FunctionLike; class Function_ extends Node\Stmt implements FunctionLike { /** @var bool Whether function returns by reference */ - public $byRef; + public bool $byRef; /** @var Node\Identifier Name */ - public $name; + public Node\Identifier $name; /** @var Node\Param[] Parameters */ - public $params; + public array $params; /** @var null|Node\Identifier|Node\Name|Node\ComplexType Return type */ - public $returnType; + public ?Node $returnType; /** @var Node\Stmt[] Statements */ - public $stmts; + public array $stmts; /** @var Node\AttributeGroup[] PHP attribute groups */ - public $attrGroups; + public array $attrGroups; /** @var Node\Name|null Namespaced name (if using NameResolver) */ - public $namespacedName; + public ?Node\Name $namespacedName; /** * Constructs a function node. * * @param string|Node\Identifier $name Name - * @param array $subNodes Array of the following optional subnodes: - * 'byRef' => false : Whether to return by reference - * 'params' => array(): Parameters - * 'returnType' => null : Return type - * 'stmts' => array(): Statements - * 'attrGroups' => array(): PHP attribute groups - * @param array $attributes Additional attributes + * @param array{ + * byRef?: bool, + * params?: Node\Param[], + * returnType?: null|Node\Identifier|Node\Name|Node\ComplexType, + * stmts?: Node\Stmt[], + * attrGroups?: Node\AttributeGroup[], + * } $subNodes Array of the following optional subnodes: + * 'byRef' => false : Whether to return by reference + * 'params' => array(): Parameters + * 'returnType' => null : Return type + * 'stmts' => array(): Statements + * 'attrGroups' => array(): PHP attribute groups + * @param array $attributes Additional attributes */ public function __construct($name, array $subNodes = [], array $attributes = []) { @@ -13643,8 +15299,7 @@ class Function_ extends Node\Stmt implements FunctionLike $this->byRef = $subNodes['byRef'] ?? \false; $this->name = \is_string($name) ? new Node\Identifier($name) : $name; $this->params = $subNodes['params'] ?? []; - $returnType = $subNodes['returnType'] ?? null; - $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType; + $this->returnType = $subNodes['returnType'] ?? null; $this->stmts = $subNodes['stmts'] ?? []; $this->attrGroups = $subNodes['attrGroups'] ?? []; } @@ -13687,12 +15342,12 @@ use PHPUnit\PhpParser\Node; class Global_ extends Node\Stmt { /** @var Node\Expr[] Variables */ - public $vars; + public array $vars; /** * Constructs a global variables list node. * - * @param Node\Expr[] $vars Variables to unset - * @param array $attributes Additional attributes + * @param Node\Expr[] $vars Variables to unset + * @param array $attributes Additional attributes */ public function __construct(array $vars, array $attributes = []) { @@ -13718,12 +15373,12 @@ use PHPUnit\PhpParser\Node\Stmt; class Goto_ extends Stmt { /** @var Identifier Name of label to jump to */ - public $name; + public Identifier $name; /** * Constructs a goto node. * - * @param string|Identifier $name Name of label to jump to - * @param array $attributes Additional attributes + * @param string|Identifier $name Name of label to jump to + * @param array $attributes Additional attributes */ public function __construct($name, array $attributes = []) { @@ -13746,21 +15401,24 @@ namespace PHPUnit\PhpParser\Node\Stmt; use PHPUnit\PhpParser\Node\Name; use PHPUnit\PhpParser\Node\Stmt; +use PHPUnit\PhpParser\Node\UseItem; class GroupUse extends Stmt { - /** @var int Type of group use */ - public $type; + /** + * @var Use_::TYPE_* Type of group use + */ + public int $type; /** @var Name Prefix for uses */ - public $prefix; - /** @var UseUse[] Uses */ - public $uses; + public Name $prefix; + /** @var UseItem[] Uses */ + public array $uses; /** * Constructs a group use node. * - * @param Name $prefix Prefix for uses - * @param UseUse[] $uses Uses - * @param int $type Type of group use - * @param array $attributes Additional attributes + * @param Name $prefix Prefix for uses + * @param UseItem[] $uses Uses + * @param Use_::TYPE_* $type Type of group use + * @param array $attributes Additional attributes */ public function __construct(Name $prefix, array $uses, int $type = Use_::TYPE_NORMAL, array $attributes = []) { @@ -13787,12 +15445,12 @@ use PHPUnit\PhpParser\Node\Stmt; class HaltCompiler extends Stmt { /** @var string Remaining text after halt compiler statement. */ - public $remaining; + public string $remaining; /** * Constructs a __halt_compiler node. * - * @param string $remaining Remaining text after halt compiler statement. - * @param array $attributes Additional attributes + * @param string $remaining Remaining text after halt compiler statement. + * @param array $attributes Additional attributes */ public function __construct(string $remaining, array $attributes = []) { @@ -13817,22 +15475,26 @@ use PHPUnit\PhpParser\Node; class If_ extends Node\Stmt { /** @var Node\Expr Condition expression */ - public $cond; + public Node\Expr $cond; /** @var Node\Stmt[] Statements */ - public $stmts; + public array $stmts; /** @var ElseIf_[] Elseif clauses */ - public $elseifs; + public array $elseifs; /** @var null|Else_ Else clause */ - public $else; + public ?Else_ $else; /** * Constructs an if node. * - * @param Node\Expr $cond Condition - * @param array $subNodes Array of the following optional subnodes: - * 'stmts' => array(): Statements - * 'elseifs' => array(): Elseif clauses - * 'else' => null : Else clause - * @param array $attributes Additional attributes + * @param Node\Expr $cond Condition + * @param array{ + * stmts?: Node\Stmt[], + * elseifs?: ElseIf_[], + * else?: Else_|null, + * } $subNodes Array of the following optional subnodes: + * 'stmts' => array(): Statements + * 'elseifs' => array(): Elseif clauses + * 'else' => null : Else clause + * @param array $attributes Additional attributes */ public function __construct(Node\Expr $cond, array $subNodes = [], array $attributes = []) { @@ -13860,12 +15522,12 @@ use PHPUnit\PhpParser\Node\Stmt; class InlineHTML extends Stmt { /** @var string String */ - public $value; + public string $value; /** * Constructs an inline HTML node. * - * @param string $value String - * @param array $attributes Additional attributes + * @param string $value String + * @param array $attributes Additional attributes */ public function __construct(string $value, array $attributes = []) { @@ -13890,16 +15552,20 @@ use PHPUnit\PhpParser\Node; class Interface_ extends ClassLike { /** @var Node\Name[] Extended interfaces */ - public $extends; + public array $extends; /** * Constructs a class node. * * @param string|Node\Identifier $name Name - * @param array $subNodes Array of the following optional subnodes: - * 'extends' => array(): Name of extended interfaces - * 'stmts' => array(): Statements - * 'attrGroups' => array(): PHP attribute groups - * @param array $attributes Additional attributes + * @param array{ + * extends?: Node\Name[], + * stmts?: Node\Stmt[], + * attrGroups?: Node\AttributeGroup[], + * } $subNodes Array of the following optional subnodes: + * 'extends' => array(): Name of extended interfaces + * 'stmts' => array(): Statements + * 'attrGroups' => array(): PHP attribute groups + * @param array $attributes Additional attributes */ public function __construct($name, array $subNodes = [], array $attributes = []) { @@ -13928,12 +15594,12 @@ use PHPUnit\PhpParser\Node\Stmt; class Label extends Stmt { /** @var Identifier Name */ - public $name; + public Identifier $name; /** * Constructs a label node. * - * @param string|Identifier $name Name - * @param array $attributes Additional attributes + * @param string|Identifier $name Name + * @param array $attributes Additional attributes */ public function __construct($name, array $attributes = []) { @@ -13958,20 +15624,20 @@ use PHPUnit\PhpParser\Node; class Namespace_ extends Node\Stmt { /* For use in the "kind" attribute */ - const KIND_SEMICOLON = 1; - const KIND_BRACED = 2; + public const KIND_SEMICOLON = 1; + public const KIND_BRACED = 2; /** @var null|Node\Name Name */ - public $name; + public ?Node\Name $name; /** @var Node\Stmt[] Statements */ public $stmts; /** * Constructs a namespace node. * - * @param null|Node\Name $name Name - * @param null|Node\Stmt[] $stmts Statements - * @param array $attributes Additional attributes + * @param null|Node\Name $name Name + * @param null|Node\Stmt[] $stmts Statements + * @param array $attributes Additional attributes */ - public function __construct(Node\Name $name = null, $stmts = [], array $attributes = []) + public function __construct(?Node\Name $name = null, ?array $stmts = [], array $attributes = []) { $this->attributes = $attributes; $this->name = $name; @@ -14009,35 +15675,37 @@ class Nop extends Node\Stmt declare (strict_types=1); namespace PHPUnit\PhpParser\Node\Stmt; +use PHPUnit\PhpParser\Modifiers; use PHPUnit\PhpParser\Node; use PHPUnit\PhpParser\Node\ComplexType; use PHPUnit\PhpParser\Node\Identifier; use PHPUnit\PhpParser\Node\Name; +use PHPUnit\PhpParser\Node\PropertyItem; class Property extends Node\Stmt { /** @var int Modifiers */ - public $flags; - /** @var PropertyProperty[] Properties */ - public $props; + public int $flags; + /** @var PropertyItem[] Properties */ + public array $props; /** @var null|Identifier|Name|ComplexType Type declaration */ - public $type; + public ?Node $type; /** @var Node\AttributeGroup[] PHP attribute groups */ - public $attrGroups; + public array $attrGroups; /** * Constructs a class property list node. * - * @param int $flags Modifiers - * @param PropertyProperty[] $props Properties - * @param array $attributes Additional attributes - * @param null|string|Identifier|Name|ComplexType $type Type declaration - * @param Node\AttributeGroup[] $attrGroups PHP attribute groups + * @param int $flags Modifiers + * @param PropertyItem[] $props Properties + * @param array $attributes Additional attributes + * @param null|Identifier|Name|ComplexType $type Type declaration + * @param Node\AttributeGroup[] $attrGroups PHP attribute groups */ - public function __construct(int $flags, array $props, array $attributes = [], $type = null, array $attrGroups = []) + public function __construct(int $flags, array $props, array $attributes = [], ?Node $type = null, array $attrGroups = []) { $this->attributes = $attributes; $this->flags = $flags; $this->props = $props; - $this->type = \is_string($type) ? new Identifier($type) : $type; + $this->type = $type; $this->attrGroups = $attrGroups; } public function getSubNodeNames() : array @@ -14046,48 +15714,38 @@ class Property extends Node\Stmt } /** * Whether the property is explicitly or implicitly public. - * - * @return bool */ public function isPublic() : bool { - return ($this->flags & Class_::MODIFIER_PUBLIC) !== 0 || ($this->flags & Class_::VISIBILITY_MODIFIER_MASK) === 0; + return ($this->flags & Modifiers::PUBLIC) !== 0 || ($this->flags & Modifiers::VISIBILITY_MASK) === 0; } /** * Whether the property is protected. - * - * @return bool */ public function isProtected() : bool { - return (bool) ($this->flags & Class_::MODIFIER_PROTECTED); + return (bool) ($this->flags & Modifiers::PROTECTED); } /** * Whether the property is private. - * - * @return bool */ public function isPrivate() : bool { - return (bool) ($this->flags & Class_::MODIFIER_PRIVATE); + return (bool) ($this->flags & Modifiers::PRIVATE); } /** * Whether the property is static. - * - * @return bool */ public function isStatic() : bool { - return (bool) ($this->flags & Class_::MODIFIER_STATIC); + return (bool) ($this->flags & Modifiers::STATIC); } /** * Whether the property is readonly. - * - * @return bool */ public function isReadonly() : bool { - return (bool) ($this->flags & Class_::MODIFIER_READONLY); + return (bool) ($this->flags & Modifiers::READONLY); } public function getType() : string { @@ -14097,37 +15755,9 @@ class Property extends Node\Stmt attributes = $attributes; - $this->name = \is_string($name) ? new Node\VarLikeIdentifier($name) : $name; - $this->default = $default; - } - public function getSubNodeNames() : array - { - return ['name', 'default']; - } - public function getType() : string - { - return 'Stmt_PropertyProperty'; - } -} +require __DIR__ . '/../PropertyItem.php'; $attributes Additional attributes */ - public function __construct(Node\Expr $expr = null, array $attributes = []) + public function __construct(?Node\Expr $expr = null, array $attributes = []) { $this->attributes = $attributes; $this->expr = $expr; @@ -14161,53 +15791,25 @@ class Return_ extends Node\Stmt attributes = $attributes; - $this->var = $var; - $this->default = $default; - } - public function getSubNodeNames() : array - { - return ['var', 'default']; - } - public function getType() : string - { - return 'Stmt_StaticVar'; - } -} +require __DIR__ . '/../StaticVar.php'; $attributes Additional attributes */ public function __construct(array $vars, array $attributes = []) { @@ -14232,15 +15834,15 @@ use PHPUnit\PhpParser\Node; class Switch_ extends Node\Stmt { /** @var Node\Expr Condition */ - public $cond; + public Node\Expr $cond; /** @var Case_[] Case list */ - public $cases; + public array $cases; /** * Constructs a case node. * - * @param Node\Expr $cond Condition - * @param Case_[] $cases Case list - * @param array $attributes Additional attributes + * @param Node\Expr $cond Condition + * @param Case_[] $cases Case list + * @param array $attributes Additional attributes */ public function __construct(Node\Expr $cond, array $cases, array $attributes = []) { @@ -14262,49 +15864,19 @@ class Switch_ extends Node\Stmt declare (strict_types=1); namespace PHPUnit\PhpParser\Node\Stmt; -use PHPUnit\PhpParser\Node; -class Throw_ extends Node\Stmt -{ - /** @var Node\Expr Expression */ - public $expr; - /** - * Constructs a legacy throw statement node. - * - * @param Node\Expr $expr Expression - * @param array $attributes Additional attributes - */ - public function __construct(Node\Expr $expr, array $attributes = []) - { - $this->attributes = $attributes; - $this->expr = $expr; - } - public function getSubNodeNames() : array - { - return ['expr']; - } - public function getType() : string - { - return 'Stmt_Throw'; - } -} - $attributes Additional attributes */ public function __construct(array $traits, array $adaptations = [], array $attributes = []) { @@ -14330,9 +15902,9 @@ use PHPUnit\PhpParser\Node; abstract class TraitUseAdaptation extends Node\Stmt { /** @var Node\Name|null Trait name */ - public $trait; + public ?Node\Name $trait; /** @var Node\Identifier Method name */ - public $method; + public Node\Identifier $method; } $attributes Additional attributes */ - public function __construct($trait, $method, $newModifier, $newName, array $attributes = []) + public function __construct(?Node\Name $trait, $method, ?int $newModifier, $newName, array $attributes = []) { $this->attributes = $attributes; $this->trait = $trait; @@ -14381,14 +15953,14 @@ use PHPUnit\PhpParser\Node; class Precedence extends Node\Stmt\TraitUseAdaptation { /** @var Node\Name[] Overwritten traits */ - public $insteadof; + public array $insteadof; /** * Constructs a trait use precedence adaptation node. * - * @param Node\Name $trait Trait name - * @param string|Node\Identifier $method Method name - * @param Node\Name[] $insteadof Overwritten traits - * @param array $attributes Additional attributes + * @param Node\Name $trait Trait name + * @param string|Node\Identifier $method Method name + * @param Node\Name[] $insteadof Overwritten traits + * @param array $attributes Additional attributes */ public function __construct(Node\Name $trait, $method, array $insteadof, array $attributes = []) { @@ -14418,10 +15990,13 @@ class Trait_ extends ClassLike * Constructs a trait node. * * @param string|Node\Identifier $name Name - * @param array $subNodes Array of the following optional subnodes: - * 'stmts' => array(): Statements - * 'attrGroups' => array(): PHP attribute groups - * @param array $attributes Additional attributes + * @param array{ + * stmts?: Node\Stmt[], + * attrGroups?: Node\AttributeGroup[], + * } $subNodes Array of the following optional subnodes: + * 'stmts' => array(): Statements + * 'attrGroups' => array(): PHP attribute groups + * @param array $attributes Additional attributes */ public function __construct($name, array $subNodes = [], array $attributes = []) { @@ -14448,20 +16023,20 @@ use PHPUnit\PhpParser\Node; class TryCatch extends Node\Stmt { /** @var Node\Stmt[] Statements */ - public $stmts; + public array $stmts; /** @var Catch_[] Catches */ - public $catches; + public array $catches; /** @var null|Finally_ Optional finally node */ - public $finally; + public ?Finally_ $finally; /** * Constructs a try catch node. * - * @param Node\Stmt[] $stmts Statements - * @param Catch_[] $catches Catches - * @param null|Finally_ $finally Optional finally node - * @param array $attributes Additional attributes + * @param Node\Stmt[] $stmts Statements + * @param Catch_[] $catches Catches + * @param null|Finally_ $finally Optional finally node + * @param array $attributes Additional attributes */ - public function __construct(array $stmts, array $catches, Finally_ $finally = null, array $attributes = []) + public function __construct(array $stmts, array $catches, ?Finally_ $finally = null, array $attributes = []) { $this->attributes = $attributes; $this->stmts = $stmts; @@ -14486,12 +16061,12 @@ use PHPUnit\PhpParser\Node; class Unset_ extends Node\Stmt { /** @var Node\Expr[] Variables to unset */ - public $vars; + public array $vars; /** * Constructs an unset node. * - * @param Node\Expr[] $vars Variables to unset - * @param array $attributes Additional attributes + * @param Node\Expr[] $vars Variables to unset + * @param array $attributes Additional attributes */ public function __construct(array $vars, array $attributes = []) { @@ -14510,60 +16085,16 @@ class Unset_ extends Node\Stmt attributes = $attributes; - $this->type = $type; - $this->name = $name; - $this->alias = \is_string($alias) ? new Identifier($alias) : $alias; - } - public function getSubNodeNames() : array - { - return ['type', 'name', 'alias']; - } - /** - * Get alias. If not explicitly given this is the last component of the used name. - * - * @return Identifier - */ - public function getAlias() : Identifier - { - if (null !== $this->alias) { - return $this->alias; - } - return new Identifier($this->name->getLast()); - } - public function getType() : string - { - return 'Stmt_UseUse'; - } -} +require __DIR__ . '/../UseItem.php'; $attributes Additional attributes */ public function __construct(array $uses, int $type = self::TYPE_NORMAL, array $attributes = []) { @@ -14613,15 +16144,15 @@ use PHPUnit\PhpParser\Node; class While_ extends Node\Stmt { /** @var Node\Expr Condition */ - public $cond; + public Node\Expr $cond; /** @var Node\Stmt[] Statements */ - public $stmts; + public array $stmts; /** * Constructs a while node. * - * @param Node\Expr $cond Condition - * @param Node\Stmt[] $stmts Statements - * @param array $attributes Additional attributes + * @param Node\Expr $cond Condition + * @param Node\Stmt[] $stmts Statements + * @param array $attributes Additional attributes */ public function __construct(Node\Expr $cond, array $stmts = [], array $attributes = []) { @@ -14646,12 +16177,12 @@ namespace PHPUnit\PhpParser\Node; class UnionType extends ComplexType { /** @var (Identifier|Name|IntersectionType)[] Types */ - public $types; + public array $types; /** * Constructs a union type. * - * @param (Identifier|Name|IntersectionType)[] $types Types - * @param array $attributes Additional attributes + * @param (Identifier|Name|IntersectionType)[] $types Types + * @param array $attributes Additional attributes */ public function __construct(array $types, array $attributes = []) { @@ -14672,6 +16203,60 @@ class UnionType extends ComplexType declare (strict_types=1); namespace PHPUnit\PhpParser\Node; +use PHPUnit\PhpParser\Node; +use PHPUnit\PhpParser\NodeAbstract; +use PHPUnit\PhpParser\Node\Stmt\Use_; +class UseItem extends NodeAbstract +{ + /** + * @var Use_::TYPE_* One of the Stmt\Use_::TYPE_* constants. Will only differ from TYPE_UNKNOWN for mixed group uses + */ + public int $type; + /** @var Node\Name Namespace, class, function or constant to alias */ + public Name $name; + /** @var Identifier|null Alias */ + public ?Identifier $alias; + /** + * Constructs an alias (use) item node. + * + * @param Node\Name $name Namespace/Class to alias + * @param null|string|Identifier $alias Alias + * @param Use_::TYPE_* $type Type of the use element (for mixed group use only) + * @param array $attributes Additional attributes + */ + public function __construct(Node\Name $name, $alias = null, int $type = Use_::TYPE_UNKNOWN, array $attributes = []) + { + $this->attributes = $attributes; + $this->type = $type; + $this->name = $name; + $this->alias = \is_string($alias) ? new Identifier($alias) : $alias; + } + public function getSubNodeNames() : array + { + return ['type', 'name', 'alias']; + } + /** + * Get alias. If not explicitly given this is the last component of the used name. + */ + public function getAlias() : Identifier + { + if (null !== $this->alias) { + return $this->alias; + } + return new Identifier($this->name->getLast()); + } + public function getType() : string + { + return 'UseItem'; + } +} +// @deprecated compatibility alias +\class_alias(UseItem::class, Stmt\UseUse::class); + $attributes Additional attributes */ public function __construct(array $attributes = []) { @@ -14722,11 +16307,12 @@ namespace PHPUnit\PhpParser; abstract class NodeAbstract implements Node, \JsonSerializable { - protected $attributes; + /** @var array Attributes */ + protected array $attributes; /** * Creates a Node. * - * @param array $attributes Array of attributes + * @param array $attributes Array of attributes */ public function __construct(array $attributes = []) { @@ -14827,7 +16413,7 @@ abstract class NodeAbstract implements Node, \JsonSerializable * * @return null|Comment\Doc Doc comment object or null */ - public function getDocComment() + public function getDocComment() : ?Comment\Doc { $comments = $this->getComments(); for ($i = \count($comments) - 1; $i >= 0; $i--) { @@ -14845,7 +16431,7 @@ abstract class NodeAbstract implements Node, \JsonSerializable * * @param Comment\Doc $docComment Doc comment to set */ - public function setDocComment(Comment\Doc $docComment) + public function setDocComment(Comment\Doc $docComment) : void { $comments = $this->getComments(); for ($i = \count($comments) - 1; $i >= 0; $i--) { @@ -14860,7 +16446,7 @@ abstract class NodeAbstract implements Node, \JsonSerializable $comments[] = $docComment; $this->setAttribute('comments', $comments); } - public function setAttribute(string $key, $value) + public function setAttribute(string $key, $value) : void { $this->attributes[$key] = $value; } @@ -14879,12 +16465,12 @@ abstract class NodeAbstract implements Node, \JsonSerializable { return $this->attributes; } - public function setAttributes(array $attributes) + public function setAttributes(array $attributes) : void { $this->attributes = $attributes; } /** - * @return array + * @return array */ public function jsonSerialize() : array { @@ -14896,16 +16482,24 @@ abstract class NodeAbstract implements Node, \JsonSerializable declare (strict_types=1); namespace PHPUnit\PhpParser; +use PHPUnit\PhpParser\Node\Expr\Array_; use PHPUnit\PhpParser\Node\Expr\Include_; -use PHPUnit\PhpParser\Node\Stmt\Class_; +use PHPUnit\PhpParser\Node\Expr\List_; +use PHPUnit\PhpParser\Node\Scalar\Int_; +use PHPUnit\PhpParser\Node\Scalar\InterpolatedString; +use PHPUnit\PhpParser\Node\Scalar\String_; use PHPUnit\PhpParser\Node\Stmt\GroupUse; use PHPUnit\PhpParser\Node\Stmt\Use_; -use PHPUnit\PhpParser\Node\Stmt\UseUse; +use PHPUnit\PhpParser\Node\UseItem; class NodeDumper { - private $dumpComments; - private $dumpPositions; - private $code; + private bool $dumpComments; + private bool $dumpPositions; + private bool $dumpOtherAttributes; + private ?string $code; + private string $res; + private string $nl; + private const IGNORE_ATTRIBUTES = ['comments' => \true, 'startLine' => \true, 'endLine' => \true, 'startFilePos' => \true, 'endFilePos' => \true, 'startTokenPos' => \true, 'endTokenPos' => \true]; /** * Constructs a NodeDumper. * @@ -14913,6 +16507,7 @@ class NodeDumper * * bool dumpComments: Whether comments should be dumped. * * bool dumpPositions: Whether line/offset information should be dumped. To dump offset * information, the code needs to be passed to dump(). + * * bool dumpOtherAttributes: Whether non-comment, non-position attributes should be dumped. * * @param array $options Options (see description) */ @@ -14920,124 +16515,178 @@ class NodeDumper { $this->dumpComments = !empty($options['dumpComments']); $this->dumpPositions = !empty($options['dumpPositions']); + $this->dumpOtherAttributes = !empty($options['dumpOtherAttributes']); } /** * Dumps a node or array. * - * @param array|Node $node Node or array to dump + * @param array|Node $node Node or array to dump * @param string|null $code Code corresponding to dumped AST. This only needs to be passed if * the dumpPositions option is enabled and the dumping of node offsets * is desired. * * @return string Dumped value */ - public function dump($node, string $code = null) : string + public function dump($node, ?string $code = null) : string { $this->code = $code; - return $this->dumpRecursive($node); + $this->res = ''; + $this->nl = "\n"; + $this->dumpRecursive($node, \false); + return $this->res; } - protected function dumpRecursive($node) + /** @param mixed $node */ + protected function dumpRecursive($node, bool $indent = \true) : void { + if ($indent) { + $this->nl .= " "; + } if ($node instanceof Node) { - $r = $node->getType(); + $this->res .= $node->getType(); if ($this->dumpPositions && null !== ($p = $this->dumpPosition($node))) { - $r .= $p; + $this->res .= $p; } - $r .= '('; + $this->res .= '('; foreach ($node->getSubNodeNames() as $key) { - $r .= "\n " . $key . ': '; + $this->res .= "{$this->nl} " . $key . ': '; $value = $node->{$key}; - if (null === $value) { - $r .= 'null'; - } elseif (\false === $value) { - $r .= 'false'; - } elseif (\true === $value) { - $r .= 'true'; - } elseif (\is_scalar($value)) { + if (\is_int($value)) { if ('flags' === $key || 'newModifier' === $key) { - $r .= $this->dumpFlags($value); - } elseif ('type' === $key && $node instanceof Include_) { - $r .= $this->dumpIncludeType($value); - } elseif ('type' === $key && ($node instanceof Use_ || $node instanceof UseUse || $node instanceof GroupUse)) { - $r .= $this->dumpUseType($value); - } else { - $r .= $value; + $this->res .= $this->dumpFlags($value); + continue; + } + if ('type' === $key && $node instanceof Include_) { + $this->res .= $this->dumpIncludeType($value); + continue; + } + if ('type' === $key && ($node instanceof Use_ || $node instanceof UseItem || $node instanceof GroupUse)) { + $this->res .= $this->dumpUseType($value); + continue; } - } else { - $r .= \str_replace("\n", "\n ", $this->dumpRecursive($value)); } + $this->dumpRecursive($value); } if ($this->dumpComments && ($comments = $node->getComments())) { - $r .= "\n comments: " . \str_replace("\n", "\n ", $this->dumpRecursive($comments)); + $this->res .= "{$this->nl} comments: "; + $this->dumpRecursive($comments); } + if ($this->dumpOtherAttributes) { + foreach ($node->getAttributes() as $key => $value) { + if (isset(self::IGNORE_ATTRIBUTES[$key])) { + continue; + } + $this->res .= "{$this->nl} {$key}: "; + if (\is_int($value)) { + if ('kind' === $key) { + if ($node instanceof Int_) { + $this->res .= $this->dumpIntKind($value); + continue; + } + if ($node instanceof String_ || $node instanceof InterpolatedString) { + $this->res .= $this->dumpStringKind($value); + continue; + } + if ($node instanceof Array_) { + $this->res .= $this->dumpArrayKind($value); + continue; + } + if ($node instanceof List_) { + $this->res .= $this->dumpListKind($value); + continue; + } + } + } + $this->dumpRecursive($value); + } + } + $this->res .= "{$this->nl})"; } elseif (\is_array($node)) { - $r = 'array('; + $this->res .= 'array('; foreach ($node as $key => $value) { - $r .= "\n " . $key . ': '; - if (null === $value) { - $r .= 'null'; - } elseif (\false === $value) { - $r .= 'false'; - } elseif (\true === $value) { - $r .= 'true'; - } elseif (\is_scalar($value)) { - $r .= $value; - } else { - $r .= \str_replace("\n", "\n ", $this->dumpRecursive($value)); - } + $this->res .= "{$this->nl} " . $key . ': '; + $this->dumpRecursive($value); } + $this->res .= "{$this->nl})"; } elseif ($node instanceof Comment) { - return $node->getReformattedText(); + $this->res .= \str_replace("\n", $this->nl, $node->getReformattedText()); + } elseif (\is_string($node)) { + $this->res .= \str_replace("\n", $this->nl, (string) $node); + } elseif (\is_int($node) || \is_float($node)) { + $this->res .= $node; + } elseif (null === $node) { + $this->res .= 'null'; + } elseif (\false === $node) { + $this->res .= 'false'; + } elseif (\true === $node) { + $this->res .= 'true'; } else { throw new \InvalidArgumentException('Can only dump nodes and arrays.'); } - return $r . "\n)"; + if ($indent) { + $this->nl = \substr($this->nl, 0, -4); + } } - protected function dumpFlags($flags) + protected function dumpFlags(int $flags) : string { $strs = []; - if ($flags & Class_::MODIFIER_PUBLIC) { - $strs[] = 'MODIFIER_PUBLIC'; + if ($flags & Modifiers::PUBLIC) { + $strs[] = 'PUBLIC'; } - if ($flags & Class_::MODIFIER_PROTECTED) { - $strs[] = 'MODIFIER_PROTECTED'; + if ($flags & Modifiers::PROTECTED) { + $strs[] = 'PROTECTED'; } - if ($flags & Class_::MODIFIER_PRIVATE) { - $strs[] = 'MODIFIER_PRIVATE'; + if ($flags & Modifiers::PRIVATE) { + $strs[] = 'PRIVATE'; } - if ($flags & Class_::MODIFIER_ABSTRACT) { - $strs[] = 'MODIFIER_ABSTRACT'; + if ($flags & Modifiers::ABSTRACT) { + $strs[] = 'ABSTRACT'; } - if ($flags & Class_::MODIFIER_STATIC) { - $strs[] = 'MODIFIER_STATIC'; + if ($flags & Modifiers::STATIC) { + $strs[] = 'STATIC'; } - if ($flags & Class_::MODIFIER_FINAL) { - $strs[] = 'MODIFIER_FINAL'; + if ($flags & Modifiers::FINAL) { + $strs[] = 'FINAL'; } - if ($flags & Class_::MODIFIER_READONLY) { - $strs[] = 'MODIFIER_READONLY'; + if ($flags & Modifiers::READONLY) { + $strs[] = 'READONLY'; } if ($strs) { return \implode(' | ', $strs) . ' (' . $flags . ')'; } else { - return $flags; + return (string) $flags; } } - protected function dumpIncludeType($type) + /** @param array $map */ + private function dumpEnum(int $value, array $map) : string { - $map = [Include_::TYPE_INCLUDE => 'TYPE_INCLUDE', Include_::TYPE_INCLUDE_ONCE => 'TYPE_INCLUDE_ONCE', Include_::TYPE_REQUIRE => 'TYPE_REQUIRE', Include_::TYPE_REQUIRE_ONCE => 'TYPE_REQUIRE_ONCE']; - if (!isset($map[$type])) { - return $type; + if (!isset($map[$value])) { + return (string) $value; } - return $map[$type] . ' (' . $type . ')'; + return $map[$value] . ' (' . $value . ')'; } - protected function dumpUseType($type) + private function dumpIncludeType(int $type) : string { - $map = [Use_::TYPE_UNKNOWN => 'TYPE_UNKNOWN', Use_::TYPE_NORMAL => 'TYPE_NORMAL', Use_::TYPE_FUNCTION => 'TYPE_FUNCTION', Use_::TYPE_CONSTANT => 'TYPE_CONSTANT']; - if (!isset($map[$type])) { - return $type; - } - return $map[$type] . ' (' . $type . ')'; + return $this->dumpEnum($type, [Include_::TYPE_INCLUDE => 'TYPE_INCLUDE', Include_::TYPE_INCLUDE_ONCE => 'TYPE_INCLUDE_ONCE', Include_::TYPE_REQUIRE => 'TYPE_REQUIRE', Include_::TYPE_REQUIRE_ONCE => 'TYPE_REQUIRE_ONCE']); + } + private function dumpUseType(int $type) : string + { + return $this->dumpEnum($type, [Use_::TYPE_UNKNOWN => 'TYPE_UNKNOWN', Use_::TYPE_NORMAL => 'TYPE_NORMAL', Use_::TYPE_FUNCTION => 'TYPE_FUNCTION', Use_::TYPE_CONSTANT => 'TYPE_CONSTANT']); + } + private function dumpIntKind(int $kind) : string + { + return $this->dumpEnum($kind, [Int_::KIND_BIN => 'KIND_BIN', Int_::KIND_OCT => 'KIND_OCT', Int_::KIND_DEC => 'KIND_DEC', Int_::KIND_HEX => 'KIND_HEX']); + } + private function dumpStringKind(int $kind) : string + { + return $this->dumpEnum($kind, [String_::KIND_SINGLE_QUOTED => 'KIND_SINGLE_QUOTED', String_::KIND_DOUBLE_QUOTED => 'KIND_DOUBLE_QUOTED', String_::KIND_HEREDOC => 'KIND_HEREDOC', String_::KIND_NOWDOC => 'KIND_NOWDOC']); + } + private function dumpArrayKind(int $kind) : string + { + return $this->dumpEnum($kind, [Array_::KIND_LONG => 'KIND_LONG', Array_::KIND_SHORT => 'KIND_SHORT']); + } + private function dumpListKind(int $kind) : string + { + return $this->dumpEnum($kind, [List_::KIND_LIST => 'KIND_LIST', List_::KIND_ARRAY => 'KIND_ARRAY']); } /** * Dump node position, if possible. @@ -15046,7 +16695,7 @@ class NodeDumper * * @return string|null Dump of position, or null if position information not available */ - protected function dumpPosition(Node $node) + protected function dumpPosition(Node $node) : ?string { if (!$node->hasAttribute('startLine') || !$node->hasAttribute('endLine')) { return null; @@ -15060,7 +16709,7 @@ class NodeDumper return "[{$start} - {$end}]"; } // Copied from Error class - private function toColumn($code, $pos) + private function toColumn(string $code, int $pos) : int { if ($pos > \strlen($code)) { throw new \RuntimeException('Invalid position information'); @@ -15084,29 +16733,32 @@ class NodeFinder /** * Find all nodes satisfying a filter callback. * - * @param Node|Node[] $nodes Single node or array of nodes to search in - * @param callable $filter Filter callback: function(Node $node) : bool + * @param Node|Node[] $nodes Single node or array of nodes to search in + * @param callable $filter Filter callback: function(Node $node) : bool * * @return Node[] Found nodes satisfying the filter callback */ public function find($nodes, callable $filter) : array { + if ($nodes === []) { + return []; + } if (!\is_array($nodes)) { $nodes = [$nodes]; } $visitor = new FindingVisitor($filter); - $traverser = new NodeTraverser(); - $traverser->addVisitor($visitor); + $traverser = new NodeTraverser($visitor); $traverser->traverse($nodes); return $visitor->getFoundNodes(); } /** * Find all nodes that are instances of a certain class. + * @template TNode as Node * * @param Node|Node[] $nodes Single node or array of nodes to search in - * @param string $class Class name + * @param class-string $class Class name * - * @return Node[] Found nodes (all instances of $class) + * @return TNode[] Found nodes (all instances of $class) */ public function findInstanceOf($nodes, string $class) : array { @@ -15117,31 +16769,35 @@ class NodeFinder /** * Find first node satisfying a filter callback. * - * @param Node|Node[] $nodes Single node or array of nodes to search in - * @param callable $filter Filter callback: function(Node $node) : bool + * @param Node|Node[] $nodes Single node or array of nodes to search in + * @param callable $filter Filter callback: function(Node $node) : bool * * @return null|Node Found node (or null if none found) */ - public function findFirst($nodes, callable $filter) + public function findFirst($nodes, callable $filter) : ?Node { + if ($nodes === []) { + return null; + } if (!\is_array($nodes)) { $nodes = [$nodes]; } $visitor = new FirstFindingVisitor($filter); - $traverser = new NodeTraverser(); - $traverser->addVisitor($visitor); + $traverser = new NodeTraverser($visitor); $traverser->traverse($nodes); return $visitor->getFoundNode(); } /** * Find first node that is an instance of a certain class. * - * @param Node|Node[] $nodes Single node or array of nodes to search in - * @param string $class Class name + * @template TNode as Node * - * @return null|Node Found node, which is an instance of $class (or null if none found) + * @param Node|Node[] $nodes Single node or array of nodes to search in + * @param class-string $class Class name + * + * @return null|TNode Found node, which is an instance of $class (or null if none found) */ - public function findFirstInstanceOf($nodes, string $class) + public function findFirstInstanceOf($nodes, string $class) : ?Node { return $this->findFirst($nodes, function ($node) use($class) { return $node instanceof $class; @@ -15156,65 +16812,51 @@ namespace PHPUnit\PhpParser; class NodeTraverser implements NodeTraverserInterface { /** - * If NodeVisitor::enterNode() returns DONT_TRAVERSE_CHILDREN, child nodes - * of the current node will not be traversed for any visitors. - * - * For subsequent visitors enterNode() will still be called on the current - * node and leaveNode() will also be invoked for the current node. + * @deprecated Use NodeVisitor::DONT_TRAVERSE_CHILDREN instead. */ - const DONT_TRAVERSE_CHILDREN = 1; + public const DONT_TRAVERSE_CHILDREN = NodeVisitor::DONT_TRAVERSE_CHILDREN; /** - * If NodeVisitor::enterNode() or NodeVisitor::leaveNode() returns - * STOP_TRAVERSAL, traversal is aborted. - * - * The afterTraverse() method will still be invoked. + * @deprecated Use NodeVisitor::STOP_TRAVERSAL instead. */ - const STOP_TRAVERSAL = 2; + public const STOP_TRAVERSAL = NodeVisitor::STOP_TRAVERSAL; /** - * If NodeVisitor::leaveNode() returns REMOVE_NODE for a node that occurs - * in an array, it will be removed from the array. - * - * For subsequent visitors leaveNode() will still be invoked for the - * removed node. + * @deprecated Use NodeVisitor::REMOVE_NODE instead. */ - const REMOVE_NODE = 3; + public const REMOVE_NODE = NodeVisitor::REMOVE_NODE; /** - * If NodeVisitor::enterNode() returns DONT_TRAVERSE_CURRENT_AND_CHILDREN, child nodes - * of the current node will not be traversed for any visitors. - * - * For subsequent visitors enterNode() will not be called as well. - * leaveNode() will be invoked for visitors that has enterNode() method invoked. + * @deprecated Use NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN instead. */ - const DONT_TRAVERSE_CURRENT_AND_CHILDREN = 4; - /** @var NodeVisitor[] Visitors */ - protected $visitors = []; + public const DONT_TRAVERSE_CURRENT_AND_CHILDREN = NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN; + /** @var list Visitors */ + protected array $visitors = []; /** @var bool Whether traversal should be stopped */ - protected $stopTraversal; - public function __construct() + protected bool $stopTraversal; + /** + * Create a traverser with the given visitors. + * + * @param NodeVisitor ...$visitors Node visitors + */ + public function __construct(NodeVisitor ...$visitors) { - // for BC + $this->visitors = $visitors; } /** * Adds a visitor. * * @param NodeVisitor $visitor Visitor to add */ - public function addVisitor(NodeVisitor $visitor) + public function addVisitor(NodeVisitor $visitor) : void { $this->visitors[] = $visitor; } /** * Removes an added visitor. - * - * @param NodeVisitor $visitor */ - public function removeVisitor(NodeVisitor $visitor) + public function removeVisitor(NodeVisitor $visitor) : void { - foreach ($this->visitors as $index => $storedVisitor) { - if ($storedVisitor === $visitor) { - unset($this->visitors[$index]); - break; - } + $index = \array_search($visitor, $this->visitors); + if ($index !== \false) { + \array_splice($this->visitors, $index, 1, []); } } /** @@ -15233,7 +16875,8 @@ class NodeTraverser implements NodeTraverserInterface } } $nodes = $this->traverseArray($nodes); - foreach ($this->visitors as $visitor) { + for ($i = \count($this->visitors) - 1; $i >= 0; --$i) { + $visitor = $this->visitors[$i]; if (null !== ($return = $visitor->afterTraverse($nodes))) { $nodes = $return; } @@ -15244,69 +16887,69 @@ class NodeTraverser implements NodeTraverserInterface * Recursively traverse a node. * * @param Node $node Node to traverse. - * - * @return Node Result of traversal (may be original node or new one) */ - protected function traverseNode(Node $node) : Node + protected function traverseNode(Node $node) : void { foreach ($node->getSubNodeNames() as $name) { - $subNode =& $node->{$name}; + $subNode = $node->{$name}; if (\is_array($subNode)) { - $subNode = $this->traverseArray($subNode); + $node->{$name} = $this->traverseArray($subNode); if ($this->stopTraversal) { break; } } elseif ($subNode instanceof Node) { $traverseChildren = \true; - $breakVisitorIndex = null; + $visitorIndex = -1; foreach ($this->visitors as $visitorIndex => $visitor) { $return = $visitor->enterNode($subNode); if (null !== $return) { if ($return instanceof Node) { $this->ensureReplacementReasonable($subNode, $return); - $subNode = $return; - } elseif (self::DONT_TRAVERSE_CHILDREN === $return) { + $subNode = $node->{$name} = $return; + } elseif (NodeVisitor::DONT_TRAVERSE_CHILDREN === $return) { $traverseChildren = \false; - } elseif (self::DONT_TRAVERSE_CURRENT_AND_CHILDREN === $return) { + } elseif (NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN === $return) { $traverseChildren = \false; - $breakVisitorIndex = $visitorIndex; break; - } elseif (self::STOP_TRAVERSAL === $return) { + } elseif (NodeVisitor::STOP_TRAVERSAL === $return) { $this->stopTraversal = \true; break 2; + } elseif (NodeVisitor::REPLACE_WITH_NULL === $return) { + $node->{$name} = null; + continue 2; } else { throw new \LogicException('enterNode() returned invalid value of type ' . \gettype($return)); } } } if ($traverseChildren) { - $subNode = $this->traverseNode($subNode); + $this->traverseNode($subNode); if ($this->stopTraversal) { break; } } - foreach ($this->visitors as $visitorIndex => $visitor) { + for (; $visitorIndex >= 0; --$visitorIndex) { + $visitor = $this->visitors[$visitorIndex]; $return = $visitor->leaveNode($subNode); if (null !== $return) { if ($return instanceof Node) { $this->ensureReplacementReasonable($subNode, $return); - $subNode = $return; - } elseif (self::STOP_TRAVERSAL === $return) { + $subNode = $node->{$name} = $return; + } elseif (NodeVisitor::STOP_TRAVERSAL === $return) { $this->stopTraversal = \true; break 2; + } elseif (NodeVisitor::REPLACE_WITH_NULL === $return) { + $node->{$name} = null; + break; } elseif (\is_array($return)) { throw new \LogicException('leaveNode() may only return an array ' . 'if the parent structure is an array'); } else { throw new \LogicException('leaveNode() returned invalid value of type ' . \gettype($return)); } } - if ($breakVisitorIndex === $visitorIndex) { - break; - } } } } - return $node; } /** * Recursively traverse array (usually of nodes). @@ -15318,60 +16961,65 @@ class NodeTraverser implements NodeTraverserInterface protected function traverseArray(array $nodes) : array { $doNodes = []; - foreach ($nodes as $i => &$node) { + foreach ($nodes as $i => $node) { if ($node instanceof Node) { $traverseChildren = \true; - $breakVisitorIndex = null; + $visitorIndex = -1; foreach ($this->visitors as $visitorIndex => $visitor) { $return = $visitor->enterNode($node); if (null !== $return) { if ($return instanceof Node) { $this->ensureReplacementReasonable($node, $return); - $node = $return; - } elseif (self::DONT_TRAVERSE_CHILDREN === $return) { + $nodes[$i] = $node = $return; + } elseif (\is_array($return)) { + $doNodes[] = [$i, $return]; + continue 2; + } elseif (NodeVisitor::REMOVE_NODE === $return) { + $doNodes[] = [$i, []]; + continue 2; + } elseif (NodeVisitor::DONT_TRAVERSE_CHILDREN === $return) { $traverseChildren = \false; - } elseif (self::DONT_TRAVERSE_CURRENT_AND_CHILDREN === $return) { + } elseif (NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN === $return) { $traverseChildren = \false; - $breakVisitorIndex = $visitorIndex; break; - } elseif (self::STOP_TRAVERSAL === $return) { + } elseif (NodeVisitor::STOP_TRAVERSAL === $return) { $this->stopTraversal = \true; break 2; + } elseif (NodeVisitor::REPLACE_WITH_NULL === $return) { + throw new \LogicException('REPLACE_WITH_NULL can not be used if the parent structure is an array'); } else { throw new \LogicException('enterNode() returned invalid value of type ' . \gettype($return)); } } } if ($traverseChildren) { - $node = $this->traverseNode($node); + $this->traverseNode($node); if ($this->stopTraversal) { break; } } - foreach ($this->visitors as $visitorIndex => $visitor) { + for (; $visitorIndex >= 0; --$visitorIndex) { + $visitor = $this->visitors[$visitorIndex]; $return = $visitor->leaveNode($node); if (null !== $return) { if ($return instanceof Node) { $this->ensureReplacementReasonable($node, $return); - $node = $return; + $nodes[$i] = $node = $return; } elseif (\is_array($return)) { $doNodes[] = [$i, $return]; break; - } elseif (self::REMOVE_NODE === $return) { + } elseif (NodeVisitor::REMOVE_NODE === $return) { $doNodes[] = [$i, []]; break; - } elseif (self::STOP_TRAVERSAL === $return) { + } elseif (NodeVisitor::STOP_TRAVERSAL === $return) { $this->stopTraversal = \true; break 2; - } elseif (\false === $return) { - throw new \LogicException('bool(false) return from leaveNode() no longer supported. ' . 'Return NodeTraverser::REMOVE_NODE instead'); + } elseif (NodeVisitor::REPLACE_WITH_NULL === $return) { + throw new \LogicException('REPLACE_WITH_NULL can not be used if the parent structure is an array'); } else { throw new \LogicException('leaveNode() returned invalid value of type ' . \gettype($return)); } } - if ($breakVisitorIndex === $visitorIndex) { - break; - } } } elseif (\is_array($node)) { throw new \LogicException('Invalid node structure: Contains nested arrays'); @@ -15384,7 +17032,7 @@ class NodeTraverser implements NodeTraverserInterface } return $nodes; } - private function ensureReplacementReasonable($old, $new) + private function ensureReplacementReasonable(Node $old, Node $new) : void { if ($old instanceof Node\Stmt && $new instanceof Node\Expr) { throw new \LogicException("Trying to replace statement ({$old->getType()}) " . "with expression ({$new->getType()}). Are you missing a " . "Stmt_Expression wrapper?"); @@ -15406,13 +17054,11 @@ interface NodeTraverserInterface * * @param NodeVisitor $visitor Visitor to add */ - public function addVisitor(NodeVisitor $visitor); + public function addVisitor(NodeVisitor $visitor) : void; /** * Removes an added visitor. - * - * @param NodeVisitor $visitor */ - public function removeVisitor(NodeVisitor $visitor); + public function removeVisitor(NodeVisitor $visitor) : void; /** * Traverses an array of nodes using the registered visitors. * @@ -15429,6 +17075,43 @@ namespace PHPUnit\PhpParser; interface NodeVisitor { + /** + * If NodeVisitor::enterNode() returns DONT_TRAVERSE_CHILDREN, child nodes + * of the current node will not be traversed for any visitors. + * + * For subsequent visitors enterNode() will still be called on the current + * node and leaveNode() will also be invoked for the current node. + */ + public const DONT_TRAVERSE_CHILDREN = 1; + /** + * If NodeVisitor::enterNode() or NodeVisitor::leaveNode() returns + * STOP_TRAVERSAL, traversal is aborted. + * + * The afterTraverse() method will still be invoked. + */ + public const STOP_TRAVERSAL = 2; + /** + * If NodeVisitor::leaveNode() returns REMOVE_NODE for a node that occurs + * in an array, it will be removed from the array. + * + * For subsequent visitors leaveNode() will still be invoked for the + * removed node. + */ + public const REMOVE_NODE = 3; + /** + * If NodeVisitor::enterNode() returns DONT_TRAVERSE_CURRENT_AND_CHILDREN, child nodes + * of the current node will not be traversed for any visitors. + * + * For subsequent visitors enterNode() will not be called as well. + * leaveNode() will be invoked for visitors that has enterNode() method invoked. + */ + public const DONT_TRAVERSE_CURRENT_AND_CHILDREN = 4; + /** + * If NodeVisitor::enterNode() or NodeVisitor::leaveNode() returns REPLACE_WITH_NULL, + * the node will be replaced with null. This is not a legal return value if the node is part + * of an array, rather than another node. + */ + public const REPLACE_WITH_NULL = 5; /** * Called once before traversal. * @@ -15447,16 +17130,25 @@ interface NodeVisitor * Return value semantics: * * null * => $node stays as-is - * * NodeTraverser::DONT_TRAVERSE_CHILDREN + * * array (of Nodes) + * => The return value is merged into the parent array (at the position of the $node) + * * NodeVisitor::REMOVE_NODE + * => $node is removed from the parent array + * * NodeVisitor::REPLACE_WITH_NULL + * => $node is replaced with null + * * NodeVisitor::DONT_TRAVERSE_CHILDREN * => Children of $node are not traversed. $node stays as-is - * * NodeTraverser::STOP_TRAVERSAL + * * NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN + * => Further visitors for the current node are skipped, and its children are not + * traversed. $node stays as-is. + * * NodeVisitor::STOP_TRAVERSAL * => Traversal is aborted. $node stays as-is * * otherwise * => $node is set to the return value * * @param Node $node Node * - * @return null|int|Node Replacement node (or special return value) + * @return null|int|Node|Node[] Replacement node (or special return value) */ public function enterNode(Node $node); /** @@ -15465,9 +17157,11 @@ interface NodeVisitor * Return value semantics: * * null * => $node stays as-is - * * NodeTraverser::REMOVE_NODE + * * NodeVisitor::REMOVE_NODE * => $node is removed from the parent array - * * NodeTraverser::STOP_TRAVERSAL + * * NodeVisitor::REPLACE_WITH_NULL + * => $node is replaced with null + * * NodeVisitor::STOP_TRAVERSAL * => Traversal is aborted. $node stays as-is * * array (of Nodes) * => The return value is merged into the parent array (at the position of the $node) @@ -15518,6 +17212,80 @@ class CloningVisitor extends NodeVisitorAbstract declare (strict_types=1); namespace PHPUnit\PhpParser\NodeVisitor; +use PHPUnit\PhpParser\Comment; +use PHPUnit\PhpParser\Node; +use PHPUnit\PhpParser\NodeVisitorAbstract; +use PHPUnit\PhpParser\Token; +class CommentAnnotatingVisitor extends NodeVisitorAbstract +{ + /** @var int Last seen token start position */ + private int $pos = 0; + /** @var Token[] Token array */ + private array $tokens; + /** @var list Token positions of comments */ + private array $commentPositions = []; + /** + * Create a comment annotation visitor. + * + * @param Token[] $tokens Token array + */ + public function __construct(array $tokens) + { + $this->tokens = $tokens; + // Collect positions of comments. We use this to avoid traversing parts of the AST where + // there are no comments. + foreach ($tokens as $i => $token) { + if ($token->id === \T_COMMENT || $token->id === \T_DOC_COMMENT) { + $this->commentPositions[] = $i; + } + } + } + public function enterNode(Node $node) + { + $nextCommentPos = \current($this->commentPositions); + if ($nextCommentPos === \false) { + // No more comments. + return self::STOP_TRAVERSAL; + } + $oldPos = $this->pos; + $this->pos = $pos = $node->getStartTokenPos(); + if ($nextCommentPos > $oldPos && $nextCommentPos < $pos) { + $comments = []; + while (--$pos >= $oldPos) { + $token = $this->tokens[$pos]; + if ($token->id === \T_DOC_COMMENT) { + $comments[] = new Comment\Doc($token->text, $token->line, $token->pos, $pos, $token->getEndLine(), $token->getEndPos() - 1, $pos); + continue; + } + if ($token->id === \T_COMMENT) { + $comments[] = new Comment($token->text, $token->line, $token->pos, $pos, $token->getEndLine(), $token->getEndPos() - 1, $pos); + continue; + } + if ($token->id !== \T_WHITESPACE) { + break; + } + } + if (!empty($comments)) { + $node->setAttribute('comments', \array_reverse($comments)); + } + do { + $nextCommentPos = \next($this->commentPositions); + } while ($nextCommentPos !== \false && $nextCommentPos < $this->pos); + } + $endPos = $node->getEndTokenPos(); + if ($nextCommentPos > $endPos) { + // Skip children if there are no comments located inside this node. + $this->pos = $endPos; + return self::DONT_TRAVERSE_CHILDREN; + } + return null; + } +} +filterCallback = $filterCallback; @@ -15545,7 +17313,7 @@ class FindingVisitor extends NodeVisitorAbstract { return $this->foundNodes; } - public function beforeTraverse(array $nodes) + public function beforeTraverse(array $nodes) : ?array { $this->foundNodes = []; return null; @@ -15565,7 +17333,7 @@ declare (strict_types=1); namespace PHPUnit\PhpParser\NodeVisitor; use PHPUnit\PhpParser\Node; -use PHPUnit\PhpParser\NodeTraverser; +use PHPUnit\PhpParser\NodeVisitor; use PHPUnit\PhpParser\NodeVisitorAbstract; /** * This visitor can be used to find the first node satisfying some criterion determined by @@ -15576,7 +17344,7 @@ class FirstFindingVisitor extends NodeVisitorAbstract /** @var callable Filter callback */ protected $filterCallback; /** @var null|Node Found node */ - protected $foundNode; + protected ?Node $foundNode; public function __construct(callable $filterCallback) { $this->filterCallback = $filterCallback; @@ -15588,11 +17356,11 @@ class FirstFindingVisitor extends NodeVisitorAbstract * * @return null|Node Found node (or null if not found) */ - public function getFoundNode() + public function getFoundNode() : ?Node { return $this->foundNode; } - public function beforeTraverse(array $nodes) + public function beforeTraverse(array $nodes) : ?array { $this->foundNode = null; return null; @@ -15602,7 +17370,7 @@ class FirstFindingVisitor extends NodeVisitorAbstract $filterCallback = $this->filterCallback; if ($filterCallback($node)) { $this->foundNode = $node; - return NodeTraverser::STOP_TRAVERSAL; + return NodeVisitor::STOP_TRAVERSAL; } return null; } @@ -15623,11 +17391,11 @@ use PHPUnit\PhpParser\NodeVisitorAbstract; class NameResolver extends NodeVisitorAbstract { /** @var NameContext Naming context */ - protected $nameContext; + protected NameContext $nameContext; /** @var bool Whether to preserve original names */ - protected $preserveOriginalNames; + protected bool $preserveOriginalNames; /** @var bool Whether to replace resolved nodes in place, or to add resolvedNode attributes */ - protected $replaceNodes; + protected bool $replaceNodes; /** * Constructs a name resolution visitor. * @@ -15639,9 +17407,9 @@ class NameResolver extends NodeVisitorAbstract * namespacedName attribute, as usual.) * * @param ErrorHandler|null $errorHandler Error handler - * @param array $options Options + * @param array{preserveOriginalNames?: bool, replaceNodes?: bool} $options Options */ - public function __construct(ErrorHandler $errorHandler = null, array $options = []) + public function __construct(?ErrorHandler $errorHandler = null, array $options = []) { $this->nameContext = new NameContext($errorHandler ?? new ErrorHandler\Throwing()); $this->preserveOriginalNames = $options['preserveOriginalNames'] ?? \false; @@ -15649,14 +17417,12 @@ class NameResolver extends NodeVisitorAbstract } /** * Get name resolution context. - * - * @return NameContext */ public function getNameContext() : NameContext { return $this->nameContext; } - public function beforeTraverse(array $nodes) + public function beforeTraverse(array $nodes) : ?array { $this->nameContext->startNamespace(); return null; @@ -15683,6 +17449,8 @@ class NameResolver extends NodeVisitorAbstract $this->resolveAttrGroups($node); if (null !== $node->name) { $this->addNamespacedName($node); + } else { + $node->namespacedName = null; } } elseif ($node instanceof Stmt\Interface_) { foreach ($node->extends as &$interface) { @@ -15695,9 +17463,7 @@ class NameResolver extends NodeVisitorAbstract $interface = $this->resolveClassName($interface); } $this->resolveAttrGroups($node); - if (null !== $node->name) { - $this->addNamespacedName($node); - } + $this->addNamespacedName($node); } elseif ($node instanceof Stmt\Trait_) { $this->resolveAttrGroups($node); $this->addNamespacedName($node); @@ -15717,46 +17483,46 @@ class NameResolver extends NodeVisitorAbstract foreach ($node->consts as $const) { $this->addNamespacedName($const); } - } else { - if ($node instanceof Stmt\ClassConst) { - $this->resolveAttrGroups($node); - } else { - if ($node instanceof Stmt\EnumCase) { - $this->resolveAttrGroups($node); - } elseif ($node instanceof Expr\StaticCall || $node instanceof Expr\StaticPropertyFetch || $node instanceof Expr\ClassConstFetch || $node instanceof Expr\New_ || $node instanceof Expr\Instanceof_) { - if ($node->class instanceof Name) { - $node->class = $this->resolveClassName($node->class); - } - } elseif ($node instanceof Stmt\Catch_) { - foreach ($node->types as &$type) { - $type = $this->resolveClassName($type); - } - } elseif ($node instanceof Expr\FuncCall) { - if ($node->name instanceof Name) { - $node->name = $this->resolveName($node->name, Stmt\Use_::TYPE_FUNCTION); - } - } elseif ($node instanceof Expr\ConstFetch) { - $node->name = $this->resolveName($node->name, Stmt\Use_::TYPE_CONSTANT); - } elseif ($node instanceof Stmt\TraitUse) { - foreach ($node->traits as &$trait) { - $trait = $this->resolveClassName($trait); - } - foreach ($node->adaptations as $adaptation) { - if (null !== $adaptation->trait) { - $adaptation->trait = $this->resolveClassName($adaptation->trait); - } - if ($adaptation instanceof Stmt\TraitUseAdaptation\Precedence) { - foreach ($adaptation->insteadof as &$insteadof) { - $insteadof = $this->resolveClassName($insteadof); - } - } + } elseif ($node instanceof Stmt\ClassConst) { + if (null !== $node->type) { + $node->type = $this->resolveType($node->type); + } + $this->resolveAttrGroups($node); + } elseif ($node instanceof Stmt\EnumCase) { + $this->resolveAttrGroups($node); + } elseif ($node instanceof Expr\StaticCall || $node instanceof Expr\StaticPropertyFetch || $node instanceof Expr\ClassConstFetch || $node instanceof Expr\New_ || $node instanceof Expr\Instanceof_) { + if ($node->class instanceof Name) { + $node->class = $this->resolveClassName($node->class); + } + } elseif ($node instanceof Stmt\Catch_) { + foreach ($node->types as &$type) { + $type = $this->resolveClassName($type); + } + } elseif ($node instanceof Expr\FuncCall) { + if ($node->name instanceof Name) { + $node->name = $this->resolveName($node->name, Stmt\Use_::TYPE_FUNCTION); + } + } elseif ($node instanceof Expr\ConstFetch) { + $node->name = $this->resolveName($node->name, Stmt\Use_::TYPE_CONSTANT); + } elseif ($node instanceof Stmt\TraitUse) { + foreach ($node->traits as &$trait) { + $trait = $this->resolveClassName($trait); + } + foreach ($node->adaptations as $adaptation) { + if (null !== $adaptation->trait) { + $adaptation->trait = $this->resolveClassName($adaptation->trait); + } + if ($adaptation instanceof Stmt\TraitUseAdaptation\Precedence) { + foreach ($adaptation->insteadof as &$insteadof) { + $insteadof = $this->resolveClassName($insteadof); } } } } return null; } - private function addAlias(Stmt\UseUse $use, int $type, Name $prefix = null) + /** @param Stmt\Use_::TYPE_* $type */ + private function addAlias(Node\UseItem $use, int $type, ?Name $prefix = null) : void { // Add prefix for group uses $name = $prefix ? Name::concat($prefix, $use->name) : $use->name; @@ -15764,8 +17530,8 @@ class NameResolver extends NodeVisitorAbstract $type |= $use->type; $this->nameContext->addAlias($name, (string) $use->getAlias(), $type, $use->getAttributes()); } - /** @param Stmt\Function_|Stmt\ClassMethod|Expr\Closure $node */ - private function resolveSignature($node) + /** @param Stmt\Function_|Stmt\ClassMethod|Expr\Closure|Expr\ArrowFunction $node */ + private function resolveSignature($node) : void { foreach ($node->params as $param) { $param->type = $this->resolveType($param->type); @@ -15773,7 +17539,12 @@ class NameResolver extends NodeVisitorAbstract } $node->returnType = $this->resolveType($node->returnType); } - private function resolveType($node) + /** + * @template T of Node\Identifier|Name|Node\ComplexType|null + * @param T $node + * @return T + */ + private function resolveType(?Node $node) : ?Node { if ($node instanceof Name) { return $this->resolveClassName($node); @@ -15794,7 +17565,7 @@ class NameResolver extends NodeVisitorAbstract * Resolve name, according to name resolver options. * * @param Name $name Function or constant name to resolve - * @param int $type One of Stmt\Use_::TYPE_* + * @param Stmt\Use_::TYPE_* $type One of Stmt\Use_::TYPE_* * * @return Name Resolved name, or original name with attribute */ @@ -15824,15 +17595,15 @@ class NameResolver extends NodeVisitorAbstract $name->setAttribute('namespacedName', FullyQualified::concat($this->nameContext->getNamespace(), $name, $name->getAttributes())); return $name; } - protected function resolveClassName(Name $name) + protected function resolveClassName(Name $name) : Name { return $this->resolveName($name, Stmt\Use_::TYPE_NORMAL); } - protected function addNamespacedName(Node $node) + protected function addNamespacedName(Node $node) : void { $node->namespacedName = Name::concat($this->nameContext->getNamespace(), (string) $node->name); } - protected function resolveAttrGroups(Node $node) + protected function resolveAttrGroups(Node $node) : void { foreach ($node->attrGroups as $attrGroup) { foreach ($attrGroup->attrs as $attr) { @@ -15862,7 +17633,7 @@ final class NodeConnectingVisitor extends NodeVisitorAbstract /** * @var Node[] */ - private $stack = []; + private array $stack = []; /** * @var ?Node */ @@ -15894,10 +17665,10 @@ final class NodeConnectingVisitor extends NodeVisitorAbstract declare (strict_types=1); namespace PHPUnit\PhpParser\NodeVisitor; -use function array_pop; -use function count; use PHPUnit\PhpParser\Node; use PHPUnit\PhpParser\NodeVisitorAbstract; +use function array_pop; +use function count; /** * Visitor that connects a child node to its parent node. * @@ -15909,7 +17680,7 @@ final class ParentConnectingVisitor extends NodeVisitorAbstract /** * @var Node[] */ - private $stack = []; + private array $stack = []; public function beforeTraverse(array $nodes) { $this->stack = []; @@ -15934,7 +17705,7 @@ namespace PHPUnit\PhpParser; /** * @codeCoverageIgnore */ -class NodeVisitorAbstract implements NodeVisitor +abstract class NodeVisitorAbstract implements NodeVisitor { public function beforeTraverse(array $nodes) { @@ -15970,66 +17741,21 @@ interface Parser * @return Node\Stmt[]|null Array of statements (or null non-throwing error handler is used and * the parser was unable to recover from an error). */ - public function parse(string $code, ErrorHandler $errorHandler = null); -} -parsers = $parsers; - } - public function parse(string $code, ErrorHandler $errorHandler = null) - { - if (null === $errorHandler) { - $errorHandler = new ErrorHandler\Throwing(); - } - list($firstStmts, $firstError) = $this->tryParse($this->parsers[0], $errorHandler, $code); - if ($firstError === null) { - return $firstStmts; - } - for ($i = 1, $c = \count($this->parsers); $i < $c; ++$i) { - list($stmts, $error) = $this->tryParse($this->parsers[$i], $errorHandler, $code); - if ($error === null) { - return $stmts; - } - } - throw $firstError; - } - private function tryParse(Parser $parser, ErrorHandler $errorHandler, $code) - { - $stmts = null; - $error = null; - try { - $stmts = $parser->parse($code, $errorHandler); - } catch (Error $error) { - } - return [$stmts, $error]; - } + public function getTokens() : array; } '", "T_IS_GREATER_OR_EQUAL", "T_SL", "T_SR", "'+'", "'-'", "'.'", "'*'", "'/'", "'%'", "'!'", "T_INSTANCEOF", "'~'", "T_INC", "T_DEC", "T_INT_CAST", "T_DOUBLE_CAST", "T_STRING_CAST", "T_ARRAY_CAST", "T_OBJECT_CAST", "T_BOOL_CAST", "T_UNSET_CAST", "'@'", "T_POW", "'['", "T_NEW", "T_CLONE", "T_EXIT", "T_IF", "T_ELSEIF", "T_ELSE", "T_ENDIF", "T_LNUMBER", "T_DNUMBER", "T_STRING", "T_STRING_VARNAME", "T_VARIABLE", "T_NUM_STRING", "T_INLINE_HTML", "T_ENCAPSED_AND_WHITESPACE", "T_CONSTANT_ENCAPSED_STRING", "T_ECHO", "T_DO", "T_WHILE", "T_ENDWHILE", "T_FOR", "T_ENDFOR", "T_FOREACH", "T_ENDFOREACH", "T_DECLARE", "T_ENDDECLARE", "T_AS", "T_SWITCH", "T_MATCH", "T_ENDSWITCH", "T_CASE", "T_DEFAULT", "T_BREAK", "T_CONTINUE", "T_GOTO", "T_FUNCTION", "T_FN", "T_CONST", "T_RETURN", "T_TRY", "T_CATCH", "T_FINALLY", "T_USE", "T_INSTEADOF", "T_GLOBAL", "T_STATIC", "T_ABSTRACT", "T_FINAL", "T_PRIVATE", "T_PROTECTED", "T_PUBLIC", "T_READONLY", "T_VAR", "T_UNSET", "T_ISSET", "T_EMPTY", "T_HALT_COMPILER", "T_CLASS", "T_TRAIT", "T_INTERFACE", "T_EXTENDS", "T_IMPLEMENTS", "T_OBJECT_OPERATOR", "T_LIST", "T_ARRAY", "T_CALLABLE", "T_CLASS_C", "T_TRAIT_C", "T_METHOD_C", "T_FUNC_C", "T_LINE", "T_FILE", "T_START_HEREDOC", "T_END_HEREDOC", "T_DOLLAR_OPEN_CURLY_BRACES", "T_CURLY_OPEN", "T_PAAMAYIM_NEKUDOTAYIM", "T_NAMESPACE", "T_NS_C", "T_DIR", "T_NS_SEPARATOR", "T_ELLIPSIS", "T_NAME_FULLY_QUALIFIED", "T_NAME_QUALIFIED", "T_NAME_RELATIVE", "';'", "'{'", "'}'", "'('", "')'", "'\$'", "'`'", "']'", "'\"'", "T_ENUM", "T_NULLSAFE_OBJECT_OPERATOR", "T_ATTRIBUTE"); - protected $tokenToSymbol = array(0, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 56, 164, 168, 161, 55, 168, 168, 159, 160, 53, 50, 8, 51, 52, 54, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 31, 156, 44, 16, 46, 30, 68, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 70, 168, 163, 36, 168, 162, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 157, 35, 158, 58, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43, 45, 47, 48, 49, 57, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 165, 131, 132, 133, 166, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 167); - protected $action = array(700, 670, 671, 672, 673, 674, 286, 675, 676, 677, 713, 714, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 0, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32767, -32767, -32767, -32767, 245, 246, 242, 243, 244, -32766, -32766, 678, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, 1229, 245, 246, 1230, 679, 680, 681, 682, 683, 684, 685, 899, 900, 747, -32766, -32766, -32766, -32766, -32766, -32766, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 716, 739, 717, 718, 719, 720, 708, 709, 710, 738, 711, 712, 697, 698, 699, 701, 702, 703, 741, 742, 743, 744, 745, 746, 875, 704, 705, 706, 707, 737, 728, 726, 727, 723, 724, 1046, 715, 721, 722, 729, 730, 732, 731, 733, 734, 55, 56, 425, 57, 58, 725, 736, 735, 755, 59, 60, -226, 61, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, 337, -32767, -32767, -32767, -32767, 29, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 620, -32766, -32766, -32766, -32766, 62, 63, 1046, -32766, -32766, -32766, 64, 419, 65, 294, 295, 66, 67, 68, 69, 70, 71, 72, 73, 823, 25, 302, 74, 418, 984, 986, 669, 668, 1100, 1101, 1078, 755, 755, 767, 1220, 768, 470, -32766, -32766, -32766, 341, 749, 824, 54, -32767, -32767, -32767, -32767, 98, 99, 100, 101, 102, 220, 221, 222, 362, 876, -32766, 27, -32766, -32766, -32766, -32766, -32766, 1046, 493, 126, 1080, 1079, 1081, 370, 1068, 930, 207, 478, 479, 952, 953, 954, 951, 950, 949, 128, 480, 481, 803, 1106, 1107, 1108, 1109, 1103, 1104, 319, 32, 297, 10, 211, -515, 1110, 1105, 669, 668, 1080, 1079, 1081, 220, 221, 222, 41, 364, 341, 334, 421, 336, 426, -128, -128, -128, 313, 1046, 469, -4, 824, 54, 812, 770, 207, 40, 21, 427, -128, 471, -128, 472, -128, 473, -128, 1046, 428, 220, 221, 222, -32766, 33, 34, 429, 361, 327, 52, 35, 474, -32766, -32766, -32766, 342, 357, 358, 475, 476, 48, 207, 249, 669, 668, 477, 443, 300, 795, 846, 430, 431, 28, -32766, 814, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32767, -32767, -32767, -32767, -32767, 952, 953, 954, 951, 950, 949, 422, 755, 424, 426, 826, 634, -128, -32766, -32766, 469, 824, 54, 288, 812, 1151, 755, 40, 21, 427, 317, 471, 345, 472, 129, 473, 9, 1186, 428, 769, 360, 324, 905, 33, 34, 429, 361, 1046, 415, 35, 474, 944, 1068, 315, 125, 357, 358, 475, 476, -32766, -32766, -32766, 926, 302, 477, 121, 1068, 759, 846, 430, 431, 669, 668, 423, 755, 1152, 809, 1046, 480, 766, -32766, 805, -32766, -32766, -32766, -32766, -261, 127, 347, 436, 841, 341, 1078, 1200, 426, 446, 826, 634, -4, 807, 469, 824, 54, 436, 812, 341, 755, 40, 21, 427, 444, 471, 130, 472, 1068, 473, 346, 767, 428, 768, -211, -211, -211, 33, 34, 429, 361, 308, 1076, 35, 474, -32766, -32766, -32766, 1046, 357, 358, 475, 476, -32766, -32766, -32766, 906, 120, 477, 539, 1068, 795, 846, 430, 431, 436, -32766, 341, -32766, -32766, -32766, 1046, 480, 810, -32766, 925, -32766, -32766, 754, 1080, 1079, 1081, 49, -32766, -32766, -32766, 749, 751, 426, 1201, 826, 634, -211, 30, 469, 669, 668, 436, 812, 341, 75, 40, 21, 427, -32766, 471, 1064, 472, 124, 473, 669, 668, 428, 212, -210, -210, -210, 33, 34, 429, 361, 51, 1186, 35, 474, 755, -32766, -32766, -32766, 357, 358, 475, 476, 213, 824, 54, 221, 222, 477, 20, 581, 795, 846, 430, 431, 220, 221, 222, 755, 222, 247, 78, 79, 80, 81, 341, 207, 517, 103, 104, 105, 752, 307, 131, 637, 1068, 207, 341, 207, 122, 826, 634, -210, 36, 106, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 1112, 307, 346, 436, 214, 341, 824, 54, 426, 123, 250, 129, 134, 106, 469, -32766, 572, 1112, 812, 245, 246, 40, 21, 427, 251, 471, 252, 472, 341, 473, 453, 22, 428, 207, 899, 900, 638, 33, 34, 429, 824, 54, -86, 35, 474, 220, 221, 222, 314, 357, 358, 100, 101, 102, 239, 240, 241, 645, 477, -230, 458, 589, 135, 374, 596, 597, 207, 760, 640, 648, 642, 941, 654, 929, 662, 822, 133, 307, 837, 426, -32766, 106, 749, 43, 44, 469, 45, 442, 46, 812, 826, 634, 40, 21, 427, 47, 471, 50, 472, 53, 473, 132, 608, 428, 302, 604, -280, -32766, 33, 34, 429, 824, 54, 426, 35, 474, 755, 957, -84, 469, 357, 358, 521, 812, 628, 363, 40, 21, 427, 477, 471, 575, 472, -515, 473, 847, 616, 428, -423, -32766, 11, 646, 33, 34, 429, 824, 54, 445, 35, 474, 462, 285, 578, 1111, 357, 358, 593, 369, 848, 594, 290, 826, 634, 477, 0, 0, 532, 0, 0, 325, 0, 0, 0, 0, 0, 651, 0, 0, 0, 322, 326, 0, 0, 0, 426, 0, 0, 0, 0, 323, 469, 316, 318, -516, 812, 862, 634, 40, 21, 427, 0, 471, 0, 472, 0, 473, 1158, 0, 428, 0, -414, 6, 7, 33, 34, 429, 824, 54, 426, 35, 474, 12, 14, 373, 469, 357, 358, -424, 812, 563, 754, 40, 21, 427, 477, 471, 248, 472, 839, 473, 38, 39, 428, 657, 658, 765, 813, 33, 34, 429, 821, 800, 815, 35, 474, 215, 216, 878, 869, 357, 358, 217, 870, 218, 798, 863, 826, 634, 477, 860, 858, 936, 937, 934, 820, 209, 804, 806, 808, 811, 933, 763, 764, 1100, 1101, 935, 659, 78, 335, 426, 359, 1102, 635, 639, 641, 469, 643, 644, 647, 812, 826, 634, 40, 21, 427, 649, 471, 650, 472, 652, 473, 653, 636, 428, 796, 1226, 1228, 762, 33, 34, 429, 215, 216, 845, 35, 474, 761, 217, 844, 218, 357, 358, 1227, 843, 1060, 831, 1048, 842, 1049, 477, 559, 209, 1106, 1107, 1108, 1109, 1103, 1104, 398, 1100, 1101, 829, 942, 867, 1110, 1105, 868, 1102, 457, 1225, 1194, 1192, 1177, 1157, 219, 1190, 1091, 917, 1198, 1188, 0, 826, 634, 24, -433, 26, 31, 37, 42, 76, 77, 210, 287, 292, 293, 308, 309, 310, 311, 339, 356, 416, 0, -227, -226, 16, 17, 18, 393, 454, 461, 463, 467, 553, 625, 1051, 559, 1054, 1106, 1107, 1108, 1109, 1103, 1104, 398, 907, 1116, 1050, 1026, 564, 1110, 1105, 1025, 1093, 1055, 0, 1044, 0, 1057, 1056, 219, 1059, 1058, 1075, 0, 1191, 1176, 1172, 1189, 1090, 1223, 1117, 1171, 600); - protected $actionCheck = array(2, 3, 4, 5, 6, 7, 14, 9, 10, 11, 12, 13, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 0, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 9, 10, 11, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 69, 70, 53, 54, 55, 9, 10, 57, 30, 116, 32, 33, 34, 35, 36, 37, 38, 80, 69, 70, 83, 71, 72, 73, 74, 75, 76, 77, 135, 136, 80, 33, 34, 35, 36, 37, 38, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 31, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 13, 134, 135, 136, 137, 138, 139, 140, 141, 142, 3, 4, 5, 6, 7, 148, 149, 150, 82, 12, 13, 160, 15, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 8, 44, 45, 46, 47, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 80, 33, 34, 35, 36, 50, 51, 13, 9, 10, 11, 56, 128, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 1, 70, 71, 72, 73, 59, 60, 37, 38, 78, 79, 80, 82, 82, 106, 85, 108, 86, 9, 10, 11, 161, 80, 1, 2, 44, 45, 46, 47, 48, 49, 50, 51, 52, 9, 10, 11, 106, 156, 30, 8, 32, 33, 34, 35, 36, 13, 116, 8, 153, 154, 155, 8, 122, 158, 30, 125, 126, 116, 117, 118, 119, 120, 121, 31, 134, 135, 156, 137, 138, 139, 140, 141, 142, 143, 145, 146, 8, 8, 133, 149, 150, 37, 38, 153, 154, 155, 9, 10, 11, 159, 8, 161, 162, 8, 164, 74, 75, 76, 77, 8, 13, 80, 0, 1, 2, 84, 158, 30, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 13, 98, 9, 10, 11, 9, 103, 104, 105, 106, 8, 70, 109, 110, 9, 10, 11, 8, 115, 116, 117, 118, 70, 30, 31, 37, 38, 124, 31, 8, 127, 128, 129, 130, 8, 30, 156, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 116, 117, 118, 119, 120, 121, 8, 82, 8, 74, 156, 157, 158, 33, 34, 80, 1, 2, 8, 84, 163, 82, 87, 88, 89, 133, 91, 70, 93, 152, 95, 108, 82, 98, 158, 8, 113, 160, 103, 104, 105, 106, 13, 108, 109, 110, 123, 122, 113, 157, 115, 116, 117, 118, 9, 10, 11, 156, 71, 124, 157, 122, 127, 128, 129, 130, 37, 38, 8, 82, 160, 156, 13, 134, 156, 30, 156, 32, 33, 34, 35, 158, 157, 148, 159, 122, 161, 80, 1, 74, 133, 156, 157, 158, 156, 80, 1, 2, 159, 84, 161, 82, 87, 88, 89, 157, 91, 157, 93, 122, 95, 161, 106, 98, 108, 100, 101, 102, 103, 104, 105, 106, 159, 116, 109, 110, 9, 10, 11, 13, 115, 116, 117, 118, 9, 10, 11, 160, 16, 124, 81, 122, 127, 128, 129, 130, 159, 30, 161, 32, 33, 34, 13, 134, 156, 30, 156, 32, 33, 153, 153, 154, 155, 70, 9, 10, 11, 80, 80, 74, 160, 156, 157, 158, 14, 80, 37, 38, 159, 84, 161, 152, 87, 88, 89, 30, 91, 160, 93, 14, 95, 37, 38, 98, 16, 100, 101, 102, 103, 104, 105, 106, 70, 82, 109, 110, 82, 33, 34, 35, 115, 116, 117, 118, 16, 1, 2, 10, 11, 124, 160, 85, 127, 128, 129, 130, 9, 10, 11, 82, 11, 14, 157, 9, 10, 11, 161, 30, 85, 53, 54, 55, 154, 57, 157, 31, 122, 30, 161, 30, 157, 156, 157, 158, 30, 69, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 144, 57, 161, 159, 16, 161, 1, 2, 74, 157, 16, 152, 157, 69, 80, 116, 161, 144, 84, 69, 70, 87, 88, 89, 16, 91, 16, 93, 161, 95, 75, 76, 98, 30, 135, 136, 31, 103, 104, 105, 1, 2, 31, 109, 110, 9, 10, 11, 31, 115, 116, 50, 51, 52, 50, 51, 52, 31, 124, 160, 75, 76, 101, 102, 111, 112, 30, 156, 157, 31, 31, 156, 157, 156, 157, 31, 31, 57, 38, 74, 33, 69, 80, 70, 70, 80, 70, 89, 70, 84, 156, 157, 87, 88, 89, 70, 91, 70, 93, 70, 95, 70, 96, 98, 71, 77, 82, 85, 103, 104, 105, 1, 2, 74, 109, 110, 82, 82, 97, 80, 115, 116, 85, 84, 92, 106, 87, 88, 89, 124, 91, 90, 93, 133, 95, 128, 94, 98, 147, 116, 97, 31, 103, 104, 105, 1, 2, 97, 109, 110, 97, 97, 100, 144, 115, 116, 100, 106, 128, 113, 161, 156, 157, 124, -1, -1, 151, -1, -1, 114, -1, -1, -1, -1, -1, 31, -1, -1, -1, 131, 131, -1, -1, -1, 74, -1, -1, -1, -1, 132, 80, 133, 133, 133, 84, 156, 157, 87, 88, 89, -1, 91, -1, 93, -1, 95, 144, -1, 98, -1, 147, 147, 147, 103, 104, 105, 1, 2, 74, 109, 110, 147, 147, 147, 80, 115, 116, 147, 84, 151, 153, 87, 88, 89, 124, 91, 31, 93, 152, 95, 156, 156, 98, 156, 156, 156, 156, 103, 104, 105, 156, 156, 156, 109, 110, 50, 51, 156, 156, 115, 116, 56, 156, 58, 156, 156, 156, 157, 124, 156, 156, 156, 156, 156, 156, 70, 156, 156, 156, 156, 156, 156, 156, 78, 79, 156, 158, 157, 157, 74, 157, 86, 157, 157, 157, 80, 157, 157, 157, 84, 156, 157, 87, 88, 89, 157, 91, 157, 93, 157, 95, 157, 157, 98, 158, 158, 158, 158, 103, 104, 105, 50, 51, 158, 109, 110, 158, 56, 158, 58, 115, 116, 158, 158, 158, 158, 158, 158, 158, 124, 135, 70, 137, 138, 139, 140, 141, 142, 143, 78, 79, 158, 158, 158, 149, 150, 158, 86, 158, 158, 158, 158, 158, 164, 159, 158, 158, 158, 158, 158, -1, 156, 157, 159, 162, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, -1, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 135, 160, 137, 138, 139, 140, 141, 142, 143, 160, 160, 160, 160, 160, 149, 150, 160, 160, 163, -1, 162, -1, 163, 163, 159, 163, 163, 163, -1, 163, 163, 163, 163, 163, 163, 163, 163, 163); - protected $actionBase = array(0, 229, 310, 390, 470, 103, 325, 325, 784, -2, -2, 149, -2, -2, -2, 660, 765, 799, 765, 589, 694, 870, 870, 870, 252, 404, 404, 404, 514, 177, 177, 918, 434, 118, 295, 313, 240, 491, 491, 491, 491, 138, 138, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 89, 206, 773, 550, 535, 775, 776, 777, 912, 709, 913, 856, 857, 700, 858, 859, 862, 863, 864, 855, 865, 935, 866, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 322, 592, 285, 319, 232, 44, 691, 691, 691, 691, 691, 691, 691, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 582, 530, 530, 530, 594, 860, 658, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 500, -21, -21, 492, 702, 420, 355, 216, 549, 151, 26, 26, 331, 331, 331, 331, 331, 46, 46, 5, 5, 5, 5, 153, 188, 188, 188, 188, 121, 121, 121, 121, 314, 314, 394, 394, 362, 300, 298, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 67, 656, 656, 659, 659, 522, 554, 554, 554, 554, 679, -59, -59, 381, 462, 462, 462, 528, 717, 854, 382, 382, 382, 382, 382, 382, 561, 561, 561, -3, -3, -3, 692, 115, 137, 115, 137, 678, 732, 450, 732, 338, 677, -15, 510, 810, 468, 707, 850, 711, 853, 572, 735, 267, 529, 654, 674, 463, 529, 529, 529, 529, 654, 610, 640, 608, 463, 529, 463, 718, 323, 496, 89, 570, 507, 675, 778, 293, 670, 780, 290, 373, 332, 566, 278, 435, 733, 781, 914, 917, 385, 715, 675, 675, 675, 352, 511, 278, -8, 605, 605, 605, 605, 156, 605, 605, 605, 605, 251, 276, 375, 402, 779, 657, 657, 690, 872, 869, 869, 657, 689, 657, 690, 874, 874, 874, 874, 657, 657, 657, 657, 869, 869, 869, 688, 869, 239, 703, 704, 704, 874, 742, 743, 657, 657, 712, 869, 869, 869, 712, 695, 874, 701, 741, 277, 869, 874, 672, 689, 672, 657, 701, 672, 689, 689, 672, 22, 666, 668, 873, 875, 887, 790, 662, 685, 879, 880, 876, 878, 871, 699, 744, 745, 497, 669, 671, 673, 680, 719, 682, 713, 674, 667, 667, 667, 655, 720, 655, 667, 667, 667, 667, 667, 667, 667, 667, 916, 646, 731, 714, 653, 749, 553, 573, 791, 664, 811, 900, 893, 867, 919, 881, 898, 655, 920, 739, 247, 643, 882, 783, 786, 655, 883, 655, 792, 655, 902, 812, 686, 813, 814, 667, 910, 921, 923, 924, 925, 927, 928, 929, 930, 684, 931, 750, 696, 894, 299, 877, 718, 729, 705, 788, 751, 820, 328, 932, 823, 655, 655, 794, 785, 655, 795, 756, 740, 890, 757, 895, 933, 664, 708, 896, 655, 706, 825, 934, 328, 681, 683, 888, 661, 761, 886, 911, 885, 796, 649, 663, 829, 830, 831, 693, 763, 891, 892, 889, 764, 803, 665, 805, 697, 832, 807, 884, 768, 833, 834, 899, 676, 730, 710, 698, 687, 809, 835, 897, 769, 770, 771, 848, 772, 849, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 138, 138, 138, -2, -2, -2, -2, 0, 0, -2, 0, 0, 0, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 0, 0, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, -21, -21, -21, -21, 599, -21, -21, -21, -21, -21, -21, -21, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, -21, 599, 599, 599, -21, 382, -21, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 599, 0, 0, 599, -21, 599, -21, 599, -21, -21, 599, 599, 599, 599, 599, 599, 599, -21, -21, -21, -21, -21, -21, 0, 561, 561, 561, 561, -21, -21, -21, -21, 382, 382, 382, 382, 382, 382, 259, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 561, 561, -3, -3, 382, 382, 382, 382, 382, 259, 382, 382, 463, 689, 689, 689, 137, 137, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 463, 0, 463, 0, 382, 463, 689, 463, 657, 137, 689, 689, 463, 869, 616, 616, 616, 616, 328, 278, 0, 0, 689, 689, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, 0, 869, 0, 0, 0, 0, 0, 667, 247, 0, 705, 335, 0, 0, 0, 0, 0, 0, 705, 335, 347, 347, 0, 684, 667, 667, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328); - protected $actionDefault = array(3, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 544, 544, 499, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 299, 299, 299, 32767, 32767, 32767, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 32767, 32767, 32767, 32767, 32767, 32767, 383, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 389, 549, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 364, 365, 367, 368, 298, 552, 533, 247, 390, 548, 297, 249, 327, 503, 32767, 32767, 32767, 329, 122, 258, 203, 502, 125, 296, 234, 382, 384, 328, 303, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 302, 458, 361, 360, 359, 460, 32767, 459, 496, 496, 499, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 325, 487, 486, 326, 456, 330, 457, 333, 461, 464, 331, 332, 349, 350, 347, 348, 351, 462, 463, 480, 481, 478, 479, 301, 352, 353, 354, 355, 482, 483, 484, 485, 32767, 32767, 543, 543, 32767, 32767, 282, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 340, 341, 471, 472, 32767, 238, 238, 238, 238, 283, 238, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 335, 336, 334, 466, 467, 465, 432, 32767, 32767, 32767, 434, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 504, 32767, 32767, 32767, 32767, 32767, 517, 421, 171, 32767, 413, 32767, 171, 171, 171, 171, 32767, 222, 224, 167, 32767, 171, 32767, 490, 32767, 32767, 32767, 32767, 522, 345, 32767, 32767, 116, 32767, 32767, 32767, 559, 32767, 517, 32767, 116, 32767, 32767, 32767, 32767, 358, 337, 338, 339, 32767, 32767, 521, 515, 474, 475, 476, 477, 32767, 468, 469, 470, 473, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 429, 435, 435, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 520, 519, 32767, 414, 498, 188, 186, 186, 32767, 208, 208, 32767, 32767, 190, 491, 510, 32767, 190, 173, 32767, 400, 175, 498, 32767, 32767, 240, 32767, 240, 32767, 400, 240, 32767, 32767, 240, 32767, 415, 439, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 379, 380, 493, 506, 32767, 507, 32767, 413, 343, 344, 346, 322, 32767, 324, 369, 370, 371, 372, 373, 374, 375, 377, 32767, 419, 32767, 422, 32767, 32767, 32767, 257, 32767, 557, 32767, 32767, 306, 557, 32767, 32767, 32767, 551, 32767, 32767, 300, 32767, 32767, 32767, 32767, 253, 32767, 169, 32767, 541, 32767, 558, 32767, 515, 32767, 342, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 516, 32767, 32767, 32767, 32767, 229, 32767, 452, 32767, 116, 32767, 32767, 32767, 189, 32767, 32767, 304, 248, 32767, 32767, 550, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 114, 32767, 170, 32767, 32767, 32767, 191, 32767, 32767, 515, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 295, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 515, 32767, 32767, 233, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 415, 32767, 276, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 127, 127, 3, 127, 127, 260, 3, 260, 127, 260, 260, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 216, 219, 208, 208, 164, 127, 127, 268); - protected $goto = array(166, 140, 140, 140, 166, 187, 168, 144, 147, 141, 142, 143, 149, 163, 163, 163, 163, 144, 144, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 138, 159, 160, 161, 162, 184, 139, 185, 494, 495, 377, 496, 500, 501, 502, 503, 504, 505, 506, 507, 970, 164, 145, 146, 148, 171, 176, 186, 203, 253, 256, 258, 260, 263, 264, 265, 266, 267, 268, 269, 277, 278, 279, 280, 303, 304, 328, 329, 330, 394, 395, 396, 543, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 150, 151, 152, 167, 153, 169, 154, 204, 170, 155, 156, 157, 205, 158, 136, 621, 561, 757, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 1113, 629, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 758, 520, 531, 509, 656, 556, 1183, 750, 509, 592, 786, 1183, 888, 612, 613, 884, 617, 618, 624, 626, 631, 633, 817, 855, 855, 855, 855, 850, 856, 174, 891, 891, 1205, 1205, 177, 178, 179, 401, 402, 403, 404, 173, 202, 206, 208, 257, 259, 261, 262, 270, 271, 272, 273, 274, 275, 281, 282, 283, 284, 305, 306, 331, 332, 333, 406, 407, 408, 409, 175, 180, 254, 255, 181, 182, 183, 498, 498, 498, 498, 498, 498, 861, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 510, 586, 538, 601, 602, 510, 545, 546, 547, 548, 549, 550, 551, 552, 554, 587, 1209, 560, 350, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 400, 607, 537, 537, 569, 533, 909, 535, 535, 497, 499, 525, 541, 570, 573, 584, 591, 298, 296, 296, 296, 298, 289, 299, 611, 378, 511, 614, 595, 947, 375, 511, 437, 437, 437, 437, 437, 437, 1163, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 1077, 948, 338, 1175, 321, 1077, 898, 898, 898, 898, 606, 898, 898, 1217, 1217, 1202, 753, 576, 605, 756, 1077, 1077, 1077, 1077, 1077, 1077, 1069, 384, 384, 384, 391, 1217, 877, 859, 857, 859, 655, 466, 512, 886, 881, 753, 384, 753, 384, 968, 384, 895, 385, 588, 353, 414, 384, 1231, 1019, 542, 1197, 1197, 1197, 568, 1094, 386, 386, 386, 904, 915, 515, 1029, 19, 15, 372, 389, 915, 940, 448, 450, 632, 340, 1216, 1216, 1114, 615, 938, 840, 555, 775, 386, 913, 1070, 1073, 1074, 399, 1069, 1182, 660, 23, 1216, 773, 1182, 544, 603, 1066, 1219, 1071, 1174, 1071, 519, 1199, 1199, 1199, 1089, 1088, 1072, 343, 523, 534, 519, 519, 772, 351, 352, 13, 579, 583, 627, 1061, 388, 782, 562, 771, 515, 783, 1181, 3, 4, 918, 956, 865, 451, 574, 1160, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 514, 529, 0, 0, 0, 0, 514, 0, 529, 0, 0, 0, 0, 610, 513, 516, 439, 440, 1067, 619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 780, 1224, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 778, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 301); - protected $gotoCheck = array(43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 57, 69, 15, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 128, 9, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 16, 102, 32, 69, 32, 32, 120, 6, 69, 32, 29, 120, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 50, 69, 69, 69, 69, 69, 69, 27, 77, 77, 77, 77, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 119, 119, 119, 119, 119, 119, 33, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 67, 110, 67, 67, 119, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 142, 57, 72, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 51, 51, 51, 51, 51, 51, 84, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 5, 5, 5, 5, 5, 5, 5, 63, 46, 124, 63, 129, 98, 63, 124, 57, 57, 57, 57, 57, 57, 133, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 98, 127, 82, 127, 57, 57, 57, 57, 57, 49, 57, 57, 144, 144, 140, 11, 40, 40, 14, 57, 57, 57, 57, 57, 57, 82, 13, 13, 13, 48, 144, 14, 14, 14, 14, 14, 57, 14, 14, 14, 11, 13, 11, 13, 102, 13, 79, 11, 70, 70, 70, 13, 13, 103, 2, 9, 9, 9, 2, 34, 125, 125, 125, 81, 13, 13, 34, 34, 34, 34, 17, 13, 8, 8, 8, 8, 18, 143, 143, 8, 8, 8, 9, 34, 25, 125, 85, 82, 82, 82, 125, 82, 121, 74, 34, 143, 24, 121, 47, 34, 116, 143, 82, 82, 82, 47, 121, 121, 121, 126, 126, 82, 58, 58, 58, 47, 47, 23, 72, 72, 58, 62, 62, 62, 114, 12, 23, 12, 23, 13, 26, 121, 30, 30, 86, 100, 71, 65, 66, 132, 109, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, 9, -1, -1, -1, -1, 9, -1, 9, -1, -1, -1, -1, 13, 9, 9, 9, 9, 13, 13, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, 9, -1, -1, -1, -1, -1, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 5); - protected $gotoBase = array(0, 0, -172, 0, 0, 353, 201, 0, 477, 149, 0, 110, 195, 117, 426, 112, 203, 140, 171, 0, 0, 0, 0, 168, 164, 157, 119, 27, 0, 205, -118, 0, -428, 266, 51, 0, 0, 0, 0, 0, 388, 0, 0, -24, 0, 0, 345, 484, 146, 133, 209, 75, 0, 0, 0, 0, 0, 107, 161, 0, 0, 0, 222, -77, 0, 106, 97, -343, 0, -94, 135, 123, -129, 0, 129, 0, 0, -50, 0, 143, 0, 159, 64, 0, 338, 132, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 121, 0, 165, 156, 0, 0, 0, 0, 0, 87, 273, 259, 0, 0, 114, 0, 150, 0, 0, -5, -91, 200, 0, 0, 84, 154, 202, 77, -48, 178, 0, 0, 93, 187, 0, 0, 0, 0, 0, 0, 136, 0, 286, 167, 102, 0, 0); - protected $gotoDefault = array(-32768, 468, 664, 2, 665, 835, 740, 748, 598, 482, 630, 582, 380, 1193, 792, 793, 794, 381, 368, 483, 379, 410, 405, 781, 774, 776, 784, 172, 411, 787, 1, 789, 518, 825, 1020, 365, 797, 366, 590, 799, 527, 801, 802, 137, 382, 383, 528, 484, 390, 577, 816, 276, 387, 818, 367, 819, 828, 371, 465, 455, 460, 530, 557, 609, 432, 447, 571, 565, 536, 1086, 566, 864, 349, 872, 661, 880, 883, 485, 558, 894, 452, 902, 1099, 397, 908, 914, 919, 291, 922, 417, 412, 585, 927, 928, 5, 932, 622, 623, 8, 312, 955, 599, 969, 420, 1039, 1041, 486, 487, 522, 459, 508, 526, 488, 1062, 441, 413, 1065, 433, 489, 490, 434, 435, 1083, 355, 1168, 354, 449, 320, 1155, 580, 1118, 456, 1208, 1164, 348, 491, 492, 376, 1187, 392, 1203, 438, 1210, 1218, 344, 540, 567); - protected $ruleToNonTerminal = array(0, 1, 3, 3, 2, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8, 9, 10, 11, 11, 12, 12, 13, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 18, 18, 19, 19, 21, 21, 17, 17, 22, 22, 23, 23, 24, 24, 25, 25, 20, 20, 26, 28, 28, 29, 30, 30, 32, 31, 31, 31, 31, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 14, 14, 54, 54, 56, 55, 55, 48, 48, 58, 58, 59, 59, 60, 60, 61, 61, 15, 16, 16, 16, 64, 64, 64, 65, 65, 68, 68, 66, 66, 70, 70, 41, 41, 50, 50, 53, 53, 53, 52, 52, 71, 42, 42, 42, 42, 72, 72, 73, 73, 74, 74, 39, 39, 35, 35, 75, 37, 37, 76, 36, 36, 38, 38, 49, 49, 49, 62, 62, 78, 78, 79, 79, 81, 81, 81, 80, 80, 63, 63, 82, 82, 82, 83, 83, 84, 84, 84, 44, 44, 85, 85, 85, 45, 45, 86, 86, 87, 87, 67, 88, 88, 88, 88, 93, 93, 94, 94, 95, 95, 95, 95, 95, 96, 97, 97, 92, 92, 89, 89, 91, 91, 99, 99, 98, 98, 98, 98, 98, 98, 90, 90, 101, 100, 100, 46, 46, 40, 40, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 34, 34, 47, 47, 106, 106, 107, 107, 107, 107, 113, 102, 102, 109, 109, 115, 115, 116, 117, 118, 118, 118, 118, 118, 118, 118, 69, 69, 57, 57, 57, 57, 103, 103, 122, 122, 119, 119, 123, 123, 123, 123, 104, 104, 104, 108, 108, 108, 114, 114, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 27, 27, 27, 27, 27, 27, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 112, 112, 105, 105, 105, 105, 129, 129, 132, 132, 131, 131, 133, 133, 51, 51, 51, 51, 135, 135, 134, 134, 134, 134, 134, 136, 136, 121, 121, 124, 124, 120, 120, 138, 137, 137, 137, 137, 125, 125, 125, 125, 111, 111, 126, 126, 126, 126, 77, 139, 139, 140, 140, 140, 110, 110, 141, 141, 142, 142, 142, 142, 142, 127, 127, 127, 127, 144, 145, 143, 143, 143, 143, 143, 143, 143, 146, 146, 146); - protected $ruleToLength = array(1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 4, 3, 4, 2, 3, 1, 1, 7, 6, 3, 1, 3, 1, 3, 1, 1, 3, 1, 3, 1, 2, 3, 1, 3, 3, 1, 3, 2, 0, 1, 1, 1, 1, 1, 3, 5, 8, 3, 5, 9, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 1, 2, 2, 5, 7, 9, 5, 6, 3, 3, 2, 2, 1, 1, 1, 0, 2, 8, 0, 4, 1, 3, 0, 1, 0, 1, 0, 1, 1, 1, 10, 7, 6, 5, 1, 2, 2, 0, 2, 0, 2, 0, 2, 1, 3, 1, 4, 1, 4, 1, 1, 4, 1, 3, 3, 3, 4, 4, 5, 0, 2, 4, 3, 1, 1, 1, 4, 0, 2, 3, 0, 2, 4, 0, 2, 0, 3, 1, 2, 1, 1, 0, 1, 3, 4, 6, 1, 1, 1, 0, 1, 0, 2, 2, 3, 3, 1, 3, 1, 2, 2, 3, 1, 1, 2, 4, 3, 1, 1, 3, 2, 0, 1, 3, 3, 9, 3, 1, 3, 0, 2, 4, 5, 4, 4, 4, 3, 1, 1, 1, 3, 1, 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 3, 3, 1, 0, 1, 1, 3, 3, 4, 4, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 5, 4, 3, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 3, 2, 1, 2, 10, 11, 3, 3, 2, 4, 4, 3, 4, 4, 4, 4, 7, 3, 2, 0, 4, 1, 3, 2, 1, 2, 2, 4, 6, 2, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 4, 4, 0, 2, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 1, 3, 1, 4, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 4, 4, 3, 1, 3, 1, 1, 3, 3, 0, 2, 0, 1, 3, 1, 3, 1, 1, 1, 1, 1, 6, 4, 3, 4, 2, 4, 4, 1, 3, 1, 2, 1, 1, 4, 1, 1, 3, 6, 4, 4, 4, 4, 1, 4, 0, 1, 1, 3, 1, 1, 4, 3, 1, 1, 1, 0, 0, 2, 3, 1, 3, 1, 4, 2, 2, 2, 2, 1, 2, 1, 1, 1, 4, 3, 3, 3, 6, 3, 1, 1, 1); - protected function initReduceCallbacks() - { - $this->reduceCallbacks = [0 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 1 => function ($stackPos) { +class Php7 extends \PHPUnit\PhpParser\ParserAbstract +{ + public const YYERRTOK = 256; + public const T_THROW = 257; + public const T_INCLUDE = 258; + public const T_INCLUDE_ONCE = 259; + public const T_EVAL = 260; + public const T_REQUIRE = 261; + public const T_REQUIRE_ONCE = 262; + public const T_LOGICAL_OR = 263; + public const T_LOGICAL_XOR = 264; + public const T_LOGICAL_AND = 265; + public const T_PRINT = 266; + public const T_YIELD = 267; + public const T_DOUBLE_ARROW = 268; + public const T_YIELD_FROM = 269; + public const T_PLUS_EQUAL = 270; + public const T_MINUS_EQUAL = 271; + public const T_MUL_EQUAL = 272; + public const T_DIV_EQUAL = 273; + public const T_CONCAT_EQUAL = 274; + public const T_MOD_EQUAL = 275; + public const T_AND_EQUAL = 276; + public const T_OR_EQUAL = 277; + public const T_XOR_EQUAL = 278; + public const T_SL_EQUAL = 279; + public const T_SR_EQUAL = 280; + public const T_POW_EQUAL = 281; + public const T_COALESCE_EQUAL = 282; + public const T_COALESCE = 283; + public const T_BOOLEAN_OR = 284; + public const T_BOOLEAN_AND = 285; + public const T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG = 286; + public const T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG = 287; + public const T_IS_EQUAL = 288; + public const T_IS_NOT_EQUAL = 289; + public const T_IS_IDENTICAL = 290; + public const T_IS_NOT_IDENTICAL = 291; + public const T_SPACESHIP = 292; + public const T_IS_SMALLER_OR_EQUAL = 293; + public const T_IS_GREATER_OR_EQUAL = 294; + public const T_SL = 295; + public const T_SR = 296; + public const T_INSTANCEOF = 297; + public const T_INC = 298; + public const T_DEC = 299; + public const T_INT_CAST = 300; + public const T_DOUBLE_CAST = 301; + public const T_STRING_CAST = 302; + public const T_ARRAY_CAST = 303; + public const T_OBJECT_CAST = 304; + public const T_BOOL_CAST = 305; + public const T_UNSET_CAST = 306; + public const T_POW = 307; + public const T_NEW = 308; + public const T_CLONE = 309; + public const T_EXIT = 310; + public const T_IF = 311; + public const T_ELSEIF = 312; + public const T_ELSE = 313; + public const T_ENDIF = 314; + public const T_LNUMBER = 315; + public const T_DNUMBER = 316; + public const T_STRING = 317; + public const T_STRING_VARNAME = 318; + public const T_VARIABLE = 319; + public const T_NUM_STRING = 320; + public const T_INLINE_HTML = 321; + public const T_ENCAPSED_AND_WHITESPACE = 322; + public const T_CONSTANT_ENCAPSED_STRING = 323; + public const T_ECHO = 324; + public const T_DO = 325; + public const T_WHILE = 326; + public const T_ENDWHILE = 327; + public const T_FOR = 328; + public const T_ENDFOR = 329; + public const T_FOREACH = 330; + public const T_ENDFOREACH = 331; + public const T_DECLARE = 332; + public const T_ENDDECLARE = 333; + public const T_AS = 334; + public const T_SWITCH = 335; + public const T_MATCH = 336; + public const T_ENDSWITCH = 337; + public const T_CASE = 338; + public const T_DEFAULT = 339; + public const T_BREAK = 340; + public const T_CONTINUE = 341; + public const T_GOTO = 342; + public const T_FUNCTION = 343; + public const T_FN = 344; + public const T_CONST = 345; + public const T_RETURN = 346; + public const T_TRY = 347; + public const T_CATCH = 348; + public const T_FINALLY = 349; + public const T_USE = 350; + public const T_INSTEADOF = 351; + public const T_GLOBAL = 352; + public const T_STATIC = 353; + public const T_ABSTRACT = 354; + public const T_FINAL = 355; + public const T_PRIVATE = 356; + public const T_PROTECTED = 357; + public const T_PUBLIC = 358; + public const T_READONLY = 359; + public const T_VAR = 360; + public const T_UNSET = 361; + public const T_ISSET = 362; + public const T_EMPTY = 363; + public const T_HALT_COMPILER = 364; + public const T_CLASS = 365; + public const T_TRAIT = 366; + public const T_INTERFACE = 367; + public const T_ENUM = 368; + public const T_EXTENDS = 369; + public const T_IMPLEMENTS = 370; + public const T_OBJECT_OPERATOR = 371; + public const T_NULLSAFE_OBJECT_OPERATOR = 372; + public const T_LIST = 373; + public const T_ARRAY = 374; + public const T_CALLABLE = 375; + public const T_CLASS_C = 376; + public const T_TRAIT_C = 377; + public const T_METHOD_C = 378; + public const T_FUNC_C = 379; + public const T_LINE = 380; + public const T_FILE = 381; + public const T_START_HEREDOC = 382; + public const T_END_HEREDOC = 383; + public const T_DOLLAR_OPEN_CURLY_BRACES = 384; + public const T_CURLY_OPEN = 385; + public const T_PAAMAYIM_NEKUDOTAYIM = 386; + public const T_NAMESPACE = 387; + public const T_NS_C = 388; + public const T_DIR = 389; + public const T_NS_SEPARATOR = 390; + public const T_ELLIPSIS = 391; + public const T_NAME_FULLY_QUALIFIED = 392; + public const T_NAME_QUALIFIED = 393; + public const T_NAME_RELATIVE = 394; + public const T_ATTRIBUTE = 395; + protected int $tokenToSymbolMapSize = 396; + protected int $actionTableSize = 1258; + protected int $gotoTableSize = 567; + protected int $invalidSymbol = 168; + protected int $errorSymbol = 1; + protected int $defaultAction = -32766; + protected int $unexpectedTokenRule = 32767; + protected int $YY2TBLSTATE = 435; + protected int $numNonLeafStates = 739; + protected array $symbolToName = array("EOF", "error", "T_THROW", "T_INCLUDE", "T_INCLUDE_ONCE", "T_EVAL", "T_REQUIRE", "T_REQUIRE_ONCE", "','", "T_LOGICAL_OR", "T_LOGICAL_XOR", "T_LOGICAL_AND", "T_PRINT", "T_YIELD", "T_DOUBLE_ARROW", "T_YIELD_FROM", "'='", "T_PLUS_EQUAL", "T_MINUS_EQUAL", "T_MUL_EQUAL", "T_DIV_EQUAL", "T_CONCAT_EQUAL", "T_MOD_EQUAL", "T_AND_EQUAL", "T_OR_EQUAL", "T_XOR_EQUAL", "T_SL_EQUAL", "T_SR_EQUAL", "T_POW_EQUAL", "T_COALESCE_EQUAL", "'?'", "':'", "T_COALESCE", "T_BOOLEAN_OR", "T_BOOLEAN_AND", "'|'", "'^'", "T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG", "T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG", "T_IS_EQUAL", "T_IS_NOT_EQUAL", "T_IS_IDENTICAL", "T_IS_NOT_IDENTICAL", "T_SPACESHIP", "'<'", "T_IS_SMALLER_OR_EQUAL", "'>'", "T_IS_GREATER_OR_EQUAL", "T_SL", "T_SR", "'+'", "'-'", "'.'", "'*'", "'/'", "'%'", "'!'", "T_INSTANCEOF", "'~'", "T_INC", "T_DEC", "T_INT_CAST", "T_DOUBLE_CAST", "T_STRING_CAST", "T_ARRAY_CAST", "T_OBJECT_CAST", "T_BOOL_CAST", "T_UNSET_CAST", "'@'", "T_POW", "'['", "T_NEW", "T_CLONE", "T_EXIT", "T_IF", "T_ELSEIF", "T_ELSE", "T_ENDIF", "T_LNUMBER", "T_DNUMBER", "T_STRING", "T_STRING_VARNAME", "T_VARIABLE", "T_NUM_STRING", "T_INLINE_HTML", "T_ENCAPSED_AND_WHITESPACE", "T_CONSTANT_ENCAPSED_STRING", "T_ECHO", "T_DO", "T_WHILE", "T_ENDWHILE", "T_FOR", "T_ENDFOR", "T_FOREACH", "T_ENDFOREACH", "T_DECLARE", "T_ENDDECLARE", "T_AS", "T_SWITCH", "T_MATCH", "T_ENDSWITCH", "T_CASE", "T_DEFAULT", "T_BREAK", "T_CONTINUE", "T_GOTO", "T_FUNCTION", "T_FN", "T_CONST", "T_RETURN", "T_TRY", "T_CATCH", "T_FINALLY", "T_USE", "T_INSTEADOF", "T_GLOBAL", "T_STATIC", "T_ABSTRACT", "T_FINAL", "T_PRIVATE", "T_PROTECTED", "T_PUBLIC", "T_READONLY", "T_VAR", "T_UNSET", "T_ISSET", "T_EMPTY", "T_HALT_COMPILER", "T_CLASS", "T_TRAIT", "T_INTERFACE", "T_ENUM", "T_EXTENDS", "T_IMPLEMENTS", "T_OBJECT_OPERATOR", "T_NULLSAFE_OBJECT_OPERATOR", "T_LIST", "T_ARRAY", "T_CALLABLE", "T_CLASS_C", "T_TRAIT_C", "T_METHOD_C", "T_FUNC_C", "T_LINE", "T_FILE", "T_START_HEREDOC", "T_END_HEREDOC", "T_DOLLAR_OPEN_CURLY_BRACES", "T_CURLY_OPEN", "T_PAAMAYIM_NEKUDOTAYIM", "T_NAMESPACE", "T_NS_C", "T_DIR", "T_NS_SEPARATOR", "T_ELLIPSIS", "T_NAME_FULLY_QUALIFIED", "T_NAME_QUALIFIED", "T_NAME_RELATIVE", "T_ATTRIBUTE", "';'", "']'", "'('", "')'", "'{'", "'}'", "'`'", "'\"'", "'\$'"); + protected array $tokenToSymbol = array(0, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 56, 166, 168, 167, 55, 168, 168, 161, 162, 53, 50, 8, 51, 52, 54, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 31, 159, 44, 16, 46, 30, 68, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 70, 168, 160, 36, 168, 165, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 163, 35, 164, 58, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43, 45, 47, 48, 49, 57, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158); + protected array $action = array(133, 134, 135, 582, 136, 137, 0, 751, 752, 753, 138, 38, -32766, -32766, -32766, 151, -32766, -32766, -32766, -32767, -32767, -32767, -32767, 102, 103, 104, 105, 106, 1112, 1113, 1114, 1111, 1110, 1109, 1115, 745, 744, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32767, -32767, -32767, -32767, -32767, 1245, 837, -32766, 1322, 754, -32766, -32766, -32766, -32766, -594, -32766, -32766, -32766, 104, 105, 106, -594, 1306, 265, 139, 404, 758, 759, 760, 761, 990, -32766, 429, -32766, -32766, -16, -32766, 242, 1027, 815, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 791, 583, 792, 793, 794, 795, 783, 784, 345, 346, 786, 787, 772, 773, 774, 776, 777, 778, 356, 818, 819, 820, 821, 822, 584, 779, 780, 585, 586, -32766, 803, 801, 802, 814, 798, 799, 835, 826, 587, 588, 797, 589, 590, 591, 592, 593, 594, 826, 459, 460, 461, 1036, 800, 595, 596, 941, 140, 2, 133, 134, 135, 582, 136, 137, 1060, 751, 752, 753, 138, 38, -328, -110, -110, 1326, 290, 23, -110, -32766, -32766, -32766, 1325, 35, -110, 1112, 1113, 1114, 1111, 1110, 1109, 1115, 612, -32766, 129, 745, 744, 107, 108, 109, -32766, 274, -32766, -32766, -32766, -32766, -32766, -32766, -32766, 828, 991, -194, 145, 110, 298, 754, 836, 75, -32766, -32766, -32766, 1351, 142, 326, 1352, -594, 326, -594, 254, 265, 139, 404, 758, 759, 760, 761, 82, -272, 429, -32766, 326, -32766, -32766, -32766, -32766, 815, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 791, 583, 792, 793, 794, 795, 783, 784, 345, 346, 786, 787, 772, 773, 774, 776, 777, 778, 356, 818, 819, 820, 821, 822, 584, 779, 780, 585, 586, 830, 803, 801, 802, 814, 798, 799, 712, 309, 587, 588, 797, 589, 590, 591, 592, 593, 594, -78, 83, 84, 85, -85, 800, 595, 596, 311, 149, 775, 746, 747, 748, 749, 750, 725, 751, 752, 753, 788, 789, 37, -328, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 323, 274, 482, -32766, -32766, -32766, -58, -32766, -32766, -32766, 959, 960, 127, 110, -194, 961, 339, 754, -32766, -32766, -32766, 955, -85, 291, -32766, 1088, -32766, -32766, -32766, -32766, -32766, 755, 756, 757, 758, 759, 760, 761, -193, -32766, 824, -32766, -32766, -32766, -367, 429, -367, 815, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 791, 813, 792, 793, 794, 795, 783, 784, 785, 812, 786, 787, 772, 773, 774, 776, 777, 778, 817, 818, 819, 820, 821, 822, 823, 779, 780, 781, 782, -548, 803, 801, 802, 814, 798, 799, 340, 327, 790, 796, 797, 804, 805, 807, 806, 808, 809, 1033, 391, 606, 7, -32766, 800, 811, 810, 50, 51, 52, 513, 53, 54, 831, 1240, 1239, 1241, 55, 56, -110, 57, 1036, 920, 1090, -110, 1036, -110, 291, 483, 745, 744, 305, 382, 381, -110, -110, -110, -110, -110, -110, -110, -110, 423, 920, 283, -548, -548, 152, 290, 380, 381, 1245, 715, 467, 468, 58, 59, 370, 21, 423, -545, 60, 556, 61, 248, 249, 62, 63, 64, 65, 66, 67, 68, 69, -548, 28, 267, 70, 445, 514, 1104, 374, -342, 1272, 1273, 515, -193, 835, 154, 832, -544, 1270, 42, 25, 516, 389, 517, 241, 518, 920, 519, 298, 1238, 520, 521, 910, 920, 441, 44, 45, 446, 377, 376, -32766, 46, 522, 1023, 1022, 1021, 1024, 368, 338, 442, 1278, -545, -545, 910, 1231, 443, 524, 525, 526, 835, 1245, 835, 1036, 716, 1341, 1236, -545, 155, 528, 529, -32766, 1259, 1260, 1261, 1262, 1256, 1257, 297, -551, 943, -545, -544, -544, 1263, 1258, 290, 1035, 1240, 1239, 1241, 298, 444, 1036, 71, 1266, 841, -544, 321, 322, 326, -153, -153, -153, 920, 1240, 1239, 1241, 922, -550, 910, -544, 710, 943, -591, -32766, -153, 910, -153, 357, -153, -591, -153, 862, 1033, 863, 1089, 36, 251, 922, 737, 156, 375, 710, 717, 862, -585, 863, -585, 75, 158, -546, 835, 959, 960, 326, 1036, -57, 523, 920, -32766, -32766, 362, 896, 955, -110, -110, -110, 32, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 745, 744, 656, 26, 835, -110, -110, 720, 745, 744, -110, 33, 834, 922, 124, 910, -110, 710, -153, 125, 922, 675, 676, 130, 710, -32766, 150, 407, 131, 1150, 1152, 48, 144, -546, -546, 378, 379, -32766, 383, 384, -543, 28, 159, 1238, 920, 160, 298, 1059, -546, 75, -32766, -32766, -32766, 835, -32766, 326, -32766, 1270, -32766, -87, 910, -32766, -546, 647, 648, 161, -32766, -32766, -32766, -4, 920, -84, -32766, -32766, 727, 162, 287, 163, -32766, 420, -302, -78, -73, -72, -71, 141, 287, -32766, -70, 326, 976, 745, 744, 1231, 710, 299, 300, -69, -68, -67, -298, -591, -66, -591, -543, -543, -65, 528, 529, -46, 1259, 1260, 1261, 1262, 1256, 1257, -18, 74, 148, -543, 273, 284, 1263, 1258, 126, -543, 726, 910, -32766, 729, 919, 147, 73, -543, 1238, 922, 690, 322, 326, 710, 279, -32766, -32766, -32766, 280, -32766, 285, -32766, 286, -32766, 332, 288, -32766, 910, 289, 292, 49, -32766, -32766, -32766, 293, 274, 1033, -32766, -32766, 937, 110, -50, 685, -32766, 420, 146, 691, 826, 701, 375, 703, 436, -32766, 1353, 20, 561, 296, 645, 1036, 835, 959, 960, 1119, -543, -543, 523, -32766, 692, 693, 306, 527, 955, -110, -110, -110, 132, 922, 834, -543, 464, 710, 283, 662, 657, -32766, 1240, 1239, 1241, 678, 304, 1238, 283, -543, 10, 301, 302, 493, -32766, -32766, -32766, 663, -32766, 922, -32766, 679, -32766, 710, -4, -32766, 373, 40, -508, 956, -32766, -32766, -32766, -275, 731, -32766, -32766, -32766, 920, 303, 128, 1238, -32766, 420, 310, 0, 567, 0, -32766, -32766, -32766, -32766, -32766, 0, -32766, 0, -32766, -32766, 0, -32766, 0, 1277, -498, 0, -32766, -32766, -32766, -32766, 1279, 0, -32766, -32766, 8, 1238, 24, 372, -32766, 420, 920, 1267, -32766, -32766, -32766, 610, -32766, -32766, -32766, 939, -32766, 298, -579, -32766, 846, 41, 734, 488, -32766, -32766, -32766, -32766, 735, 854, -32766, -32766, 901, 1238, 574, 1000, -32766, 420, 977, 984, -32766, -32766, -32766, 974, -32766, -32766, -32766, 985, -32766, 910, 899, -32766, 972, 1093, 1096, 1097, -32766, -32766, -32766, 1094, 1095, 1101, -32766, -32766, 1292, -250, -250, -250, -32766, 420, 1310, 375, 1344, 650, 28, 267, -578, -32766, -577, -551, -550, -549, 959, 960, -492, 1, 835, 523, 29, 910, 1270, 30, 896, 955, -110, -110, -110, 39, 43, 47, 72, 76, 77, 78, 79, -249, -249, -249, 80, 81, 143, 375, 153, 157, 897, 247, 328, 357, 358, 359, 360, 361, 959, 960, 922, 362, 1231, 523, 710, -250, 363, 364, 896, 955, -110, -110, -110, 365, 366, 367, 369, 529, 28, 1259, 1260, 1261, 1262, 1256, 1257, 437, 555, 1348, -273, -272, 835, 1263, 1258, 13, 1270, 14, -32766, 15, 16, 18, 922, 73, 1238, 1350, 710, -249, 322, 326, 406, -32766, -32766, -32766, 484, -32766, 485, -32766, 492, -32766, 495, 496, -32766, 497, 498, 502, 503, -32766, -32766, -32766, 504, 511, 1231, -32766, -32766, 572, 696, 1249, 1190, -32766, 420, 1268, 1062, 1061, 1042, 1226, 1038, 529, -32766, 1259, 1260, 1261, 1262, 1256, 1257, -277, -102, 12, 17, 27, 295, 1263, 1258, 405, 603, 607, 636, 702, 1194, 1244, 1191, 73, 34, 1323, 0, 320, 322, 326, 371, 711, 714, 718, 719, 721, 722, 723, 724, 0, 728, 713, 0, 857, 856, 865, 949, 992, 864, 1349, 948, 946, 947, 950, 1222, 930, 940, 928, 982, 983, 634, 1347, 1304, 1293, 1311, 1320, 0, 1207, 0, 1271, 0, 326); + protected array $actionCheck = array(2, 3, 4, 5, 6, 7, 0, 9, 10, 11, 12, 13, 9, 10, 11, 14, 9, 10, 11, 44, 45, 46, 47, 48, 49, 50, 51, 52, 116, 117, 118, 119, 120, 121, 122, 37, 38, 30, 116, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 1, 1, 9, 1, 57, 9, 10, 11, 137, 1, 9, 10, 11, 50, 51, 52, 8, 1, 71, 72, 73, 74, 75, 76, 77, 31, 30, 80, 32, 33, 31, 30, 14, 1, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 116, 128, 129, 130, 131, 132, 133, 82, 80, 136, 137, 138, 139, 140, 141, 142, 143, 144, 80, 129, 130, 131, 138, 150, 151, 152, 1, 154, 8, 2, 3, 4, 5, 6, 7, 162, 9, 10, 11, 12, 13, 8, 117, 118, 1, 161, 8, 122, 9, 10, 11, 8, 8, 128, 116, 117, 118, 119, 120, 121, 122, 51, 137, 8, 37, 38, 53, 54, 55, 30, 57, 32, 33, 34, 35, 36, 37, 38, 80, 159, 8, 8, 69, 158, 57, 159, 161, 9, 10, 11, 80, 163, 167, 83, 160, 167, 162, 8, 71, 72, 73, 74, 75, 76, 77, 163, 162, 80, 30, 167, 32, 33, 34, 35, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 156, 128, 129, 130, 131, 132, 133, 163, 8, 136, 137, 138, 139, 140, 141, 142, 143, 144, 16, 9, 10, 11, 31, 150, 151, 152, 8, 154, 2, 3, 4, 5, 6, 7, 163, 9, 10, 11, 12, 13, 30, 162, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 8, 57, 31, 9, 10, 11, 16, 9, 10, 11, 117, 118, 14, 69, 162, 122, 8, 57, 9, 10, 11, 128, 97, 30, 30, 1, 32, 33, 34, 35, 36, 71, 72, 73, 74, 75, 76, 77, 8, 30, 80, 32, 33, 34, 106, 80, 108, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 70, 128, 129, 130, 131, 132, 133, 8, 70, 136, 137, 138, 139, 140, 141, 142, 143, 144, 116, 106, 1, 108, 116, 150, 151, 152, 2, 3, 4, 5, 6, 7, 80, 155, 156, 157, 12, 13, 101, 15, 138, 1, 164, 106, 138, 108, 30, 163, 37, 38, 113, 106, 107, 116, 117, 118, 119, 120, 121, 122, 123, 116, 1, 161, 134, 135, 14, 161, 106, 107, 1, 31, 134, 135, 50, 51, 8, 101, 116, 70, 56, 85, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 163, 70, 71, 72, 73, 74, 123, 8, 164, 78, 79, 80, 162, 82, 14, 156, 70, 86, 87, 88, 89, 8, 91, 97, 93, 1, 95, 158, 80, 98, 99, 84, 1, 8, 103, 104, 105, 106, 107, 116, 109, 110, 119, 120, 121, 122, 115, 116, 8, 146, 134, 135, 84, 122, 8, 124, 125, 126, 82, 1, 82, 138, 31, 85, 116, 149, 14, 136, 137, 116, 139, 140, 141, 142, 143, 144, 145, 161, 122, 163, 134, 135, 151, 152, 161, 137, 155, 156, 157, 158, 8, 138, 161, 1, 8, 149, 165, 166, 167, 75, 76, 77, 1, 155, 156, 157, 159, 161, 84, 163, 163, 122, 1, 137, 90, 84, 92, 161, 94, 8, 96, 106, 116, 108, 159, 147, 148, 159, 163, 14, 106, 163, 31, 106, 160, 108, 162, 161, 14, 70, 82, 117, 118, 167, 138, 16, 122, 1, 9, 10, 161, 127, 128, 129, 130, 131, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 37, 38, 75, 76, 82, 117, 118, 31, 37, 38, 122, 14, 155, 159, 16, 84, 128, 163, 164, 16, 159, 75, 76, 16, 163, 137, 101, 102, 16, 59, 60, 70, 16, 134, 135, 106, 107, 74, 106, 107, 70, 70, 16, 80, 1, 16, 158, 1, 149, 161, 87, 88, 89, 82, 91, 167, 93, 86, 95, 31, 84, 98, 163, 111, 112, 16, 103, 104, 105, 0, 1, 31, 109, 110, 31, 16, 30, 16, 115, 116, 35, 31, 31, 31, 31, 163, 30, 124, 31, 167, 159, 37, 38, 122, 163, 134, 135, 31, 31, 31, 35, 160, 31, 162, 134, 135, 31, 136, 137, 31, 139, 140, 141, 142, 143, 144, 31, 154, 31, 149, 31, 31, 151, 152, 163, 70, 31, 84, 74, 31, 31, 31, 161, 163, 80, 159, 80, 166, 167, 163, 35, 87, 88, 89, 35, 91, 35, 93, 35, 95, 35, 37, 98, 84, 37, 37, 70, 103, 104, 105, 37, 57, 116, 109, 110, 38, 69, 31, 77, 115, 116, 70, 116, 80, 80, 106, 92, 108, 124, 83, 97, 89, 113, 113, 138, 82, 117, 118, 82, 134, 135, 122, 85, 137, 138, 114, 127, 128, 129, 130, 131, 31, 159, 155, 149, 97, 163, 161, 96, 90, 74, 155, 156, 157, 94, 133, 80, 161, 163, 150, 134, 135, 97, 87, 88, 89, 100, 91, 159, 93, 100, 95, 163, 164, 98, 149, 159, 149, 128, 103, 104, 105, 162, 164, 74, 109, 110, 1, 132, 163, 80, 115, 116, 132, -1, 153, -1, 87, 88, 89, 124, 91, -1, 93, -1, 95, 137, -1, 98, -1, 146, 149, -1, 103, 104, 105, 74, 146, -1, 109, 110, 149, 80, 149, 149, 115, 116, 1, 160, 87, 88, 89, 153, 91, 124, 93, 154, 95, 158, 161, 98, 160, 159, 159, 102, 103, 104, 105, 74, 159, 159, 109, 110, 159, 80, 81, 159, 115, 116, 159, 159, 87, 88, 89, 159, 91, 124, 93, 159, 95, 84, 159, 98, 159, 159, 159, 159, 103, 104, 105, 159, 159, 159, 109, 110, 160, 100, 101, 102, 115, 116, 160, 106, 160, 160, 70, 71, 161, 124, 161, 161, 161, 161, 117, 118, 161, 161, 82, 122, 161, 84, 86, 161, 127, 128, 129, 130, 131, 161, 161, 161, 161, 161, 161, 161, 161, 100, 101, 102, 161, 161, 161, 106, 161, 161, 164, 161, 161, 161, 161, 161, 161, 161, 117, 118, 159, 161, 122, 122, 163, 164, 161, 161, 127, 128, 129, 130, 131, 161, 161, 161, 161, 137, 70, 139, 140, 141, 142, 143, 144, 161, 161, 164, 162, 162, 82, 151, 152, 162, 86, 162, 74, 162, 162, 162, 159, 161, 80, 164, 163, 164, 166, 167, 162, 87, 88, 89, 162, 91, 162, 93, 162, 95, 162, 162, 98, 162, 162, 162, 162, 103, 104, 105, 162, 162, 122, 109, 110, 162, 162, 162, 162, 115, 116, 162, 162, 162, 162, 162, 162, 137, 124, 139, 140, 141, 142, 143, 144, 162, 162, 162, 162, 162, 162, 151, 152, 162, 162, 162, 162, 162, 162, 162, 162, 161, 163, 162, -1, 163, 166, 167, 163, 163, 163, 163, 163, 163, 163, 163, 163, -1, 163, 163, -1, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, -1, 165, -1, 166, -1, 167); + protected array $actionBase = array(0, -2, 152, 549, 764, 941, 981, 751, 617, 310, 123, 877, 556, 671, 671, 738, 671, 472, 626, 789, 63, 305, 305, 789, 305, 493, 493, 493, 658, 658, 658, 658, 749, 749, 897, 897, 929, 865, 831, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 51, 45, 451, 692, 1036, 1044, 1040, 1045, 1034, 1033, 1039, 1041, 1046, 1083, 1084, 795, 1085, 1086, 1082, 1087, 1042, 889, 1035, 1043, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 44, 343, 664, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 52, 52, 52, 666, 666, 47, 354, 980, 203, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 665, 339, 164, 164, 7, 7, 7, 7, 7, 50, 369, 583, -25, -25, -25, -25, 448, 741, 501, 408, 283, 338, 394, 334, 334, 14, 14, 531, 531, 9, 9, 531, 531, 531, 478, 478, 478, 478, 441, 471, 552, 428, 824, 53, 53, 53, 53, 824, 824, 824, 824, 826, 1089, 824, 824, 824, 594, 750, 750, 781, 138, 138, 138, 750, 540, 503, 503, 540, 238, 503, 67, 135, -78, 805, 377, 499, -78, 362, 656, 636, 59, 743, 624, 743, 1032, 481, 802, 802, 514, 773, 746, 878, 1064, 1049, 821, 1080, 825, 1081, 15, 370, 745, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1090, 443, 1032, 384, 1090, 1090, 1090, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 647, 384, 622, 641, 384, 810, 443, 51, 817, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 780, 316, 51, 45, 150, 150, 490, 83, 150, 150, 150, 150, 51, 51, 51, 51, 624, 799, 797, 627, 834, 375, 799, 799, 799, 270, 158, 69, 197, 740, 760, 345, 788, 788, 801, 900, 900, 788, 798, 788, 801, 914, 788, 788, 900, 900, 835, 180, 550, 353, 524, 565, 900, 279, 788, 788, 788, 788, 816, 571, 788, 214, 198, 788, 788, 816, 811, 785, 145, 777, 900, 900, 900, 816, 500, 777, 777, 777, 839, 845, 765, 784, 337, 297, 611, 169, 822, 784, 784, 788, 538, 765, 784, 765, 784, 837, 784, 784, 784, 765, 784, 798, 431, 784, 721, 607, 163, 784, 6, 915, 916, 723, 917, 912, 918, 964, 919, 923, 1054, 899, 930, 913, 924, 965, 906, 903, 794, 693, 698, 827, 783, 896, 792, 792, 792, 894, 792, 792, 792, 792, 792, 792, 792, 792, 693, 823, 830, 787, 933, 702, 707, 1011, 819, 926, 1088, 932, 1013, 925, 772, 711, 977, 934, 774, 1050, 935, 936, 986, 1014, 846, 1017, 963, 796, 979, 1065, 836, 945, 1055, 792, 915, 923, 735, 913, 924, 906, 903, 770, 766, 762, 763, 761, 752, 747, 748, 782, 1018, 893, 833, 880, 940, 895, 693, 886, 971, 1047, 990, 992, 1053, 803, 791, 888, 1066, 946, 952, 953, 1056, 1019, 1057, 838, 973, 775, 994, 820, 1067, 996, 997, 999, 1000, 1058, 1068, 1059, 891, 1060, 849, 814, 966, 807, 1069, 1, 806, 808, 818, 955, 484, 931, 1061, 1070, 1071, 1001, 1002, 1006, 1072, 1073, 927, 852, 975, 815, 976, 967, 855, 856, 525, 813, 1020, 800, 804, 812, 577, 640, 1074, 1075, 1076, 928, 790, 786, 860, 864, 1021, 809, 1022, 1077, 649, 867, 724, 1078, 1012, 744, 754, 281, 654, 335, 756, 779, 1063, 829, 776, 778, 954, 754, 793, 869, 1079, 870, 871, 872, 1007, 876, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 456, 456, 456, 456, 456, 456, 305, 305, 305, 305, 305, 456, 456, 456, 456, 456, 456, 456, 305, 305, 0, 0, 305, 0, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 473, 473, 289, 289, 473, 289, 473, 473, 473, 473, 473, 473, 473, 473, 473, 0, 289, 289, 289, 289, 289, 289, 289, 289, 473, 835, 473, 138, 138, 138, 138, 473, 473, 473, -88, -88, 473, 238, 473, 473, 138, 138, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 0, 0, 384, 503, 473, 798, 798, 798, 798, 473, 473, 473, 473, 503, 503, 473, 473, 473, 0, 0, 0, 0, 0, 0, 0, 0, 384, 0, 0, 384, 0, 0, 798, 798, 473, 238, 835, 168, 473, 0, 0, 0, 0, 384, 798, 384, 443, 788, 503, 503, 788, 443, 443, 150, 51, 168, 620, 620, 620, 620, 0, 0, 624, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, 798, 0, 835, 0, 798, 798, 798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 798, 0, 0, 900, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 914, 0, 0, 0, 0, 0, 0, 798, 0, 0, 0, 0, 0, 0, 0, 0, 0, 792, 803, 0, 803, 0, 792, 792, 792, 0, 0, 0, 0, 813, 809); + protected array $actionDefault = array(3, 32767, 102, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 100, 32767, 32767, 32767, 32767, 597, 597, 597, 597, 32767, 32767, 254, 102, 32767, 32767, 470, 387, 387, 387, 32767, 32767, 541, 541, 541, 541, 541, 541, 32767, 32767, 32767, 32767, 32767, 32767, 470, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 100, 32767, 32767, 32767, 36, 7, 8, 10, 11, 49, 17, 324, 32767, 32767, 32767, 32767, 102, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 590, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 474, 453, 454, 456, 457, 386, 542, 596, 327, 593, 385, 145, 339, 329, 242, 330, 258, 475, 259, 476, 479, 480, 215, 287, 382, 149, 150, 417, 471, 419, 469, 473, 418, 392, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 390, 391, 472, 450, 449, 448, 32767, 32767, 415, 416, 32767, 420, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 102, 32767, 389, 423, 421, 422, 439, 440, 437, 438, 441, 32767, 32767, 32767, 442, 443, 444, 445, 316, 32767, 32767, 366, 364, 316, 111, 32767, 32767, 430, 431, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 535, 447, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 102, 32767, 100, 537, 412, 414, 504, 425, 426, 424, 393, 32767, 511, 32767, 102, 32767, 513, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 536, 32767, 543, 543, 32767, 497, 100, 195, 32767, 32767, 512, 32767, 195, 195, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 604, 497, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 32767, 195, 110, 32767, 32767, 32767, 100, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 190, 32767, 268, 270, 102, 558, 195, 32767, 516, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 509, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 497, 435, 138, 32767, 138, 543, 427, 428, 429, 499, 543, 543, 543, 312, 289, 32767, 32767, 32767, 32767, 514, 514, 100, 100, 100, 100, 509, 32767, 32767, 32767, 32767, 111, 99, 99, 99, 99, 99, 103, 101, 32767, 32767, 32767, 32767, 223, 99, 32767, 101, 101, 32767, 32767, 223, 225, 212, 101, 227, 32767, 562, 563, 223, 101, 227, 227, 227, 247, 247, 486, 318, 101, 99, 101, 101, 197, 318, 318, 32767, 101, 486, 318, 486, 318, 199, 318, 318, 318, 486, 318, 32767, 101, 318, 214, 99, 99, 318, 32767, 32767, 32767, 499, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 222, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 530, 32767, 547, 560, 433, 434, 436, 545, 458, 459, 460, 461, 462, 463, 464, 466, 592, 32767, 503, 32767, 32767, 32767, 338, 32767, 602, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 603, 32767, 543, 32767, 32767, 32767, 32767, 432, 9, 74, 492, 42, 43, 51, 57, 520, 521, 522, 523, 517, 518, 524, 519, 32767, 32767, 525, 568, 32767, 32767, 544, 595, 32767, 32767, 32767, 32767, 32767, 32767, 138, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 530, 32767, 136, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 526, 32767, 32767, 32767, 543, 32767, 32767, 32767, 32767, 314, 311, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 543, 32767, 32767, 32767, 32767, 32767, 291, 32767, 308, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 286, 32767, 32767, 381, 499, 294, 296, 297, 32767, 32767, 32767, 32767, 360, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 152, 152, 3, 3, 341, 152, 152, 152, 341, 341, 152, 341, 341, 341, 152, 152, 152, 152, 152, 152, 280, 185, 262, 265, 247, 247, 152, 352, 152); + protected array $goto = array(196, 196, 1034, 1065, 697, 431, 661, 621, 658, 319, 706, 425, 313, 314, 335, 576, 430, 336, 432, 638, 654, 655, 852, 672, 673, 674, 853, 167, 167, 167, 167, 221, 197, 193, 193, 177, 179, 216, 193, 193, 193, 193, 193, 194, 194, 194, 194, 194, 194, 188, 189, 190, 191, 192, 218, 216, 219, 536, 537, 421, 538, 540, 541, 542, 543, 544, 545, 546, 547, 1136, 168, 169, 170, 195, 171, 172, 173, 166, 174, 175, 176, 178, 215, 217, 220, 238, 243, 244, 246, 257, 258, 259, 260, 261, 262, 263, 264, 268, 269, 270, 271, 281, 282, 316, 317, 318, 426, 427, 428, 581, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 180, 237, 181, 198, 199, 200, 239, 188, 189, 190, 191, 192, 218, 1136, 201, 182, 183, 184, 202, 198, 185, 240, 203, 201, 165, 204, 205, 186, 206, 207, 208, 187, 209, 210, 211, 212, 213, 214, 855, 466, 466, 278, 278, 278, 278, 623, 623, 351, 466, 1269, 600, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1287, 1287, 599, 1100, 1287, 709, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 508, 700, 458, 1098, 975, 559, 552, 860, 419, 909, 904, 905, 918, 861, 906, 858, 907, 908, 859, 848, 827, 912, 354, 354, 354, 354, 396, 399, 560, 601, 605, 1087, 1082, 1083, 1084, 341, 552, 559, 568, 569, 344, 579, 602, 616, 617, 408, 409, 1232, 440, 479, 670, 22, 671, 886, 412, 413, 414, 481, 684, 349, 1237, 415, 1237, 1107, 1108, 347, 833, 1034, 1034, 1237, 573, 848, 1034, 1327, 1034, 1034, 1040, 1039, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1319, 1319, 1319, 1319, 1237, 893, 851, 893, 893, 1237, 1237, 1237, 1237, 1233, 1234, 1237, 1237, 1237, 833, 355, 833, 843, 996, 252, 252, 1043, 1044, 1037, 1037, 355, 355, 681, 952, 394, 926, 1029, 1045, 1046, 927, 1235, 1295, 1296, 942, 355, 355, 942, 913, 355, 914, 1354, 250, 250, 250, 250, 245, 253, 548, 548, 548, 548, 554, 604, 1285, 1285, 355, 355, 1285, 571, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 539, 539, 342, 424, 539, 611, 539, 539, 539, 539, 539, 539, 539, 539, 539, 566, 476, 1312, 1313, 733, 637, 639, 325, 308, 659, 848, 343, 342, 683, 687, 1010, 695, 704, 1006, 660, 1298, 609, 624, 627, 628, 629, 630, 651, 652, 653, 708, 1216, 944, 1314, 1315, 1217, 1220, 945, 1221, 1337, 1337, 686, 352, 353, 868, 553, 563, 450, 450, 450, 553, 1309, 563, 1309, 1133, 397, 462, 1337, 1058, 880, 1309, 1185, 867, 500, 5, 501, 6, 469, 580, 470, 471, 507, 554, 878, 1340, 1340, 1345, 1346, 433, 438, 550, 666, 550, 433, 682, 1321, 1321, 1321, 1321, 550, 337, 1041, 1041, 931, 1123, 873, 665, 1052, 1048, 1049, 619, 845, 876, 324, 275, 324, 1015, 967, 410, 705, 577, 614, 1305, 456, 872, 403, 664, 994, 969, 969, 969, 969, 866, 870, 456, 963, 970, 881, 869, 1070, 1074, 631, 633, 635, 1227, 1230, 958, 615, 978, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 999, 1018, 450, 971, 1073, 732, 477, 1228, 1307, 1307, 1073, 736, 968, 551, 1008, 1003, 882, 694, 1075, 1071, 829, 255, 255, 980, 0, 1118, 0, 1013, 1013, 694, 0, 0, 0, 694, 1116, 885); + protected array $gotoCheck = array(42, 42, 73, 127, 73, 66, 66, 56, 56, 66, 9, 66, 66, 66, 66, 66, 66, 66, 66, 66, 86, 86, 26, 86, 86, 86, 27, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 15, 149, 149, 23, 23, 23, 23, 108, 108, 97, 149, 108, 130, 108, 108, 108, 108, 108, 108, 108, 108, 108, 170, 170, 8, 8, 170, 8, 170, 170, 170, 170, 170, 170, 170, 170, 170, 8, 8, 83, 8, 49, 76, 76, 15, 43, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 22, 6, 15, 24, 24, 24, 24, 59, 59, 59, 59, 59, 15, 15, 15, 15, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 82, 82, 20, 83, 84, 82, 76, 82, 45, 82, 82, 82, 84, 82, 179, 73, 82, 73, 144, 144, 82, 12, 73, 73, 73, 172, 22, 73, 181, 73, 73, 118, 118, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 9, 9, 9, 9, 73, 25, 25, 25, 25, 73, 73, 73, 73, 20, 20, 73, 73, 73, 12, 14, 12, 20, 103, 5, 5, 119, 119, 89, 89, 14, 14, 89, 89, 62, 73, 89, 89, 89, 73, 20, 20, 20, 9, 14, 14, 9, 65, 14, 65, 14, 5, 5, 5, 5, 5, 5, 107, 107, 107, 107, 14, 107, 171, 171, 14, 14, 171, 104, 171, 171, 171, 171, 171, 171, 171, 171, 171, 173, 173, 168, 13, 173, 13, 173, 173, 173, 173, 173, 173, 173, 173, 173, 48, 176, 176, 176, 48, 48, 48, 169, 169, 48, 22, 168, 168, 48, 48, 48, 48, 48, 48, 64, 14, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 79, 79, 178, 178, 79, 79, 79, 79, 182, 182, 14, 97, 97, 35, 9, 9, 23, 23, 23, 9, 130, 9, 130, 150, 9, 9, 182, 114, 35, 130, 151, 35, 155, 46, 155, 46, 9, 9, 9, 9, 155, 14, 9, 182, 182, 9, 9, 117, 113, 19, 120, 19, 117, 116, 130, 130, 130, 130, 19, 29, 117, 117, 17, 17, 39, 117, 117, 117, 117, 17, 18, 9, 24, 24, 24, 17, 93, 93, 93, 2, 2, 130, 19, 17, 28, 17, 17, 19, 19, 19, 19, 17, 37, 19, 19, 19, 16, 16, 16, 16, 85, 85, 85, 17, 14, 92, 80, 16, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 50, 110, 23, 50, 130, 50, 157, 160, 130, 130, 130, 99, 16, 50, 50, 50, 41, 7, 132, 129, 7, 5, 5, 96, -1, 147, -1, 107, 107, 7, -1, -1, -1, 7, 16, 16); + protected array $gotoBase = array(0, 0, -221, 0, 0, 311, 200, 541, 179, -10, 0, 0, -30, 32, 11, -185, 56, 9, 173, 196, -146, 0, -59, 163, 219, 291, 18, 22, 159, 175, 0, 0, 0, 0, 0, 54, 0, 165, 0, 153, 0, 106, -1, 189, 0, 230, -291, 0, -330, 186, 519, 0, 0, 0, 0, 0, -33, 0, 0, 181, 0, 0, 280, 0, 158, 321, -236, 0, 0, 0, 0, 0, 0, -5, 0, 0, -140, 0, 0, 4, 174, 44, -246, -76, -220, 33, -698, 0, 0, 37, 0, 0, 188, 184, 0, 0, 111, -311, 0, 135, 0, 0, 0, 276, 313, 0, 0, 317, -71, 0, 162, 0, 0, 183, 166, 0, 182, 187, -3, 29, 172, 0, 0, 0, 0, 0, 0, 1, 0, 176, 167, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -12, 0, 0, 112, 0, 130, 190, 168, 0, 0, 0, -51, 0, 97, 0, 0, 169, 0, 0, 0, 0, 0, 0, 0, 71, 67, -56, 110, 241, 125, 0, 0, 82, 0, 42, 229, 0, 242, 113, 0, 0); + protected array $gotoDefault = array(-32768, 512, 740, 4, 741, 935, 816, 825, 597, 530, 707, 348, 625, 422, 1303, 911, 1122, 578, 844, 1246, 1254, 457, 847, 330, 730, 923, 894, 895, 400, 386, 392, 398, 649, 626, 494, 879, 453, 871, 486, 874, 452, 883, 164, 418, 510, 887, 3, 890, 557, 921, 973, 387, 898, 388, 677, 900, 562, 902, 903, 395, 401, 402, 1127, 570, 622, 915, 256, 564, 916, 385, 917, 925, 390, 393, 688, 465, 505, 499, 411, 1102, 565, 608, 646, 447, 473, 620, 632, 618, 480, 434, 416, 329, 957, 965, 487, 463, 979, 350, 987, 738, 1135, 640, 489, 995, 641, 1002, 1005, 531, 532, 478, 1017, 272, 1020, 490, 19, 667, 1031, 1032, 668, 642, 1054, 643, 669, 644, 1056, 472, 598, 1064, 454, 1072, 1291, 455, 1076, 266, 1079, 277, 417, 435, 1085, 1086, 9, 1092, 698, 699, 11, 276, 509, 1117, 689, 451, 1134, 439, 1204, 1206, 558, 491, 1224, 1223, 680, 506, 1229, 448, 1294, 449, 533, 474, 315, 534, 1338, 307, 333, 312, 549, 294, 334, 535, 475, 1300, 1308, 331, 31, 1328, 1339, 575, 613); + protected array $ruleToNonTerminal = array(0, 1, 3, 3, 2, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 9, 10, 11, 11, 11, 12, 12, 13, 13, 14, 15, 15, 16, 16, 17, 17, 18, 18, 21, 21, 22, 23, 23, 24, 24, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 29, 29, 30, 30, 32, 34, 34, 28, 36, 36, 33, 38, 38, 35, 35, 37, 37, 39, 39, 31, 40, 40, 41, 43, 44, 44, 45, 45, 46, 46, 48, 47, 47, 47, 47, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 25, 25, 50, 69, 69, 72, 72, 71, 70, 70, 63, 75, 75, 76, 76, 77, 77, 78, 78, 79, 79, 80, 80, 26, 26, 27, 27, 27, 27, 27, 88, 88, 90, 90, 83, 83, 91, 91, 92, 92, 92, 84, 84, 87, 87, 85, 85, 93, 94, 94, 57, 57, 65, 65, 68, 68, 68, 67, 95, 95, 96, 58, 58, 58, 58, 97, 97, 98, 98, 99, 99, 100, 101, 101, 102, 102, 103, 103, 55, 55, 51, 51, 105, 53, 53, 106, 52, 52, 54, 54, 64, 64, 64, 64, 81, 81, 109, 109, 111, 111, 112, 112, 112, 112, 110, 110, 110, 114, 114, 114, 114, 89, 89, 117, 117, 117, 118, 118, 115, 115, 119, 119, 121, 121, 122, 122, 116, 123, 123, 120, 124, 124, 124, 124, 113, 113, 82, 82, 82, 20, 20, 20, 126, 125, 125, 127, 127, 127, 127, 60, 128, 128, 129, 61, 131, 131, 132, 132, 133, 133, 86, 134, 134, 134, 134, 134, 134, 134, 139, 139, 140, 140, 141, 141, 141, 141, 141, 142, 143, 143, 138, 138, 135, 135, 137, 137, 145, 145, 144, 144, 144, 144, 144, 144, 144, 136, 146, 146, 148, 147, 147, 62, 104, 149, 149, 56, 56, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 156, 150, 150, 155, 155, 158, 159, 159, 160, 161, 162, 162, 162, 162, 19, 19, 73, 73, 73, 73, 151, 151, 151, 151, 164, 164, 152, 152, 154, 154, 154, 157, 157, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 108, 173, 173, 173, 173, 153, 153, 153, 153, 153, 153, 153, 153, 59, 59, 167, 167, 167, 167, 174, 174, 163, 163, 163, 175, 175, 175, 175, 175, 175, 74, 74, 66, 66, 66, 66, 130, 130, 130, 130, 178, 177, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 176, 176, 176, 176, 107, 172, 180, 180, 179, 179, 181, 181, 181, 181, 181, 181, 181, 181, 169, 169, 169, 169, 168, 183, 182, 182, 182, 182, 182, 182, 182, 182, 184, 184, 184, 184); + protected array $ruleToLength = array(1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 2, 1, 3, 4, 1, 2, 0, 1, 1, 1, 1, 4, 3, 5, 4, 3, 4, 2, 3, 1, 1, 7, 6, 2, 3, 1, 2, 3, 1, 2, 3, 1, 1, 3, 1, 3, 1, 2, 2, 3, 1, 3, 2, 3, 1, 3, 3, 2, 0, 1, 1, 1, 1, 1, 3, 7, 10, 5, 7, 9, 5, 3, 3, 3, 3, 3, 3, 1, 2, 5, 7, 9, 6, 5, 6, 3, 2, 1, 1, 1, 1, 0, 2, 1, 3, 8, 0, 4, 2, 1, 3, 0, 1, 0, 1, 0, 1, 3, 1, 1, 1, 8, 9, 7, 8, 7, 6, 8, 0, 2, 0, 2, 1, 2, 1, 2, 1, 1, 1, 0, 2, 0, 2, 0, 2, 2, 1, 3, 1, 4, 1, 4, 1, 1, 4, 2, 1, 3, 3, 3, 4, 4, 5, 0, 2, 4, 3, 1, 1, 7, 0, 2, 1, 3, 3, 4, 1, 4, 0, 2, 5, 0, 2, 6, 0, 2, 0, 3, 1, 2, 1, 1, 2, 0, 1, 3, 0, 2, 1, 1, 1, 1, 6, 8, 6, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 3, 3, 3, 3, 3, 1, 3, 3, 1, 1, 2, 1, 1, 0, 1, 0, 2, 2, 2, 4, 3, 1, 1, 3, 1, 2, 2, 3, 2, 3, 1, 1, 2, 3, 1, 1, 3, 2, 0, 1, 5, 5, 6, 10, 3, 5, 1, 1, 3, 0, 2, 4, 5, 4, 4, 4, 3, 1, 1, 1, 1, 1, 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 3, 1, 1, 3, 2, 2, 3, 1, 0, 1, 1, 3, 3, 3, 4, 4, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 4, 3, 4, 4, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 3, 2, 1, 2, 4, 2, 2, 8, 9, 8, 9, 9, 10, 9, 10, 8, 3, 2, 0, 4, 2, 1, 3, 2, 1, 2, 2, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 0, 3, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 3, 4, 1, 1, 3, 1, 1, 1, 1, 1, 3, 2, 3, 0, 1, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 4, 4, 1, 4, 4, 0, 1, 1, 1, 3, 3, 1, 4, 2, 2, 1, 3, 1, 4, 4, 3, 3, 3, 3, 1, 3, 1, 1, 3, 1, 1, 4, 1, 1, 1, 3, 1, 1, 2, 1, 3, 4, 3, 2, 0, 2, 2, 1, 2, 1, 1, 1, 4, 3, 3, 3, 3, 6, 3, 1, 1, 2, 1); + protected function initReduceCallbacks() : void + { + $this->reduceCallbacks = [0 => null, 1 => function ($stackPos) { $this->semValue = $this->handleNamespaces($this->semStack[$stackPos - (1 - 1)]); }, 2 => function ($stackPos) { - if (\is_array($this->semStack[$stackPos - (2 - 2)])) { - $this->semValue = \array_merge($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)]); - } else { + if ($this->semStack[$stackPos - (2 - 2)] !== null) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; } + $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 3 => function ($stackPos) { $this->semValue = array(); }, 4 => function ($stackPos) { - $startAttributes = $this->lookaheadStartAttributes; - if (isset($startAttributes['comments'])) { - $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); - } else { - $nop = null; - } + $nop = $this->maybeCreateZeroLengthNop($this->tokenPos); if ($nop !== null) { $this->semStack[$stackPos - (1 - 1)][] = $nop; } $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 5 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 6 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 7 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 8 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 9 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 10 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 11 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 12 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 13 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 14 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 15 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 16 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 17 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 18 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 19 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 20 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 21 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 22 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 23 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 24 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 25 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 26 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 27 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 28 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 29 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 30 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 31 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 32 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 33 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 34 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 35 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 36 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 37 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 38 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 39 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 40 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 41 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 42 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 43 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 44 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 45 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 46 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 47 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 48 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 49 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 50 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 51 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 52 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 53 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 54 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 55 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 56 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 57 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 58 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 59 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 60 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 61 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 62 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 63 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 64 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 65 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 66 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 67 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 68 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 69 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 70 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 71 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 72 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 73 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 74 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 75 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 76 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 77 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 78 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 79 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 80 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 81 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 82 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 83 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 84 => function ($stackPos) { - $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 85 => function ($stackPos) { - $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + }, 5 => null, 6 => null, 7 => null, 8 => null, 9 => null, 10 => null, 11 => null, 12 => null, 13 => null, 14 => null, 15 => null, 16 => null, 17 => null, 18 => null, 19 => null, 20 => null, 21 => null, 22 => null, 23 => null, 24 => null, 25 => null, 26 => null, 27 => null, 28 => null, 29 => null, 30 => null, 31 => null, 32 => null, 33 => null, 34 => null, 35 => null, 36 => null, 37 => null, 38 => null, 39 => null, 40 => null, 41 => null, 42 => null, 43 => null, 44 => null, 45 => null, 46 => null, 47 => null, 48 => null, 49 => null, 50 => null, 51 => null, 52 => null, 53 => null, 54 => null, 55 => null, 56 => null, 57 => null, 58 => null, 59 => null, 60 => null, 61 => null, 62 => null, 63 => null, 64 => null, 65 => null, 66 => null, 67 => null, 68 => null, 69 => null, 70 => null, 71 => null, 72 => null, 73 => null, 74 => null, 75 => null, 76 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + if ($this->semValue === "emitError(new Error('Cannot use "getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos]))); + } + }, 77 => null, 78 => null, 79 => null, 80 => null, 81 => null, 82 => null, 83 => null, 84 => null, 85 => function ($stackPos) { + $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 86 => function ($stackPos) { - $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 87 => function ($stackPos) { - $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 88 => function ($stackPos) { - $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 89 => function ($stackPos) { - $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 90 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 91 => function ($stackPos) { - $this->semValue = new Name(\substr($this->semStack[$stackPos - (1 - 1)], 1), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 92 => function ($stackPos) { - $this->semValue = new Expr\Variable(\substr($this->semStack[$stackPos - (1 - 1)], 1), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 93 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 94 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 95 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 94 => null, 95 => function ($stackPos) { + $this->semValue = new Name(\substr($this->semStack[$stackPos - (1 - 1)], 1), $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 96 => function ($stackPos) { - $this->semValue = new Stmt\HaltCompiler($this->lexer->handleHaltCompiler(), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Variable(\substr($this->semStack[$stackPos - (1 - 1)], 1), $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 97 => function ($stackPos) { - $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos - (3 - 2)], null, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON); - $this->checkNamespace($this->semValue); + /* nothing */ }, 98 => function ($stackPos) { - $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos - (5 - 2)], $this->semStack[$stackPos - (5 - 4)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); - $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); - $this->checkNamespace($this->semValue); + /* nothing */ }, 99 => function ($stackPos) { - $this->semValue = new Stmt\Namespace_(null, $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); - $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); - $this->checkNamespace($this->semValue); + /* nothing */ }, 100 => function ($stackPos) { - $this->semValue = new Stmt\Use_($this->semStack[$stackPos - (3 - 2)], Stmt\Use_::TYPE_NORMAL, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 101 => function ($stackPos) { - $this->semValue = new Stmt\Use_($this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 2)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); - }, 102 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 103 => function ($stackPos) { - $this->semValue = new Stmt\Const_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->emitError(new Error('A trailing comma is not allowed here', $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos]))); + }, 101 => null, 102 => null, 103 => function ($stackPos) { + $this->semValue = new Node\Attribute($this->semStack[$stackPos - (1 - 1)], [], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 104 => function ($stackPos) { - $this->semValue = Stmt\Use_::TYPE_FUNCTION; + $this->semValue = new Node\Attribute($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 105 => function ($stackPos) { - $this->semValue = Stmt\Use_::TYPE_CONSTANT; + $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 106 => function ($stackPos) { - $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos - (7 - 3)], $this->semStack[$stackPos - (7 - 6)], $this->semStack[$stackPos - (7 - 2)], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes); + $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; + $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 107 => function ($stackPos) { - $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); + $this->semValue = new Node\AttributeGroup($this->semStack[$stackPos - (4 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 108 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); + }, 109 => function ($stackPos) { + $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; + $this->semValue = $this->semStack[$stackPos - (2 - 1)]; + }, 110 => function ($stackPos) { + $this->semValue = []; + }, 111 => null, 112 => null, 113 => null, 114 => null, 115 => function ($stackPos) { + $this->semValue = new Stmt\HaltCompiler($this->handleHaltCompiler(), $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); + }, 116 => function ($stackPos) { + $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos - (3 - 2)], null, $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON); + $this->checkNamespace($this->semValue); + }, 117 => function ($stackPos) { + $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos - (5 - 2)], $this->semStack[$stackPos - (5 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (5 - 1)], $this->tokenEndStack[$stackPos])); + $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); + $this->checkNamespace($this->semValue); + }, 118 => function ($stackPos) { + $this->semValue = new Stmt\Namespace_(null, $this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); + $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); + $this->checkNamespace($this->semValue); + }, 119 => function ($stackPos) { + $this->semValue = new Stmt\Use_($this->semStack[$stackPos - (3 - 2)], Stmt\Use_::TYPE_NORMAL, $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 120 => function ($stackPos) { + $this->semValue = new Stmt\Use_($this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); + }, 121 => null, 122 => function ($stackPos) { + $this->semValue = new Stmt\Const_($this->semStack[$stackPos - (3 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 123 => function ($stackPos) { + $this->semValue = Stmt\Use_::TYPE_FUNCTION; + }, 124 => function ($stackPos) { + $this->semValue = Stmt\Use_::TYPE_CONSTANT; + }, 125 => function ($stackPos) { + $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos - (7 - 3)], $this->semStack[$stackPos - (7 - 6)], $this->semStack[$stackPos - (7 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (7 - 1)], $this->tokenEndStack[$stackPos])); + }, 126 => function ($stackPos) { + $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 5)], Stmt\Use_::TYPE_UNKNOWN, $this->getAttributes($this->tokenStartStack[$stackPos - (6 - 1)], $this->tokenEndStack[$stackPos])); + }, 127 => null, 128 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 109 => function ($stackPos) { + }, 129 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 110 => function ($stackPos) { + }, 130 => null, 131 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 111 => function ($stackPos) { + }, 132 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 112 => function ($stackPos) { + }, 133 => null, 134 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 113 => function ($stackPos) { + }, 135 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 114 => function ($stackPos) { - $this->semValue = new Stmt\UseUse($this->semStack[$stackPos - (1 - 1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + }, 136 => function ($stackPos) { + $this->semValue = new Node\UseItem($this->semStack[$stackPos - (1 - 1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); $this->checkUseUse($this->semValue, $stackPos - (1 - 1)); - }, 115 => function ($stackPos) { - $this->semValue = new Stmt\UseUse($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + }, 137 => function ($stackPos) { + $this->semValue = new Node\UseItem($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], Stmt\Use_::TYPE_UNKNOWN, $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); $this->checkUseUse($this->semValue, $stackPos - (3 - 3)); - }, 116 => function ($stackPos) { - $this->semValue = new Stmt\UseUse($this->semStack[$stackPos - (1 - 1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + }, 138 => function ($stackPos) { + $this->semValue = new Node\UseItem($this->semStack[$stackPos - (1 - 1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); $this->checkUseUse($this->semValue, $stackPos - (1 - 1)); - }, 117 => function ($stackPos) { - $this->semValue = new Stmt\UseUse($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + }, 139 => function ($stackPos) { + $this->semValue = new Node\UseItem($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], Stmt\Use_::TYPE_UNKNOWN, $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); $this->checkUseUse($this->semValue, $stackPos - (3 - 3)); - }, 118 => function ($stackPos) { + }, 140 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; $this->semValue->type = Stmt\Use_::TYPE_NORMAL; - }, 119 => function ($stackPos) { + }, 141 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 2)]; $this->semValue->type = $this->semStack[$stackPos - (2 - 1)]; - }, 120 => function ($stackPos) { + }, 142 => null, 143 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 121 => function ($stackPos) { + }, 144 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 122 => function ($stackPos) { - $this->semValue = new Node\Const_($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 123 => function ($stackPos) { + }, 145 => function ($stackPos) { + $this->semValue = new Node\Const_($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 146 => null, 147 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 124 => function ($stackPos) { + }, 148 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 125 => function ($stackPos) { - $this->semValue = new Node\Const_($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 126 => function ($stackPos) { - if (\is_array($this->semStack[$stackPos - (2 - 2)])) { - $this->semValue = \array_merge($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)]); - } else { + }, 149 => function ($stackPos) { + $this->semValue = new Node\Const_(new Node\Identifier($this->semStack[$stackPos - (3 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos - (3 - 1)])), $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 150 => function ($stackPos) { + $this->semValue = new Node\Const_(new Node\Identifier($this->semStack[$stackPos - (3 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos - (3 - 1)])), $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 151 => function ($stackPos) { + if ($this->semStack[$stackPos - (2 - 2)] !== null) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; } - }, 127 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos - (2 - 1)]; + }, 152 => function ($stackPos) { $this->semValue = array(); - }, 128 => function ($stackPos) { - $startAttributes = $this->lookaheadStartAttributes; - if (isset($startAttributes['comments'])) { - $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); - } else { - $nop = null; - } + }, 153 => function ($stackPos) { + $nop = $this->maybeCreateZeroLengthNop($this->tokenPos); if ($nop !== null) { $this->semStack[$stackPos - (1 - 1)][] = $nop; } $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 129 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 130 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 131 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 132 => function ($stackPos) { - throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 133 => function ($stackPos) { - if ($this->semStack[$stackPos - (3 - 2)]) { - $this->semValue = $this->semStack[$stackPos - (3 - 2)]; - $attrs = $this->startAttributeStack[$stackPos - (3 - 1)]; - $stmts = $this->semValue; - if (!empty($attrs['comments'])) { - $stmts[0]->setAttribute('comments', \array_merge($attrs['comments'], $stmts[0]->getAttribute('comments', []))); - } - } else { - $startAttributes = $this->startAttributeStack[$stackPos - (3 - 1)]; - if (isset($startAttributes['comments'])) { - $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); - } else { - $this->semValue = null; - } - if (null === $this->semValue) { - $this->semValue = array(); - } - } - }, 134 => function ($stackPos) { - $this->semValue = new Stmt\If_($this->semStack[$stackPos - (5 - 2)], ['stmts' => \is_array($this->semStack[$stackPos - (5 - 3)]) ? $this->semStack[$stackPos - (5 - 3)] : array($this->semStack[$stackPos - (5 - 3)]), 'elseifs' => $this->semStack[$stackPos - (5 - 4)], 'else' => $this->semStack[$stackPos - (5 - 5)]], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); - }, 135 => function ($stackPos) { - $this->semValue = new Stmt\If_($this->semStack[$stackPos - (8 - 2)], ['stmts' => $this->semStack[$stackPos - (8 - 4)], 'elseifs' => $this->semStack[$stackPos - (8 - 5)], 'else' => $this->semStack[$stackPos - (8 - 6)]], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes); - }, 136 => function ($stackPos) { - $this->semValue = new Stmt\While_($this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 137 => function ($stackPos) { - $this->semValue = new Stmt\Do_($this->semStack[$stackPos - (5 - 4)], \is_array($this->semStack[$stackPos - (5 - 2)]) ? $this->semStack[$stackPos - (5 - 2)] : array($this->semStack[$stackPos - (5 - 2)]), $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); - }, 138 => function ($stackPos) { - $this->semValue = new Stmt\For_(['init' => $this->semStack[$stackPos - (9 - 3)], 'cond' => $this->semStack[$stackPos - (9 - 5)], 'loop' => $this->semStack[$stackPos - (9 - 7)], 'stmts' => $this->semStack[$stackPos - (9 - 9)]], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes); - }, 139 => function ($stackPos) { - $this->semValue = new Stmt\Switch_($this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 140 => function ($stackPos) { - $this->semValue = new Stmt\Break_(null, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - }, 141 => function ($stackPos) { - $this->semValue = new Stmt\Break_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 142 => function ($stackPos) { - $this->semValue = new Stmt\Continue_(null, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - }, 143 => function ($stackPos) { - $this->semValue = new Stmt\Continue_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 144 => function ($stackPos) { - $this->semValue = new Stmt\Return_(null, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - }, 145 => function ($stackPos) { - $this->semValue = new Stmt\Return_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 146 => function ($stackPos) { - $this->semValue = new Stmt\Global_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 147 => function ($stackPos) { - $this->semValue = new Stmt\Static_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 148 => function ($stackPos) { - $this->semValue = new Stmt\Echo_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 149 => function ($stackPos) { - $this->semValue = new Stmt\InlineHTML($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 150 => function ($stackPos) { - $this->semValue = new Stmt\Expression($this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - }, 151 => function ($stackPos) { - $this->semValue = new Stmt\Expression($this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - }, 152 => function ($stackPos) { - $this->semValue = new Stmt\Unset_($this->semStack[$stackPos - (5 - 3)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); - }, 153 => function ($stackPos) { - $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos - (7 - 3)], $this->semStack[$stackPos - (7 - 5)][0], ['keyVar' => null, 'byRef' => $this->semStack[$stackPos - (7 - 5)][1], 'stmts' => $this->semStack[$stackPos - (7 - 7)]], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes); - }, 154 => function ($stackPos) { - $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos - (9 - 3)], $this->semStack[$stackPos - (9 - 7)][0], ['keyVar' => $this->semStack[$stackPos - (9 - 5)], 'byRef' => $this->semStack[$stackPos - (9 - 7)][1], 'stmts' => $this->semStack[$stackPos - (9 - 9)]], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes); - }, 155 => function ($stackPos) { - $this->semValue = new Stmt\Declare_($this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); - }, 156 => function ($stackPos) { - $this->semValue = new Stmt\TryCatch($this->semStack[$stackPos - (6 - 3)], $this->semStack[$stackPos - (6 - 5)], $this->semStack[$stackPos - (6 - 6)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); - $this->checkTryCatch($this->semValue); - }, 157 => function ($stackPos) { - $this->semValue = new Stmt\Throw_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + }, 154 => null, 155 => null, 156 => null, 157 => function ($stackPos) { + throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 158 => function ($stackPos) { - $this->semValue = new Stmt\Goto_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Block($this->semStack[$stackPos - (3 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 159 => function ($stackPos) { - $this->semValue = new Stmt\Label($this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\If_($this->semStack[$stackPos - (7 - 3)], ['stmts' => $this->semStack[$stackPos - (7 - 5)], 'elseifs' => $this->semStack[$stackPos - (7 - 6)], 'else' => $this->semStack[$stackPos - (7 - 7)]], $this->getAttributes($this->tokenStartStack[$stackPos - (7 - 1)], $this->tokenEndStack[$stackPos])); }, 160 => function ($stackPos) { - $this->semValue = new Stmt\Expression($this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\If_($this->semStack[$stackPos - (10 - 3)], ['stmts' => $this->semStack[$stackPos - (10 - 6)], 'elseifs' => $this->semStack[$stackPos - (10 - 7)], 'else' => $this->semStack[$stackPos - (10 - 8)]], $this->getAttributes($this->tokenStartStack[$stackPos - (10 - 1)], $this->tokenEndStack[$stackPos])); }, 161 => function ($stackPos) { - $this->semValue = array(); - /* means: no statement */ + $this->semValue = new Stmt\While_($this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->getAttributes($this->tokenStartStack[$stackPos - (5 - 1)], $this->tokenEndStack[$stackPos])); }, 162 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Stmt\Do_($this->semStack[$stackPos - (7 - 5)], $this->semStack[$stackPos - (7 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (7 - 1)], $this->tokenEndStack[$stackPos])); }, 163 => function ($stackPos) { - $startAttributes = $this->startAttributeStack[$stackPos - (1 - 1)]; - if (isset($startAttributes['comments'])) { - $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); - } else { - $this->semValue = null; - } - if ($this->semValue === null) { - $this->semValue = array(); - } - /* means: no statement */ + $this->semValue = new Stmt\For_(['init' => $this->semStack[$stackPos - (9 - 3)], 'cond' => $this->semStack[$stackPos - (9 - 5)], 'loop' => $this->semStack[$stackPos - (9 - 7)], 'stmts' => $this->semStack[$stackPos - (9 - 9)]], $this->getAttributes($this->tokenStartStack[$stackPos - (9 - 1)], $this->tokenEndStack[$stackPos])); }, 164 => function ($stackPos) { - $this->semValue = array(); + $this->semValue = new Stmt\Switch_($this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->getAttributes($this->tokenStartStack[$stackPos - (5 - 1)], $this->tokenEndStack[$stackPos])); }, 165 => function ($stackPos) { - $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; + $this->semValue = new Stmt\Break_($this->semStack[$stackPos - (3 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 166 => function ($stackPos) { - $this->semValue = new Stmt\Catch_(array($this->semStack[$stackPos - (8 - 3)]), $this->semStack[$stackPos - (8 - 4)], $this->semStack[$stackPos - (8 - 7)], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Continue_($this->semStack[$stackPos - (3 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 167 => function ($stackPos) { - $this->semValue = null; + $this->semValue = new Stmt\Return_($this->semStack[$stackPos - (3 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 168 => function ($stackPos) { - $this->semValue = new Stmt\Finally_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Global_($this->semStack[$stackPos - (3 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 169 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); + $this->semValue = new Stmt\Static_($this->semStack[$stackPos - (3 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 170 => function ($stackPos) { - $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; - $this->semValue = $this->semStack[$stackPos - (3 - 1)]; + $this->semValue = new Stmt\Echo_($this->semStack[$stackPos - (3 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 171 => function ($stackPos) { - $this->semValue = \false; + $this->semValue = new Stmt\InlineHTML($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + $this->semValue->setAttribute('hasLeadingNewline', $this->inlineHtmlHasLeadingNewline($stackPos - (1 - 1))); }, 172 => function ($stackPos) { - $this->semValue = \true; + $this->semValue = new Stmt\Expression($this->semStack[$stackPos - (2 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 173 => function ($stackPos) { - $this->semValue = \false; + $this->semValue = new Stmt\Unset_($this->semStack[$stackPos - (5 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (5 - 1)], $this->tokenEndStack[$stackPos])); }, 174 => function ($stackPos) { - $this->semValue = \true; + $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos - (7 - 3)], $this->semStack[$stackPos - (7 - 5)][0], ['keyVar' => null, 'byRef' => $this->semStack[$stackPos - (7 - 5)][1], 'stmts' => $this->semStack[$stackPos - (7 - 7)]], $this->getAttributes($this->tokenStartStack[$stackPos - (7 - 1)], $this->tokenEndStack[$stackPos])); }, 175 => function ($stackPos) { - $this->semValue = \false; + $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos - (9 - 3)], $this->semStack[$stackPos - (9 - 7)][0], ['keyVar' => $this->semStack[$stackPos - (9 - 5)], 'byRef' => $this->semStack[$stackPos - (9 - 7)][1], 'stmts' => $this->semStack[$stackPos - (9 - 9)]], $this->getAttributes($this->tokenStartStack[$stackPos - (9 - 1)], $this->tokenEndStack[$stackPos])); }, 176 => function ($stackPos) { - $this->semValue = \true; + $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos - (6 - 3)], new Expr\Error($this->getAttributes($this->tokenStartStack[$stackPos - (6 - 4)], $this->tokenEndStack[$stackPos - (6 - 4)])), ['stmts' => $this->semStack[$stackPos - (6 - 6)]], $this->getAttributes($this->tokenStartStack[$stackPos - (6 - 1)], $this->tokenEndStack[$stackPos])); }, 177 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Stmt\Declare_($this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->getAttributes($this->tokenStartStack[$stackPos - (5 - 1)], $this->tokenEndStack[$stackPos])); }, 178 => function ($stackPos) { - $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\TryCatch($this->semStack[$stackPos - (6 - 3)], $this->semStack[$stackPos - (6 - 5)], $this->semStack[$stackPos - (6 - 6)], $this->getAttributes($this->tokenStartStack[$stackPos - (6 - 1)], $this->tokenEndStack[$stackPos])); + $this->checkTryCatch($this->semValue); }, 179 => function ($stackPos) { - $this->semValue = new Stmt\Function_($this->semStack[$stackPos - (10 - 3)], ['byRef' => $this->semStack[$stackPos - (10 - 2)], 'params' => $this->semStack[$stackPos - (10 - 5)], 'returnType' => $this->semStack[$stackPos - (10 - 7)], 'stmts' => $this->semStack[$stackPos - (10 - 9)]], $this->startAttributeStack[$stackPos - (10 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Goto_($this->semStack[$stackPos - (3 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 180 => function ($stackPos) { - $this->semValue = new Stmt\Class_($this->semStack[$stackPos - (7 - 2)], ['type' => $this->semStack[$stackPos - (7 - 1)], 'extends' => $this->semStack[$stackPos - (7 - 3)], 'implements' => $this->semStack[$stackPos - (7 - 4)], 'stmts' => $this->semStack[$stackPos - (7 - 6)]], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes); - $this->checkClass($this->semValue, $stackPos - (7 - 2)); + $this->semValue = new Stmt\Label($this->semStack[$stackPos - (2 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 181 => function ($stackPos) { - $this->semValue = new Stmt\Interface_($this->semStack[$stackPos - (6 - 2)], ['extends' => $this->semStack[$stackPos - (6 - 3)], 'stmts' => $this->semStack[$stackPos - (6 - 5)]], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); - $this->checkInterface($this->semValue, $stackPos - (6 - 2)); - }, 182 => function ($stackPos) { - $this->semValue = new Stmt\Trait_($this->semStack[$stackPos - (5 - 2)], ['stmts' => $this->semStack[$stackPos - (5 - 4)]], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); - }, 183 => function ($stackPos) { - $this->semValue = 0; + $this->semValue = null; + /* means: no statement */ + }, 182 => null, 183 => function ($stackPos) { + $this->semValue = $this->maybeCreateNop($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos]); }, 184 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT; + if ($this->semStack[$stackPos - (1 - 1)] instanceof Stmt\Block) { + $this->semValue = $this->semStack[$stackPos - (1 - 1)]->stmts; + } else { + if ($this->semStack[$stackPos - (1 - 1)] === null) { + $this->semValue = []; + } else { + $this->semValue = [$this->semStack[$stackPos - (1 - 1)]]; + } + } }, 185 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_FINAL; + $this->semValue = array(); }, 186 => function ($stackPos) { - $this->semValue = null; + $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; + $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 187 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 2)]; + $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 188 => function ($stackPos) { - $this->semValue = array(); + $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; + $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 189 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 2)]; + $this->semValue = new Stmt\Catch_($this->semStack[$stackPos - (8 - 3)], $this->semStack[$stackPos - (8 - 4)], $this->semStack[$stackPos - (8 - 7)], $this->getAttributes($this->tokenStartStack[$stackPos - (8 - 1)], $this->tokenEndStack[$stackPos])); }, 190 => function ($stackPos) { - $this->semValue = array(); + $this->semValue = null; }, 191 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 2)]; - }, 192 => function ($stackPos) { + $this->semValue = new Stmt\Finally_($this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); + }, 192 => null, 193 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 193 => function ($stackPos) { + }, 194 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 194 => function ($stackPos) { - $this->semValue = \is_array($this->semStack[$stackPos - (1 - 1)]) ? $this->semStack[$stackPos - (1 - 1)] : array($this->semStack[$stackPos - (1 - 1)]); }, 195 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (4 - 2)]; + $this->semValue = \false; }, 196 => function ($stackPos) { - $this->semValue = \is_array($this->semStack[$stackPos - (1 - 1)]) ? $this->semStack[$stackPos - (1 - 1)] : array($this->semStack[$stackPos - (1 - 1)]); + $this->semValue = \true; }, 197 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (4 - 2)]; + $this->semValue = \false; }, 198 => function ($stackPos) { - $this->semValue = \is_array($this->semStack[$stackPos - (1 - 1)]) ? $this->semStack[$stackPos - (1 - 1)] : array($this->semStack[$stackPos - (1 - 1)]); + $this->semValue = \true; }, 199 => function ($stackPos) { - $this->semValue = null; + $this->semValue = \false; }, 200 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (4 - 2)]; + $this->semValue = \true; }, 201 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 202 => function ($stackPos) { - $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; - $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 203 => function ($stackPos) { - $this->semValue = new Stmt\DeclareDeclare($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 204 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; + }, 202 => function ($stackPos) { + $this->semValue = []; + }, 203 => null, 204 => function ($stackPos) { + $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 205 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (4 - 3)]; + $this->semValue = new Stmt\Function_($this->semStack[$stackPos - (8 - 3)], ['byRef' => $this->semStack[$stackPos - (8 - 2)], 'params' => $this->semStack[$stackPos - (8 - 5)], 'returnType' => $this->semStack[$stackPos - (8 - 7)], 'stmts' => $this->semStack[$stackPos - (8 - 8)], 'attrGroups' => []], $this->getAttributes($this->tokenStartStack[$stackPos - (8 - 1)], $this->tokenEndStack[$stackPos])); }, 206 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (4 - 2)]; + $this->semValue = new Stmt\Function_($this->semStack[$stackPos - (9 - 4)], ['byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 6)], 'returnType' => $this->semStack[$stackPos - (9 - 8)], 'stmts' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => $this->semStack[$stackPos - (9 - 1)]], $this->getAttributes($this->tokenStartStack[$stackPos - (9 - 1)], $this->tokenEndStack[$stackPos])); }, 207 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (5 - 3)]; + $this->semValue = new Stmt\Class_($this->semStack[$stackPos - (7 - 2)], ['type' => $this->semStack[$stackPos - (7 - 1)], 'extends' => $this->semStack[$stackPos - (7 - 3)], 'implements' => $this->semStack[$stackPos - (7 - 4)], 'stmts' => $this->semStack[$stackPos - (7 - 6)], 'attrGroups' => []], $this->getAttributes($this->tokenStartStack[$stackPos - (7 - 1)], $this->tokenEndStack[$stackPos])); + $this->checkClass($this->semValue, $stackPos - (7 - 2)); }, 208 => function ($stackPos) { - $this->semValue = array(); + $this->semValue = new Stmt\Class_($this->semStack[$stackPos - (8 - 3)], ['type' => $this->semStack[$stackPos - (8 - 2)], 'extends' => $this->semStack[$stackPos - (8 - 4)], 'implements' => $this->semStack[$stackPos - (8 - 5)], 'stmts' => $this->semStack[$stackPos - (8 - 7)], 'attrGroups' => $this->semStack[$stackPos - (8 - 1)]], $this->getAttributes($this->tokenStartStack[$stackPos - (8 - 1)], $this->tokenEndStack[$stackPos])); + $this->checkClass($this->semValue, $stackPos - (8 - 3)); }, 209 => function ($stackPos) { - $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; + $this->semValue = new Stmt\Interface_($this->semStack[$stackPos - (7 - 3)], ['extends' => $this->semStack[$stackPos - (7 - 4)], 'stmts' => $this->semStack[$stackPos - (7 - 6)], 'attrGroups' => $this->semStack[$stackPos - (7 - 1)]], $this->getAttributes($this->tokenStartStack[$stackPos - (7 - 1)], $this->tokenEndStack[$stackPos])); + $this->checkInterface($this->semValue, $stackPos - (7 - 3)); }, 210 => function ($stackPos) { - $this->semValue = new Stmt\Case_($this->semStack[$stackPos - (4 - 2)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Trait_($this->semStack[$stackPos - (6 - 3)], ['stmts' => $this->semStack[$stackPos - (6 - 5)], 'attrGroups' => $this->semStack[$stackPos - (6 - 1)]], $this->getAttributes($this->tokenStartStack[$stackPos - (6 - 1)], $this->tokenEndStack[$stackPos])); }, 211 => function ($stackPos) { - $this->semValue = new Stmt\Case_(null, $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Enum_($this->semStack[$stackPos - (8 - 3)], ['scalarType' => $this->semStack[$stackPos - (8 - 4)], 'implements' => $this->semStack[$stackPos - (8 - 5)], 'stmts' => $this->semStack[$stackPos - (8 - 7)], 'attrGroups' => $this->semStack[$stackPos - (8 - 1)]], $this->getAttributes($this->tokenStartStack[$stackPos - (8 - 1)], $this->tokenEndStack[$stackPos])); + $this->checkEnum($this->semValue, $stackPos - (8 - 3)); }, 212 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; + $this->semValue = null; }, 213 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; + $this->semValue = $this->semStack[$stackPos - (2 - 2)]; }, 214 => function ($stackPos) { - $this->semValue = \is_array($this->semStack[$stackPos - (1 - 1)]) ? $this->semStack[$stackPos - (1 - 1)] : array($this->semStack[$stackPos - (1 - 1)]); + $this->semValue = null; }, 215 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (4 - 2)]; + $this->semValue = $this->semStack[$stackPos - (2 - 2)]; }, 216 => function ($stackPos) { - $this->semValue = array(); - }, 217 => function ($stackPos) { - $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 218 => function ($stackPos) { - $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos - (3 - 2)], \is_array($this->semStack[$stackPos - (3 - 3)]) ? $this->semStack[$stackPos - (3 - 3)] : array($this->semStack[$stackPos - (3 - 3)]), $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 219 => function ($stackPos) { - $this->semValue = array(); + $this->semValue = 0; + }, 217 => null, 218 => null, 219 => function ($stackPos) { + $this->checkClassModifier($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $stackPos - (2 - 2)); + $this->semValue = $this->semStack[$stackPos - (2 - 1)] | $this->semStack[$stackPos - (2 - 2)]; }, 220 => function ($stackPos) { - $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; + $this->semValue = Modifiers::ABSTRACT; }, 221 => function ($stackPos) { - $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos - (4 - 2)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = Modifiers::FINAL; }, 222 => function ($stackPos) { - $this->semValue = null; + $this->semValue = Modifiers::READONLY; }, 223 => function ($stackPos) { - $this->semValue = new Stmt\Else_(\is_array($this->semStack[$stackPos - (2 - 2)]) ? $this->semStack[$stackPos - (2 - 2)] : array($this->semStack[$stackPos - (2 - 2)]), $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - }, 224 => function ($stackPos) { $this->semValue = null; + }, 224 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos - (2 - 2)]; }, 225 => function ($stackPos) { - $this->semValue = new Stmt\Else_($this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = array(); }, 226 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (1 - 1)], \false); + $this->semValue = $this->semStack[$stackPos - (2 - 2)]; }, 227 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (2 - 2)], \true); - }, 228 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (1 - 1)], \false); - }, 229 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 230 => function ($stackPos) { $this->semValue = array(); - }, 231 => function ($stackPos) { + }, 228 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos - (2 - 2)]; + }, 229 => null, 230 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 232 => function ($stackPos) { + }, 231 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 233 => function ($stackPos) { - $this->semValue = new Node\Param($this->semStack[$stackPos - (4 - 4)], null, $this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 2)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); - $this->checkParam($this->semValue); - }, 234 => function ($stackPos) { - $this->semValue = new Node\Param($this->semStack[$stackPos - (6 - 4)], $this->semStack[$stackPos - (6 - 6)], $this->semStack[$stackPos - (6 - 1)], $this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 3)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); - $this->checkParam($this->semValue); - }, 235 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + }, 232 => null, 233 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos - (4 - 2)]; + }, 234 => null, 235 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos - (4 - 2)]; }, 236 => function ($stackPos) { - $this->semValue = new Node\Identifier('array', $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + if ($this->semStack[$stackPos - (1 - 1)] instanceof Stmt\Block) { + $this->semValue = $this->semStack[$stackPos - (1 - 1)]->stmts; + } else { + if ($this->semStack[$stackPos - (1 - 1)] === null) { + $this->semValue = []; + } else { + $this->semValue = [$this->semStack[$stackPos - (1 - 1)]]; + } + } }, 237 => function ($stackPos) { - $this->semValue = new Node\Identifier('callable', $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 238 => function ($stackPos) { - $this->semValue = null; - }, 239 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 240 => function ($stackPos) { $this->semValue = null; + }, 238 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos - (4 - 2)]; + }, 239 => null, 240 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 241 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 2)]; + $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; + $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 242 => function ($stackPos) { - $this->semValue = array(); + $this->semValue = new Node\DeclareItem($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 243 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 244 => function ($stackPos) { - $this->semValue = array(new Node\Arg($this->semStack[$stackPos - (3 - 2)], \false, \false, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes)); + $this->semValue = $this->semStack[$stackPos - (4 - 3)]; }, 245 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); + $this->semValue = $this->semStack[$stackPos - (4 - 2)]; }, 246 => function ($stackPos) { - $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; - $this->semValue = $this->semStack[$stackPos - (3 - 1)]; + $this->semValue = $this->semStack[$stackPos - (5 - 3)]; }, 247 => function ($stackPos) { - $this->semValue = new Node\Arg($this->semStack[$stackPos - (1 - 1)], \false, \false, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = array(); }, 248 => function ($stackPos) { - $this->semValue = new Node\Arg($this->semStack[$stackPos - (2 - 2)], \true, \false, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; + $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 249 => function ($stackPos) { - $this->semValue = new Node\Arg($this->semStack[$stackPos - (2 - 2)], \false, \true, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Case_($this->semStack[$stackPos - (4 - 2)], $this->semStack[$stackPos - (4 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 250 => function ($stackPos) { - $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; - $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 251 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 252 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 253 => function ($stackPos) { - $this->semValue = new Expr\Variable($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Case_(null, $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 251 => null, 252 => null, 253 => function ($stackPos) { + $this->semValue = new Expr\Match_($this->semStack[$stackPos - (7 - 3)], $this->semStack[$stackPos - (7 - 6)], $this->getAttributes($this->tokenStartStack[$stackPos - (7 - 1)], $this->tokenEndStack[$stackPos])); }, 254 => function ($stackPos) { - $this->semValue = new Expr\Variable($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); - }, 255 => function ($stackPos) { - $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; - $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 256 => function ($stackPos) { + $this->semValue = []; + }, 255 => null, 256 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 257 => function ($stackPos) { - $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos - (1 - 1)], null, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; + $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 258 => function ($stackPos) { - $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Node\MatchArm($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 259 => function ($stackPos) { - if ($this->semStack[$stackPos - (2 - 2)] !== null) { - $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - } + $this->semValue = new Node\MatchArm(null, $this->semStack[$stackPos - (4 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 260 => function ($stackPos) { - $this->semValue = array(); - }, 261 => function ($stackPos) { - $startAttributes = $this->lookaheadStartAttributes; - if (isset($startAttributes['comments'])) { - $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); - } else { - $nop = null; - } - if ($nop !== null) { - $this->semStack[$stackPos - (1 - 1)][] = $nop; - } $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + }, 261 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos - (4 - 2)]; }, 262 => function ($stackPos) { - $this->semValue = new Stmt\Property($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - $this->checkProperty($this->semValue, $stackPos - (3 - 1)); + $this->semValue = array(); }, 263 => function ($stackPos) { - $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos - (3 - 2)], 0, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; + $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 264 => function ($stackPos) { - $this->semValue = new Stmt\ClassMethod($this->semStack[$stackPos - (9 - 4)], ['type' => $this->semStack[$stackPos - (9 - 1)], 'byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 6)], 'returnType' => $this->semStack[$stackPos - (9 - 8)], 'stmts' => $this->semStack[$stackPos - (9 - 9)]], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes); - $this->checkClassMethod($this->semValue, $stackPos - (9 - 1)); + $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->getAttributes($this->tokenStartStack[$stackPos - (5 - 1)], $this->tokenEndStack[$stackPos])); }, 265 => function ($stackPos) { - $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 266 => function ($stackPos) { $this->semValue = array(); + }, 266 => function ($stackPos) { + $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; + $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 267 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (3 - 2)]; + $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos - (6 - 3)], $this->semStack[$stackPos - (6 - 6)], $this->getAttributes($this->tokenStartStack[$stackPos - (6 - 1)], $this->tokenEndStack[$stackPos])); + $this->fixupAlternativeElse($this->semValue); }, 268 => function ($stackPos) { - $this->semValue = array(); + $this->semValue = null; }, 269 => function ($stackPos) { - $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; + $this->semValue = new Stmt\Else_($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 270 => function ($stackPos) { - $this->semValue = new Stmt\TraitUseAdaptation\Precedence($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = null; }, 271 => function ($stackPos) { - $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (5 - 1)][0], $this->semStack[$stackPos - (5 - 1)][1], $this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 4)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Else_($this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + $this->fixupAlternativeElse($this->semValue); }, 272 => function ($stackPos) { - $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], $this->semStack[$stackPos - (4 - 3)], null, $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = array($this->semStack[$stackPos - (1 - 1)], \false); }, 273 => function ($stackPos) { - $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], null, $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = array($this->semStack[$stackPos - (2 - 2)], \true); }, 274 => function ($stackPos) { - $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], null, $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = array($this->semStack[$stackPos - (1 - 1)], \false); }, 275 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]); - }, 276 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 277 => function ($stackPos) { - $this->semValue = array(null, $this->semStack[$stackPos - (1 - 1)]); + $this->semValue = array($this->fixupArrayDestructuring($this->semStack[$stackPos - (1 - 1)]), \false); + }, 276 => null, 277 => function ($stackPos) { + $this->semValue = array(); }, 278 => function ($stackPos) { - $this->semValue = null; + $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 279 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (3 - 2)]; + $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; + $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 280 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 281 => function ($stackPos) { $this->semValue = 0; + }, 281 => function ($stackPos) { + $this->checkModifier($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $stackPos - (2 - 2)); + $this->semValue = $this->semStack[$stackPos - (2 - 1)] | $this->semStack[$stackPos - (2 - 2)]; }, 282 => function ($stackPos) { - $this->semValue = 0; + $this->semValue = Modifiers::PUBLIC; }, 283 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = Modifiers::PROTECTED; }, 284 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = Modifiers::PRIVATE; }, 285 => function ($stackPos) { - $this->checkModifier($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $stackPos - (2 - 2)); - $this->semValue = $this->semStack[$stackPos - (2 - 1)] | $this->semStack[$stackPos - (2 - 2)]; + $this->semValue = Modifiers::READONLY; }, 286 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_PUBLIC; + $this->semValue = new Node\Param($this->semStack[$stackPos - (6 - 6)], null, $this->semStack[$stackPos - (6 - 3)], $this->semStack[$stackPos - (6 - 4)], $this->semStack[$stackPos - (6 - 5)], $this->getAttributes($this->tokenStartStack[$stackPos - (6 - 1)], $this->tokenEndStack[$stackPos]), $this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 1)]); + $this->checkParam($this->semValue); }, 287 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_PROTECTED; + $this->semValue = new Node\Param($this->semStack[$stackPos - (8 - 6)], $this->semStack[$stackPos - (8 - 8)], $this->semStack[$stackPos - (8 - 3)], $this->semStack[$stackPos - (8 - 4)], $this->semStack[$stackPos - (8 - 5)], $this->getAttributes($this->tokenStartStack[$stackPos - (8 - 1)], $this->tokenEndStack[$stackPos]), $this->semStack[$stackPos - (8 - 2)], $this->semStack[$stackPos - (8 - 1)]); + $this->checkParam($this->semValue); }, 288 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_PRIVATE; - }, 289 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_STATIC; - }, 290 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT; + $this->semValue = new Node\Param(new Expr\Error($this->getAttributes($this->tokenStartStack[$stackPos - (6 - 1)], $this->tokenEndStack[$stackPos])), null, $this->semStack[$stackPos - (6 - 3)], $this->semStack[$stackPos - (6 - 4)], $this->semStack[$stackPos - (6 - 5)], $this->getAttributes($this->tokenStartStack[$stackPos - (6 - 1)], $this->tokenEndStack[$stackPos]), $this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 1)]); + }, 289 => null, 290 => function ($stackPos) { + $this->semValue = new Node\NullableType($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 291 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_FINAL; - }, 292 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 293 => function ($stackPos) { - $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; - $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 294 => function ($stackPos) { - $this->semValue = new Node\VarLikeIdentifier(\substr($this->semStack[$stackPos - (1 - 1)], 1), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Node\UnionType($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 292 => null, 293 => null, 294 => function ($stackPos) { + $this->semValue = new Node\Name('static', $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 295 => function ($stackPos) { - $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos - (1 - 1)], null, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = $this->handleBuiltinTypes($this->semStack[$stackPos - (1 - 1)]); }, 296 => function ($stackPos) { - $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Node\Identifier('array', $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 297 => function ($stackPos) { - $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; - $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 298 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 299 => function ($stackPos) { - $this->semValue = array(); + $this->semValue = new Node\Identifier('callable', $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 298 => null, 299 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 300 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]); }, 301 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 302 => function ($stackPos) { - $this->semValue = new Expr\Assign($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 303 => function ($stackPos) { - $this->semValue = new Expr\Assign($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; + $this->semValue = $this->semStack[$stackPos - (3 - 1)]; + }, 302 => null, 303 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 304 => function ($stackPos) { - $this->semValue = new Expr\AssignRef($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]); }, 305 => function ($stackPos) { - $this->semValue = new Expr\AssignRef($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; + $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 306 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]); }, 307 => function ($stackPos) { - $this->semValue = new Expr\Clone_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; + $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 308 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\Plus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Node\IntersectionType($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 309 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\Minus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]); }, 310 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\Mul($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; + $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 311 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\Div($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 312 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\Concat($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 313 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\Mod($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Node\IntersectionType($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 312 => null, 313 => function ($stackPos) { + $this->semValue = new Node\NullableType($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 314 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 315 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 316 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 317 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 318 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Node\UnionType($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 315 => null, 316 => function ($stackPos) { + $this->semValue = null; + }, 317 => null, 318 => function ($stackPos) { + $this->semValue = null; }, 319 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\Pow($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = $this->semStack[$stackPos - (2 - 2)]; }, 320 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\Coalesce($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = null; }, 321 => function ($stackPos) { - $this->semValue = new Expr\PostInc($this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = array(); }, 322 => function ($stackPos) { - $this->semValue = new Expr\PreInc($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = $this->semStack[$stackPos - (4 - 2)]; }, 323 => function ($stackPos) { - $this->semValue = new Expr\PostDec($this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = array($this->semStack[$stackPos - (3 - 2)]); }, 324 => function ($stackPos) { - $this->semValue = new Expr\PreDec($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Node\VariadicPlaceholder($this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 325 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 326 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; + $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 327 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Node\Arg($this->semStack[$stackPos - (1 - 1)], \false, \false, $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 328 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Node\Arg($this->semStack[$stackPos - (2 - 2)], \true, \false, $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 329 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Node\Arg($this->semStack[$stackPos - (2 - 2)], \false, \true, $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 330 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 331 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 332 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Node\Arg($this->semStack[$stackPos - (3 - 3)], \false, \false, $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos]), $this->semStack[$stackPos - (3 - 1)]); + }, 331 => null, 332 => function ($stackPos) { + $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; + $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 333 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 334 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 335 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 336 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); + }, 334 => null, 335 => null, 336 => function ($stackPos) { + $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; + $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 337 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 338 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Node\StaticVar($this->semStack[$stackPos - (1 - 1)], null, $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 339 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Node\StaticVar($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 340 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + if ($this->semStack[$stackPos - (2 - 2)] !== null) { + $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; + $this->semValue = $this->semStack[$stackPos - (2 - 1)]; + } else { + $this->semValue = $this->semStack[$stackPos - (2 - 1)]; + } }, 341 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = array(); }, 342 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $nop = $this->maybeCreateZeroLengthNop($this->tokenPos); + if ($nop !== null) { + $this->semStack[$stackPos - (1 - 1)][] = $nop; + } + $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 343 => function ($stackPos) { - $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Property($this->semStack[$stackPos - (5 - 2)], $this->semStack[$stackPos - (5 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (5 - 1)], $this->tokenEndStack[$stackPos]), $this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 1)]); + $this->checkProperty($this->semValue, $stackPos - (5 - 2)); }, 344 => function ($stackPos) { - $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos - (5 - 4)], $this->semStack[$stackPos - (5 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (5 - 1)], $this->tokenEndStack[$stackPos]), $this->semStack[$stackPos - (5 - 1)]); + $this->checkClassConst($this->semValue, $stackPos - (5 - 2)); }, 345 => function ($stackPos) { - $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos - (6 - 5)], $this->semStack[$stackPos - (6 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (6 - 1)], $this->tokenEndStack[$stackPos]), $this->semStack[$stackPos - (6 - 1)], $this->semStack[$stackPos - (6 - 4)]); + $this->checkClassConst($this->semValue, $stackPos - (6 - 2)); }, 346 => function ($stackPos) { - $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\ClassMethod($this->semStack[$stackPos - (10 - 5)], ['type' => $this->semStack[$stackPos - (10 - 2)], 'byRef' => $this->semStack[$stackPos - (10 - 4)], 'params' => $this->semStack[$stackPos - (10 - 7)], 'returnType' => $this->semStack[$stackPos - (10 - 9)], 'stmts' => $this->semStack[$stackPos - (10 - 10)], 'attrGroups' => $this->semStack[$stackPos - (10 - 1)]], $this->getAttributes($this->tokenStartStack[$stackPos - (10 - 1)], $this->tokenEndStack[$stackPos])); + $this->checkClassMethod($this->semValue, $stackPos - (10 - 2)); }, 347 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 348 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\EnumCase($this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 4)], $this->semStack[$stackPos - (5 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (5 - 1)], $this->tokenEndStack[$stackPos])); }, 349 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = null; + /* will be skipped */ }, 350 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = array(); }, 351 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 352 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = array(); }, 353 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; + $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 354 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\TraitUseAdaptation\Precedence($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], $this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 355 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (5 - 1)][0], $this->semStack[$stackPos - (5 - 1)][1], $this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (5 - 1)], $this->tokenEndStack[$stackPos])); }, 356 => function ($stackPos) { - $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], $this->semStack[$stackPos - (4 - 3)], null, $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 357 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], null, $this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 358 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (3 - 2)]; + $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], null, $this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 359 => function ($stackPos) { - $this->semValue = new Expr\Ternary($this->semStack[$stackPos - (5 - 1)], $this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); - }, 360 => function ($stackPos) { - $this->semValue = new Expr\Ternary($this->semStack[$stackPos - (4 - 1)], null, $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); - }, 361 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]); + }, 360 => null, 361 => function ($stackPos) { + $this->semValue = array(null, $this->semStack[$stackPos - (1 - 1)]); }, 362 => function ($stackPos) { - $this->semValue = new Expr\Isset_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); - }, 363 => function ($stackPos) { - $this->semValue = new Expr\Empty_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); - }, 364 => function ($stackPos) { - $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - }, 365 => function ($stackPos) { - $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = null; + }, 363 => null, 364 => null, 365 => function ($stackPos) { + $this->semValue = 0; }, 366 => function ($stackPos) { - $this->semValue = new Expr\Eval_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - }, 367 => function ($stackPos) { - $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - }, 368 => function ($stackPos) { - $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - }, 369 => function ($stackPos) { - $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = 0; + }, 367 => null, 368 => null, 369 => function ($stackPos) { + $this->checkModifier($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $stackPos - (2 - 2)); + $this->semValue = $this->semStack[$stackPos - (2 - 1)] | $this->semStack[$stackPos - (2 - 2)]; }, 370 => function ($stackPos) { - $attrs = $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes; - $attrs['kind'] = $this->getFloatCastKind($this->semStack[$stackPos - (2 - 1)]); - $this->semValue = new Expr\Cast\Double($this->semStack[$stackPos - (2 - 2)], $attrs); + $this->semValue = Modifiers::PUBLIC; }, 371 => function ($stackPos) { - $this->semValue = new Expr\Cast\String_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = Modifiers::PROTECTED; }, 372 => function ($stackPos) { - $this->semValue = new Expr\Cast\Array_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = Modifiers::PRIVATE; }, 373 => function ($stackPos) { - $this->semValue = new Expr\Cast\Object_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = Modifiers::STATIC; }, 374 => function ($stackPos) { - $this->semValue = new Expr\Cast\Bool_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = Modifiers::ABSTRACT; }, 375 => function ($stackPos) { - $this->semValue = new Expr\Cast\Unset_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = Modifiers::FINAL; }, 376 => function ($stackPos) { - $attrs = $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes; - $attrs['kind'] = \strtolower($this->semStack[$stackPos - (2 - 1)]) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE; - $this->semValue = new Expr\Exit_($this->semStack[$stackPos - (2 - 2)], $attrs); - }, 377 => function ($stackPos) { - $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - }, 378 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = Modifiers::READONLY; + }, 377 => null, 378 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 379 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; + $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 380 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Node\VarLikeIdentifier(\substr($this->semStack[$stackPos - (1 - 1)], 1), $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 381 => function ($stackPos) { - $this->semValue = new Expr\ShellExec($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Node\PropertyItem($this->semStack[$stackPos - (1 - 1)], null, $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 382 => function ($stackPos) { - $this->semValue = new Expr\Print_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - }, 383 => function ($stackPos) { - $this->semValue = new Expr\Yield_(null, null, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 384 => function ($stackPos) { - $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - }, 385 => function ($stackPos) { - $this->semValue = new Expr\Closure(['static' => \false, 'byRef' => $this->semStack[$stackPos - (10 - 2)], 'params' => $this->semStack[$stackPos - (10 - 4)], 'uses' => $this->semStack[$stackPos - (10 - 6)], 'returnType' => $this->semStack[$stackPos - (10 - 7)], 'stmts' => $this->semStack[$stackPos - (10 - 9)]], $this->startAttributeStack[$stackPos - (10 - 1)] + $this->endAttributes); + $this->semValue = new Node\PropertyItem($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 383 => null, 384 => null, 385 => function ($stackPos) { + $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; + $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 386 => function ($stackPos) { - $this->semValue = new Expr\Closure(['static' => \true, 'byRef' => $this->semStack[$stackPos - (11 - 3)], 'params' => $this->semStack[$stackPos - (11 - 5)], 'uses' => $this->semStack[$stackPos - (11 - 7)], 'returnType' => $this->semStack[$stackPos - (11 - 8)], 'stmts' => $this->semStack[$stackPos - (11 - 10)]], $this->startAttributeStack[$stackPos - (11 - 1)] + $this->endAttributes); + $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 387 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (3 - 2)]; - }, 388 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (3 - 2)]; - }, 389 => function ($stackPos) { - $this->semValue = new Expr\Yield_($this->semStack[$stackPos - (2 - 2)], null, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - }, 390 => function ($stackPos) { - $this->semValue = new Expr\Yield_($this->semStack[$stackPos - (4 - 4)], $this->semStack[$stackPos - (4 - 2)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = array(); + }, 388 => null, 389 => null, 390 => function ($stackPos) { + $this->semValue = new Expr\Assign($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 391 => function ($stackPos) { - $attrs = $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes; - $attrs['kind'] = Expr\Array_::KIND_LONG; - $this->semValue = new Expr\Array_($this->semStack[$stackPos - (4 - 3)], $attrs); + $this->semValue = new Expr\Assign($this->fixupArrayDestructuring($this->semStack[$stackPos - (3 - 1)]), $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 392 => function ($stackPos) { - $attrs = $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes; - $attrs['kind'] = Expr\Array_::KIND_SHORT; - $this->semValue = new Expr\Array_($this->semStack[$stackPos - (3 - 2)], $attrs); + $this->semValue = new Expr\Assign($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 393 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Expr\AssignRef($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 394 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch(Scalar\String_::fromString($this->semStack[$stackPos - (4 - 1)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes), $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); - }, 395 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); - }, 396 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); - }, 397 => function ($stackPos) { - $this->semValue = array(new Stmt\Class_(null, ['type' => 0, 'extends' => $this->semStack[$stackPos - (7 - 3)], 'implements' => $this->semStack[$stackPos - (7 - 4)], 'stmts' => $this->semStack[$stackPos - (7 - 6)]], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes), $this->semStack[$stackPos - (7 - 2)]); - $this->checkClass($this->semValue[0], -1); + $this->semValue = new Expr\AssignRef($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); + if (!$this->phpVersion->allowsAssignNewByReference()) { + $this->emitError(new Error('Cannot assign new by reference', $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos]))); + } + }, 395 => null, 396 => null, 397 => function ($stackPos) { + $this->semValue = new Expr\Clone_($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 398 => function ($stackPos) { - $this->semValue = new Expr\New_($this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\Plus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 399 => function ($stackPos) { - list($class, $ctorArgs) = $this->semStack[$stackPos - (2 - 2)]; - $this->semValue = new Expr\New_($class, $ctorArgs, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\Minus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 400 => function ($stackPos) { - $this->semValue = array(); + $this->semValue = new Expr\AssignOp\Mul($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 401 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (4 - 3)]; + $this->semValue = new Expr\AssignOp\Div($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 402 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); + $this->semValue = new Expr\AssignOp\Concat($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 403 => function ($stackPos) { - $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; - $this->semValue = $this->semStack[$stackPos - (3 - 1)]; + $this->semValue = new Expr\AssignOp\Mod($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 404 => function ($stackPos) { - $this->semValue = new Expr\ClosureUse($this->semStack[$stackPos - (2 - 2)], $this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 405 => function ($stackPos) { - $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 406 => function ($stackPos) { - $this->semValue = new Expr\FuncCall($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 407 => function ($stackPos) { - $this->semValue = new Expr\FuncCall($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 408 => function ($stackPos) { - $this->semValue = new Expr\StaticCall($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 409 => function ($stackPos) { - $this->semValue = new Expr\StaticCall($this->semStack[$stackPos - (6 - 1)], $this->semStack[$stackPos - (6 - 4)], $this->semStack[$stackPos - (6 - 6)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\Pow($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 410 => function ($stackPos) { - $this->semValue = $this->fixupPhp5StaticPropCall($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\Coalesce($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 411 => function ($stackPos) { - $this->semValue = new Expr\FuncCall($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\PostInc($this->semStack[$stackPos - (2 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 412 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Expr\PreInc($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 413 => function ($stackPos) { - $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Expr\PostDec($this->semStack[$stackPos - (2 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 414 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Expr\PreDec($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 415 => function ($stackPos) { - $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 416 => function ($stackPos) { - $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 417 => function ($stackPos) { - $this->semValue = new Name\FullyQualified(\substr($this->semStack[$stackPos - (1 - 1)], 1), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 418 => function ($stackPos) { - $this->semValue = new Name\Relative(\substr($this->semStack[$stackPos - (1 - 1)], 10), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 419 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 420 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 421 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 422 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 423 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 424 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 425 => function ($stackPos) { - $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 426 => function ($stackPos) { - $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 427 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 428 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 429 => function ($stackPos) { - $this->semValue = null; + $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 430 => function ($stackPos) { - $this->semValue = null; + $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 431 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 432 => function ($stackPos) { - $this->semValue = array(); + $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 433 => function ($stackPos) { - $this->semValue = array(new Scalar\EncapsedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos - (1 - 1)], '`', \false), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes)); + $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 434 => function ($stackPos) { - foreach ($this->semStack[$stackPos - (1 - 1)] as $s) { - if ($s instanceof Node\Scalar\EncapsedStringPart) { - $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', \false); - } - } - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 435 => function ($stackPos) { - $this->semValue = array(); + $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 436 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 437 => function ($stackPos) { - $this->semValue = $this->parseLNumber($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes, \true); + $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 438 => function ($stackPos) { - $this->semValue = Scalar\DNumber::fromString($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 439 => function ($stackPos) { - $this->semValue = Scalar\String_::fromString($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes, \false); + $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 440 => function ($stackPos) { - $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 441 => function ($stackPos) { - $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 442 => function ($stackPos) { - $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 443 => function ($stackPos) { - $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 444 => function ($stackPos) { - $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 445 => function ($stackPos) { - $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 446 => function ($stackPos) { - $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 447 => function ($stackPos) { - $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 448 => function ($stackPos) { - $this->semValue = $this->parseDocString($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes, $this->startAttributeStack[$stackPos - (3 - 3)] + $this->endAttributeStack[$stackPos - (3 - 3)], \false); + $this->semValue = new Expr\Ternary($this->semStack[$stackPos - (5 - 1)], $this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->getAttributes($this->tokenStartStack[$stackPos - (5 - 1)], $this->tokenEndStack[$stackPos])); }, 449 => function ($stackPos) { - $this->semValue = $this->parseDocString($this->semStack[$stackPos - (2 - 1)], '', $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes, $this->startAttributeStack[$stackPos - (2 - 2)] + $this->endAttributeStack[$stackPos - (2 - 2)], \false); + $this->semValue = new Expr\Ternary($this->semStack[$stackPos - (4 - 1)], null, $this->semStack[$stackPos - (4 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 450 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 451 => function ($stackPos) { - $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Isset_($this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 452 => function ($stackPos) { - $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Empty_($this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 453 => function ($stackPos) { - $this->semValue = new Expr\Array_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_INCLUDE, $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 454 => function ($stackPos) { - $this->semValue = new Expr\Array_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 455 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Expr\Eval_($this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 456 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_REQUIRE, $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 457 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 458 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 459 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $attrs = $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos]); + $attrs['kind'] = $this->getFloatCastKind($this->semStack[$stackPos - (2 - 1)]); + $this->semValue = new Expr\Cast\Double($this->semStack[$stackPos - (2 - 2)], $attrs); }, 460 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Cast\String_($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 461 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Cast\Array_($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 462 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Cast\Object_($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 463 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Cast\Bool_($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 464 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Cast\Unset_($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 465 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $attrs = $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos]); + $attrs['kind'] = \strtolower($this->semStack[$stackPos - (2 - 1)]) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE; + $this->semValue = new Expr\Exit_($this->semStack[$stackPos - (2 - 2)], $attrs); }, 466 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 467 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 468 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); + }, 467 => null, 468 => function ($stackPos) { + $this->semValue = new Expr\ShellExec($this->semStack[$stackPos - (3 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 469 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Print_($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 470 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Yield_(null, null, $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 471 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Yield_($this->semStack[$stackPos - (2 - 2)], null, $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 472 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Yield_($this->semStack[$stackPos - (4 - 4)], $this->semStack[$stackPos - (4 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 473 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 474 => function ($stackPos) { - $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Throw_($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 475 => function ($stackPos) { - $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\ArrowFunction(['static' => \false, 'byRef' => $this->semStack[$stackPos - (8 - 2)], 'params' => $this->semStack[$stackPos - (8 - 4)], 'returnType' => $this->semStack[$stackPos - (8 - 6)], 'expr' => $this->semStack[$stackPos - (8 - 8)], 'attrGroups' => []], $this->getAttributes($this->tokenStartStack[$stackPos - (8 - 1)], $this->tokenEndStack[$stackPos])); }, 476 => function ($stackPos) { - $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\ArrowFunction(['static' => \true, 'byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 5)], 'returnType' => $this->semStack[$stackPos - (9 - 7)], 'expr' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => []], $this->getAttributes($this->tokenStartStack[$stackPos - (9 - 1)], $this->tokenEndStack[$stackPos])); }, 477 => function ($stackPos) { - $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Closure(['static' => \false, 'byRef' => $this->semStack[$stackPos - (8 - 2)], 'params' => $this->semStack[$stackPos - (8 - 4)], 'uses' => $this->semStack[$stackPos - (8 - 6)], 'returnType' => $this->semStack[$stackPos - (8 - 7)], 'stmts' => $this->semStack[$stackPos - (8 - 8)], 'attrGroups' => []], $this->getAttributes($this->tokenStartStack[$stackPos - (8 - 1)], $this->tokenEndStack[$stackPos])); }, 478 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Closure(['static' => \true, 'byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 5)], 'uses' => $this->semStack[$stackPos - (9 - 7)], 'returnType' => $this->semStack[$stackPos - (9 - 8)], 'stmts' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => []], $this->getAttributes($this->tokenStartStack[$stackPos - (9 - 1)], $this->tokenEndStack[$stackPos])); }, 479 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\ArrowFunction(['static' => \false, 'byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 5)], 'returnType' => $this->semStack[$stackPos - (9 - 7)], 'expr' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => $this->semStack[$stackPos - (9 - 1)]], $this->getAttributes($this->tokenStartStack[$stackPos - (9 - 1)], $this->tokenEndStack[$stackPos])); }, 480 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\ArrowFunction(['static' => \true, 'byRef' => $this->semStack[$stackPos - (10 - 4)], 'params' => $this->semStack[$stackPos - (10 - 6)], 'returnType' => $this->semStack[$stackPos - (10 - 8)], 'expr' => $this->semStack[$stackPos - (10 - 10)], 'attrGroups' => $this->semStack[$stackPos - (10 - 1)]], $this->getAttributes($this->tokenStartStack[$stackPos - (10 - 1)], $this->tokenEndStack[$stackPos])); }, 481 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Closure(['static' => \false, 'byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 5)], 'uses' => $this->semStack[$stackPos - (9 - 7)], 'returnType' => $this->semStack[$stackPos - (9 - 8)], 'stmts' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => $this->semStack[$stackPos - (9 - 1)]], $this->getAttributes($this->tokenStartStack[$stackPos - (9 - 1)], $this->tokenEndStack[$stackPos])); }, 482 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Closure(['static' => \true, 'byRef' => $this->semStack[$stackPos - (10 - 4)], 'params' => $this->semStack[$stackPos - (10 - 6)], 'uses' => $this->semStack[$stackPos - (10 - 8)], 'returnType' => $this->semStack[$stackPos - (10 - 9)], 'stmts' => $this->semStack[$stackPos - (10 - 10)], 'attrGroups' => $this->semStack[$stackPos - (10 - 1)]], $this->getAttributes($this->tokenStartStack[$stackPos - (10 - 1)], $this->tokenEndStack[$stackPos])); }, 483 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = array(new Stmt\Class_(null, ['type' => $this->semStack[$stackPos - (8 - 2)], 'extends' => $this->semStack[$stackPos - (8 - 4)], 'implements' => $this->semStack[$stackPos - (8 - 5)], 'stmts' => $this->semStack[$stackPos - (8 - 7)], 'attrGroups' => $this->semStack[$stackPos - (8 - 1)]], $this->getAttributes($this->tokenStartStack[$stackPos - (8 - 1)], $this->tokenEndStack[$stackPos])), $this->semStack[$stackPos - (8 - 3)]); + $this->checkClass($this->semValue[0], -1); }, 484 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\New_($this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 485 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + list($class, $ctorArgs) = $this->semStack[$stackPos - (2 - 2)]; + $this->semValue = new Expr\New_($class, $ctorArgs, $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 486 => function ($stackPos) { - $this->semValue = new Expr\Ternary($this->semStack[$stackPos - (5 - 1)], $this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); + $this->semValue = array(); }, 487 => function ($stackPos) { - $this->semValue = new Expr\Ternary($this->semStack[$stackPos - (4 - 1)], null, $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); - }, 488 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); - }, 489 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (3 - 2)]; + $this->semValue = $this->semStack[$stackPos - (4 - 3)]; + }, 488 => null, 489 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 490 => function ($stackPos) { - $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; + $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 491 => function ($stackPos) { - $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Node\ClosureUse($this->semStack[$stackPos - (2 - 2)], $this->semStack[$stackPos - (2 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 492 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 493 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Expr\FuncCall($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 494 => function ($stackPos) { - $attrs = $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes; - $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED; - foreach ($this->semStack[$stackPos - (3 - 2)] as $s) { - if ($s instanceof Node\Scalar\EncapsedStringPart) { - $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', \true); - } - } - $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos - (3 - 2)], $attrs); + $this->semValue = new Expr\FuncCall($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 495 => function ($stackPos) { - $this->semValue = $this->parseDocString($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes, $this->startAttributeStack[$stackPos - (3 - 3)] + $this->endAttributeStack[$stackPos - (3 - 3)], \true); + $this->semValue = new Expr\FuncCall($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 496 => function ($stackPos) { - $this->semValue = array(); + $this->semValue = new Expr\StaticCall($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 497 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 498 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 499 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; + $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 498 => null, 499 => function ($stackPos) { + $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 500 => function ($stackPos) { - $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; - $this->semValue = $this->semStack[$stackPos - (3 - 1)]; + $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 501 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); + $this->semValue = new Name\FullyQualified(\substr($this->semStack[$stackPos - (1 - 1)], 1), $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 502 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (3 - 3)], $this->semStack[$stackPos - (3 - 1)], \false, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 503 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (1 - 1)], null, \false, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 504 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 505 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Name\Relative(\substr($this->semStack[$stackPos - (1 - 1)], 10), $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 503 => null, 504 => null, 505 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 506 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 507 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 508 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 5)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); - }, 509 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Error($this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + $this->errorState = 2; + }, 507 => null, 508 => null, 509 => function ($stackPos) { + $this->semValue = null; }, 510 => function ($stackPos) { - $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 511 => function ($stackPos) { - $this->semValue = new Expr\MethodCall($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = array(); }, 512 => function ($stackPos) { - $this->semValue = new Expr\FuncCall($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); + foreach ($this->semValue as $s) { + if ($s instanceof Node\InterpolatedStringPart) { + $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', $this->phpVersion->supportsUnicodeEscapes()); + } + } }, 513 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); - }, 514 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); - }, 515 => function ($stackPos) { + foreach ($this->semStack[$stackPos - (1 - 1)] as $s) { + if ($s instanceof Node\InterpolatedStringPart) { + $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', $this->phpVersion->supportsUnicodeEscapes()); + } + } $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 516 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (3 - 2)]; + }, 514 => function ($stackPos) { + $this->semValue = array(); + }, 515 => null, 516 => function ($stackPos) { + $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 517 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Scalar\MagicConst\Line($this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 518 => function ($stackPos) { - $this->semValue = new Expr\Variable($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Scalar\MagicConst\File($this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 519 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Scalar\MagicConst\Dir($this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 520 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Scalar\MagicConst\Class_($this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 521 => function ($stackPos) { - $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Scalar\MagicConst\Trait_($this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 522 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Scalar\MagicConst\Method($this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 523 => function ($stackPos) { - $var = \substr($this->semStack[$stackPos - (1 - 1)], 1); - $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes) : $var; + $this->semValue = new Scalar\MagicConst\Function_($this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 524 => function ($stackPos) { - $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Scalar\MagicConst\Namespace_($this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 525 => function ($stackPos) { - $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos - (6 - 1)], $this->semStack[$stackPos - (6 - 5)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); + $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 526 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos - (5 - 1)], $this->semStack[$stackPos - (5 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (5 - 1)], $this->tokenEndStack[$stackPos])); }, 527 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos - (3 - 1)], new Expr\Error($this->getAttributes($this->tokenStartStack[$stackPos - (3 - 3)], $this->tokenEndStack[$stackPos - (3 - 3)])), $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + $this->errorState = 2; }, 528 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $attrs = $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos]); + $attrs['kind'] = Expr\Array_::KIND_SHORT; + $this->semValue = new Expr\Array_($this->semStack[$stackPos - (3 - 2)], $attrs); }, 529 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $attrs = $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos]); + $attrs['kind'] = Expr\Array_::KIND_LONG; + $this->semValue = new Expr\Array_($this->semStack[$stackPos - (4 - 3)], $attrs); + $this->createdArrays->attach($this->semValue); }, 530 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->createdArrays->attach($this->semValue); }, 531 => function ($stackPos) { - $this->semValue = new Expr\Variable($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = Scalar\String_::fromString($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos]), $this->phpVersion->supportsUnicodeEscapes()); }, 532 => function ($stackPos) { - $this->semValue = null; + $attrs = $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos]); + $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED; + foreach ($this->semStack[$stackPos - (3 - 2)] as $s) { + if ($s instanceof Node\InterpolatedStringPart) { + $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', $this->phpVersion->supportsUnicodeEscapes()); + } + } + $this->semValue = new Scalar\InterpolatedString($this->semStack[$stackPos - (3 - 2)], $attrs); }, 533 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = $this->parseLNumber($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos]), $this->phpVersion->allowsInvalidOctals()); }, 534 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 535 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (3 - 2)]; - }, 536 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 537 => function ($stackPos) { - $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - $this->errorState = 2; - }, 538 => function ($stackPos) { - $this->semValue = new Expr\List_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = Scalar\Float_::fromString($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 535 => null, 536 => null, 537 => null, 538 => function ($stackPos) { + $this->semValue = $this->parseDocString($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos]), $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 3)], $this->tokenEndStack[$stackPos - (3 - 3)]), \true); }, 539 => function ($stackPos) { - $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; - $this->semValue = $this->semStack[$stackPos - (3 - 1)]; + $this->semValue = $this->parseDocString($this->semStack[$stackPos - (2 - 1)], '', $this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos]), $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 2)], $this->tokenEndStack[$stackPos - (2 - 2)]), \true); }, 540 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); + $this->semValue = $this->parseDocString($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos]), $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 3)], $this->tokenEndStack[$stackPos - (3 - 3)]), \true); }, 541 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (1 - 1)], null, \false, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 542 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (1 - 1)], null, \false, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 543 => function ($stackPos) { $this->semValue = null; - }, 544 => function ($stackPos) { - $this->semValue = array(); - }, 545 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 546 => function ($stackPos) { + }, 542 => null, 543 => null, 544 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos - (3 - 2)]; + }, 545 => null, 546 => null, 547 => null, 548 => null, 549 => null, 550 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos - (3 - 2)]; + }, 551 => null, 552 => null, 553 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); + }, 554 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); + }, 555 => null, 556 => function ($stackPos) { + $this->semValue = new Expr\MethodCall($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); + }, 557 => function ($stackPos) { + $this->semValue = new Expr\NullsafeMethodCall($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); + }, 558 => function ($stackPos) { + $this->semValue = null; + }, 559 => null, 560 => null, 561 => null, 562 => function ($stackPos) { + $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 563 => function ($stackPos) { + $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 564 => null, 565 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); + }, 566 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); + }, 567 => function ($stackPos) { + $this->semValue = new Expr\Variable(new Expr\Error($this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])), $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); + $this->errorState = 2; + }, 568 => function ($stackPos) { + $var = $this->semStack[$stackPos - (1 - 1)]->name; + $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])) : $var; + }, 569 => function ($stackPos) { + $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 570 => null, 571 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); + }, 572 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); + }, 573 => function ($stackPos) { + $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 574 => function ($stackPos) { + $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 575 => function ($stackPos) { + $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 576 => function ($stackPos) { + $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 577 => null, 578 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos - (3 - 2)]; + }, 579 => null, 580 => null, 581 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos - (3 - 2)]; + }, 582 => null, 583 => function ($stackPos) { + $this->semValue = new Expr\Error($this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + $this->errorState = 2; + }, 584 => function ($stackPos) { + $this->semValue = new Expr\List_($this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); + $this->semValue->setAttribute('kind', Expr\List_::KIND_LIST); + $this->postprocessList($this->semValue); + }, 585 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $end = \count($this->semValue) - 1; + if ($this->semValue[$end]->value instanceof Expr\Error) { + \array_pop($this->semValue); + } + }, 586 => null, 587 => function ($stackPos) { + /* do nothing -- prevent default action of $$=$this->semStack[$1]. See $551. */ + }, 588 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 547 => function ($stackPos) { + }, 589 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 548 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (3 - 3)], $this->semStack[$stackPos - (3 - 1)], \false, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 549 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (1 - 1)], null, \false, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 550 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (4 - 4)], $this->semStack[$stackPos - (4 - 1)], \true, $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); - }, 551 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (2 - 2)], null, \true, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - }, 552 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (2 - 2)], null, \false, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes, \true, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - }, 553 => function ($stackPos) { + }, 590 => function ($stackPos) { + $this->semValue = new Node\ArrayItem($this->semStack[$stackPos - (1 - 1)], null, \false, $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 591 => function ($stackPos) { + $this->semValue = new Node\ArrayItem($this->semStack[$stackPos - (2 - 2)], null, \true, $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); + }, 592 => function ($stackPos) { + $this->semValue = new Node\ArrayItem($this->semStack[$stackPos - (1 - 1)], null, \false, $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 593 => function ($stackPos) { + $this->semValue = new Node\ArrayItem($this->semStack[$stackPos - (3 - 3)], $this->semStack[$stackPos - (3 - 1)], \false, $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 594 => function ($stackPos) { + $this->semValue = new Node\ArrayItem($this->semStack[$stackPos - (4 - 4)], $this->semStack[$stackPos - (4 - 1)], \true, $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); + }, 595 => function ($stackPos) { + $this->semValue = new Node\ArrayItem($this->semStack[$stackPos - (3 - 3)], $this->semStack[$stackPos - (3 - 1)], \false, $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 596 => function ($stackPos) { + $this->semValue = new Node\ArrayItem($this->semStack[$stackPos - (2 - 2)], null, \false, $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos]), \true); + }, 597 => function ($stackPos) { + /* Create an Error node now to remember the position. We'll later either report an error, + or convert this into a null element, depending on whether this is a creation or destructuring context. */ + $attrs = $this->createEmptyElemAttributes($this->tokenPos); + $this->semValue = new Node\ArrayItem(new Expr\Error($attrs), null, \false, $attrs); + }, 598 => function ($stackPos) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 554 => function ($stackPos) { + }, 599 => function ($stackPos) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 555 => function ($stackPos) { + }, 600 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 556 => function ($stackPos) { + }, 601 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)]); - }, 557 => function ($stackPos) { - $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 558 => function ($stackPos) { - $this->semValue = new Expr\Variable($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 559 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 560 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); - }, 561 => function ($stackPos) { - $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 562 => function ($stackPos) { - $this->semValue = new Expr\Variable($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 563 => function ($stackPos) { - $this->semValue = new Expr\Variable($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 564 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 4)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); - }, 565 => function ($stackPos) { + }, 602 => function ($stackPos) { + $attrs = $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos]); + $attrs['rawValue'] = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Node\InterpolatedStringPart($this->semStack[$stackPos - (1 - 1)], $attrs); + }, 603 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 604 => null, 605 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); + }, 606 => function ($stackPos) { + $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 607 => function ($stackPos) { + $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 608 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos - (3 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 609 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos - (3 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 610 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (6 - 1)], $this->tokenEndStack[$stackPos])); + }, 611 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; - }, 566 => function ($stackPos) { - $this->semValue = new Scalar\String_($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 567 => function ($stackPos) { - $this->semValue = $this->parseNumString($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 568 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }]; + }, 612 => function ($stackPos) { + $this->semValue = new Scalar\String_($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 613 => function ($stackPos) { + $this->semValue = $this->parseNumString($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 614 => function ($stackPos) { + $this->semValue = $this->parseNumString('-' . $this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); + }, 615 => null]; } } '", "T_IS_GREATER_OR_EQUAL", "T_SL", "T_SR", "'+'", "'-'", "'.'", "'*'", "'/'", "'%'", "'!'", "T_INSTANCEOF", "'~'", "T_INC", "T_DEC", "T_INT_CAST", "T_DOUBLE_CAST", "T_STRING_CAST", "T_ARRAY_CAST", "T_OBJECT_CAST", "T_BOOL_CAST", "T_UNSET_CAST", "'@'", "T_POW", "'['", "T_NEW", "T_CLONE", "T_EXIT", "T_IF", "T_ELSEIF", "T_ELSE", "T_ENDIF", "T_LNUMBER", "T_DNUMBER", "T_STRING", "T_STRING_VARNAME", "T_VARIABLE", "T_NUM_STRING", "T_INLINE_HTML", "T_ENCAPSED_AND_WHITESPACE", "T_CONSTANT_ENCAPSED_STRING", "T_ECHO", "T_DO", "T_WHILE", "T_ENDWHILE", "T_FOR", "T_ENDFOR", "T_FOREACH", "T_ENDFOREACH", "T_DECLARE", "T_ENDDECLARE", "T_AS", "T_SWITCH", "T_MATCH", "T_ENDSWITCH", "T_CASE", "T_DEFAULT", "T_BREAK", "T_CONTINUE", "T_GOTO", "T_FUNCTION", "T_FN", "T_CONST", "T_RETURN", "T_TRY", "T_CATCH", "T_FINALLY", "T_USE", "T_INSTEADOF", "T_GLOBAL", "T_STATIC", "T_ABSTRACT", "T_FINAL", "T_PRIVATE", "T_PROTECTED", "T_PUBLIC", "T_READONLY", "T_VAR", "T_UNSET", "T_ISSET", "T_EMPTY", "T_HALT_COMPILER", "T_CLASS", "T_TRAIT", "T_INTERFACE", "T_ENUM", "T_EXTENDS", "T_IMPLEMENTS", "T_OBJECT_OPERATOR", "T_NULLSAFE_OBJECT_OPERATOR", "T_LIST", "T_ARRAY", "T_CALLABLE", "T_CLASS_C", "T_TRAIT_C", "T_METHOD_C", "T_FUNC_C", "T_LINE", "T_FILE", "T_START_HEREDOC", "T_END_HEREDOC", "T_DOLLAR_OPEN_CURLY_BRACES", "T_CURLY_OPEN", "T_PAAMAYIM_NEKUDOTAYIM", "T_NAMESPACE", "T_NS_C", "T_DIR", "T_NS_SEPARATOR", "T_ELLIPSIS", "T_NAME_FULLY_QUALIFIED", "T_NAME_QUALIFIED", "T_NAME_RELATIVE", "T_ATTRIBUTE", "';'", "']'", "'{'", "'}'", "'('", "')'", "'`'", "'\"'", "'\$'"); - protected $tokenToSymbol = array(0, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 56, 166, 168, 167, 55, 168, 168, 163, 164, 53, 50, 8, 51, 52, 54, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 31, 159, 44, 16, 46, 30, 68, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 70, 168, 160, 36, 168, 165, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 161, 35, 162, 58, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43, 45, 47, 48, 49, 57, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158); - protected $action = array(132, 133, 134, 575, 135, 136, 0, 738, 739, 740, 137, 37, 850, 825, 851, 476, -32766, -32766, -32766, -32767, -32767, -32767, -32767, 101, 102, 103, 104, 105, 1097, 1098, 1099, 1096, 1095, 1094, 1100, 732, 731, -32766, 1289, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32767, -32767, -32767, -32767, -32767, 1022, 377, 376, 2, 741, -32766, -32766, -32766, -32766, -32766, 822, 417, -32766, -32766, -32766, -32766, -32766, -32766, 267, 138, 399, 745, 746, 747, 748, 287, -32766, 423, -32766, -32766, -32766, -32766, -32766, -32766, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 779, 576, 780, 781, 782, 783, 771, 772, 340, 341, 774, 775, 760, 761, 762, 764, 765, 766, 351, 806, 807, 808, 809, 810, 577, 767, 768, 578, 579, 800, 791, 789, 790, 803, 786, 787, -327, 423, 580, 581, 785, 582, 583, 584, 585, 586, 587, 605, -590, 477, -86, 814, 788, 588, 589, -590, 139, -32766, -32766, -32766, 132, 133, 134, 575, 135, 136, 1046, 738, 739, 740, 137, 37, 323, 1013, 823, 824, 1334, 1324, -32766, 1335, -32766, -32766, -32766, -32766, -32766, -32766, -32766, 1097, 1098, 1099, 1096, 1095, 1094, 1100, -587, 732, 731, -32766, -32766, -32766, 12, -587, 81, -32766, -32766, -32766, 945, 946, 322, 927, 34, 947, 1224, 1223, 1225, 741, -86, 942, -32766, 1075, -32766, -32766, -32766, -32766, -32766, 239, -32766, -32766, -32766, 267, 138, 399, 745, 746, 747, 748, 461, 462, 423, 35, 247, 103, 104, 105, 128, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 779, 576, 780, 781, 782, 783, 771, 772, 340, 341, 774, 775, 760, 761, 762, 764, 765, 766, 351, 806, 807, 808, 809, 810, 577, 767, 768, 578, 579, 800, 791, 789, 790, 803, 786, 787, -327, 144, 580, 581, 785, 582, 583, 584, 585, 586, 587, 1222, 82, 83, 84, -590, 788, 588, 589, -590, 148, 763, 733, 734, 735, 736, 737, 1309, 738, 739, 740, 776, 777, 36, 1308, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 288, 271, -587, -193, 375, 376, -587, 976, -32766, 1021, 453, 454, 455, 109, 417, 945, 946, 741, 712, 819, 947, -32766, -32766, -32766, -271, 1073, 941, 1224, 1223, 1225, 288, 742, 743, 744, 745, 746, 747, 748, -192, -365, 812, -365, -32766, 599, -32766, -32766, 549, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 779, 802, 780, 781, 782, 783, 771, 772, 773, 801, 774, 775, 760, 761, 762, 764, 765, 766, 805, 806, 807, 808, 809, 810, 811, 767, 768, 769, 770, 800, 791, 789, 790, 803, 786, 787, 251, 820, 778, 784, 785, 792, 793, 795, 794, 796, 797, 732, 731, 1261, 1022, 1019, 788, 799, 798, 49, 50, 51, 507, 52, 53, 1009, 1008, 1007, 1010, 54, 55, -111, 56, 816, 1045, 14, -111, 1022, -111, 287, 1305, 977, 306, 302, 1022, 238, -111, -111, -111, -111, -111, -111, -111, -111, 106, 107, 108, 1089, 271, -32766, -32766, -32766, 280, 284, 126, -193, 929, 57, 58, 287, 109, 1019, -541, 59, 308, 60, 244, 245, 61, 62, 63, 64, 65, 66, 67, 68, 1229, 27, 269, 69, 439, 508, -341, 1022, 929, 1255, 1256, 509, 907, 823, -192, 150, 907, 1253, 41, 24, 510, 352, 511, 818, 512, 386, 513, 11, 699, 514, 515, 648, 25, 814, 43, 44, 440, 372, 371, 907, 45, 516, 702, 1220, 667, 668, 363, 334, -540, 357, -541, -541, 320, 1215, 1249, 518, 519, 520, -581, 1074, 335, 724, -581, 1019, -32766, -541, 336, 521, 522, 703, 1243, 1244, 1245, 1246, 1240, 1241, 294, -541, 850, -547, 851, 823, 1247, 1242, 365, 1022, 1224, 1223, 1225, 295, -153, -153, -153, 369, 70, 897, 318, 319, 322, 897, 384, 149, 402, 373, 374, -153, 435, -153, 436, -153, 280, -153, -540, -540, 141, 1220, 378, 379, 639, 640, 322, 370, 897, 907, 437, 438, 829, -540, -88, 151, 732, 731, 945, 946, 153, 823, -32766, 517, -51, -540, 154, -546, 883, 941, -111, -111, -111, 31, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 155, 74, 27, 157, 32, 322, -85, 123, 124, 909, 129, 697, 130, 909, 823, 697, -153, 143, 1253, 158, -32766, -544, 1229, -542, 159, 160, 1222, 161, -79, 1134, 1136, -75, 285, -32766, -32766, -32766, 909, -32766, 697, -32766, -539, -32766, -301, -73, -32766, 897, -72, -71, 1220, -32766, -32766, -32766, -16, 140, 1215, -32766, -32766, 732, 731, 322, -70, -32766, 414, -69, -4, 907, -68, -67, 521, 522, -32766, 1243, 1244, 1245, 1246, 1240, 1241, -66, -47, -18, 147, 270, 281, 1247, 1242, -544, -544, -542, -542, 732, 731, 713, 716, 906, -32766, 72, 146, 907, 319, 322, 1222, -297, -542, 823, -539, -539, 276, -32766, -32766, -32766, 277, -32766, -544, -32766, -542, -32766, 282, 283, -32766, -539, 909, 328, 697, -32766, -32766, -32766, -32766, 704, 286, -32766, -32766, -539, 1222, 923, 289, -32766, 414, 1220, 290, -32766, -32766, -32766, 271, -32766, -32766, -32766, 47, -32766, 897, -111, -32766, 677, 109, 814, 145, -32766, -32766, -32766, -32766, 823, 131, -32766, -32766, 1336, -32766, 654, 670, -32766, 414, 1104, 370, 637, 430, 551, 73, 13, -32766, 293, 555, 295, 897, 945, 946, 649, 74, 434, 517, 458, 322, 487, 690, 842, 941, -111, -111, -111, 301, 1022, 561, 655, 671, 1260, 300, -32766, -539, -32766, 907, 603, 303, 1222, 296, 297, 39, 1262, 9, 40, -32766, -32766, -32766, 0, -32766, 907, -32766, 909, -32766, 697, -4, -32766, 0, 1229, 907, 0, -32766, -32766, -32766, -32766, 307, 125, -32766, -32766, 0, 1222, 907, 0, -32766, 414, 0, 0, -32766, -32766, -32766, 707, -32766, -32766, -32766, 962, -32766, 697, -505, -32766, 714, -495, 7, 482, -32766, -32766, -32766, -32766, -539, -539, -32766, -32766, 16, 1222, 567, 367, -32766, 414, 925, 295, -32766, -32766, -32766, -539, -32766, -32766, -32766, 822, -32766, 897, 721, -32766, 722, -575, 888, -539, -32766, -32766, -32766, 986, 963, 970, -32766, -32766, 897, -249, -249, -249, -32766, 414, 823, 370, 960, 897, 971, 886, 958, -32766, 1078, 1081, 718, 1082, 945, 946, 1079, 897, 1080, 517, 1086, 33, 1250, 834, 883, 941, -111, -111, -111, 27, 1275, 1293, 1327, -248, -248, -248, 1220, 642, 884, 370, 317, 823, 366, 698, 701, 1253, 1331, 705, -111, 706, 945, 946, 708, 709, 710, 517, 909, -32766, 697, -249, 883, 941, -111, -111, -111, 711, 715, 700, -509, 1333, 845, 909, 48, 697, -573, 1220, 844, 853, 295, 935, 909, 1215, 697, 74, 978, 852, 1332, 322, 934, 932, 933, 936, 909, 1206, 697, -248, 522, 916, 1243, 1244, 1245, 1246, 1240, 1241, 926, 914, 968, 969, 1330, 1287, 1247, 1242, 1276, 1294, -32766, 1300, 1303, 1191, -547, -546, 1222, -545, 72, -489, 1, 319, 322, -32766, -32766, -32766, 28, -32766, 29, -32766, 38, -32766, 298, 299, -32766, 42, 46, 71, 75, -32766, -32766, -32766, 76, 77, 78, -32766, -32766, 368, 79, 80, 142, -32766, 414, 152, 156, 243, 324, 352, 353, 127, -32766, -274, 354, 355, 356, 357, 358, 359, 360, 361, 362, 364, 431, 0, -272, -271, 18, 19, 20, 21, 23, 401, 478, 479, 486, 489, 490, 491, 492, 496, 497, 498, 505, 684, 1233, 1174, 1251, 1048, 1047, 1028, 0, 1210, 1024, -276, -103, 17, 22, 26, 292, 400, 596, 600, 628, 689, 1178, 1228, 1175, 1306, 0, 0, 1254, 0, 322); - protected $actionCheck = array(2, 3, 4, 5, 6, 7, 0, 9, 10, 11, 12, 13, 106, 1, 108, 31, 9, 10, 11, 44, 45, 46, 47, 48, 49, 50, 51, 52, 116, 117, 118, 119, 120, 121, 122, 37, 38, 30, 1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 138, 106, 107, 8, 57, 9, 10, 11, 9, 10, 155, 116, 9, 10, 11, 9, 10, 11, 71, 72, 73, 74, 75, 76, 77, 163, 30, 80, 32, 33, 34, 35, 36, 30, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 8, 80, 136, 137, 138, 139, 140, 141, 142, 143, 144, 51, 1, 161, 31, 80, 150, 151, 152, 8, 154, 9, 10, 11, 2, 3, 4, 5, 6, 7, 164, 9, 10, 11, 12, 13, 70, 1, 82, 159, 80, 85, 30, 83, 32, 33, 34, 35, 36, 37, 38, 116, 117, 118, 119, 120, 121, 122, 1, 37, 38, 9, 10, 11, 8, 8, 161, 9, 10, 11, 117, 118, 167, 1, 8, 122, 155, 156, 157, 57, 97, 128, 30, 162, 32, 33, 34, 35, 30, 14, 32, 33, 34, 71, 72, 73, 74, 75, 76, 77, 134, 135, 80, 147, 148, 50, 51, 52, 8, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 164, 8, 136, 137, 138, 139, 140, 141, 142, 143, 144, 80, 9, 10, 11, 160, 150, 151, 152, 164, 154, 2, 3, 4, 5, 6, 7, 1, 9, 10, 11, 12, 13, 30, 8, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 30, 57, 160, 8, 106, 107, 164, 31, 9, 137, 129, 130, 131, 69, 116, 117, 118, 57, 161, 80, 122, 9, 10, 11, 164, 1, 128, 155, 156, 157, 30, 71, 72, 73, 74, 75, 76, 77, 8, 106, 80, 108, 30, 1, 32, 33, 85, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 8, 156, 136, 137, 138, 139, 140, 141, 142, 143, 144, 37, 38, 146, 138, 116, 150, 151, 152, 2, 3, 4, 5, 6, 7, 119, 120, 121, 122, 12, 13, 101, 15, 80, 1, 101, 106, 138, 108, 163, 1, 159, 8, 113, 138, 97, 116, 117, 118, 119, 120, 121, 122, 123, 53, 54, 55, 123, 57, 9, 10, 11, 163, 30, 14, 164, 122, 50, 51, 163, 69, 116, 70, 56, 8, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 1, 70, 71, 72, 73, 74, 162, 138, 122, 78, 79, 80, 1, 82, 164, 14, 1, 86, 87, 88, 89, 163, 91, 156, 93, 106, 95, 108, 161, 98, 99, 75, 76, 80, 103, 104, 105, 106, 107, 1, 109, 110, 31, 116, 75, 76, 115, 116, 70, 163, 134, 135, 8, 122, 1, 124, 125, 126, 160, 159, 8, 161, 164, 116, 137, 149, 8, 136, 137, 31, 139, 140, 141, 142, 143, 144, 145, 161, 106, 163, 108, 82, 151, 152, 8, 138, 155, 156, 157, 158, 75, 76, 77, 8, 163, 84, 165, 166, 167, 84, 8, 101, 102, 106, 107, 90, 8, 92, 8, 94, 163, 96, 134, 135, 161, 116, 106, 107, 111, 112, 167, 106, 84, 1, 8, 8, 8, 149, 31, 14, 37, 38, 117, 118, 14, 82, 137, 122, 31, 161, 14, 163, 127, 128, 129, 130, 131, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 14, 163, 70, 14, 14, 167, 31, 16, 16, 159, 16, 161, 16, 159, 82, 161, 162, 16, 86, 16, 74, 70, 1, 70, 16, 16, 80, 16, 31, 59, 60, 31, 37, 87, 88, 89, 159, 91, 161, 93, 70, 95, 35, 31, 98, 84, 31, 31, 116, 103, 104, 105, 31, 161, 122, 109, 110, 37, 38, 167, 31, 115, 116, 31, 0, 1, 31, 31, 136, 137, 124, 139, 140, 141, 142, 143, 144, 31, 31, 31, 31, 31, 31, 151, 152, 134, 135, 134, 135, 37, 38, 31, 31, 31, 74, 163, 31, 1, 166, 167, 80, 35, 149, 82, 134, 135, 35, 87, 88, 89, 35, 91, 161, 93, 161, 95, 35, 35, 98, 149, 159, 35, 161, 103, 104, 105, 74, 31, 37, 109, 110, 161, 80, 38, 37, 115, 116, 116, 37, 87, 88, 89, 57, 91, 124, 93, 70, 95, 84, 128, 98, 77, 69, 80, 70, 103, 104, 105, 137, 82, 31, 109, 110, 83, 85, 96, 94, 115, 116, 82, 106, 113, 108, 85, 154, 97, 124, 113, 89, 158, 84, 117, 118, 90, 163, 128, 122, 97, 167, 97, 92, 127, 128, 129, 130, 131, 133, 138, 153, 100, 100, 146, 132, 74, 70, 137, 1, 153, 114, 80, 134, 135, 159, 146, 150, 159, 87, 88, 89, -1, 91, 1, 93, 159, 95, 161, 162, 98, -1, 1, 1, -1, 103, 104, 105, 74, 132, 161, 109, 110, -1, 80, 1, -1, 115, 116, -1, -1, 87, 88, 89, 31, 91, 124, 93, 159, 95, 161, 149, 98, 31, 149, 149, 102, 103, 104, 105, 74, 134, 135, 109, 110, 149, 80, 81, 149, 115, 116, 154, 158, 87, 88, 89, 149, 91, 124, 93, 155, 95, 84, 159, 98, 159, 163, 159, 161, 103, 104, 105, 159, 159, 159, 109, 110, 84, 100, 101, 102, 115, 116, 82, 106, 159, 84, 159, 159, 159, 124, 159, 159, 162, 159, 117, 118, 159, 84, 159, 122, 159, 161, 160, 160, 127, 128, 129, 130, 131, 70, 160, 160, 160, 100, 101, 102, 116, 160, 162, 106, 161, 82, 161, 161, 161, 86, 162, 161, 128, 161, 117, 118, 161, 161, 161, 122, 159, 137, 161, 162, 127, 128, 129, 130, 131, 161, 161, 161, 165, 162, 162, 159, 70, 161, 163, 116, 162, 162, 158, 162, 159, 122, 161, 163, 162, 162, 162, 167, 162, 162, 162, 162, 159, 162, 161, 162, 137, 162, 139, 140, 141, 142, 143, 144, 162, 162, 162, 162, 162, 162, 151, 152, 162, 162, 74, 162, 162, 165, 163, 163, 80, 163, 163, 163, 163, 166, 167, 87, 88, 89, 163, 91, 163, 93, 163, 95, 134, 135, 98, 163, 163, 163, 163, 103, 104, 105, 163, 163, 163, 109, 110, 149, 163, 163, 163, 115, 116, 163, 163, 163, 163, 163, 163, 161, 124, 164, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, -1, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, -1, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, -1, -1, 166, -1, 167); - protected $actionBase = array(0, -2, 154, 542, 752, 893, 929, 580, 53, 394, 855, 307, 307, 67, 307, 307, 307, 565, 908, 908, 917, 908, 538, 784, 649, 649, 649, 708, 708, 708, 708, 740, 740, 849, 849, 881, 817, 634, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 12, 323, 389, 678, 1044, 1050, 1046, 1051, 1042, 1041, 1045, 1047, 1052, 942, 943, 753, 946, 947, 949, 950, 1048, 873, 1043, 1049, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 346, 491, 50, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 54, 54, 54, 620, 620, 359, 190, 184, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 658, 47, 144, 144, 7, 7, 7, 7, 7, 371, -25, -25, -25, -25, 709, 347, 916, 474, 526, 375, 280, 317, 245, 340, 340, 187, 187, 396, 396, -87, -87, 396, 396, 396, 747, 747, 747, 747, 443, 505, -94, 308, 454, 480, 480, 480, 480, 454, 454, 454, 454, 755, 1054, 454, 454, 454, 641, 822, 822, 998, 442, 442, 442, 822, 499, 776, 88, 499, 88, 37, 92, 756, 85, -54, 425, 756, 639, 764, 189, 143, 820, 524, 820, 1040, 385, 767, 413, 735, 688, 857, 902, 1053, 787, 940, 788, 941, 228, 98, 685, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1055, 415, 1040, 286, 1055, 1055, 1055, 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, 534, 286, 483, 496, 286, 774, 415, 12, 800, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 736, -16, 12, 323, 204, 204, 427, 168, 204, 204, 204, 204, 12, 12, 12, 524, 773, 733, 537, 742, 377, 773, 773, 773, 115, 124, 207, 342, 695, 754, 446, 761, 761, 775, 957, 957, 761, 765, 761, 775, 973, 761, 761, 957, 957, 809, 232, 625, 579, 612, 627, 957, 475, 761, 761, 761, 761, 792, 643, 761, 433, 281, 761, 761, 792, 758, 739, 46, 751, 957, 957, 957, 792, 603, 751, 751, 751, 819, 821, 746, 738, 571, 507, 645, 198, 783, 738, 738, 761, 619, 746, 738, 746, 738, 812, 738, 738, 738, 746, 738, 765, 585, 738, 691, 644, 188, 738, 6, 974, 975, 624, 979, 967, 980, 1009, 981, 985, 878, 956, 992, 972, 986, 965, 963, 750, 679, 680, 801, 797, 954, 771, 771, 771, 951, 771, 771, 771, 771, 771, 771, 771, 771, 679, 858, 814, 745, 777, 995, 682, 684, 743, 872, 899, 948, 994, 1030, 987, 741, 689, 1016, 999, 846, 875, 1000, 1001, 1017, 1031, 1032, 880, 772, 903, 904, 859, 1003, 879, 771, 974, 985, 663, 972, 986, 965, 963, 734, 724, 720, 723, 717, 704, 700, 703, 737, 1033, 907, 818, 866, 1002, 952, 679, 867, 1012, 856, 1018, 1019, 877, 778, 768, 868, 910, 1004, 1005, 1006, 882, 1034, 884, 744, 1013, 997, 1020, 780, 911, 1021, 1022, 1023, 1024, 887, 913, 888, 889, 823, 781, 1010, 757, 918, 528, 769, 770, 789, 1008, 642, 993, 900, 919, 920, 1025, 1026, 1027, 922, 923, 990, 828, 1014, 760, 1015, 1011, 829, 830, 647, 785, 1035, 759, 763, 779, 653, 674, 924, 925, 927, 991, 748, 762, 841, 843, 1037, 683, 1038, 931, 677, 844, 696, 938, 1029, 697, 699, 786, 901, 811, 782, 766, 1007, 749, 845, 939, 847, 848, 850, 1028, 853, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 458, 458, 458, 458, 458, 458, 307, 307, 307, 307, 0, 0, 307, 0, 0, 0, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 219, 219, 291, 291, 291, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 0, 291, 291, 291, 291, 291, 291, 291, 291, 809, 442, 442, 442, 442, 219, 219, 219, 219, 219, -88, -88, 219, 809, 219, 219, 442, 442, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 219, 0, 0, 286, 88, 219, 765, 765, 765, 765, 219, 219, 219, 219, 88, 88, 219, 219, 219, 0, 0, 0, 0, 0, 0, 0, 0, 286, 88, 0, 286, 0, 765, 765, 219, 0, 809, 314, 219, 0, 0, 0, 0, 286, 765, 286, 415, 761, 88, 761, 415, 415, 204, 12, 314, 527, 527, 527, 527, 0, 0, 524, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 809, 765, 0, 809, 0, 765, 765, 765, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 765, 0, 0, 957, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 973, 0, 0, 0, 0, 0, 0, 765, 0, 0, 0, 0, 0, 0, 0, 0, 771, 778, 0, 778, 0, 771, 771, 771, 0, 0, 0, 0, 785, 683); - protected $actionDefault = array(3, 32767, 103, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 101, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 593, 593, 593, 593, 32767, 32767, 253, 103, 32767, 32767, 467, 385, 385, 385, 32767, 32767, 537, 537, 537, 537, 537, 537, 32767, 32767, 32767, 32767, 32767, 32767, 467, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 101, 32767, 32767, 32767, 37, 7, 8, 10, 11, 50, 17, 323, 32767, 32767, 32767, 32767, 103, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 586, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 471, 450, 451, 453, 454, 384, 538, 592, 326, 589, 383, 146, 338, 328, 241, 329, 257, 472, 258, 473, 476, 477, 214, 286, 380, 150, 414, 468, 416, 466, 470, 415, 390, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 388, 389, 469, 447, 446, 445, 32767, 32767, 412, 413, 417, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 103, 32767, 387, 420, 418, 419, 436, 437, 434, 435, 438, 32767, 439, 440, 441, 442, 32767, 315, 32767, 32767, 32767, 364, 362, 315, 112, 32767, 32767, 427, 428, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 531, 444, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 103, 32767, 101, 533, 409, 411, 501, 422, 423, 421, 391, 32767, 508, 32767, 103, 510, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 532, 32767, 539, 539, 32767, 494, 101, 194, 32767, 32767, 32767, 194, 194, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 600, 494, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 32767, 194, 111, 32767, 32767, 32767, 101, 194, 194, 194, 194, 194, 194, 194, 194, 194, 194, 189, 32767, 267, 269, 103, 554, 194, 32767, 513, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 506, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 494, 432, 139, 32767, 139, 539, 424, 425, 426, 496, 539, 539, 539, 311, 288, 32767, 32767, 32767, 32767, 511, 511, 101, 101, 101, 101, 506, 32767, 32767, 32767, 32767, 112, 100, 100, 100, 100, 100, 104, 102, 32767, 32767, 32767, 32767, 222, 100, 32767, 102, 102, 32767, 32767, 222, 224, 211, 102, 226, 32767, 558, 559, 222, 102, 226, 226, 226, 246, 246, 483, 317, 102, 100, 102, 102, 196, 317, 317, 32767, 102, 483, 317, 483, 317, 198, 317, 317, 317, 483, 317, 32767, 102, 317, 213, 100, 100, 317, 32767, 32767, 32767, 496, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 221, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 526, 32767, 543, 556, 430, 431, 433, 541, 455, 456, 457, 458, 459, 460, 461, 463, 588, 32767, 500, 32767, 32767, 32767, 32767, 337, 598, 32767, 598, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 599, 32767, 539, 32767, 32767, 32767, 32767, 429, 9, 76, 489, 43, 44, 52, 58, 517, 518, 519, 520, 514, 515, 521, 516, 32767, 32767, 522, 564, 32767, 32767, 540, 591, 32767, 32767, 32767, 32767, 32767, 32767, 139, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 526, 32767, 137, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 539, 32767, 32767, 32767, 32767, 313, 310, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 539, 32767, 32767, 32767, 32767, 32767, 290, 32767, 307, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 285, 32767, 32767, 379, 32767, 32767, 32767, 32767, 358, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 152, 152, 3, 3, 340, 152, 152, 152, 340, 340, 152, 340, 340, 340, 152, 152, 152, 152, 152, 152, 279, 184, 261, 264, 246, 246, 152, 350, 152); - protected $goto = array(194, 194, 685, 425, 653, 346, 614, 650, 419, 310, 311, 331, 569, 316, 424, 332, 426, 630, 1200, 930, 693, 1051, 1201, 1204, 931, 1205, 165, 165, 165, 165, 218, 195, 191, 191, 175, 177, 213, 191, 191, 191, 191, 191, 192, 192, 192, 192, 192, 192, 186, 187, 188, 189, 190, 215, 213, 216, 529, 530, 415, 531, 533, 534, 535, 536, 537, 538, 539, 540, 1120, 166, 167, 168, 193, 169, 170, 171, 164, 172, 173, 174, 176, 212, 214, 217, 235, 240, 241, 242, 254, 255, 256, 257, 258, 259, 260, 261, 263, 264, 265, 266, 278, 279, 313, 314, 315, 420, 421, 422, 574, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 178, 234, 179, 196, 197, 198, 236, 186, 187, 188, 189, 190, 215, 1120, 199, 180, 181, 182, 200, 196, 183, 237, 201, 199, 163, 202, 203, 184, 204, 205, 206, 185, 207, 208, 209, 210, 211, 275, 275, 275, 275, 843, 593, 646, 647, 560, 664, 665, 666, 720, 629, 631, 840, 418, 651, 604, 841, 350, 675, 679, 996, 683, 691, 992, 616, 616, 817, 350, 350, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1092, 1093, 350, 350, 874, 350, 848, 1337, 896, 891, 892, 905, 849, 893, 846, 894, 895, 847, 548, 900, 899, 901, 350, 391, 394, 554, 594, 598, 1270, 1270, 1072, 1068, 1069, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1270, 1268, 1268, 815, 347, 348, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1221, 1020, 1221, 1020, 1221, 836, 5, 1020, 6, 1020, 1020, 1281, 961, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 1020, 349, 349, 349, 349, 1221, 460, 460, 566, 678, 1221, 1221, 1221, 1221, 344, 460, 1221, 1221, 1221, 1302, 1302, 1302, 1302, 602, 617, 620, 621, 622, 623, 643, 644, 645, 695, 836, 912, 553, 546, 1310, 913, 548, 532, 532, 821, 856, 982, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 543, 473, 543, 868, 543, 928, 855, 928, 389, 475, 337, 546, 553, 562, 563, 339, 572, 595, 609, 610, 1320, 1320, 249, 249, 1026, 1025, 15, 821, 450, 821, 494, 565, 495, 955, 955, 955, 955, 1320, 501, 450, 949, 956, 839, 652, 1321, 1321, 1169, 1214, 246, 246, 246, 246, 248, 250, 1323, 985, 959, 959, 957, 959, 719, 1321, 545, 994, 989, 470, 1295, 1296, 953, 405, 692, 917, 1108, 432, 541, 541, 541, 541, 612, 597, 452, 444, 1029, 1030, 1001, 658, 444, 1292, 444, 1292, 674, 1292, 860, 833, 656, 980, 836, 861, 547, 557, 854, 321, 305, 547, 333, 557, 1297, 1298, 392, 456, 570, 607, 1211, 944, 398, 858, 1304, 1304, 1304, 1304, 463, 573, 464, 465, 608, 1004, 866, 403, 404, 1328, 1329, 1057, 662, 1212, 663, 471, 407, 408, 409, 723, 676, 870, 1288, 410, 624, 626, 627, 342, 427, 1216, 869, 857, 1056, 1060, 427, 864, 1061, 1103, 966, 0, 0, 964, 1027, 1027, 0, 0, 0, 657, 1038, 1034, 1035, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 444, 0, 1059, 444, 954, 0, 1290, 1290, 1059, 592, 1085, 0, 696, 682, 682, 0, 502, 688, 1083, 0, 0, 0, 1217, 1218, 272, 428, 1101, 873, 0, 544, 831, 544, 0, 0, 0, 673, 938, 0, 0, 1015, 1031, 1032, 0, 0, 0, 0, 0, 0, 1219, 1278, 1279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 252, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 999, 999); - protected $gotoCheck = array(42, 42, 72, 65, 65, 96, 55, 55, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 78, 78, 9, 126, 78, 78, 78, 78, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 23, 23, 23, 23, 15, 129, 85, 85, 48, 85, 85, 85, 48, 48, 48, 26, 13, 48, 13, 27, 14, 48, 48, 48, 48, 48, 48, 107, 107, 7, 14, 14, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 143, 143, 14, 14, 45, 14, 15, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 14, 64, 15, 64, 14, 58, 58, 58, 58, 58, 168, 168, 15, 15, 15, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 169, 169, 6, 96, 96, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 72, 72, 72, 72, 72, 22, 46, 72, 46, 72, 72, 14, 49, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 24, 24, 24, 24, 72, 148, 148, 170, 14, 72, 72, 72, 72, 177, 148, 72, 72, 72, 9, 9, 9, 9, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 22, 72, 75, 75, 179, 72, 14, 171, 171, 12, 35, 102, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 19, 83, 19, 35, 19, 9, 35, 9, 61, 83, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 180, 180, 5, 5, 117, 117, 75, 12, 19, 12, 154, 103, 154, 19, 19, 19, 19, 180, 154, 19, 19, 19, 25, 63, 181, 181, 150, 14, 5, 5, 5, 5, 5, 5, 180, 25, 25, 25, 25, 25, 25, 181, 25, 25, 25, 174, 174, 174, 92, 92, 92, 17, 17, 112, 106, 106, 106, 106, 17, 106, 82, 23, 118, 118, 17, 119, 23, 129, 23, 129, 115, 129, 17, 18, 17, 17, 22, 39, 9, 9, 17, 167, 167, 9, 29, 9, 176, 176, 9, 9, 2, 2, 17, 91, 28, 37, 129, 129, 129, 129, 9, 9, 9, 9, 79, 109, 9, 81, 81, 9, 9, 128, 81, 159, 81, 156, 81, 81, 81, 98, 81, 41, 129, 81, 84, 84, 84, 81, 116, 20, 16, 16, 16, 16, 116, 9, 131, 146, 95, -1, -1, 16, 116, 116, -1, -1, -1, 116, 116, 116, 116, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, -1, 129, 23, 16, -1, 129, 129, 129, 8, 8, -1, 8, 8, 8, -1, 8, 8, 8, -1, -1, -1, 20, 20, 24, 88, 16, 16, -1, 24, 20, 24, -1, -1, -1, 88, 88, -1, -1, 88, 88, 88, -1, -1, -1, -1, -1, -1, 20, 20, 20, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 5, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 106, 106); - protected $gotoBase = array(0, 0, -250, 0, 0, 360, 235, 181, 522, 7, 0, 0, 33, -156, -113, -178, 43, -49, 126, 72, 100, 0, -9, 158, 282, 377, 172, 176, 120, 150, 0, 0, 0, 0, 0, -39, 0, 119, 0, 116, 0, 45, -1, 0, 0, 195, -456, 0, -529, 250, 0, 0, 0, 0, 0, -33, 0, 0, 182, 0, 0, 306, 0, 143, 203, -235, 0, 0, 0, 0, 0, 0, -6, 0, 0, -21, 0, 0, -385, 124, -46, -19, 144, -123, 10, -538, 0, 0, 275, 0, 0, 127, 106, 0, 0, 60, -472, 0, 76, 0, 0, 0, 294, 328, 0, 0, 386, -50, 0, 99, 0, 0, 138, 0, 0, 149, 219, 87, 139, 137, 0, 0, 0, 0, 0, 0, 19, 0, 101, 159, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 58, 0, 257, 0, 114, 0, 0, 0, -120, 0, 40, 0, 0, 108, 0, 0, 0, 0, 0, 0, 0, 122, -7, 8, 264, 86, 0, 0, 107, 0, 78, 269, 0, 291, 55, 79, 0, 0); - protected $gotoDefault = array(-32768, 506, 727, 4, 728, 921, 804, 813, 590, 523, 694, 343, 618, 416, 1286, 898, 1107, 571, 832, 1230, 1238, 451, 835, 326, 717, 880, 881, 882, 395, 381, 387, 393, 641, 619, 488, 867, 447, 859, 480, 862, 446, 871, 162, 413, 504, 875, 3, 877, 550, 908, 382, 885, 383, 669, 887, 556, 889, 890, 390, 396, 397, 1112, 564, 615, 902, 253, 558, 903, 380, 904, 911, 385, 388, 680, 459, 499, 493, 406, 1087, 559, 601, 638, 441, 467, 613, 625, 611, 474, 1023, 411, 325, 943, 951, 481, 457, 965, 345, 973, 725, 1119, 632, 483, 981, 633, 988, 991, 524, 525, 472, 1003, 268, 1006, 484, 1044, 659, 1017, 1018, 660, 634, 1040, 635, 661, 636, 1042, 466, 591, 1050, 448, 1058, 1274, 449, 1062, 262, 1065, 274, 412, 429, 1070, 1071, 8, 1077, 686, 687, 10, 273, 503, 1102, 681, 445, 1118, 433, 1188, 1190, 552, 485, 1208, 1207, 672, 500, 1213, 442, 1277, 443, 526, 468, 312, 527, 304, 329, 309, 542, 291, 330, 528, 469, 1283, 1291, 327, 30, 1311, 1322, 338, 568, 606); - protected $ruleToNonTerminal = array(0, 1, 3, 3, 2, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 9, 10, 11, 11, 11, 12, 12, 13, 13, 14, 15, 15, 16, 16, 17, 17, 18, 18, 21, 21, 22, 23, 23, 24, 24, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 29, 29, 30, 30, 32, 34, 34, 28, 36, 36, 33, 38, 38, 35, 35, 37, 37, 39, 39, 31, 40, 40, 41, 43, 44, 44, 45, 46, 46, 48, 47, 47, 47, 47, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 25, 25, 68, 68, 71, 71, 70, 69, 69, 62, 74, 74, 75, 75, 76, 76, 77, 77, 78, 78, 79, 79, 26, 26, 27, 27, 27, 27, 27, 87, 87, 89, 89, 82, 82, 90, 90, 91, 91, 91, 83, 83, 86, 86, 84, 84, 92, 93, 93, 56, 56, 64, 64, 67, 67, 67, 66, 94, 94, 95, 57, 57, 57, 57, 96, 96, 97, 97, 98, 98, 99, 100, 100, 101, 101, 102, 102, 54, 54, 50, 50, 104, 52, 52, 105, 51, 51, 53, 53, 63, 63, 63, 63, 80, 80, 108, 108, 110, 110, 111, 111, 111, 111, 109, 109, 109, 113, 113, 113, 113, 88, 88, 116, 116, 116, 117, 117, 114, 114, 118, 118, 120, 120, 121, 121, 115, 122, 122, 119, 123, 123, 123, 123, 112, 112, 81, 81, 81, 20, 20, 20, 125, 124, 124, 126, 126, 126, 126, 59, 127, 127, 128, 60, 130, 130, 131, 131, 132, 132, 85, 133, 133, 133, 133, 133, 133, 138, 138, 139, 139, 140, 140, 140, 140, 140, 141, 142, 142, 137, 137, 134, 134, 136, 136, 144, 144, 143, 143, 143, 143, 143, 143, 143, 135, 145, 145, 147, 146, 146, 61, 103, 148, 148, 55, 55, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 155, 149, 149, 154, 154, 157, 158, 158, 159, 160, 161, 161, 161, 161, 19, 19, 72, 72, 72, 72, 150, 150, 150, 150, 163, 163, 151, 151, 153, 153, 153, 156, 156, 168, 168, 168, 168, 168, 168, 168, 168, 168, 169, 169, 107, 171, 171, 171, 171, 152, 152, 152, 152, 152, 152, 152, 152, 58, 58, 166, 166, 166, 166, 172, 172, 162, 162, 162, 173, 173, 173, 173, 173, 173, 73, 73, 65, 65, 65, 65, 129, 129, 129, 129, 176, 175, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 174, 174, 174, 174, 106, 170, 178, 178, 177, 177, 179, 179, 179, 179, 179, 179, 179, 179, 167, 167, 167, 167, 181, 182, 180, 180, 180, 180, 180, 180, 180, 180, 183, 183, 183, 183); - protected $ruleToLength = array(1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 2, 1, 3, 4, 1, 2, 0, 1, 1, 1, 1, 1, 3, 5, 4, 3, 4, 2, 3, 1, 1, 7, 6, 2, 3, 1, 2, 3, 1, 2, 3, 1, 1, 3, 1, 3, 1, 2, 2, 3, 1, 3, 2, 3, 1, 3, 2, 0, 1, 1, 1, 1, 1, 3, 7, 10, 5, 7, 9, 5, 3, 3, 3, 3, 3, 3, 1, 2, 5, 7, 9, 6, 5, 6, 3, 2, 1, 1, 1, 0, 2, 1, 3, 8, 0, 4, 2, 1, 3, 0, 1, 0, 1, 0, 1, 3, 1, 1, 1, 8, 9, 7, 8, 7, 6, 8, 0, 2, 0, 2, 1, 2, 1, 2, 1, 1, 1, 0, 2, 0, 2, 0, 2, 2, 1, 3, 1, 4, 1, 4, 1, 1, 4, 2, 1, 3, 3, 3, 4, 4, 5, 0, 2, 4, 3, 1, 1, 7, 0, 2, 1, 3, 3, 4, 1, 4, 0, 2, 5, 0, 2, 6, 0, 2, 0, 3, 1, 2, 1, 1, 2, 0, 1, 3, 0, 2, 1, 1, 1, 1, 6, 8, 6, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 3, 3, 3, 3, 3, 1, 3, 3, 1, 1, 2, 1, 1, 0, 1, 0, 2, 2, 2, 4, 3, 1, 1, 3, 1, 2, 2, 3, 2, 3, 1, 1, 2, 3, 1, 1, 3, 2, 0, 1, 5, 5, 10, 3, 5, 1, 1, 3, 0, 2, 4, 5, 4, 4, 4, 3, 1, 1, 1, 1, 1, 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 3, 1, 1, 3, 2, 2, 3, 1, 0, 1, 1, 3, 3, 3, 4, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 4, 3, 4, 4, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 3, 2, 1, 2, 4, 2, 2, 8, 9, 8, 9, 9, 10, 9, 10, 8, 3, 2, 0, 4, 2, 1, 3, 2, 1, 2, 2, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 0, 3, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 4, 1, 1, 3, 1, 1, 1, 1, 1, 3, 2, 3, 0, 1, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 4, 4, 1, 4, 4, 0, 1, 1, 1, 3, 3, 1, 4, 2, 2, 1, 3, 1, 4, 4, 3, 3, 3, 3, 1, 3, 1, 1, 3, 1, 1, 4, 1, 1, 1, 3, 1, 1, 2, 1, 3, 4, 3, 2, 0, 2, 2, 1, 2, 1, 1, 1, 4, 3, 3, 3, 3, 6, 3, 1, 1, 2, 1); - protected function initReduceCallbacks() - { - $this->reduceCallbacks = [0 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 1 => function ($stackPos) { +class Php8 extends \PHPUnit\PhpParser\ParserAbstract +{ + public const YYERRTOK = 256; + public const T_THROW = 257; + public const T_INCLUDE = 258; + public const T_INCLUDE_ONCE = 259; + public const T_EVAL = 260; + public const T_REQUIRE = 261; + public const T_REQUIRE_ONCE = 262; + public const T_LOGICAL_OR = 263; + public const T_LOGICAL_XOR = 264; + public const T_LOGICAL_AND = 265; + public const T_PRINT = 266; + public const T_YIELD = 267; + public const T_DOUBLE_ARROW = 268; + public const T_YIELD_FROM = 269; + public const T_PLUS_EQUAL = 270; + public const T_MINUS_EQUAL = 271; + public const T_MUL_EQUAL = 272; + public const T_DIV_EQUAL = 273; + public const T_CONCAT_EQUAL = 274; + public const T_MOD_EQUAL = 275; + public const T_AND_EQUAL = 276; + public const T_OR_EQUAL = 277; + public const T_XOR_EQUAL = 278; + public const T_SL_EQUAL = 279; + public const T_SR_EQUAL = 280; + public const T_POW_EQUAL = 281; + public const T_COALESCE_EQUAL = 282; + public const T_COALESCE = 283; + public const T_BOOLEAN_OR = 284; + public const T_BOOLEAN_AND = 285; + public const T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG = 286; + public const T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG = 287; + public const T_IS_EQUAL = 288; + public const T_IS_NOT_EQUAL = 289; + public const T_IS_IDENTICAL = 290; + public const T_IS_NOT_IDENTICAL = 291; + public const T_SPACESHIP = 292; + public const T_IS_SMALLER_OR_EQUAL = 293; + public const T_IS_GREATER_OR_EQUAL = 294; + public const T_SL = 295; + public const T_SR = 296; + public const T_INSTANCEOF = 297; + public const T_INC = 298; + public const T_DEC = 299; + public const T_INT_CAST = 300; + public const T_DOUBLE_CAST = 301; + public const T_STRING_CAST = 302; + public const T_ARRAY_CAST = 303; + public const T_OBJECT_CAST = 304; + public const T_BOOL_CAST = 305; + public const T_UNSET_CAST = 306; + public const T_POW = 307; + public const T_NEW = 308; + public const T_CLONE = 309; + public const T_EXIT = 310; + public const T_IF = 311; + public const T_ELSEIF = 312; + public const T_ELSE = 313; + public const T_ENDIF = 314; + public const T_LNUMBER = 315; + public const T_DNUMBER = 316; + public const T_STRING = 317; + public const T_STRING_VARNAME = 318; + public const T_VARIABLE = 319; + public const T_NUM_STRING = 320; + public const T_INLINE_HTML = 321; + public const T_ENCAPSED_AND_WHITESPACE = 322; + public const T_CONSTANT_ENCAPSED_STRING = 323; + public const T_ECHO = 324; + public const T_DO = 325; + public const T_WHILE = 326; + public const T_ENDWHILE = 327; + public const T_FOR = 328; + public const T_ENDFOR = 329; + public const T_FOREACH = 330; + public const T_ENDFOREACH = 331; + public const T_DECLARE = 332; + public const T_ENDDECLARE = 333; + public const T_AS = 334; + public const T_SWITCH = 335; + public const T_MATCH = 336; + public const T_ENDSWITCH = 337; + public const T_CASE = 338; + public const T_DEFAULT = 339; + public const T_BREAK = 340; + public const T_CONTINUE = 341; + public const T_GOTO = 342; + public const T_FUNCTION = 343; + public const T_FN = 344; + public const T_CONST = 345; + public const T_RETURN = 346; + public const T_TRY = 347; + public const T_CATCH = 348; + public const T_FINALLY = 349; + public const T_USE = 350; + public const T_INSTEADOF = 351; + public const T_GLOBAL = 352; + public const T_STATIC = 353; + public const T_ABSTRACT = 354; + public const T_FINAL = 355; + public const T_PRIVATE = 356; + public const T_PROTECTED = 357; + public const T_PUBLIC = 358; + public const T_READONLY = 359; + public const T_VAR = 360; + public const T_UNSET = 361; + public const T_ISSET = 362; + public const T_EMPTY = 363; + public const T_HALT_COMPILER = 364; + public const T_CLASS = 365; + public const T_TRAIT = 366; + public const T_INTERFACE = 367; + public const T_ENUM = 368; + public const T_EXTENDS = 369; + public const T_IMPLEMENTS = 370; + public const T_OBJECT_OPERATOR = 371; + public const T_NULLSAFE_OBJECT_OPERATOR = 372; + public const T_LIST = 373; + public const T_ARRAY = 374; + public const T_CALLABLE = 375; + public const T_CLASS_C = 376; + public const T_TRAIT_C = 377; + public const T_METHOD_C = 378; + public const T_FUNC_C = 379; + public const T_LINE = 380; + public const T_FILE = 381; + public const T_START_HEREDOC = 382; + public const T_END_HEREDOC = 383; + public const T_DOLLAR_OPEN_CURLY_BRACES = 384; + public const T_CURLY_OPEN = 385; + public const T_PAAMAYIM_NEKUDOTAYIM = 386; + public const T_NAMESPACE = 387; + public const T_NS_C = 388; + public const T_DIR = 389; + public const T_NS_SEPARATOR = 390; + public const T_ELLIPSIS = 391; + public const T_NAME_FULLY_QUALIFIED = 392; + public const T_NAME_QUALIFIED = 393; + public const T_NAME_RELATIVE = 394; + public const T_ATTRIBUTE = 395; + protected int $tokenToSymbolMapSize = 396; + protected int $actionTableSize = 1257; + protected int $gotoTableSize = 657; + protected int $invalidSymbol = 168; + protected int $errorSymbol = 1; + protected int $defaultAction = -32766; + protected int $unexpectedTokenRule = 32767; + protected int $YY2TBLSTATE = 435; + protected int $numNonLeafStates = 739; + protected array $symbolToName = array("EOF", "error", "T_THROW", "T_INCLUDE", "T_INCLUDE_ONCE", "T_EVAL", "T_REQUIRE", "T_REQUIRE_ONCE", "','", "T_LOGICAL_OR", "T_LOGICAL_XOR", "T_LOGICAL_AND", "T_PRINT", "T_YIELD", "T_DOUBLE_ARROW", "T_YIELD_FROM", "'='", "T_PLUS_EQUAL", "T_MINUS_EQUAL", "T_MUL_EQUAL", "T_DIV_EQUAL", "T_CONCAT_EQUAL", "T_MOD_EQUAL", "T_AND_EQUAL", "T_OR_EQUAL", "T_XOR_EQUAL", "T_SL_EQUAL", "T_SR_EQUAL", "T_POW_EQUAL", "T_COALESCE_EQUAL", "'?'", "':'", "T_COALESCE", "T_BOOLEAN_OR", "T_BOOLEAN_AND", "'|'", "'^'", "T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG", "T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG", "T_IS_EQUAL", "T_IS_NOT_EQUAL", "T_IS_IDENTICAL", "T_IS_NOT_IDENTICAL", "T_SPACESHIP", "'<'", "T_IS_SMALLER_OR_EQUAL", "'>'", "T_IS_GREATER_OR_EQUAL", "'.'", "T_SL", "T_SR", "'+'", "'-'", "'*'", "'/'", "'%'", "'!'", "T_INSTANCEOF", "'~'", "T_INC", "T_DEC", "T_INT_CAST", "T_DOUBLE_CAST", "T_STRING_CAST", "T_ARRAY_CAST", "T_OBJECT_CAST", "T_BOOL_CAST", "T_UNSET_CAST", "'@'", "T_POW", "'['", "T_NEW", "T_CLONE", "T_EXIT", "T_IF", "T_ELSEIF", "T_ELSE", "T_ENDIF", "T_LNUMBER", "T_DNUMBER", "T_STRING", "T_STRING_VARNAME", "T_VARIABLE", "T_NUM_STRING", "T_INLINE_HTML", "T_ENCAPSED_AND_WHITESPACE", "T_CONSTANT_ENCAPSED_STRING", "T_ECHO", "T_DO", "T_WHILE", "T_ENDWHILE", "T_FOR", "T_ENDFOR", "T_FOREACH", "T_ENDFOREACH", "T_DECLARE", "T_ENDDECLARE", "T_AS", "T_SWITCH", "T_MATCH", "T_ENDSWITCH", "T_CASE", "T_DEFAULT", "T_BREAK", "T_CONTINUE", "T_GOTO", "T_FUNCTION", "T_FN", "T_CONST", "T_RETURN", "T_TRY", "T_CATCH", "T_FINALLY", "T_USE", "T_INSTEADOF", "T_GLOBAL", "T_STATIC", "T_ABSTRACT", "T_FINAL", "T_PRIVATE", "T_PROTECTED", "T_PUBLIC", "T_READONLY", "T_VAR", "T_UNSET", "T_ISSET", "T_EMPTY", "T_HALT_COMPILER", "T_CLASS", "T_TRAIT", "T_INTERFACE", "T_ENUM", "T_EXTENDS", "T_IMPLEMENTS", "T_OBJECT_OPERATOR", "T_NULLSAFE_OBJECT_OPERATOR", "T_LIST", "T_ARRAY", "T_CALLABLE", "T_CLASS_C", "T_TRAIT_C", "T_METHOD_C", "T_FUNC_C", "T_LINE", "T_FILE", "T_START_HEREDOC", "T_END_HEREDOC", "T_DOLLAR_OPEN_CURLY_BRACES", "T_CURLY_OPEN", "T_PAAMAYIM_NEKUDOTAYIM", "T_NAMESPACE", "T_NS_C", "T_DIR", "T_NS_SEPARATOR", "T_ELLIPSIS", "T_NAME_FULLY_QUALIFIED", "T_NAME_QUALIFIED", "T_NAME_RELATIVE", "T_ATTRIBUTE", "';'", "']'", "'('", "')'", "'{'", "'}'", "'`'", "'\"'", "'\$'"); + protected array $tokenToSymbol = array(0, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 56, 166, 168, 167, 55, 168, 168, 161, 162, 53, 51, 8, 52, 48, 54, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 31, 159, 44, 16, 46, 30, 68, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 70, 168, 160, 36, 168, 165, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 163, 35, 164, 58, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43, 45, 47, 49, 50, 57, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158); + protected array $action = array(133, 134, 135, 582, 136, 137, 0, 751, 752, 753, 138, 38, 327, -32766, -32766, -32766, -32766, -32766, -32766, 837, 826, -32767, -32767, -32767, -32767, 102, 103, 104, 1112, 1113, 1114, 1111, 1110, 1109, 1115, 745, 744, -32766, 1027, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32767, -32767, -32767, -32767, -32767, 1245, -32766, -32766, 1322, 754, 1112, 1113, 1114, 1111, 1110, 1109, 1115, 459, 460, 461, 2, 990, 1306, 265, 139, 404, 758, 759, 760, 761, 467, 468, 429, 835, 606, -16, 1341, 23, 292, 815, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 791, 583, 792, 793, 794, 795, 783, 784, 345, 346, 786, 787, 772, 773, 774, 776, 777, 778, 356, 818, 819, 820, 821, 822, 584, 779, 780, 585, 586, 941, 803, 801, 802, 814, 798, 799, 835, 826, 587, 588, 797, 589, 590, 591, 592, 593, 594, -328, 36, 251, 35, -194, 800, 595, 596, -193, 140, -85, 133, 134, 135, 582, 136, 137, 1060, 751, 752, 753, 138, 38, 129, -110, -110, -585, -32766, -585, -110, -32766, -32766, -32766, 241, 836, -110, 145, 959, 960, -32766, -32766, -32766, 961, -594, -32766, 482, 745, 744, 955, 1036, -594, -32766, 991, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, 299, 754, 831, 75, -32766, -32766, -32766, 291, 142, 326, 242, -85, 326, 382, 381, 265, 139, 404, 758, 759, 760, 761, 82, 423, 429, -32766, 326, -32766, -32766, -32766, -32766, 815, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 791, 583, 792, 793, 794, 795, 783, 784, 345, 346, 786, 787, 772, 773, 774, 776, 777, 778, 356, 818, 819, 820, 821, 822, 584, 779, 780, 585, 586, 254, 803, 801, 802, 814, 798, 799, 832, 725, 587, 588, 797, 589, 590, 591, 592, 593, 594, -328, 83, 84, 85, -194, 800, 595, 596, -193, 149, 775, 746, 747, 748, 749, 750, 151, 751, 752, 753, 788, 789, 37, 483, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, -594, 274, -594, -32766, -32766, -32766, -32766, -32766, -32766, 310, 1089, 127, 312, 110, 737, 1326, 21, 754, -32766, -32766, -32766, -272, 1325, -32766, -32766, 1088, -32766, -32766, -32766, -32766, -32766, 755, 756, 757, 758, 759, 760, 761, 1104, -32766, 824, -32766, -32766, -545, 429, 1036, 323, 815, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 791, 813, 792, 793, 794, 795, 783, 784, 785, 812, 786, 787, 772, 773, 774, 776, 777, 778, 817, 818, 819, 820, 821, 822, 823, 779, 780, 781, 782, 1033, 803, 801, 802, 814, 798, 799, 745, 744, 790, 796, 797, 804, 805, 807, 806, 808, 809, 152, -32766, -545, -545, 1036, 800, 811, 810, 50, 51, 52, 513, 53, 54, 1240, 1239, 1241, -545, 55, 56, -110, 57, -32766, 1090, 920, -110, 556, -110, 292, -551, 339, -545, 306, 103, 104, -110, -110, -110, -110, -110, -110, -110, -110, 105, 106, 107, 108, 109, 1245, 274, 380, 381, -591, -367, 715, -367, 340, 58, 59, -591, 423, 110, 60, 370, 61, 248, 249, 62, 63, 64, 65, 66, 67, 68, 69, -544, 28, 267, 70, 445, 514, -32766, 374, -342, 1272, 1273, 515, 1278, 835, 862, 389, 863, 1270, 42, 25, 516, 943, 517, 943, 518, 920, 519, 299, 1036, 520, 521, 1266, 910, 441, 44, 45, 446, 377, 376, -32766, 46, 522, 1023, 1022, 1021, 1024, 368, 338, 391, 1238, 7, 291, 442, 1231, 835, 524, 525, 526, 443, 1245, 357, 1036, 362, 834, -544, -544, 154, 528, 529, 444, 1259, 1260, 1261, 1262, 1256, 1257, 298, -32766, -32766, -544, -548, 1059, 1263, 1258, 291, 1236, 1240, 1239, 1241, 299, 841, -550, 71, -544, 656, 26, 321, 322, 326, -153, -153, -153, 920, 612, 675, 676, 1035, 922, 910, -32766, 286, 710, 835, 155, -153, 828, -153, 862, -153, 863, -153, 150, 407, 156, 1240, 1239, 1241, -32766, -32766, -32766, 375, 1351, 716, 75, 1352, 158, -591, 33, -591, 326, 835, 959, 960, -78, -548, -548, 523, 920, -32766, 378, 379, 896, 955, -110, -110, -110, 32, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 745, 744, -58, -548, -57, -110, -110, 717, 745, 744, -110, 383, 384, 922, 1033, 910, -110, 710, -153, 647, 648, 830, 124, 141, 125, -32766, 1033, 326, 712, 1150, 1152, 48, 130, 131, 144, 159, 1036, -32766, 160, 161, -543, 28, 162, 1238, 920, 163, 299, 920, 1036, 75, -32766, -32766, -32766, 835, -32766, 326, -32766, 1270, -32766, 282, 910, -32766, -87, -84, -78, -73, -32766, -32766, -32766, -4, 920, 282, -32766, -32766, 720, -72, -71, 727, -32766, 420, -70, -69, -68, -67, -66, 287, 286, -32766, -65, -46, 922, 745, 744, 1231, 710, 300, 301, -546, -18, 148, -302, 273, 283, 726, -543, -543, 729, 528, 529, 920, 1259, 1260, 1261, 1262, 1256, 1257, 919, 74, 147, -543, 288, 293, 1263, 1258, 126, -298, 280, 910, -32766, 281, 910, 284, 73, -543, 1238, 976, 690, 322, 326, 710, 285, -32766, -32766, -32766, 332, -32766, 274, -32766, 294, -32766, 937, 110, -32766, 910, 685, 835, -543, -32766, -32766, -32766, 826, -546, -546, -32766, -32766, 146, -32766, -50, 701, -32766, 420, 703, 691, 20, 1119, 375, -546, 436, -32766, 645, 1353, 1277, 297, 657, -32766, 1279, 959, 960, 561, 956, -546, 523, 910, 692, 693, 678, 527, 955, -110, -110, -110, 132, 922, 662, 663, 922, 710, 464, -508, 710, -32766, 1240, 1239, 1241, 493, 679, 1238, 282, 939, 10, -543, -543, 40, -32766, -32766, -32766, 731, -32766, 922, -32766, 307, -32766, 710, -4, -32766, -543, 305, 41, 304, -32766, -32766, -32766, 0, 0, -32766, -32766, -32766, 920, 0, -543, 1238, -32766, 420, 311, 0, 567, 299, -32766, -32766, -32766, -32766, -32766, -498, -32766, 897, -32766, 0, 922, -32766, 8, 0, 710, 24, -32766, -32766, -32766, -32766, 372, 610, -32766, -32766, 834, 1238, 734, -275, -32766, 420, 920, 735, -32766, -32766, -32766, 854, -32766, -32766, -32766, 901, -32766, 1000, 977, -32766, 49, 984, 974, 488, -32766, -32766, -32766, -32766, 985, 899, -32766, -32766, 972, 1238, 574, 1093, -32766, 420, 1096, 1097, -32766, -32766, -32766, 1094, -32766, -32766, -32766, 1095, -32766, 910, 1101, -32766, 1267, 846, 1292, 1310, -32766, -32766, -32766, 1344, 650, 34, -32766, -32766, -579, -250, -250, -250, -32766, 420, -578, 375, -577, -551, 28, 267, -550, -32766, -549, -492, 1, 29, 959, 960, 302, 303, 835, 523, 30, 910, 1270, 39, 896, 955, -110, -110, -110, 43, 47, 373, 72, 76, 77, 78, 79, -249, -249, -249, 80, 81, 143, 375, 153, 128, -273, 157, 247, 328, 357, 358, 359, 360, 959, 960, 922, 361, 1231, 523, 710, -250, 362, 363, 896, 955, -110, -110, -110, 364, 365, 366, 367, 529, 28, 1259, 1260, 1261, 1262, 1256, 1257, 369, 437, 555, 1207, -272, 835, 1263, 1258, 13, 1270, 14, -32766, 15, 16, 18, 922, 73, 1238, 1348, 710, -249, 322, 326, 406, -32766, -32766, -32766, 484, -32766, 485, -32766, 492, -32766, 495, 496, -32766, 497, 498, 502, 503, -32766, -32766, -32766, 504, 511, 1231, -32766, -32766, 572, 696, 1249, 1190, -32766, 420, 1268, 1062, 1061, 1042, 1226, 1038, 529, -32766, 1259, 1260, 1261, 1262, 1256, 1257, -277, -102, 12, 17, 27, 296, 1263, 1258, 405, 603, 607, 636, 702, 1194, 1244, 1191, 73, 320, 1323, 0, 371, 322, 326, 711, 714, 718, 719, 721, 722, 723, 724, 728, 0, 713, 0, 1350, 857, 856, 865, 949, 992, 864, 1349, 948, 946, 947, 950, 1222, 930, 940, 928, 982, 983, 634, 1347, 1304, 1293, 1311, 1320, 0, 0, 1271, 0, 326); + protected array $actionCheck = array(2, 3, 4, 5, 6, 7, 0, 9, 10, 11, 12, 13, 70, 9, 10, 11, 9, 10, 11, 1, 80, 44, 45, 46, 47, 48, 49, 50, 116, 117, 118, 119, 120, 121, 122, 37, 38, 30, 1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 1, 9, 10, 1, 57, 116, 117, 118, 119, 120, 121, 122, 129, 130, 131, 8, 31, 1, 71, 72, 73, 74, 75, 76, 77, 134, 135, 80, 82, 1, 31, 85, 8, 30, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 1, 128, 129, 130, 131, 132, 133, 82, 80, 136, 137, 138, 139, 140, 141, 142, 143, 144, 8, 147, 148, 8, 8, 150, 151, 152, 8, 154, 31, 2, 3, 4, 5, 6, 7, 162, 9, 10, 11, 12, 13, 8, 117, 118, 160, 116, 162, 122, 9, 10, 11, 97, 159, 128, 8, 117, 118, 9, 10, 11, 122, 1, 137, 31, 37, 38, 128, 138, 8, 30, 159, 32, 33, 34, 35, 36, 37, 38, 30, 9, 32, 33, 34, 158, 57, 80, 161, 9, 10, 11, 161, 163, 167, 14, 97, 167, 106, 107, 71, 72, 73, 74, 75, 76, 77, 163, 116, 80, 30, 167, 32, 33, 34, 35, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 8, 128, 129, 130, 131, 132, 133, 156, 163, 136, 137, 138, 139, 140, 141, 142, 143, 144, 162, 9, 10, 11, 162, 150, 151, 152, 162, 154, 2, 3, 4, 5, 6, 7, 14, 9, 10, 11, 12, 13, 30, 163, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 160, 57, 162, 9, 10, 11, 9, 10, 11, 8, 159, 14, 8, 69, 163, 1, 101, 57, 9, 10, 11, 162, 8, 116, 30, 1, 32, 33, 34, 35, 36, 71, 72, 73, 74, 75, 76, 77, 123, 30, 80, 32, 33, 70, 80, 138, 8, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 116, 128, 129, 130, 131, 132, 133, 37, 38, 136, 137, 138, 139, 140, 141, 142, 143, 144, 14, 116, 134, 135, 138, 150, 151, 152, 2, 3, 4, 5, 6, 7, 155, 156, 157, 149, 12, 13, 101, 15, 137, 164, 1, 106, 85, 108, 30, 161, 8, 163, 113, 49, 50, 116, 117, 118, 119, 120, 121, 122, 123, 51, 52, 53, 54, 55, 1, 57, 106, 107, 1, 106, 31, 108, 8, 51, 52, 8, 116, 69, 56, 8, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 70, 71, 72, 73, 74, 116, 8, 164, 78, 79, 80, 146, 82, 106, 8, 108, 86, 87, 88, 89, 122, 91, 122, 93, 1, 95, 158, 138, 98, 99, 1, 84, 8, 103, 104, 105, 106, 107, 116, 109, 110, 119, 120, 121, 122, 115, 116, 106, 80, 108, 161, 8, 122, 82, 124, 125, 126, 8, 1, 161, 138, 161, 155, 134, 135, 14, 136, 137, 8, 139, 140, 141, 142, 143, 144, 145, 51, 52, 149, 70, 1, 151, 152, 161, 116, 155, 156, 157, 158, 8, 161, 161, 163, 75, 76, 165, 166, 167, 75, 76, 77, 1, 52, 75, 76, 137, 159, 84, 137, 30, 163, 82, 14, 90, 80, 92, 106, 94, 108, 96, 101, 102, 14, 155, 156, 157, 9, 10, 11, 106, 80, 31, 161, 83, 14, 160, 14, 162, 167, 82, 117, 118, 16, 134, 135, 122, 1, 30, 106, 107, 127, 128, 129, 130, 131, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 37, 38, 16, 163, 16, 117, 118, 31, 37, 38, 122, 106, 107, 159, 116, 84, 128, 163, 164, 111, 112, 156, 16, 163, 16, 137, 116, 167, 163, 59, 60, 70, 16, 16, 16, 16, 138, 74, 16, 16, 70, 70, 16, 80, 1, 16, 158, 1, 138, 161, 87, 88, 89, 82, 91, 167, 93, 86, 95, 161, 84, 98, 31, 31, 31, 31, 103, 104, 105, 0, 1, 161, 109, 110, 31, 31, 31, 31, 115, 116, 31, 31, 31, 31, 31, 37, 30, 124, 31, 31, 159, 37, 38, 122, 163, 134, 135, 70, 31, 31, 35, 31, 31, 31, 134, 135, 31, 136, 137, 1, 139, 140, 141, 142, 143, 144, 31, 154, 31, 149, 37, 37, 151, 152, 163, 35, 35, 84, 74, 35, 84, 35, 161, 163, 80, 159, 80, 166, 167, 163, 35, 87, 88, 89, 35, 91, 57, 93, 37, 95, 38, 69, 98, 84, 77, 82, 70, 103, 104, 105, 80, 134, 135, 109, 110, 70, 85, 31, 80, 115, 116, 92, 116, 97, 82, 106, 149, 108, 124, 113, 83, 146, 113, 90, 137, 146, 117, 118, 89, 128, 163, 122, 84, 137, 138, 94, 127, 128, 129, 130, 131, 31, 159, 96, 100, 159, 163, 97, 149, 163, 74, 155, 156, 157, 97, 100, 80, 161, 154, 150, 134, 135, 159, 87, 88, 89, 164, 91, 159, 93, 114, 95, 163, 164, 98, 149, 133, 159, 132, 103, 104, 105, -1, -1, 74, 109, 110, 1, -1, 163, 80, 115, 116, 132, -1, 153, 158, 87, 88, 89, 124, 91, 149, 93, 164, 95, -1, 159, 98, 149, -1, 163, 149, 103, 104, 105, 74, 149, 153, 109, 110, 155, 80, 159, 162, 115, 116, 1, 159, 87, 88, 89, 159, 91, 124, 93, 159, 95, 159, 159, 98, 70, 159, 159, 102, 103, 104, 105, 74, 159, 159, 109, 110, 159, 80, 81, 159, 115, 116, 159, 159, 87, 88, 89, 159, 91, 124, 93, 159, 95, 84, 159, 98, 160, 160, 160, 160, 103, 104, 105, 160, 160, 163, 109, 110, 161, 100, 101, 102, 115, 116, 161, 106, 161, 161, 70, 71, 161, 124, 161, 161, 161, 161, 117, 118, 134, 135, 82, 122, 161, 84, 86, 161, 127, 128, 129, 130, 131, 161, 161, 149, 161, 161, 161, 161, 161, 100, 101, 102, 161, 161, 161, 106, 161, 163, 162, 161, 161, 161, 161, 161, 161, 161, 117, 118, 159, 161, 122, 122, 163, 164, 161, 161, 127, 128, 129, 130, 131, 161, 161, 161, 161, 137, 70, 139, 140, 141, 142, 143, 144, 161, 161, 161, 165, 162, 82, 151, 152, 162, 86, 162, 74, 162, 162, 162, 159, 161, 80, 164, 163, 164, 166, 167, 162, 87, 88, 89, 162, 91, 162, 93, 162, 95, 162, 162, 98, 162, 162, 162, 162, 103, 104, 105, 162, 162, 122, 109, 110, 162, 162, 162, 162, 115, 116, 162, 162, 162, 162, 162, 162, 137, 124, 139, 140, 141, 142, 143, 144, 162, 162, 162, 162, 162, 162, 151, 152, 162, 162, 162, 162, 162, 162, 162, 162, 161, 163, 162, -1, 163, 166, 167, 163, 163, 163, 163, 163, 163, 163, 163, 163, -1, 163, -1, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, -1, -1, 166, -1, 167); + protected array $actionBase = array(0, -2, 152, 549, 764, 941, 981, 751, 555, 309, 560, 864, 626, 738, 738, 741, 738, 473, 671, 783, -60, 305, 305, 783, 305, 803, 803, 803, 658, 658, 658, 658, 749, 749, 897, 897, 929, 865, 831, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 1062, 18, 36, 79, 648, 1036, 1044, 1040, 1045, 1034, 1033, 1039, 1041, 1046, 1083, 1084, 782, 1085, 1086, 1082, 1087, 1042, 876, 1035, 1043, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 195, 342, 43, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 643, 643, 643, 666, 666, 354, 173, 980, 203, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 1048, 665, 339, 164, 164, 7, 7, 7, 7, 7, 50, 369, 583, -23, -23, -23, -23, 448, 605, 497, 260, 397, 434, 54, 394, 593, 593, 316, 316, 415, 415, 316, 316, 316, 442, 442, 252, 252, 252, 252, 318, 455, 433, 391, 742, 53, 53, 53, 53, 742, 742, 742, 742, 734, 1088, 742, 742, 742, 722, 781, 781, 926, 551, 551, 781, 536, -3, -3, 536, 63, -3, 67, 576, 335, 756, 115, 9, 335, 535, 656, 501, 185, 821, 568, 821, 1032, 424, 776, 776, 426, 753, 729, 867, 1063, 1049, 799, 1080, 810, 1081, -66, -58, 728, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1031, 1089, 402, 1032, 130, 1089, 1089, 1089, 402, 402, 402, 402, 402, 402, 402, 402, 402, 402, 603, 130, 544, 554, 130, 804, 402, 18, 808, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 762, 157, 18, 36, 124, 124, 196, 37, 124, 124, 124, 124, 18, 18, 18, 18, 568, 784, 797, 600, 820, 143, 784, 784, 784, 122, 135, 204, 139, 760, 785, 467, 775, 775, 787, 895, 895, 775, 768, 775, 787, 913, 775, 775, 895, 895, 793, 158, 550, 472, 524, 569, 895, 346, 775, 775, 775, 775, 816, 575, 775, 271, 171, 775, 775, 816, 801, 766, 58, 798, 895, 895, 895, 816, 505, 798, 798, 798, 819, 824, 761, 765, 383, 349, 607, 138, 807, 765, 765, 775, 532, 761, 765, 761, 765, 759, 765, 765, 765, 761, 765, 768, 498, 765, 714, 586, 75, 765, 6, 915, 916, 726, 917, 906, 918, 965, 919, 923, 1053, 894, 931, 912, 924, 966, 903, 896, 780, 701, 703, 815, 754, 893, 777, 777, 777, 888, 777, 777, 777, 777, 777, 777, 777, 777, 701, 868, 823, 794, 934, 711, 712, 1011, 730, 795, 963, 933, 1013, 925, 758, 713, 977, 935, 757, 1047, 936, 940, 986, 1014, 828, 1017, 979, 790, 1064, 1065, 869, 946, 1054, 777, 915, 923, 727, 912, 924, 903, 896, 752, 748, 746, 747, 745, 744, 739, 740, 763, 1018, 887, 879, 870, 945, 891, 701, 871, 971, 874, 990, 992, 1050, 805, 792, 875, 1066, 952, 953, 954, 1055, 1019, 1056, 773, 973, 817, 994, 812, 1067, 996, 997, 999, 1000, 1057, 1068, 1058, 885, 1059, 832, 788, 928, 802, 1069, 299, 791, 800, 806, 964, 436, 932, 1060, 1070, 1071, 1001, 1002, 1006, 1072, 1073, 927, 834, 975, 796, 976, 967, 835, 838, 577, 779, 1020, 786, 789, 778, 624, 634, 1074, 1075, 1076, 930, 767, 772, 839, 845, 1021, 743, 1022, 1077, 646, 846, 717, 1078, 1012, 718, 721, 652, 683, 681, 724, 774, 1061, 818, 811, 771, 955, 721, 770, 849, 1079, 852, 855, 856, 1007, 860, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 456, 456, 456, 456, 456, 456, 305, 305, 305, 305, 305, 456, 456, 456, 456, 456, 456, 456, 305, 305, 0, 0, 305, 0, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 289, 494, 494, 289, 289, 494, 289, 494, 494, 494, 494, 494, 494, 494, 494, 494, 0, 289, 289, 289, 289, 289, 289, 289, 289, 494, 793, 494, 442, 442, 442, 442, 494, 494, 494, -88, -88, 442, 494, 63, 494, 494, 494, 494, 494, 494, 494, 494, 494, 0, 0, 494, 494, 494, 494, 0, 0, 130, -3, 494, 768, 768, 768, 768, 494, 494, 494, 494, -3, -3, 494, 494, 494, 0, 0, 0, 0, 442, 442, 0, 130, 0, 0, 130, 0, 0, 768, 768, 494, 63, 793, 359, 494, 0, 0, 0, 0, 130, 768, 130, 402, 775, -3, -3, 775, 402, 402, 124, 18, 359, 545, 545, 545, 545, 0, 0, 568, 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, 768, 0, 793, 0, 768, 768, 768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 768, 0, 0, 895, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 913, 0, 0, 0, 0, 0, 0, 768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 777, 805, 0, 805, 0, 777, 777, 777, 0, 0, 0, 0, 779, 743); + protected array $actionDefault = array(3, 32767, 102, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 100, 32767, 32767, 32767, 32767, 597, 597, 597, 597, 32767, 32767, 254, 102, 32767, 32767, 470, 387, 387, 387, 32767, 32767, 541, 541, 541, 541, 541, 541, 32767, 32767, 32767, 32767, 32767, 32767, 470, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 100, 32767, 32767, 32767, 36, 7, 8, 10, 11, 49, 17, 324, 32767, 32767, 32767, 32767, 102, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 590, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 474, 453, 454, 456, 457, 386, 542, 596, 327, 593, 385, 145, 339, 329, 242, 330, 258, 475, 259, 476, 479, 480, 215, 287, 382, 149, 150, 417, 471, 419, 469, 473, 418, 392, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 390, 391, 472, 450, 449, 448, 32767, 32767, 415, 416, 32767, 420, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 102, 32767, 389, 423, 421, 422, 439, 440, 437, 438, 441, 32767, 32767, 32767, 442, 443, 444, 445, 316, 32767, 32767, 366, 364, 424, 316, 111, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 430, 431, 32767, 32767, 32767, 32767, 535, 447, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 102, 32767, 100, 537, 412, 414, 504, 425, 426, 393, 32767, 511, 32767, 102, 32767, 513, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 536, 32767, 543, 543, 32767, 497, 100, 195, 32767, 32767, 512, 32767, 195, 195, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 604, 497, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 32767, 195, 110, 32767, 32767, 32767, 100, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 190, 32767, 268, 270, 102, 558, 195, 32767, 516, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 509, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 497, 435, 138, 32767, 138, 543, 427, 428, 429, 499, 543, 543, 543, 312, 289, 32767, 32767, 32767, 32767, 514, 514, 100, 100, 100, 100, 509, 32767, 32767, 32767, 32767, 111, 99, 99, 99, 99, 99, 103, 101, 32767, 32767, 32767, 32767, 223, 99, 32767, 101, 101, 32767, 32767, 223, 225, 212, 101, 227, 32767, 562, 563, 223, 101, 227, 227, 227, 247, 247, 486, 318, 101, 99, 101, 101, 197, 318, 318, 32767, 101, 486, 318, 486, 318, 199, 318, 318, 318, 486, 318, 32767, 101, 318, 214, 99, 99, 318, 32767, 32767, 32767, 499, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 222, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 530, 32767, 547, 560, 433, 434, 436, 545, 458, 459, 460, 461, 462, 463, 464, 466, 592, 32767, 503, 32767, 32767, 32767, 338, 32767, 602, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 603, 32767, 543, 32767, 32767, 32767, 32767, 432, 9, 74, 492, 42, 43, 51, 57, 520, 521, 522, 523, 517, 518, 524, 519, 32767, 32767, 525, 568, 32767, 32767, 544, 595, 32767, 32767, 32767, 32767, 32767, 32767, 138, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 530, 32767, 136, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 526, 32767, 32767, 32767, 543, 32767, 32767, 32767, 32767, 314, 311, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 543, 32767, 32767, 32767, 32767, 32767, 291, 32767, 308, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 286, 32767, 32767, 381, 499, 294, 296, 297, 32767, 32767, 32767, 32767, 360, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 152, 152, 3, 3, 341, 152, 152, 152, 341, 341, 152, 341, 341, 341, 152, 152, 152, 152, 152, 152, 280, 185, 262, 265, 247, 247, 152, 352, 152); + protected array $goto = array(196, 196, 1034, 1065, 697, 431, 661, 621, 658, 319, 706, 425, 314, 315, 335, 576, 430, 336, 432, 638, 654, 655, 852, 672, 673, 674, 853, 167, 167, 167, 167, 221, 197, 193, 193, 177, 179, 216, 193, 193, 193, 193, 193, 194, 194, 194, 194, 194, 194, 188, 189, 190, 191, 192, 218, 216, 219, 536, 537, 421, 538, 540, 541, 542, 543, 544, 545, 546, 547, 1136, 168, 169, 170, 195, 171, 172, 173, 166, 174, 175, 176, 178, 215, 217, 220, 238, 243, 244, 246, 257, 258, 259, 260, 261, 262, 263, 264, 268, 269, 270, 271, 277, 289, 290, 317, 318, 426, 427, 428, 581, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 180, 237, 181, 198, 199, 200, 239, 188, 189, 190, 191, 192, 218, 1136, 201, 182, 183, 184, 202, 198, 185, 240, 203, 201, 165, 204, 205, 186, 206, 207, 208, 187, 209, 210, 211, 212, 213, 214, 855, 1232, 975, 279, 279, 279, 279, 623, 623, 419, 351, 1269, 600, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1287, 1287, 599, 1100, 1287, 709, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 1287, 508, 700, 827, 1098, 458, 559, 552, 860, 833, 909, 904, 905, 918, 861, 906, 858, 907, 908, 859, 1233, 1234, 912, 500, 886, 501, 252, 252, 843, 1107, 1108, 507, 1087, 1082, 1083, 1084, 341, 552, 559, 568, 569, 344, 579, 602, 616, 617, 1235, 1295, 1296, 833, 440, 833, 22, 250, 250, 250, 250, 245, 253, 694, 573, 1237, 829, 1237, 893, 851, 893, 893, 1034, 1034, 1237, 694, 349, 342, 1034, 694, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 848, 1327, 1034, 1034, 1034, 1034, 1319, 1319, 1319, 1319, 1237, 343, 342, 1040, 1039, 1237, 1237, 1237, 1237, 868, 996, 1237, 1237, 1237, 913, 355, 914, 354, 354, 354, 354, 466, 466, 479, 880, 355, 355, 867, 394, 926, 466, 481, 571, 927, 967, 410, 705, 942, 355, 355, 942, 848, 355, 660, 1354, 609, 624, 627, 628, 629, 630, 651, 652, 653, 708, 554, 1133, 1285, 1285, 355, 355, 1285, 1058, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 1285, 539, 539, 1185, 424, 539, 611, 539, 539, 539, 539, 539, 539, 539, 539, 539, 566, 682, 1337, 1337, 733, 637, 639, 1043, 1044, 659, 476, 1312, 1313, 683, 687, 1010, 695, 704, 1006, 1337, 1298, 438, 408, 409, 631, 633, 635, 670, 5, 671, 6, 412, 413, 414, 337, 684, 1340, 1340, 415, 325, 309, 686, 347, 352, 353, 553, 563, 450, 450, 450, 553, 1309, 563, 1309, 666, 397, 462, 845, 1314, 1315, 1309, 548, 548, 548, 548, 873, 604, 469, 580, 470, 471, 403, 554, 878, 848, 958, 1345, 1346, 577, 614, 870, 550, 615, 550, 255, 255, 1321, 1321, 1321, 1321, 550, 999, 1018, 477, 971, 1228, 732, 736, 881, 869, 1070, 1074, 876, 882, 551, 1008, 1003, 1071, 1075, 978, 980, 0, 1305, 1118, 0, 456, 0, 0, 0, 0, 969, 969, 969, 969, 0, 0, 456, 963, 970, 0, 0, 0, 0, 968, 0, 1230, 0, 0, 0, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 931, 1123, 450, 0, 1073, 1116, 885, 619, 1307, 1307, 1073, 1216, 944, 1015, 433, 1217, 1220, 945, 1221, 0, 433, 872, 0, 664, 994, 0, 1041, 1041, 0, 866, 0, 0, 0, 665, 1052, 1048, 1049, 0, 0, 0, 0, 1227, 324, 275, 324, 1037, 1037, 681, 952, 0, 0, 1029, 1045, 1046, 396, 399, 560, 601, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1013, 1013); + protected array $gotoCheck = array(42, 42, 73, 127, 73, 66, 66, 56, 56, 66, 9, 66, 66, 66, 66, 66, 66, 66, 66, 66, 86, 86, 26, 86, 86, 86, 27, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 15, 20, 49, 23, 23, 23, 23, 108, 108, 43, 97, 108, 130, 108, 108, 108, 108, 108, 108, 108, 108, 108, 170, 170, 8, 8, 170, 8, 170, 170, 170, 170, 170, 170, 170, 170, 170, 8, 8, 6, 8, 83, 76, 76, 15, 12, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 20, 20, 15, 155, 45, 155, 5, 5, 20, 144, 144, 155, 15, 15, 15, 15, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 20, 20, 20, 12, 83, 12, 76, 5, 5, 5, 5, 5, 5, 7, 172, 73, 7, 73, 25, 25, 25, 25, 73, 73, 73, 7, 179, 168, 73, 7, 73, 73, 73, 73, 73, 73, 73, 73, 73, 22, 181, 73, 73, 73, 73, 9, 9, 9, 9, 73, 168, 168, 118, 118, 73, 73, 73, 73, 35, 103, 73, 73, 73, 65, 14, 65, 24, 24, 24, 24, 149, 149, 84, 35, 14, 14, 35, 62, 73, 149, 84, 104, 73, 93, 93, 93, 9, 14, 14, 9, 22, 14, 64, 14, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 14, 150, 171, 171, 14, 14, 171, 114, 171, 171, 171, 171, 171, 171, 171, 171, 171, 173, 173, 151, 13, 173, 13, 173, 173, 173, 173, 173, 173, 173, 173, 173, 48, 116, 182, 182, 48, 48, 48, 119, 119, 48, 176, 176, 176, 48, 48, 48, 48, 48, 48, 182, 14, 113, 82, 82, 85, 85, 85, 82, 46, 82, 46, 82, 82, 82, 29, 82, 182, 182, 82, 169, 169, 14, 82, 97, 97, 9, 9, 23, 23, 23, 9, 130, 9, 130, 120, 9, 9, 18, 178, 178, 130, 107, 107, 107, 107, 39, 107, 9, 9, 9, 9, 28, 14, 9, 22, 92, 9, 9, 2, 2, 37, 19, 80, 19, 5, 5, 130, 130, 130, 130, 19, 50, 110, 157, 50, 160, 50, 99, 16, 16, 16, 16, 9, 41, 50, 50, 50, 129, 132, 16, 96, -1, 130, 147, -1, 19, -1, -1, -1, -1, 19, 19, 19, 19, -1, -1, 19, 19, 19, -1, -1, -1, -1, 16, -1, 14, -1, -1, -1, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 17, 17, 23, -1, 130, 16, 16, 17, 130, 130, 130, 79, 79, 17, 117, 79, 79, 79, 79, -1, 117, 17, -1, 17, 17, -1, 117, 117, -1, 17, -1, -1, -1, 117, 117, 117, 117, -1, -1, -1, -1, 17, 24, 24, 24, 89, 89, 89, 89, -1, -1, 89, 89, 89, 59, 59, 59, 59, 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 107, 107); + protected array $gotoBase = array(0, 0, -253, 0, 0, 224, 182, 251, 179, -10, 0, 0, -89, 32, 11, -185, 27, 66, 128, 197, -229, 0, 5, 163, 308, 260, 18, 22, 115, 118, 0, 0, 0, 0, 0, -68, 0, 122, 0, 123, 0, 43, -1, 153, 0, 200, -327, 0, -330, 147, 460, 0, 0, 0, 0, 0, -33, 0, 0, 540, 0, 0, 280, 0, 95, 294, -236, 0, 0, 0, 0, 0, 0, -5, 0, 0, -140, 0, 0, 134, 119, -19, -88, -75, -152, -74, -698, 0, 0, 296, 0, 0, 127, 23, 0, 0, 48, -310, 0, 71, 0, 0, 0, 269, 283, 0, 0, 414, -71, 0, 103, 0, 0, 124, 83, 0, 100, 273, 17, 104, 144, 0, 0, 0, 0, 0, 0, 1, 0, 114, 167, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -47, 0, 0, 50, 0, 281, 105, 94, 0, 0, 0, -273, 0, 34, 0, 0, 107, 0, 0, 0, 0, 0, 0, 0, -26, 99, -56, 110, 230, 125, 0, 0, 90, 0, 67, 241, 0, 254, 75, 0, 0); + protected array $gotoDefault = array(-32768, 512, 740, 4, 741, 935, 816, 825, 597, 530, 707, 348, 625, 422, 1303, 911, 1122, 578, 844, 1246, 1254, 457, 847, 330, 730, 923, 894, 895, 400, 386, 392, 398, 649, 626, 494, 879, 453, 871, 486, 874, 452, 883, 164, 418, 510, 887, 3, 890, 557, 921, 973, 387, 898, 388, 677, 900, 562, 902, 903, 395, 401, 402, 1127, 570, 622, 915, 256, 564, 916, 385, 917, 925, 390, 393, 688, 465, 505, 499, 411, 1102, 565, 608, 646, 447, 473, 620, 632, 618, 480, 434, 416, 329, 957, 965, 487, 463, 979, 350, 987, 738, 1135, 640, 489, 995, 641, 1002, 1005, 531, 532, 478, 1017, 272, 1020, 490, 19, 667, 1031, 1032, 668, 642, 1054, 643, 669, 644, 1056, 472, 598, 1064, 454, 1072, 1291, 455, 1076, 266, 1079, 278, 417, 435, 1085, 1086, 9, 1092, 698, 699, 11, 276, 509, 1117, 689, 451, 1134, 439, 1204, 1206, 558, 491, 1224, 1223, 680, 506, 1229, 448, 1294, 449, 533, 474, 316, 534, 1338, 308, 333, 313, 549, 295, 334, 535, 475, 1300, 1308, 331, 31, 1328, 1339, 575, 613); + protected array $ruleToNonTerminal = array(0, 1, 3, 3, 2, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 9, 10, 11, 11, 11, 12, 12, 13, 13, 14, 15, 15, 16, 16, 17, 17, 18, 18, 21, 21, 22, 23, 23, 24, 24, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 29, 29, 30, 30, 32, 34, 34, 28, 36, 36, 33, 38, 38, 35, 35, 37, 37, 39, 39, 31, 40, 40, 41, 43, 44, 44, 45, 45, 46, 46, 48, 47, 47, 47, 47, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 25, 25, 50, 69, 69, 72, 72, 71, 70, 70, 63, 75, 75, 76, 76, 77, 77, 78, 78, 79, 79, 80, 80, 26, 26, 27, 27, 27, 27, 27, 88, 88, 90, 90, 83, 83, 91, 91, 92, 92, 92, 84, 84, 87, 87, 85, 85, 93, 94, 94, 57, 57, 65, 65, 68, 68, 68, 67, 95, 95, 96, 58, 58, 58, 58, 97, 97, 98, 98, 99, 99, 100, 101, 101, 102, 102, 103, 103, 55, 55, 51, 51, 105, 53, 53, 106, 52, 52, 54, 54, 64, 64, 64, 64, 81, 81, 109, 109, 111, 111, 112, 112, 112, 112, 110, 110, 110, 114, 114, 114, 114, 89, 89, 117, 117, 117, 118, 118, 115, 115, 119, 119, 121, 121, 122, 122, 116, 123, 123, 120, 124, 124, 124, 124, 113, 113, 82, 82, 82, 20, 20, 20, 126, 125, 125, 127, 127, 127, 127, 60, 128, 128, 129, 61, 131, 131, 132, 132, 133, 133, 86, 134, 134, 134, 134, 134, 134, 134, 139, 139, 140, 140, 141, 141, 141, 141, 141, 142, 143, 143, 138, 138, 135, 135, 137, 137, 145, 145, 144, 144, 144, 144, 144, 144, 144, 136, 146, 146, 148, 147, 147, 62, 104, 149, 149, 56, 56, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 156, 150, 150, 155, 155, 158, 159, 159, 160, 161, 162, 162, 162, 162, 19, 19, 73, 73, 73, 73, 151, 151, 151, 151, 164, 164, 152, 152, 154, 154, 154, 157, 157, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 108, 173, 173, 173, 173, 153, 153, 153, 153, 153, 153, 153, 153, 59, 59, 167, 167, 167, 167, 174, 174, 163, 163, 163, 175, 175, 175, 175, 175, 175, 74, 74, 66, 66, 66, 66, 130, 130, 130, 130, 178, 177, 166, 166, 166, 166, 166, 166, 166, 165, 165, 165, 176, 176, 176, 176, 107, 172, 180, 180, 179, 179, 181, 181, 181, 181, 181, 181, 181, 181, 169, 169, 169, 169, 168, 183, 182, 182, 182, 182, 182, 182, 182, 182, 184, 184, 184, 184); + protected array $ruleToLength = array(1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 2, 1, 3, 4, 1, 2, 0, 1, 1, 1, 1, 4, 3, 5, 4, 3, 4, 2, 3, 1, 1, 7, 6, 2, 3, 1, 2, 3, 1, 2, 3, 1, 1, 3, 1, 3, 1, 2, 2, 3, 1, 3, 2, 3, 1, 3, 3, 2, 0, 1, 1, 1, 1, 1, 3, 7, 10, 5, 7, 9, 5, 3, 3, 3, 3, 3, 3, 1, 2, 5, 7, 9, 6, 5, 6, 3, 2, 1, 1, 1, 1, 0, 2, 1, 3, 8, 0, 4, 2, 1, 3, 0, 1, 0, 1, 0, 1, 3, 1, 1, 1, 8, 9, 7, 8, 7, 6, 8, 0, 2, 0, 2, 1, 2, 1, 2, 1, 1, 1, 0, 2, 0, 2, 0, 2, 2, 1, 3, 1, 4, 1, 4, 1, 1, 4, 2, 1, 3, 3, 3, 4, 4, 5, 0, 2, 4, 3, 1, 1, 7, 0, 2, 1, 3, 3, 4, 1, 4, 0, 2, 5, 0, 2, 6, 0, 2, 0, 3, 1, 2, 1, 1, 2, 0, 1, 3, 0, 2, 1, 1, 1, 1, 6, 8, 6, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 3, 3, 3, 3, 3, 1, 3, 3, 1, 1, 2, 1, 1, 0, 1, 0, 2, 2, 2, 4, 3, 1, 1, 3, 1, 2, 2, 3, 2, 3, 1, 1, 2, 3, 1, 1, 3, 2, 0, 1, 5, 5, 6, 10, 3, 5, 1, 1, 3, 0, 2, 4, 5, 4, 4, 4, 3, 1, 1, 1, 1, 1, 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 3, 1, 1, 3, 2, 2, 3, 1, 0, 1, 1, 3, 3, 3, 4, 4, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 4, 3, 4, 4, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 3, 2, 1, 2, 4, 2, 2, 8, 9, 8, 9, 9, 10, 9, 10, 8, 3, 2, 0, 4, 2, 1, 3, 2, 1, 2, 2, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 0, 3, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 3, 4, 1, 1, 3, 1, 1, 1, 1, 1, 3, 2, 3, 0, 1, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 4, 4, 1, 4, 4, 0, 1, 1, 1, 3, 3, 1, 4, 2, 2, 1, 3, 1, 4, 4, 3, 3, 3, 3, 1, 3, 1, 1, 3, 1, 1, 4, 1, 1, 1, 3, 1, 1, 2, 1, 3, 4, 3, 2, 0, 2, 2, 1, 2, 1, 1, 1, 4, 3, 3, 3, 3, 6, 3, 1, 1, 2, 1); + protected function initReduceCallbacks() : void + { + $this->reduceCallbacks = [0 => null, 1 => function ($stackPos) { $this->semValue = $this->handleNamespaces($this->semStack[$stackPos - (1 - 1)]); }, 2 => function ($stackPos) { - if (\is_array($this->semStack[$stackPos - (2 - 2)])) { - $this->semValue = \array_merge($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)]); - } else { + if ($this->semStack[$stackPos - (2 - 2)] !== null) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; } + $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 3 => function ($stackPos) { $this->semValue = array(); }, 4 => function ($stackPos) { - $startAttributes = $this->lookaheadStartAttributes; - if (isset($startAttributes['comments'])) { - $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); - } else { - $nop = null; - } + $nop = $this->maybeCreateZeroLengthNop($this->tokenPos); if ($nop !== null) { $this->semStack[$stackPos - (1 - 1)][] = $nop; } $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 5 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 6 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 7 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 8 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 9 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 10 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 11 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 12 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 13 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 14 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 15 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 16 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 17 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 18 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 19 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 20 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 21 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 22 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 23 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 24 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 25 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 26 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 27 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 28 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 29 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 30 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 31 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 32 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 33 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 34 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 35 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 36 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 37 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 38 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 39 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 40 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 41 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 42 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 43 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 44 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 45 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 46 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 47 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 48 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 49 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 50 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 51 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 52 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 53 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 54 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 55 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 56 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 57 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 58 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 59 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 60 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 61 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 62 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 63 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 64 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 65 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 66 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 67 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 68 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 69 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 70 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 71 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 72 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 73 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 74 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 75 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 76 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 77 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 78 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 79 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 80 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 81 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 82 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 83 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 84 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 85 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; + }, 5 => null, 6 => null, 7 => null, 8 => null, 9 => null, 10 => null, 11 => null, 12 => null, 13 => null, 14 => null, 15 => null, 16 => null, 17 => null, 18 => null, 19 => null, 20 => null, 21 => null, 22 => null, 23 => null, 24 => null, 25 => null, 26 => null, 27 => null, 28 => null, 29 => null, 30 => null, 31 => null, 32 => null, 33 => null, 34 => null, 35 => null, 36 => null, 37 => null, 38 => null, 39 => null, 40 => null, 41 => null, 42 => null, 43 => null, 44 => null, 45 => null, 46 => null, 47 => null, 48 => null, 49 => null, 50 => null, 51 => null, 52 => null, 53 => null, 54 => null, 55 => null, 56 => null, 57 => null, 58 => null, 59 => null, 60 => null, 61 => null, 62 => null, 63 => null, 64 => null, 65 => null, 66 => null, 67 => null, 68 => null, 69 => null, 70 => null, 71 => null, 72 => null, 73 => null, 74 => null, 75 => null, 76 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + if ($this->semValue === "emitError(new Error('Cannot use "getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos]))); + } + }, 77 => null, 78 => null, 79 => null, 80 => null, 81 => null, 82 => null, 83 => null, 84 => null, 85 => function ($stackPos) { + $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 86 => function ($stackPos) { - $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 87 => function ($stackPos) { - $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 88 => function ($stackPos) { - $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 89 => function ($stackPos) { - $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 90 => function ($stackPos) { - $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 91 => function ($stackPos) { - $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 92 => function ($stackPos) { - $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 93 => function ($stackPos) { - $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 94 => function ($stackPos) { - $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 95 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 94 => null, 95 => function ($stackPos) { + $this->semValue = new Name(\substr($this->semStack[$stackPos - (1 - 1)], 1), $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 96 => function ($stackPos) { - $this->semValue = new Name(\substr($this->semStack[$stackPos - (1 - 1)], 1), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Variable(\substr($this->semStack[$stackPos - (1 - 1)], 1), $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 97 => function ($stackPos) { - $this->semValue = new Expr\Variable(\substr($this->semStack[$stackPos - (1 - 1)], 1), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + /* nothing */ }, 98 => function ($stackPos) { /* nothing */ }, 99 => function ($stackPos) { /* nothing */ }, 100 => function ($stackPos) { - /* nothing */ - }, 101 => function ($stackPos) { - $this->emitError(new Error('A trailing comma is not allowed here', $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes)); - }, 102 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 103 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; + $this->emitError(new Error('A trailing comma is not allowed here', $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos]))); + }, 101 => null, 102 => null, 103 => function ($stackPos) { + $this->semValue = new Node\Attribute($this->semStack[$stackPos - (1 - 1)], [], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 104 => function ($stackPos) { - $this->semValue = new Node\Attribute($this->semStack[$stackPos - (1 - 1)], [], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Node\Attribute($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 105 => function ($stackPos) { - $this->semValue = new Node\Attribute($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - }, 106 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 107 => function ($stackPos) { + }, 106 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; + }, 107 => function ($stackPos) { + $this->semValue = new Node\AttributeGroup($this->semStack[$stackPos - (4 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 108 => function ($stackPos) { - $this->semValue = new Node\AttributeGroup($this->semStack[$stackPos - (4 - 2)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); - }, 109 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 110 => function ($stackPos) { + }, 109 => function ($stackPos) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 111 => function ($stackPos) { + }, 110 => function ($stackPos) { $this->semValue = []; - }, 112 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 113 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 114 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 115 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + }, 111 => null, 112 => null, 113 => null, 114 => null, 115 => function ($stackPos) { + $this->semValue = new Stmt\HaltCompiler($this->handleHaltCompiler(), $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 116 => function ($stackPos) { - $this->semValue = new Stmt\HaltCompiler($this->lexer->handleHaltCompiler(), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 117 => function ($stackPos) { - $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos - (3 - 2)], null, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos - (3 - 2)], null, $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON); $this->checkNamespace($this->semValue); - }, 118 => function ($stackPos) { - $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos - (5 - 2)], $this->semStack[$stackPos - (5 - 4)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); + }, 117 => function ($stackPos) { + $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos - (5 - 2)], $this->semStack[$stackPos - (5 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (5 - 1)], $this->tokenEndStack[$stackPos])); $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); $this->checkNamespace($this->semValue); - }, 119 => function ($stackPos) { - $this->semValue = new Stmt\Namespace_(null, $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + }, 118 => function ($stackPos) { + $this->semValue = new Stmt\Namespace_(null, $this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); $this->checkNamespace($this->semValue); + }, 119 => function ($stackPos) { + $this->semValue = new Stmt\Use_($this->semStack[$stackPos - (3 - 2)], Stmt\Use_::TYPE_NORMAL, $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 120 => function ($stackPos) { - $this->semValue = new Stmt\Use_($this->semStack[$stackPos - (3 - 2)], Stmt\Use_::TYPE_NORMAL, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 121 => function ($stackPos) { - $this->semValue = new Stmt\Use_($this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 2)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); - }, 122 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; + $this->semValue = new Stmt\Use_($this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); + }, 121 => null, 122 => function ($stackPos) { + $this->semValue = new Stmt\Const_($this->semStack[$stackPos - (3 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 123 => function ($stackPos) { - $this->semValue = new Stmt\Const_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 124 => function ($stackPos) { $this->semValue = Stmt\Use_::TYPE_FUNCTION; - }, 125 => function ($stackPos) { + }, 124 => function ($stackPos) { $this->semValue = Stmt\Use_::TYPE_CONSTANT; + }, 125 => function ($stackPos) { + $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos - (7 - 3)], $this->semStack[$stackPos - (7 - 6)], $this->semStack[$stackPos - (7 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (7 - 1)], $this->tokenEndStack[$stackPos])); }, 126 => function ($stackPos) { - $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos - (7 - 3)], $this->semStack[$stackPos - (7 - 6)], $this->semStack[$stackPos - (7 - 2)], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes); - }, 127 => function ($stackPos) { - $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); - }, 128 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 129 => function ($stackPos) { + $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 5)], Stmt\Use_::TYPE_UNKNOWN, $this->getAttributes($this->tokenStartStack[$stackPos - (6 - 1)], $this->tokenEndStack[$stackPos])); + }, 127 => null, 128 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 130 => function ($stackPos) { + }, 129 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 131 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 132 => function ($stackPos) { + }, 130 => null, 131 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 133 => function ($stackPos) { + }, 132 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 134 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 135 => function ($stackPos) { + }, 133 => null, 134 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 136 => function ($stackPos) { + }, 135 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 137 => function ($stackPos) { - $this->semValue = new Stmt\UseUse($this->semStack[$stackPos - (1 - 1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + }, 136 => function ($stackPos) { + $this->semValue = new Node\UseItem($this->semStack[$stackPos - (1 - 1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); $this->checkUseUse($this->semValue, $stackPos - (1 - 1)); - }, 138 => function ($stackPos) { - $this->semValue = new Stmt\UseUse($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + }, 137 => function ($stackPos) { + $this->semValue = new Node\UseItem($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], Stmt\Use_::TYPE_UNKNOWN, $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); $this->checkUseUse($this->semValue, $stackPos - (3 - 3)); - }, 139 => function ($stackPos) { - $this->semValue = new Stmt\UseUse($this->semStack[$stackPos - (1 - 1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + }, 138 => function ($stackPos) { + $this->semValue = new Node\UseItem($this->semStack[$stackPos - (1 - 1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); $this->checkUseUse($this->semValue, $stackPos - (1 - 1)); - }, 140 => function ($stackPos) { - $this->semValue = new Stmt\UseUse($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + }, 139 => function ($stackPos) { + $this->semValue = new Node\UseItem($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], Stmt\Use_::TYPE_UNKNOWN, $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); $this->checkUseUse($this->semValue, $stackPos - (3 - 3)); - }, 141 => function ($stackPos) { + }, 140 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; $this->semValue->type = Stmt\Use_::TYPE_NORMAL; - }, 142 => function ($stackPos) { + }, 141 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 2)]; $this->semValue->type = $this->semStack[$stackPos - (2 - 1)]; - }, 143 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 144 => function ($stackPos) { + }, 142 => null, 143 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 145 => function ($stackPos) { + }, 144 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 146 => function ($stackPos) { - $this->semValue = new Node\Const_($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 147 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 148 => function ($stackPos) { + }, 145 => function ($stackPos) { + $this->semValue = new Node\Const_($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 146 => null, 147 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 149 => function ($stackPos) { + }, 148 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); + }, 149 => function ($stackPos) { + $this->semValue = new Node\Const_(new Node\Identifier($this->semStack[$stackPos - (3 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos - (3 - 1)])), $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 150 => function ($stackPos) { - $this->semValue = new Node\Const_($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Node\Const_(new Node\Identifier($this->semStack[$stackPos - (3 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos - (3 - 1)])), $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 151 => function ($stackPos) { - if (\is_array($this->semStack[$stackPos - (2 - 2)])) { - $this->semValue = \array_merge($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)]); - } else { + if ($this->semStack[$stackPos - (2 - 2)] !== null) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; } + $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 152 => function ($stackPos) { $this->semValue = array(); }, 153 => function ($stackPos) { - $startAttributes = $this->lookaheadStartAttributes; - if (isset($startAttributes['comments'])) { - $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); - } else { - $nop = null; - } + $nop = $this->maybeCreateZeroLengthNop($this->tokenPos); if ($nop !== null) { $this->semStack[$stackPos - (1 - 1)][] = $nop; } $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 154 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 155 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 156 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 157 => function ($stackPos) { - throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + }, 154 => null, 155 => null, 156 => null, 157 => function ($stackPos) { + throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 158 => function ($stackPos) { - if ($this->semStack[$stackPos - (3 - 2)]) { - $this->semValue = $this->semStack[$stackPos - (3 - 2)]; - $attrs = $this->startAttributeStack[$stackPos - (3 - 1)]; - $stmts = $this->semValue; - if (!empty($attrs['comments'])) { - $stmts[0]->setAttribute('comments', \array_merge($attrs['comments'], $stmts[0]->getAttribute('comments', []))); - } - } else { - $startAttributes = $this->startAttributeStack[$stackPos - (3 - 1)]; - if (isset($startAttributes['comments'])) { - $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); - } else { - $this->semValue = null; - } - if (null === $this->semValue) { - $this->semValue = array(); - } - } + $this->semValue = new Stmt\Block($this->semStack[$stackPos - (3 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 159 => function ($stackPos) { - $this->semValue = new Stmt\If_($this->semStack[$stackPos - (7 - 3)], ['stmts' => \is_array($this->semStack[$stackPos - (7 - 5)]) ? $this->semStack[$stackPos - (7 - 5)] : array($this->semStack[$stackPos - (7 - 5)]), 'elseifs' => $this->semStack[$stackPos - (7 - 6)], 'else' => $this->semStack[$stackPos - (7 - 7)]], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\If_($this->semStack[$stackPos - (7 - 3)], ['stmts' => $this->semStack[$stackPos - (7 - 5)], 'elseifs' => $this->semStack[$stackPos - (7 - 6)], 'else' => $this->semStack[$stackPos - (7 - 7)]], $this->getAttributes($this->tokenStartStack[$stackPos - (7 - 1)], $this->tokenEndStack[$stackPos])); }, 160 => function ($stackPos) { - $this->semValue = new Stmt\If_($this->semStack[$stackPos - (10 - 3)], ['stmts' => $this->semStack[$stackPos - (10 - 6)], 'elseifs' => $this->semStack[$stackPos - (10 - 7)], 'else' => $this->semStack[$stackPos - (10 - 8)]], $this->startAttributeStack[$stackPos - (10 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\If_($this->semStack[$stackPos - (10 - 3)], ['stmts' => $this->semStack[$stackPos - (10 - 6)], 'elseifs' => $this->semStack[$stackPos - (10 - 7)], 'else' => $this->semStack[$stackPos - (10 - 8)]], $this->getAttributes($this->tokenStartStack[$stackPos - (10 - 1)], $this->tokenEndStack[$stackPos])); }, 161 => function ($stackPos) { - $this->semValue = new Stmt\While_($this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\While_($this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->getAttributes($this->tokenStartStack[$stackPos - (5 - 1)], $this->tokenEndStack[$stackPos])); }, 162 => function ($stackPos) { - $this->semValue = new Stmt\Do_($this->semStack[$stackPos - (7 - 5)], \is_array($this->semStack[$stackPos - (7 - 2)]) ? $this->semStack[$stackPos - (7 - 2)] : array($this->semStack[$stackPos - (7 - 2)]), $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Do_($this->semStack[$stackPos - (7 - 5)], $this->semStack[$stackPos - (7 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (7 - 1)], $this->tokenEndStack[$stackPos])); }, 163 => function ($stackPos) { - $this->semValue = new Stmt\For_(['init' => $this->semStack[$stackPos - (9 - 3)], 'cond' => $this->semStack[$stackPos - (9 - 5)], 'loop' => $this->semStack[$stackPos - (9 - 7)], 'stmts' => $this->semStack[$stackPos - (9 - 9)]], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\For_(['init' => $this->semStack[$stackPos - (9 - 3)], 'cond' => $this->semStack[$stackPos - (9 - 5)], 'loop' => $this->semStack[$stackPos - (9 - 7)], 'stmts' => $this->semStack[$stackPos - (9 - 9)]], $this->getAttributes($this->tokenStartStack[$stackPos - (9 - 1)], $this->tokenEndStack[$stackPos])); }, 164 => function ($stackPos) { - $this->semValue = new Stmt\Switch_($this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Switch_($this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->getAttributes($this->tokenStartStack[$stackPos - (5 - 1)], $this->tokenEndStack[$stackPos])); }, 165 => function ($stackPos) { - $this->semValue = new Stmt\Break_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Break_($this->semStack[$stackPos - (3 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 166 => function ($stackPos) { - $this->semValue = new Stmt\Continue_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Continue_($this->semStack[$stackPos - (3 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 167 => function ($stackPos) { - $this->semValue = new Stmt\Return_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Return_($this->semStack[$stackPos - (3 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 168 => function ($stackPos) { - $this->semValue = new Stmt\Global_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Global_($this->semStack[$stackPos - (3 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 169 => function ($stackPos) { - $this->semValue = new Stmt\Static_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Static_($this->semStack[$stackPos - (3 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 170 => function ($stackPos) { - $this->semValue = new Stmt\Echo_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Echo_($this->semStack[$stackPos - (3 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 171 => function ($stackPos) { - $this->semValue = new Stmt\InlineHTML($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\InlineHTML($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + $this->semValue->setAttribute('hasLeadingNewline', $this->inlineHtmlHasLeadingNewline($stackPos - (1 - 1))); }, 172 => function ($stackPos) { - $e = $this->semStack[$stackPos - (2 - 1)]; - if ($e instanceof Expr\Throw_) { - // For backwards-compatibility reasons, convert throw in statement position into - // Stmt\Throw_ rather than Stmt\Expression(Expr\Throw_). - $this->semValue = new Stmt\Throw_($e->expr, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - } else { - $this->semValue = new Stmt\Expression($e, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - } + $this->semValue = new Stmt\Expression($this->semStack[$stackPos - (2 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 173 => function ($stackPos) { - $this->semValue = new Stmt\Unset_($this->semStack[$stackPos - (5 - 3)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Unset_($this->semStack[$stackPos - (5 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (5 - 1)], $this->tokenEndStack[$stackPos])); }, 174 => function ($stackPos) { - $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos - (7 - 3)], $this->semStack[$stackPos - (7 - 5)][0], ['keyVar' => null, 'byRef' => $this->semStack[$stackPos - (7 - 5)][1], 'stmts' => $this->semStack[$stackPos - (7 - 7)]], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos - (7 - 3)], $this->semStack[$stackPos - (7 - 5)][0], ['keyVar' => null, 'byRef' => $this->semStack[$stackPos - (7 - 5)][1], 'stmts' => $this->semStack[$stackPos - (7 - 7)]], $this->getAttributes($this->tokenStartStack[$stackPos - (7 - 1)], $this->tokenEndStack[$stackPos])); }, 175 => function ($stackPos) { - $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos - (9 - 3)], $this->semStack[$stackPos - (9 - 7)][0], ['keyVar' => $this->semStack[$stackPos - (9 - 5)], 'byRef' => $this->semStack[$stackPos - (9 - 7)][1], 'stmts' => $this->semStack[$stackPos - (9 - 9)]], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos - (9 - 3)], $this->semStack[$stackPos - (9 - 7)][0], ['keyVar' => $this->semStack[$stackPos - (9 - 5)], 'byRef' => $this->semStack[$stackPos - (9 - 7)][1], 'stmts' => $this->semStack[$stackPos - (9 - 9)]], $this->getAttributes($this->tokenStartStack[$stackPos - (9 - 1)], $this->tokenEndStack[$stackPos])); }, 176 => function ($stackPos) { - $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos - (6 - 3)], new Expr\Error($this->startAttributeStack[$stackPos - (6 - 4)] + $this->endAttributeStack[$stackPos - (6 - 4)]), ['stmts' => $this->semStack[$stackPos - (6 - 6)]], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos - (6 - 3)], new Expr\Error($this->getAttributes($this->tokenStartStack[$stackPos - (6 - 4)], $this->tokenEndStack[$stackPos - (6 - 4)])), ['stmts' => $this->semStack[$stackPos - (6 - 6)]], $this->getAttributes($this->tokenStartStack[$stackPos - (6 - 1)], $this->tokenEndStack[$stackPos])); }, 177 => function ($stackPos) { - $this->semValue = new Stmt\Declare_($this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Declare_($this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->getAttributes($this->tokenStartStack[$stackPos - (5 - 1)], $this->tokenEndStack[$stackPos])); }, 178 => function ($stackPos) { - $this->semValue = new Stmt\TryCatch($this->semStack[$stackPos - (6 - 3)], $this->semStack[$stackPos - (6 - 5)], $this->semStack[$stackPos - (6 - 6)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\TryCatch($this->semStack[$stackPos - (6 - 3)], $this->semStack[$stackPos - (6 - 5)], $this->semStack[$stackPos - (6 - 6)], $this->getAttributes($this->tokenStartStack[$stackPos - (6 - 1)], $this->tokenEndStack[$stackPos])); $this->checkTryCatch($this->semValue); }, 179 => function ($stackPos) { - $this->semValue = new Stmt\Goto_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Goto_($this->semStack[$stackPos - (3 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 180 => function ($stackPos) { - $this->semValue = new Stmt\Label($this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Label($this->semStack[$stackPos - (2 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 181 => function ($stackPos) { - $this->semValue = array(); + $this->semValue = null; /* means: no statement */ - }, 182 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 183 => function ($stackPos) { - $startAttributes = $this->startAttributeStack[$stackPos - (1 - 1)]; - if (isset($startAttributes['comments'])) { - $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); + }, 182 => null, 183 => function ($stackPos) { + $this->semValue = $this->maybeCreateNop($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos]); + }, 184 => function ($stackPos) { + if ($this->semStack[$stackPos - (1 - 1)] instanceof Stmt\Block) { + $this->semValue = $this->semStack[$stackPos - (1 - 1)]->stmts; } else { - $this->semValue = null; - } - if ($this->semValue === null) { - $this->semValue = array(); + if ($this->semStack[$stackPos - (1 - 1)] === null) { + $this->semValue = []; + } else { + $this->semValue = [$this->semStack[$stackPos - (1 - 1)]]; + } } - /* means: no statement */ - }, 184 => function ($stackPos) { - $this->semValue = array(); }, 185 => function ($stackPos) { + $this->semValue = array(); + }, 186 => function ($stackPos) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 186 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 187 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); + }, 188 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 188 => function ($stackPos) { - $this->semValue = new Stmt\Catch_($this->semStack[$stackPos - (8 - 3)], $this->semStack[$stackPos - (8 - 4)], $this->semStack[$stackPos - (8 - 7)], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes); }, 189 => function ($stackPos) { - $this->semValue = null; + $this->semValue = new Stmt\Catch_($this->semStack[$stackPos - (8 - 3)], $this->semStack[$stackPos - (8 - 4)], $this->semStack[$stackPos - (8 - 7)], $this->getAttributes($this->tokenStartStack[$stackPos - (8 - 1)], $this->tokenEndStack[$stackPos])); }, 190 => function ($stackPos) { - $this->semValue = new Stmt\Finally_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = null; }, 191 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 192 => function ($stackPos) { + $this->semValue = new Stmt\Finally_($this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); + }, 192 => null, 193 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 193 => function ($stackPos) { + }, 194 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 194 => function ($stackPos) { - $this->semValue = \false; }, 195 => function ($stackPos) { - $this->semValue = \true; - }, 196 => function ($stackPos) { $this->semValue = \false; - }, 197 => function ($stackPos) { + }, 196 => function ($stackPos) { $this->semValue = \true; - }, 198 => function ($stackPos) { + }, 197 => function ($stackPos) { $this->semValue = \false; - }, 199 => function ($stackPos) { + }, 198 => function ($stackPos) { $this->semValue = \true; + }, 199 => function ($stackPos) { + $this->semValue = \false; }, 200 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (3 - 2)]; + $this->semValue = \true; }, 201 => function ($stackPos) { - $this->semValue = []; + $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 202 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 203 => function ($stackPos) { - $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 204 => function ($stackPos) { - $this->semValue = new Stmt\Function_($this->semStack[$stackPos - (8 - 3)], ['byRef' => $this->semStack[$stackPos - (8 - 2)], 'params' => $this->semStack[$stackPos - (8 - 5)], 'returnType' => $this->semStack[$stackPos - (8 - 7)], 'stmts' => $this->semStack[$stackPos - (8 - 8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes); + $this->semValue = []; + }, 203 => null, 204 => function ($stackPos) { + $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 205 => function ($stackPos) { - $this->semValue = new Stmt\Function_($this->semStack[$stackPos - (9 - 4)], ['byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 6)], 'returnType' => $this->semStack[$stackPos - (9 - 8)], 'stmts' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => $this->semStack[$stackPos - (9 - 1)]], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Function_($this->semStack[$stackPos - (8 - 3)], ['byRef' => $this->semStack[$stackPos - (8 - 2)], 'params' => $this->semStack[$stackPos - (8 - 5)], 'returnType' => $this->semStack[$stackPos - (8 - 7)], 'stmts' => $this->semStack[$stackPos - (8 - 8)], 'attrGroups' => []], $this->getAttributes($this->tokenStartStack[$stackPos - (8 - 1)], $this->tokenEndStack[$stackPos])); }, 206 => function ($stackPos) { - $this->semValue = new Stmt\Class_($this->semStack[$stackPos - (7 - 2)], ['type' => $this->semStack[$stackPos - (7 - 1)], 'extends' => $this->semStack[$stackPos - (7 - 3)], 'implements' => $this->semStack[$stackPos - (7 - 4)], 'stmts' => $this->semStack[$stackPos - (7 - 6)], 'attrGroups' => []], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes); - $this->checkClass($this->semValue, $stackPos - (7 - 2)); + $this->semValue = new Stmt\Function_($this->semStack[$stackPos - (9 - 4)], ['byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 6)], 'returnType' => $this->semStack[$stackPos - (9 - 8)], 'stmts' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => $this->semStack[$stackPos - (9 - 1)]], $this->getAttributes($this->tokenStartStack[$stackPos - (9 - 1)], $this->tokenEndStack[$stackPos])); }, 207 => function ($stackPos) { - $this->semValue = new Stmt\Class_($this->semStack[$stackPos - (8 - 3)], ['type' => $this->semStack[$stackPos - (8 - 2)], 'extends' => $this->semStack[$stackPos - (8 - 4)], 'implements' => $this->semStack[$stackPos - (8 - 5)], 'stmts' => $this->semStack[$stackPos - (8 - 7)], 'attrGroups' => $this->semStack[$stackPos - (8 - 1)]], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes); - $this->checkClass($this->semValue, $stackPos - (8 - 3)); + $this->semValue = new Stmt\Class_($this->semStack[$stackPos - (7 - 2)], ['type' => $this->semStack[$stackPos - (7 - 1)], 'extends' => $this->semStack[$stackPos - (7 - 3)], 'implements' => $this->semStack[$stackPos - (7 - 4)], 'stmts' => $this->semStack[$stackPos - (7 - 6)], 'attrGroups' => []], $this->getAttributes($this->tokenStartStack[$stackPos - (7 - 1)], $this->tokenEndStack[$stackPos])); + $this->checkClass($this->semValue, $stackPos - (7 - 2)); }, 208 => function ($stackPos) { - $this->semValue = new Stmt\Interface_($this->semStack[$stackPos - (7 - 3)], ['extends' => $this->semStack[$stackPos - (7 - 4)], 'stmts' => $this->semStack[$stackPos - (7 - 6)], 'attrGroups' => $this->semStack[$stackPos - (7 - 1)]], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes); - $this->checkInterface($this->semValue, $stackPos - (7 - 3)); + $this->semValue = new Stmt\Class_($this->semStack[$stackPos - (8 - 3)], ['type' => $this->semStack[$stackPos - (8 - 2)], 'extends' => $this->semStack[$stackPos - (8 - 4)], 'implements' => $this->semStack[$stackPos - (8 - 5)], 'stmts' => $this->semStack[$stackPos - (8 - 7)], 'attrGroups' => $this->semStack[$stackPos - (8 - 1)]], $this->getAttributes($this->tokenStartStack[$stackPos - (8 - 1)], $this->tokenEndStack[$stackPos])); + $this->checkClass($this->semValue, $stackPos - (8 - 3)); }, 209 => function ($stackPos) { - $this->semValue = new Stmt\Trait_($this->semStack[$stackPos - (6 - 3)], ['stmts' => $this->semStack[$stackPos - (6 - 5)], 'attrGroups' => $this->semStack[$stackPos - (6 - 1)]], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Interface_($this->semStack[$stackPos - (7 - 3)], ['extends' => $this->semStack[$stackPos - (7 - 4)], 'stmts' => $this->semStack[$stackPos - (7 - 6)], 'attrGroups' => $this->semStack[$stackPos - (7 - 1)]], $this->getAttributes($this->tokenStartStack[$stackPos - (7 - 1)], $this->tokenEndStack[$stackPos])); + $this->checkInterface($this->semValue, $stackPos - (7 - 3)); }, 210 => function ($stackPos) { - $this->semValue = new Stmt\Enum_($this->semStack[$stackPos - (8 - 3)], ['scalarType' => $this->semStack[$stackPos - (8 - 4)], 'implements' => $this->semStack[$stackPos - (8 - 5)], 'stmts' => $this->semStack[$stackPos - (8 - 7)], 'attrGroups' => $this->semStack[$stackPos - (8 - 1)]], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes); - $this->checkEnum($this->semValue, $stackPos - (8 - 3)); + $this->semValue = new Stmt\Trait_($this->semStack[$stackPos - (6 - 3)], ['stmts' => $this->semStack[$stackPos - (6 - 5)], 'attrGroups' => $this->semStack[$stackPos - (6 - 1)]], $this->getAttributes($this->tokenStartStack[$stackPos - (6 - 1)], $this->tokenEndStack[$stackPos])); }, 211 => function ($stackPos) { - $this->semValue = null; + $this->semValue = new Stmt\Enum_($this->semStack[$stackPos - (8 - 3)], ['scalarType' => $this->semStack[$stackPos - (8 - 4)], 'implements' => $this->semStack[$stackPos - (8 - 5)], 'stmts' => $this->semStack[$stackPos - (8 - 7)], 'attrGroups' => $this->semStack[$stackPos - (8 - 1)]], $this->getAttributes($this->tokenStartStack[$stackPos - (8 - 1)], $this->tokenEndStack[$stackPos])); + $this->checkEnum($this->semValue, $stackPos - (8 - 3)); }, 212 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 2)]; - }, 213 => function ($stackPos) { $this->semValue = null; - }, 214 => function ($stackPos) { + }, 213 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 2)]; + }, 214 => function ($stackPos) { + $this->semValue = null; }, 215 => function ($stackPos) { - $this->semValue = 0; + $this->semValue = $this->semStack[$stackPos - (2 - 2)]; }, 216 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 217 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 218 => function ($stackPos) { + $this->semValue = 0; + }, 217 => null, 218 => null, 219 => function ($stackPos) { $this->checkClassModifier($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $stackPos - (2 - 2)); $this->semValue = $this->semStack[$stackPos - (2 - 1)] | $this->semStack[$stackPos - (2 - 2)]; - }, 219 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT; }, 220 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_FINAL; + $this->semValue = Modifiers::ABSTRACT; }, 221 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_READONLY; + $this->semValue = Modifiers::FINAL; }, 222 => function ($stackPos) { - $this->semValue = null; + $this->semValue = Modifiers::READONLY; }, 223 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 2)]; + $this->semValue = null; }, 224 => function ($stackPos) { - $this->semValue = array(); - }, 225 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 2)]; - }, 226 => function ($stackPos) { + }, 225 => function ($stackPos) { $this->semValue = array(); - }, 227 => function ($stackPos) { + }, 226 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 2)]; + }, 227 => function ($stackPos) { + $this->semValue = array(); }, 228 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 229 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos - (2 - 2)]; + }, 229 => null, 230 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 230 => function ($stackPos) { + }, 231 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 231 => function ($stackPos) { - $this->semValue = \is_array($this->semStack[$stackPos - (1 - 1)]) ? $this->semStack[$stackPos - (1 - 1)] : array($this->semStack[$stackPos - (1 - 1)]); - }, 232 => function ($stackPos) { + }, 232 => null, 233 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (4 - 2)]; - }, 233 => function ($stackPos) { - $this->semValue = \is_array($this->semStack[$stackPos - (1 - 1)]) ? $this->semStack[$stackPos - (1 - 1)] : array($this->semStack[$stackPos - (1 - 1)]); - }, 234 => function ($stackPos) { + }, 234 => null, 235 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (4 - 2)]; - }, 235 => function ($stackPos) { - $this->semValue = \is_array($this->semStack[$stackPos - (1 - 1)]) ? $this->semStack[$stackPos - (1 - 1)] : array($this->semStack[$stackPos - (1 - 1)]); }, 236 => function ($stackPos) { - $this->semValue = null; + if ($this->semStack[$stackPos - (1 - 1)] instanceof Stmt\Block) { + $this->semValue = $this->semStack[$stackPos - (1 - 1)]->stmts; + } else { + if ($this->semStack[$stackPos - (1 - 1)] === null) { + $this->semValue = []; + } else { + $this->semValue = [$this->semStack[$stackPos - (1 - 1)]]; + } + } }, 237 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (4 - 2)]; + $this->semValue = null; }, 238 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 239 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos - (4 - 2)]; + }, 239 => null, 240 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 240 => function ($stackPos) { + }, 241 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 241 => function ($stackPos) { - $this->semValue = new Stmt\DeclareDeclare($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 242 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (3 - 2)]; + $this->semValue = new Node\DeclareItem($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 243 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (4 - 3)]; + $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 244 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (4 - 2)]; + $this->semValue = $this->semStack[$stackPos - (4 - 3)]; }, 245 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (5 - 3)]; + $this->semValue = $this->semStack[$stackPos - (4 - 2)]; }, 246 => function ($stackPos) { - $this->semValue = array(); + $this->semValue = $this->semStack[$stackPos - (5 - 3)]; }, 247 => function ($stackPos) { + $this->semValue = array(); + }, 248 => function ($stackPos) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 248 => function ($stackPos) { - $this->semValue = new Stmt\Case_($this->semStack[$stackPos - (4 - 2)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 249 => function ($stackPos) { - $this->semValue = new Stmt\Case_(null, $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\Case_($this->semStack[$stackPos - (4 - 2)], $this->semStack[$stackPos - (4 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 250 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 251 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 252 => function ($stackPos) { - $this->semValue = new Expr\Match_($this->semStack[$stackPos - (7 - 3)], $this->semStack[$stackPos - (7 - 6)], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes); - }, 253 => function ($stackPos) { - $this->semValue = []; + $this->semValue = new Stmt\Case_(null, $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 251 => null, 252 => null, 253 => function ($stackPos) { + $this->semValue = new Expr\Match_($this->semStack[$stackPos - (7 - 3)], $this->semStack[$stackPos - (7 - 6)], $this->getAttributes($this->tokenStartStack[$stackPos - (7 - 1)], $this->tokenEndStack[$stackPos])); }, 254 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 255 => function ($stackPos) { + $this->semValue = []; + }, 255 => null, 256 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 256 => function ($stackPos) { + }, 257 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 257 => function ($stackPos) { - $this->semValue = new Node\MatchArm($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 258 => function ($stackPos) { - $this->semValue = new Node\MatchArm(null, $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Node\MatchArm($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 259 => function ($stackPos) { - $this->semValue = \is_array($this->semStack[$stackPos - (1 - 1)]) ? $this->semStack[$stackPos - (1 - 1)] : array($this->semStack[$stackPos - (1 - 1)]); + $this->semValue = new Node\MatchArm(null, $this->semStack[$stackPos - (4 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 260 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (4 - 2)]; + $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 261 => function ($stackPos) { - $this->semValue = array(); + $this->semValue = $this->semStack[$stackPos - (4 - 2)]; }, 262 => function ($stackPos) { + $this->semValue = array(); + }, 263 => function ($stackPos) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 263 => function ($stackPos) { - $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos - (5 - 3)], \is_array($this->semStack[$stackPos - (5 - 5)]) ? $this->semStack[$stackPos - (5 - 5)] : array($this->semStack[$stackPos - (5 - 5)]), $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); }, 264 => function ($stackPos) { - $this->semValue = array(); + $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->getAttributes($this->tokenStartStack[$stackPos - (5 - 1)], $this->tokenEndStack[$stackPos])); }, 265 => function ($stackPos) { + $this->semValue = array(); + }, 266 => function ($stackPos) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 266 => function ($stackPos) { - $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos - (6 - 3)], $this->semStack[$stackPos - (6 - 6)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); - $this->fixupAlternativeElse($this->semValue); }, 267 => function ($stackPos) { - $this->semValue = null; + $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos - (6 - 3)], $this->semStack[$stackPos - (6 - 6)], $this->getAttributes($this->tokenStartStack[$stackPos - (6 - 1)], $this->tokenEndStack[$stackPos])); + $this->fixupAlternativeElse($this->semValue); }, 268 => function ($stackPos) { - $this->semValue = new Stmt\Else_(\is_array($this->semStack[$stackPos - (2 - 2)]) ? $this->semStack[$stackPos - (2 - 2)] : array($this->semStack[$stackPos - (2 - 2)]), $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - }, 269 => function ($stackPos) { $this->semValue = null; + }, 269 => function ($stackPos) { + $this->semValue = new Stmt\Else_($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 270 => function ($stackPos) { - $this->semValue = new Stmt\Else_($this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - $this->fixupAlternativeElse($this->semValue); + $this->semValue = null; }, 271 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (1 - 1)], \false); + $this->semValue = new Stmt\Else_($this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + $this->fixupAlternativeElse($this->semValue); }, 272 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (2 - 2)], \true); - }, 273 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)], \false); + }, 273 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos - (2 - 2)], \true); }, 274 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)], \false); }, 275 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 276 => function ($stackPos) { + $this->semValue = array($this->fixupArrayDestructuring($this->semStack[$stackPos - (1 - 1)]), \false); + }, 276 => null, 277 => function ($stackPos) { $this->semValue = array(); - }, 277 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 278 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); + }, 279 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 279 => function ($stackPos) { - $this->semValue = 0; }, 280 => function ($stackPos) { + $this->semValue = 0; + }, 281 => function ($stackPos) { $this->checkModifier($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $stackPos - (2 - 2)); $this->semValue = $this->semStack[$stackPos - (2 - 1)] | $this->semStack[$stackPos - (2 - 2)]; - }, 281 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_PUBLIC; }, 282 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_PROTECTED; + $this->semValue = Modifiers::PUBLIC; }, 283 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_PRIVATE; + $this->semValue = Modifiers::PROTECTED; }, 284 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_READONLY; + $this->semValue = Modifiers::PRIVATE; }, 285 => function ($stackPos) { - $this->semValue = new Node\Param($this->semStack[$stackPos - (6 - 6)], null, $this->semStack[$stackPos - (6 - 3)], $this->semStack[$stackPos - (6 - 4)], $this->semStack[$stackPos - (6 - 5)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes, $this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 1)]); - $this->checkParam($this->semValue); + $this->semValue = Modifiers::READONLY; }, 286 => function ($stackPos) { - $this->semValue = new Node\Param($this->semStack[$stackPos - (8 - 6)], $this->semStack[$stackPos - (8 - 8)], $this->semStack[$stackPos - (8 - 3)], $this->semStack[$stackPos - (8 - 4)], $this->semStack[$stackPos - (8 - 5)], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes, $this->semStack[$stackPos - (8 - 2)], $this->semStack[$stackPos - (8 - 1)]); + $this->semValue = new Node\Param($this->semStack[$stackPos - (6 - 6)], null, $this->semStack[$stackPos - (6 - 3)], $this->semStack[$stackPos - (6 - 4)], $this->semStack[$stackPos - (6 - 5)], $this->getAttributes($this->tokenStartStack[$stackPos - (6 - 1)], $this->tokenEndStack[$stackPos]), $this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 1)]); $this->checkParam($this->semValue); }, 287 => function ($stackPos) { - $this->semValue = new Node\Param(new Expr\Error($this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes), null, $this->semStack[$stackPos - (6 - 3)], $this->semStack[$stackPos - (6 - 4)], $this->semStack[$stackPos - (6 - 5)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes, $this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 1)]); + $this->semValue = new Node\Param($this->semStack[$stackPos - (8 - 6)], $this->semStack[$stackPos - (8 - 8)], $this->semStack[$stackPos - (8 - 3)], $this->semStack[$stackPos - (8 - 4)], $this->semStack[$stackPos - (8 - 5)], $this->getAttributes($this->tokenStartStack[$stackPos - (8 - 1)], $this->tokenEndStack[$stackPos]), $this->semStack[$stackPos - (8 - 2)], $this->semStack[$stackPos - (8 - 1)]); + $this->checkParam($this->semValue); }, 288 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 289 => function ($stackPos) { - $this->semValue = new Node\NullableType($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - }, 290 => function ($stackPos) { - $this->semValue = new Node\UnionType($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Node\Param(new Expr\Error($this->getAttributes($this->tokenStartStack[$stackPos - (6 - 1)], $this->tokenEndStack[$stackPos])), null, $this->semStack[$stackPos - (6 - 3)], $this->semStack[$stackPos - (6 - 4)], $this->semStack[$stackPos - (6 - 5)], $this->getAttributes($this->tokenStartStack[$stackPos - (6 - 1)], $this->tokenEndStack[$stackPos]), $this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 1)]); + }, 289 => null, 290 => function ($stackPos) { + $this->semValue = new Node\NullableType($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 291 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 292 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 293 => function ($stackPos) { - $this->semValue = new Node\Name('static', $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 294 => function ($stackPos) { - $this->semValue = $this->handleBuiltinTypes($this->semStack[$stackPos - (1 - 1)]); + $this->semValue = new Node\UnionType($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 292 => null, 293 => null, 294 => function ($stackPos) { + $this->semValue = new Node\Name('static', $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 295 => function ($stackPos) { - $this->semValue = new Node\Identifier('array', $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = $this->handleBuiltinTypes($this->semStack[$stackPos - (1 - 1)]); }, 296 => function ($stackPos) { - $this->semValue = new Node\Identifier('callable', $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Node\Identifier('array', $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 297 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 298 => function ($stackPos) { + $this->semValue = new Node\Identifier('callable', $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 298 => null, 299 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; - }, 299 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]); }, 300 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]); + }, 301 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 301 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 302 => function ($stackPos) { + }, 302 => null, 303 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; - }, 303 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]); }, 304 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]); + }, 305 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 305 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]); }, 306 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]); + }, 307 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 307 => function ($stackPos) { - $this->semValue = new Node\IntersectionType($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 308 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]); + $this->semValue = new Node\IntersectionType($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 309 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]); + }, 310 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 310 => function ($stackPos) { - $this->semValue = new Node\IntersectionType($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 311 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 312 => function ($stackPos) { - $this->semValue = new Node\NullableType($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - }, 313 => function ($stackPos) { - $this->semValue = new Node\UnionType($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Node\IntersectionType($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 312 => null, 313 => function ($stackPos) { + $this->semValue = new Node\NullableType($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 314 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 315 => function ($stackPos) { + $this->semValue = new Node\UnionType($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 315 => null, 316 => function ($stackPos) { $this->semValue = null; - }, 316 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 317 => function ($stackPos) { + }, 317 => null, 318 => function ($stackPos) { $this->semValue = null; - }, 318 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 2)]; }, 319 => function ($stackPos) { - $this->semValue = null; + $this->semValue = $this->semStack[$stackPos - (2 - 2)]; }, 320 => function ($stackPos) { - $this->semValue = array(); + $this->semValue = null; }, 321 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (4 - 2)]; + $this->semValue = array(); }, 322 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (3 - 2)]); + $this->semValue = $this->semStack[$stackPos - (4 - 2)]; }, 323 => function ($stackPos) { - $this->semValue = new Node\VariadicPlaceholder($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = array($this->semStack[$stackPos - (3 - 2)]); }, 324 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); + $this->semValue = new Node\VariadicPlaceholder($this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 325 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); + }, 326 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 326 => function ($stackPos) { - $this->semValue = new Node\Arg($this->semStack[$stackPos - (1 - 1)], \false, \false, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 327 => function ($stackPos) { - $this->semValue = new Node\Arg($this->semStack[$stackPos - (2 - 2)], \true, \false, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Node\Arg($this->semStack[$stackPos - (1 - 1)], \false, \false, $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 328 => function ($stackPos) { - $this->semValue = new Node\Arg($this->semStack[$stackPos - (2 - 2)], \false, \true, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Node\Arg($this->semStack[$stackPos - (2 - 2)], \true, \false, $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 329 => function ($stackPos) { - $this->semValue = new Node\Arg($this->semStack[$stackPos - (3 - 3)], \false, \false, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes, $this->semStack[$stackPos - (3 - 1)]); + $this->semValue = new Node\Arg($this->semStack[$stackPos - (2 - 2)], \false, \true, $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 330 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 331 => function ($stackPos) { + $this->semValue = new Node\Arg($this->semStack[$stackPos - (3 - 3)], \false, \false, $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos]), $this->semStack[$stackPos - (3 - 1)]); + }, 331 => null, 332 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 332 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 333 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 334 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 335 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); + }, 334 => null, 335 => null, 336 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 336 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 337 => function ($stackPos) { - $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos - (1 - 1)], null, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 338 => function ($stackPos) { - $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Node\StaticVar($this->semStack[$stackPos - (1 - 1)], null, $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 339 => function ($stackPos) { + $this->semValue = new Node\StaticVar($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 340 => function ($stackPos) { if ($this->semStack[$stackPos - (2 - 2)] !== null) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - } - }, 340 => function ($stackPos) { - $this->semValue = array(); - }, 341 => function ($stackPos) { - $startAttributes = $this->lookaheadStartAttributes; - if (isset($startAttributes['comments'])) { - $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { - $nop = null; + $this->semValue = $this->semStack[$stackPos - (2 - 1)]; } + }, 341 => function ($stackPos) { + $this->semValue = array(); + }, 342 => function ($stackPos) { + $nop = $this->maybeCreateZeroLengthNop($this->tokenPos); if ($nop !== null) { $this->semStack[$stackPos - (1 - 1)][] = $nop; } $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 342 => function ($stackPos) { - $this->semValue = new Stmt\Property($this->semStack[$stackPos - (5 - 2)], $this->semStack[$stackPos - (5 - 4)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes, $this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 1)]); - $this->checkProperty($this->semValue, $stackPos - (5 - 2)); }, 343 => function ($stackPos) { - $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos - (5 - 4)], $this->semStack[$stackPos - (5 - 2)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes, $this->semStack[$stackPos - (5 - 1)]); - $this->checkClassConst($this->semValue, $stackPos - (5 - 2)); + $this->semValue = new Stmt\Property($this->semStack[$stackPos - (5 - 2)], $this->semStack[$stackPos - (5 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (5 - 1)], $this->tokenEndStack[$stackPos]), $this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 1)]); + $this->checkProperty($this->semValue, $stackPos - (5 - 2)); }, 344 => function ($stackPos) { - $this->semValue = new Stmt\ClassMethod($this->semStack[$stackPos - (10 - 5)], ['type' => $this->semStack[$stackPos - (10 - 2)], 'byRef' => $this->semStack[$stackPos - (10 - 4)], 'params' => $this->semStack[$stackPos - (10 - 7)], 'returnType' => $this->semStack[$stackPos - (10 - 9)], 'stmts' => $this->semStack[$stackPos - (10 - 10)], 'attrGroups' => $this->semStack[$stackPos - (10 - 1)]], $this->startAttributeStack[$stackPos - (10 - 1)] + $this->endAttributes); - $this->checkClassMethod($this->semValue, $stackPos - (10 - 2)); + $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos - (5 - 4)], $this->semStack[$stackPos - (5 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (5 - 1)], $this->tokenEndStack[$stackPos]), $this->semStack[$stackPos - (5 - 1)]); + $this->checkClassConst($this->semValue, $stackPos - (5 - 2)); }, 345 => function ($stackPos) { - $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos - (6 - 5)], $this->semStack[$stackPos - (6 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (6 - 1)], $this->tokenEndStack[$stackPos]), $this->semStack[$stackPos - (6 - 1)], $this->semStack[$stackPos - (6 - 4)]); + $this->checkClassConst($this->semValue, $stackPos - (6 - 2)); }, 346 => function ($stackPos) { - $this->semValue = new Stmt\EnumCase($this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 4)], $this->semStack[$stackPos - (5 - 1)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\ClassMethod($this->semStack[$stackPos - (10 - 5)], ['type' => $this->semStack[$stackPos - (10 - 2)], 'byRef' => $this->semStack[$stackPos - (10 - 4)], 'params' => $this->semStack[$stackPos - (10 - 7)], 'returnType' => $this->semStack[$stackPos - (10 - 9)], 'stmts' => $this->semStack[$stackPos - (10 - 10)], 'attrGroups' => $this->semStack[$stackPos - (10 - 1)]], $this->getAttributes($this->tokenStartStack[$stackPos - (10 - 1)], $this->tokenEndStack[$stackPos])); + $this->checkClassMethod($this->semValue, $stackPos - (10 - 2)); }, 347 => function ($stackPos) { - $this->semValue = null; - /* will be skipped */ + $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 348 => function ($stackPos) { - $this->semValue = array(); + $this->semValue = new Stmt\EnumCase($this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 4)], $this->semStack[$stackPos - (5 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (5 - 1)], $this->tokenEndStack[$stackPos])); }, 349 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (3 - 2)]; + $this->semValue = null; + /* will be skipped */ }, 350 => function ($stackPos) { $this->semValue = array(); }, 351 => function ($stackPos) { - $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; + $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 352 => function ($stackPos) { - $this->semValue = new Stmt\TraitUseAdaptation\Precedence($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = array(); }, 353 => function ($stackPos) { - $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (5 - 1)][0], $this->semStack[$stackPos - (5 - 1)][1], $this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 4)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); + $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; + $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 354 => function ($stackPos) { - $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], $this->semStack[$stackPos - (4 - 3)], null, $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\TraitUseAdaptation\Precedence($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], $this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 355 => function ($stackPos) { - $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], null, $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (5 - 1)][0], $this->semStack[$stackPos - (5 - 1)][1], $this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (5 - 1)], $this->tokenEndStack[$stackPos])); }, 356 => function ($stackPos) { - $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], null, $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], $this->semStack[$stackPos - (4 - 3)], null, $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 357 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]); + $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], null, $this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 358 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], null, $this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 359 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]); + }, 360 => null, 361 => function ($stackPos) { $this->semValue = array(null, $this->semStack[$stackPos - (1 - 1)]); - }, 360 => function ($stackPos) { - $this->semValue = null; - }, 361 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 362 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 363 => function ($stackPos) { - $this->semValue = 0; - }, 364 => function ($stackPos) { + $this->semValue = null; + }, 363 => null, 364 => null, 365 => function ($stackPos) { $this->semValue = 0; - }, 365 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 366 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 367 => function ($stackPos) { + $this->semValue = 0; + }, 367 => null, 368 => null, 369 => function ($stackPos) { $this->checkModifier($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $stackPos - (2 - 2)); $this->semValue = $this->semStack[$stackPos - (2 - 1)] | $this->semStack[$stackPos - (2 - 2)]; - }, 368 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_PUBLIC; - }, 369 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_PROTECTED; }, 370 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_PRIVATE; + $this->semValue = Modifiers::PUBLIC; }, 371 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_STATIC; + $this->semValue = Modifiers::PROTECTED; }, 372 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT; + $this->semValue = Modifiers::PRIVATE; }, 373 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_FINAL; + $this->semValue = Modifiers::STATIC; }, 374 => function ($stackPos) { - $this->semValue = Stmt\Class_::MODIFIER_READONLY; + $this->semValue = Modifiers::ABSTRACT; }, 375 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; + $this->semValue = Modifiers::FINAL; }, 376 => function ($stackPos) { + $this->semValue = Modifiers::READONLY; + }, 377 => null, 378 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 377 => function ($stackPos) { + }, 379 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 378 => function ($stackPos) { - $this->semValue = new Node\VarLikeIdentifier(\substr($this->semStack[$stackPos - (1 - 1)], 1), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 379 => function ($stackPos) { - $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos - (1 - 1)], null, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 380 => function ($stackPos) { - $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Node\VarLikeIdentifier(\substr($this->semStack[$stackPos - (1 - 1)], 1), $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 381 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; + $this->semValue = new Node\PropertyItem($this->semStack[$stackPos - (1 - 1)], null, $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 382 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; - }, 383 => function ($stackPos) { + $this->semValue = new Node\PropertyItem($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 383 => null, 384 => null, 385 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 384 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 385 => function ($stackPos) { - $this->semValue = array(); }, 386 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 387 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 388 => function ($stackPos) { - $this->semValue = new Expr\Assign($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 389 => function ($stackPos) { - $this->semValue = new Expr\Assign($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 390 => function ($stackPos) { - $this->semValue = new Expr\Assign($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = array(); + }, 388 => null, 389 => null, 390 => function ($stackPos) { + $this->semValue = new Expr\Assign($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 391 => function ($stackPos) { - $this->semValue = new Expr\AssignRef($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Assign($this->fixupArrayDestructuring($this->semStack[$stackPos - (3 - 1)]), $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 392 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Expr\Assign($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 393 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Expr\AssignRef($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 394 => function ($stackPos) { - $this->semValue = new Expr\Clone_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - }, 395 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\Plus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 396 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\Minus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 397 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\Mul($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\AssignRef($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); + if (!$this->phpVersion->allowsAssignNewByReference()) { + $this->emitError(new Error('Cannot assign new by reference', $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos]))); + } + }, 395 => null, 396 => null, 397 => function ($stackPos) { + $this->semValue = new Expr\Clone_($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 398 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\Div($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\Plus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 399 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\Concat($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\Minus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 400 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\Mod($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\Mul($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 401 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\Div($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 402 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\Concat($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 403 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\Mod($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 404 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 405 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 406 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\Pow($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 407 => function ($stackPos) { - $this->semValue = new Expr\AssignOp\Coalesce($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 408 => function ($stackPos) { - $this->semValue = new Expr\PostInc($this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 409 => function ($stackPos) { - $this->semValue = new Expr\PreInc($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\Pow($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 410 => function ($stackPos) { - $this->semValue = new Expr\PostDec($this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\AssignOp\Coalesce($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 411 => function ($stackPos) { - $this->semValue = new Expr\PreDec($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\PostInc($this->semStack[$stackPos - (2 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 412 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\PreInc($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 413 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\PostDec($this->semStack[$stackPos - (2 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 414 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\PreDec($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 415 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 416 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 417 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 418 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 419 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 420 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 421 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 422 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 423 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 424 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 425 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 426 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 427 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 428 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 429 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 430 => function ($stackPos) { - $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 431 => function ($stackPos) { - $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 432 => function ($stackPos) { - $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 433 => function ($stackPos) { - $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 434 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 435 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 436 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 437 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 438 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 439 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 440 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 441 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 442 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 443 => function ($stackPos) { - $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 444 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (3 - 2)]; + $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 445 => function ($stackPos) { - $this->semValue = new Expr\Ternary($this->semStack[$stackPos - (5 - 1)], $this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 446 => function ($stackPos) { - $this->semValue = new Expr\Ternary($this->semStack[$stackPos - (4 - 1)], null, $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 447 => function ($stackPos) { - $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 448 => function ($stackPos) { - $this->semValue = new Expr\Isset_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Ternary($this->semStack[$stackPos - (5 - 1)], $this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->getAttributes($this->tokenStartStack[$stackPos - (5 - 1)], $this->tokenEndStack[$stackPos])); }, 449 => function ($stackPos) { - $this->semValue = new Expr\Empty_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Ternary($this->semStack[$stackPos - (4 - 1)], null, $this->semStack[$stackPos - (4 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 450 => function ($stackPos) { - $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 451 => function ($stackPos) { - $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Isset_($this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 452 => function ($stackPos) { - $this->semValue = new Expr\Eval_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Empty_($this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 453 => function ($stackPos) { - $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_INCLUDE, $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 454 => function ($stackPos) { - $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 455 => function ($stackPos) { - $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Eval_($this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 456 => function ($stackPos) { - $attrs = $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes; - $attrs['kind'] = $this->getFloatCastKind($this->semStack[$stackPos - (2 - 1)]); - $this->semValue = new Expr\Cast\Double($this->semStack[$stackPos - (2 - 2)], $attrs); + $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_REQUIRE, $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 457 => function ($stackPos) { - $this->semValue = new Expr\Cast\String_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 458 => function ($stackPos) { - $this->semValue = new Expr\Cast\Array_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 459 => function ($stackPos) { - $this->semValue = new Expr\Cast\Object_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $attrs = $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos]); + $attrs['kind'] = $this->getFloatCastKind($this->semStack[$stackPos - (2 - 1)]); + $this->semValue = new Expr\Cast\Double($this->semStack[$stackPos - (2 - 2)], $attrs); }, 460 => function ($stackPos) { - $this->semValue = new Expr\Cast\Bool_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Cast\String_($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 461 => function ($stackPos) { - $this->semValue = new Expr\Cast\Unset_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Cast\Array_($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 462 => function ($stackPos) { - $attrs = $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes; - $attrs['kind'] = \strtolower($this->semStack[$stackPos - (2 - 1)]) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE; - $this->semValue = new Expr\Exit_($this->semStack[$stackPos - (2 - 2)], $attrs); + $this->semValue = new Expr\Cast\Object_($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 463 => function ($stackPos) { - $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Cast\Bool_($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 464 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Expr\Cast\Unset_($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 465 => function ($stackPos) { - $this->semValue = new Expr\ShellExec($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $attrs = $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos]); + $attrs['kind'] = \strtolower($this->semStack[$stackPos - (2 - 1)]) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE; + $this->semValue = new Expr\Exit_($this->semStack[$stackPos - (2 - 2)], $attrs); }, 466 => function ($stackPos) { - $this->semValue = new Expr\Print_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - }, 467 => function ($stackPos) { - $this->semValue = new Expr\Yield_(null, null, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 468 => function ($stackPos) { - $this->semValue = new Expr\Yield_($this->semStack[$stackPos - (2 - 2)], null, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); + }, 467 => null, 468 => function ($stackPos) { + $this->semValue = new Expr\ShellExec($this->semStack[$stackPos - (3 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 469 => function ($stackPos) { - $this->semValue = new Expr\Yield_($this->semStack[$stackPos - (4 - 4)], $this->semStack[$stackPos - (4 - 2)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Print_($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 470 => function ($stackPos) { - $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Yield_(null, null, $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 471 => function ($stackPos) { - $this->semValue = new Expr\Throw_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Yield_($this->semStack[$stackPos - (2 - 2)], null, $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 472 => function ($stackPos) { - $this->semValue = new Expr\ArrowFunction(['static' => \false, 'byRef' => $this->semStack[$stackPos - (8 - 2)], 'params' => $this->semStack[$stackPos - (8 - 4)], 'returnType' => $this->semStack[$stackPos - (8 - 6)], 'expr' => $this->semStack[$stackPos - (8 - 8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Yield_($this->semStack[$stackPos - (4 - 4)], $this->semStack[$stackPos - (4 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 473 => function ($stackPos) { - $this->semValue = new Expr\ArrowFunction(['static' => \true, 'byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 5)], 'returnType' => $this->semStack[$stackPos - (9 - 7)], 'expr' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => []], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes); + $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 474 => function ($stackPos) { - $this->semValue = new Expr\Closure(['static' => \false, 'byRef' => $this->semStack[$stackPos - (8 - 2)], 'params' => $this->semStack[$stackPos - (8 - 4)], 'uses' => $this->semStack[$stackPos - (8 - 6)], 'returnType' => $this->semStack[$stackPos - (8 - 7)], 'stmts' => $this->semStack[$stackPos - (8 - 8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Throw_($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 475 => function ($stackPos) { - $this->semValue = new Expr\Closure(['static' => \true, 'byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 5)], 'uses' => $this->semStack[$stackPos - (9 - 7)], 'returnType' => $this->semStack[$stackPos - (9 - 8)], 'stmts' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => []], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes); + $this->semValue = new Expr\ArrowFunction(['static' => \false, 'byRef' => $this->semStack[$stackPos - (8 - 2)], 'params' => $this->semStack[$stackPos - (8 - 4)], 'returnType' => $this->semStack[$stackPos - (8 - 6)], 'expr' => $this->semStack[$stackPos - (8 - 8)], 'attrGroups' => []], $this->getAttributes($this->tokenStartStack[$stackPos - (8 - 1)], $this->tokenEndStack[$stackPos])); }, 476 => function ($stackPos) { - $this->semValue = new Expr\ArrowFunction(['static' => \false, 'byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 5)], 'returnType' => $this->semStack[$stackPos - (9 - 7)], 'expr' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => $this->semStack[$stackPos - (9 - 1)]], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes); + $this->semValue = new Expr\ArrowFunction(['static' => \true, 'byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 5)], 'returnType' => $this->semStack[$stackPos - (9 - 7)], 'expr' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => []], $this->getAttributes($this->tokenStartStack[$stackPos - (9 - 1)], $this->tokenEndStack[$stackPos])); }, 477 => function ($stackPos) { - $this->semValue = new Expr\ArrowFunction(['static' => \true, 'byRef' => $this->semStack[$stackPos - (10 - 4)], 'params' => $this->semStack[$stackPos - (10 - 6)], 'returnType' => $this->semStack[$stackPos - (10 - 8)], 'expr' => $this->semStack[$stackPos - (10 - 10)], 'attrGroups' => $this->semStack[$stackPos - (10 - 1)]], $this->startAttributeStack[$stackPos - (10 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Closure(['static' => \false, 'byRef' => $this->semStack[$stackPos - (8 - 2)], 'params' => $this->semStack[$stackPos - (8 - 4)], 'uses' => $this->semStack[$stackPos - (8 - 6)], 'returnType' => $this->semStack[$stackPos - (8 - 7)], 'stmts' => $this->semStack[$stackPos - (8 - 8)], 'attrGroups' => []], $this->getAttributes($this->tokenStartStack[$stackPos - (8 - 1)], $this->tokenEndStack[$stackPos])); }, 478 => function ($stackPos) { - $this->semValue = new Expr\Closure(['static' => \false, 'byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 5)], 'uses' => $this->semStack[$stackPos - (9 - 7)], 'returnType' => $this->semStack[$stackPos - (9 - 8)], 'stmts' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => $this->semStack[$stackPos - (9 - 1)]], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Closure(['static' => \true, 'byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 5)], 'uses' => $this->semStack[$stackPos - (9 - 7)], 'returnType' => $this->semStack[$stackPos - (9 - 8)], 'stmts' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => []], $this->getAttributes($this->tokenStartStack[$stackPos - (9 - 1)], $this->tokenEndStack[$stackPos])); }, 479 => function ($stackPos) { - $this->semValue = new Expr\Closure(['static' => \true, 'byRef' => $this->semStack[$stackPos - (10 - 4)], 'params' => $this->semStack[$stackPos - (10 - 6)], 'uses' => $this->semStack[$stackPos - (10 - 8)], 'returnType' => $this->semStack[$stackPos - (10 - 9)], 'stmts' => $this->semStack[$stackPos - (10 - 10)], 'attrGroups' => $this->semStack[$stackPos - (10 - 1)]], $this->startAttributeStack[$stackPos - (10 - 1)] + $this->endAttributes); + $this->semValue = new Expr\ArrowFunction(['static' => \false, 'byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 5)], 'returnType' => $this->semStack[$stackPos - (9 - 7)], 'expr' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => $this->semStack[$stackPos - (9 - 1)]], $this->getAttributes($this->tokenStartStack[$stackPos - (9 - 1)], $this->tokenEndStack[$stackPos])); }, 480 => function ($stackPos) { - $this->semValue = array(new Stmt\Class_(null, ['type' => 0, 'extends' => $this->semStack[$stackPos - (8 - 4)], 'implements' => $this->semStack[$stackPos - (8 - 5)], 'stmts' => $this->semStack[$stackPos - (8 - 7)], 'attrGroups' => $this->semStack[$stackPos - (8 - 1)]], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes), $this->semStack[$stackPos - (8 - 3)]); - $this->checkClass($this->semValue[0], -1); + $this->semValue = new Expr\ArrowFunction(['static' => \true, 'byRef' => $this->semStack[$stackPos - (10 - 4)], 'params' => $this->semStack[$stackPos - (10 - 6)], 'returnType' => $this->semStack[$stackPos - (10 - 8)], 'expr' => $this->semStack[$stackPos - (10 - 10)], 'attrGroups' => $this->semStack[$stackPos - (10 - 1)]], $this->getAttributes($this->tokenStartStack[$stackPos - (10 - 1)], $this->tokenEndStack[$stackPos])); }, 481 => function ($stackPos) { - $this->semValue = new Expr\New_($this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Closure(['static' => \false, 'byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 5)], 'uses' => $this->semStack[$stackPos - (9 - 7)], 'returnType' => $this->semStack[$stackPos - (9 - 8)], 'stmts' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => $this->semStack[$stackPos - (9 - 1)]], $this->getAttributes($this->tokenStartStack[$stackPos - (9 - 1)], $this->tokenEndStack[$stackPos])); }, 482 => function ($stackPos) { - list($class, $ctorArgs) = $this->semStack[$stackPos - (2 - 2)]; - $this->semValue = new Expr\New_($class, $ctorArgs, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Closure(['static' => \true, 'byRef' => $this->semStack[$stackPos - (10 - 4)], 'params' => $this->semStack[$stackPos - (10 - 6)], 'uses' => $this->semStack[$stackPos - (10 - 8)], 'returnType' => $this->semStack[$stackPos - (10 - 9)], 'stmts' => $this->semStack[$stackPos - (10 - 10)], 'attrGroups' => $this->semStack[$stackPos - (10 - 1)]], $this->getAttributes($this->tokenStartStack[$stackPos - (10 - 1)], $this->tokenEndStack[$stackPos])); }, 483 => function ($stackPos) { - $this->semValue = array(); + $this->semValue = array(new Stmt\Class_(null, ['type' => $this->semStack[$stackPos - (8 - 2)], 'extends' => $this->semStack[$stackPos - (8 - 4)], 'implements' => $this->semStack[$stackPos - (8 - 5)], 'stmts' => $this->semStack[$stackPos - (8 - 7)], 'attrGroups' => $this->semStack[$stackPos - (8 - 1)]], $this->getAttributes($this->tokenStartStack[$stackPos - (8 - 1)], $this->tokenEndStack[$stackPos])), $this->semStack[$stackPos - (8 - 3)]); + $this->checkClass($this->semValue[0], -1); }, 484 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (4 - 3)]; + $this->semValue = new Expr\New_($this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 485 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; + list($class, $ctorArgs) = $this->semStack[$stackPos - (2 - 2)]; + $this->semValue = new Expr\New_($class, $ctorArgs, $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 486 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); + $this->semValue = array(); }, 487 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos - (4 - 3)]; + }, 488 => null, 489 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); + }, 490 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 488 => function ($stackPos) { - $this->semValue = new Expr\ClosureUse($this->semStack[$stackPos - (2 - 2)], $this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - }, 489 => function ($stackPos) { - $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 490 => function ($stackPos) { - $this->semValue = new Expr\FuncCall($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 491 => function ($stackPos) { - $this->semValue = new Expr\FuncCall($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Node\ClosureUse($this->semStack[$stackPos - (2 - 2)], $this->semStack[$stackPos - (2 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 492 => function ($stackPos) { - $this->semValue = new Expr\FuncCall($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 493 => function ($stackPos) { - $this->semValue = new Expr\StaticCall($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Expr\FuncCall($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 494 => function ($stackPos) { - $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Expr\FuncCall($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 495 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Expr\FuncCall($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 496 => function ($stackPos) { - $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Expr\StaticCall($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 497 => function ($stackPos) { - $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 498 => function ($stackPos) { - $this->semValue = new Name\FullyQualified(\substr($this->semStack[$stackPos - (1 - 1)], 1), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 499 => function ($stackPos) { - $this->semValue = new Name\Relative(\substr($this->semStack[$stackPos - (1 - 1)], 10), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 498 => null, 499 => function ($stackPos) { + $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 500 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 501 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Name\FullyQualified(\substr($this->semStack[$stackPos - (1 - 1)], 1), $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 502 => function ($stackPos) { + $this->semValue = new Name\Relative(\substr($this->semStack[$stackPos - (1 - 1)], 10), $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 503 => null, 504 => null, 505 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; - }, 503 => function ($stackPos) { - $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - $this->errorState = 2; - }, 504 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 505 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 506 => function ($stackPos) { + $this->semValue = new Expr\Error($this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + $this->errorState = 2; + }, 507 => null, 508 => null, 509 => function ($stackPos) { $this->semValue = null; - }, 507 => function ($stackPos) { + }, 510 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; - }, 508 => function ($stackPos) { + }, 511 => function ($stackPos) { $this->semValue = array(); - }, 509 => function ($stackPos) { - $this->semValue = array(new Scalar\EncapsedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos - (1 - 1)], '`'), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes)); - }, 510 => function ($stackPos) { + }, 512 => function ($stackPos) { + $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); + foreach ($this->semValue as $s) { + if ($s instanceof Node\InterpolatedStringPart) { + $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', $this->phpVersion->supportsUnicodeEscapes()); + } + } + }, 513 => function ($stackPos) { foreach ($this->semStack[$stackPos - (1 - 1)] as $s) { - if ($s instanceof Node\Scalar\EncapsedStringPart) { - $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', \true); + if ($s instanceof Node\InterpolatedStringPart) { + $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', $this->phpVersion->supportsUnicodeEscapes()); } } $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 511 => function ($stackPos) { - $this->semValue = array(); - }, 512 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 513 => function ($stackPos) { - $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 514 => function ($stackPos) { - $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 515 => function ($stackPos) { - $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 516 => function ($stackPos) { - $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = array(); + }, 515 => null, 516 => function ($stackPos) { + $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 517 => function ($stackPos) { - $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Scalar\MagicConst\Line($this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 518 => function ($stackPos) { - $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Scalar\MagicConst\File($this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 519 => function ($stackPos) { - $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Scalar\MagicConst\Dir($this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 520 => function ($stackPos) { - $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Scalar\MagicConst\Class_($this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 521 => function ($stackPos) { - $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Scalar\MagicConst\Trait_($this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 522 => function ($stackPos) { - $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Scalar\MagicConst\Method($this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 523 => function ($stackPos) { - $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos - (3 - 1)], new Expr\Error($this->startAttributeStack[$stackPos - (3 - 3)] + $this->endAttributeStack[$stackPos - (3 - 3)]), $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - $this->errorState = 2; + $this->semValue = new Scalar\MagicConst\Function_($this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 524 => function ($stackPos) { - $attrs = $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes; + $this->semValue = new Scalar\MagicConst\Namespace_($this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 525 => function ($stackPos) { + $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 526 => function ($stackPos) { + $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos - (5 - 1)], $this->semStack[$stackPos - (5 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (5 - 1)], $this->tokenEndStack[$stackPos])); + }, 527 => function ($stackPos) { + $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos - (3 - 1)], new Expr\Error($this->getAttributes($this->tokenStartStack[$stackPos - (3 - 3)], $this->tokenEndStack[$stackPos - (3 - 3)])), $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + $this->errorState = 2; + }, 528 => function ($stackPos) { + $attrs = $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos]); $attrs['kind'] = Expr\Array_::KIND_SHORT; $this->semValue = new Expr\Array_($this->semStack[$stackPos - (3 - 2)], $attrs); - }, 525 => function ($stackPos) { - $attrs = $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes; + }, 529 => function ($stackPos) { + $attrs = $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos]); $attrs['kind'] = Expr\Array_::KIND_LONG; $this->semValue = new Expr\Array_($this->semStack[$stackPos - (4 - 3)], $attrs); - }, 526 => function ($stackPos) { + $this->createdArrays->attach($this->semValue); + }, 530 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 527 => function ($stackPos) { - $this->semValue = Scalar\String_::fromString($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 528 => function ($stackPos) { - $attrs = $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes; + $this->createdArrays->attach($this->semValue); + }, 531 => function ($stackPos) { + $this->semValue = Scalar\String_::fromString($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos]), $this->phpVersion->supportsUnicodeEscapes()); + }, 532 => function ($stackPos) { + $attrs = $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos]); $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED; foreach ($this->semStack[$stackPos - (3 - 2)] as $s) { - if ($s instanceof Node\Scalar\EncapsedStringPart) { - $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', \true); + if ($s instanceof Node\InterpolatedStringPart) { + $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', $this->phpVersion->supportsUnicodeEscapes()); } } - $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos - (3 - 2)], $attrs); - }, 529 => function ($stackPos) { - $this->semValue = $this->parseLNumber($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 530 => function ($stackPos) { - $this->semValue = Scalar\DNumber::fromString($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 531 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 532 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Scalar\InterpolatedString($this->semStack[$stackPos - (3 - 2)], $attrs); }, 533 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = $this->parseLNumber($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos]), $this->phpVersion->allowsInvalidOctals()); }, 534 => function ($stackPos) { - $this->semValue = $this->parseDocString($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes, $this->startAttributeStack[$stackPos - (3 - 3)] + $this->endAttributeStack[$stackPos - (3 - 3)], \true); - }, 535 => function ($stackPos) { - $this->semValue = $this->parseDocString($this->semStack[$stackPos - (2 - 1)], '', $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes, $this->startAttributeStack[$stackPos - (2 - 2)] + $this->endAttributeStack[$stackPos - (2 - 2)], \true); - }, 536 => function ($stackPos) { - $this->semValue = $this->parseDocString($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes, $this->startAttributeStack[$stackPos - (3 - 3)] + $this->endAttributeStack[$stackPos - (3 - 3)], \true); - }, 537 => function ($stackPos) { - $this->semValue = null; - }, 538 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = Scalar\Float_::fromString($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 535 => null, 536 => null, 537 => null, 538 => function ($stackPos) { + $this->semValue = $this->parseDocString($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos]), $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 3)], $this->tokenEndStack[$stackPos - (3 - 3)]), \true); }, 539 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = $this->parseDocString($this->semStack[$stackPos - (2 - 1)], '', $this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos]), $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 2)], $this->tokenEndStack[$stackPos - (2 - 2)]), \true); }, 540 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (3 - 2)]; + $this->semValue = $this->parseDocString($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos]), $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 3)], $this->tokenEndStack[$stackPos - (3 - 3)]), \true); }, 541 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 542 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 543 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 544 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 545 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 546 => function ($stackPos) { + $this->semValue = null; + }, 542 => null, 543 => null, 544 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; - }, 547 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 548 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 549 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); - }, 550 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); - }, 551 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 552 => function ($stackPos) { - $this->semValue = new Expr\MethodCall($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); - }, 553 => function ($stackPos) { - $this->semValue = new Expr\NullsafeMethodCall($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + }, 545 => null, 546 => null, 547 => null, 548 => null, 549 => null, 550 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos - (3 - 2)]; + }, 551 => null, 552 => null, 553 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 554 => function ($stackPos) { - $this->semValue = null; - }, 555 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 556 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); + }, 555 => null, 556 => function ($stackPos) { + $this->semValue = new Expr\MethodCall($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 557 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Expr\NullsafeMethodCall($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 558 => function ($stackPos) { - $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 559 => function ($stackPos) { - $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 560 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 561 => function ($stackPos) { - $this->semValue = new Expr\Variable($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); - }, 562 => function ($stackPos) { - $this->semValue = new Expr\Variable($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = null; + }, 559 => null, 560 => null, 561 => null, 562 => function ($stackPos) { + $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 563 => function ($stackPos) { - $this->semValue = new Expr\Variable(new Expr\Error($this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes), $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - $this->errorState = 2; - }, 564 => function ($stackPos) { - $var = $this->semStack[$stackPos - (1 - 1)]->name; - $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes) : $var; - }, 565 => function ($stackPos) { - $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 564 => null, 565 => function ($stackPos) { + $this->semValue = new Expr\Variable($this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 566 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Expr\Variable($this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 567 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Variable(new Expr\Error($this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])), $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); + $this->errorState = 2; }, 568 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $var = $this->semStack[$stackPos - (1 - 1)]->name; + $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])) : $var; }, 569 => function ($stackPos) { - $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 570 => function ($stackPos) { - $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 571 => function ($stackPos) { - $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 570 => null, 571 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 572 => function ($stackPos) { - $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 573 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 574 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (3 - 2)]; + $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 575 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 576 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 577 => function ($stackPos) { + $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); + }, 577 => null, 578 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; - }, 578 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }, 579 => function ($stackPos) { - $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + }, 579 => null, 580 => null, 581 => function ($stackPos) { + $this->semValue = $this->semStack[$stackPos - (3 - 2)]; + }, 582 => null, 583 => function ($stackPos) { + $this->semValue = new Expr\Error($this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); $this->errorState = 2; - }, 580 => function ($stackPos) { - $this->semValue = new Expr\List_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); - }, 581 => function ($stackPos) { + }, 584 => function ($stackPos) { + $this->semValue = new Expr\List_($this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); + $this->semValue->setAttribute('kind', Expr\List_::KIND_LIST); + $this->postprocessList($this->semValue); + }, 585 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; $end = \count($this->semValue) - 1; - if ($this->semValue[$end] === null) { + if ($this->semValue[$end]->value instanceof Expr\Error) { \array_pop($this->semValue); } - }, 582 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos]; - }, 583 => function ($stackPos) { + }, 586 => null, 587 => function ($stackPos) { /* do nothing -- prevent default action of $$=$this->semStack[$1]. See $551. */ - }, 584 => function ($stackPos) { + }, 588 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; - }, 585 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); - }, 586 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (1 - 1)], null, \false, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); - }, 587 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (2 - 2)], null, \true, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); - }, 588 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (1 - 1)], null, \false, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 589 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (3 - 3)], $this->semStack[$stackPos - (3 - 1)], \false, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 590 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (4 - 4)], $this->semStack[$stackPos - (4 - 1)], \true, $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = new Node\ArrayItem($this->semStack[$stackPos - (1 - 1)], null, \false, $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 591 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (3 - 3)], $this->semStack[$stackPos - (3 - 1)], \false, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Node\ArrayItem($this->semStack[$stackPos - (2 - 2)], null, \true, $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); }, 592 => function ($stackPos) { - $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (2 - 2)], null, \false, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes, \true, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Node\ArrayItem($this->semStack[$stackPos - (1 - 1)], null, \false, $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); }, 593 => function ($stackPos) { - $this->semValue = null; + $this->semValue = new Node\ArrayItem($this->semStack[$stackPos - (3 - 3)], $this->semStack[$stackPos - (3 - 1)], \false, $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 594 => function ($stackPos) { - $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; + $this->semValue = new Node\ArrayItem($this->semStack[$stackPos - (4 - 4)], $this->semStack[$stackPos - (4 - 1)], \true, $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 595 => function ($stackPos) { - $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; - $this->semValue = $this->semStack[$stackPos - (2 - 1)]; + $this->semValue = new Node\ArrayItem($this->semStack[$stackPos - (3 - 3)], $this->semStack[$stackPos - (3 - 1)], \false, $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 596 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); + $this->semValue = new Node\ArrayItem($this->semStack[$stackPos - (2 - 2)], null, \false, $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos]), \true); }, 597 => function ($stackPos) { - $this->semValue = array($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)]); + /* Create an Error node now to remember the position. We'll later either report an error, + or convert this into a null element, depending on whether this is a creation or destructuring context. */ + $attrs = $this->createEmptyElemAttributes($this->tokenPos); + $this->semValue = new Node\ArrayItem(new Expr\Error($attrs), null, \false, $attrs); }, 598 => function ($stackPos) { - $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; + $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 599 => function ($stackPos) { - $this->semValue = new Expr\Variable($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; + $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 600 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 601 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); + $this->semValue = array($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)]); }, 602 => function ($stackPos) { - $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $attrs = $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos]); + $attrs['rawValue'] = $this->semStack[$stackPos - (1 - 1)]; + $this->semValue = new Node\InterpolatedStringPart($this->semStack[$stackPos - (1 - 1)], $attrs); }, 603 => function ($stackPos) { - $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 604 => function ($stackPos) { - $this->semValue = new Expr\Variable($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); - }, 605 => function ($stackPos) { - $this->semValue = new Expr\Variable($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Variable($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 604 => null, 605 => function ($stackPos) { + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (4 - 1)], $this->tokenEndStack[$stackPos])); }, 606 => function ($stackPos) { - $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 4)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); + $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 607 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (3 - 2)]; + $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 608 => function ($stackPos) { - $this->semValue = new Scalar\String_($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Variable($this->semStack[$stackPos - (3 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 609 => function ($stackPos) { - $this->semValue = $this->parseNumString($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); + $this->semValue = new Expr\Variable($this->semStack[$stackPos - (3 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (3 - 1)], $this->tokenEndStack[$stackPos])); }, 610 => function ($stackPos) { - $this->semValue = $this->parseNumString('-' . $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); + $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 4)], $this->getAttributes($this->tokenStartStack[$stackPos - (6 - 1)], $this->tokenEndStack[$stackPos])); }, 611 => function ($stackPos) { - $this->semValue = $this->semStack[$stackPos - (1 - 1)]; - }]; + $this->semValue = $this->semStack[$stackPos - (3 - 2)]; + }, 612 => function ($stackPos) { + $this->semValue = new Scalar\String_($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 613 => function ($stackPos) { + $this->semValue = $this->parseNumString($this->semStack[$stackPos - (1 - 1)], $this->getAttributes($this->tokenStartStack[$stackPos - (1 - 1)], $this->tokenEndStack[$stackPos])); + }, 614 => function ($stackPos) { + $this->semValue = $this->parseNumString('-' . $this->semStack[$stackPos - (2 - 2)], $this->getAttributes($this->tokenStartStack[$stackPos - (2 - 1)], $this->tokenEndStack[$stackPos])); + }, 615 => null]; } } Map of PHP token IDs to drop */ + protected array $dropTokens; + /** @var int[] Map of external symbols (static::T_*) to internal symbols */ + protected array $tokenToSymbol; /** @var string[] Map of symbols to their names */ - protected $symbolToName; - /** @var array Names of the production rules (only necessary for debugging) */ - protected $productions; + protected array $symbolToName; + /** @var array Names of the production rules (only necessary for debugging) */ + protected array $productions; /** @var int[] Map of states to a displacement into the $action table. The corresponding action for this * state/symbol pair is $action[$actionBase[$state] + $symbol]. If $actionBase[$state] is 0, the * action is defaulted, i.e. $actionDefault[$state] should be used instead. */ - protected $actionBase; + protected array $actionBase; /** @var int[] Table of actions. Indexed according to $actionBase comment. */ - protected $action; + protected array $action; /** @var int[] Table indexed analogously to $action. If $actionCheck[$actionBase[$state] + $symbol] != $symbol * then the action is defaulted, i.e. $actionDefault[$state] should be used instead. */ - protected $actionCheck; + protected array $actionCheck; /** @var int[] Map of states to their default action */ - protected $actionDefault; + protected array $actionDefault; /** @var callable[] Semantic action callbacks */ - protected $reduceCallbacks; + protected array $reduceCallbacks; /** @var int[] Map of non-terminals to a displacement into the $goto table. The corresponding goto state for this * non-terminal/state pair is $goto[$gotoBase[$nonTerminal] + $state] (unless defaulted) */ - protected $gotoBase; + protected array $gotoBase; /** @var int[] Table of states to goto after reduction. Indexed according to $gotoBase comment. */ - protected $goto; + protected array $goto; /** @var int[] Table indexed analogously to $goto. If $gotoCheck[$gotoBase[$nonTerminal] + $state] != $nonTerminal * then the goto state is defaulted, i.e. $gotoDefault[$nonTerminal] should be used. */ - protected $gotoCheck; + protected array $gotoCheck; /** @var int[] Map of non-terminals to the default state to goto after their reduction */ - protected $gotoDefault; + protected array $gotoDefault; /** @var int[] Map of rules to the non-terminal on their left-hand side, i.e. the non-terminal to use for * determining the state to goto after reduction. */ - protected $ruleToNonTerminal; + protected array $ruleToNonTerminal; /** @var int[] Map of rules to the length of their right-hand side, which is the number of elements that have to * be popped from the stack(s) on reduction. */ - protected $ruleToLength; + protected array $ruleToLength; /* * The following members are part of the parser state: */ - /** @var Lexer Lexer that is used when parsing */ - protected $lexer; /** @var mixed Temporary value containing the result of last semantic action (reduction) */ protected $semValue; - /** @var array Semantic value stack (contains values of tokens and semantic action results) */ - protected $semStack; - /** @var array[] Start attribute stack */ - protected $startAttributeStack; - /** @var array[] End attribute stack */ - protected $endAttributeStack; - /** @var array End attributes of last *shifted* token */ - protected $endAttributes; - /** @var array Start attributes of last *read* token */ - protected $lookaheadStartAttributes; + /** @var mixed[] Semantic value stack (contains values of tokens and semantic action results) */ + protected array $semStack; + /** @var int[] Token start position stack */ + protected array $tokenStartStack; + /** @var int[] Token end position stack */ + protected array $tokenEndStack; /** @var ErrorHandler Error handler */ - protected $errorHandler; + protected ErrorHandler $errorHandler; /** @var int Error state, used to avoid error floods */ - protected $errorState; + protected int $errorState; + /** @var \SplObjectStorage|null Array nodes created during parsing, for postprocessing of empty elements. */ + protected ?\SplObjectStorage $createdArrays; + /** @var Token[] Tokens for the current parse */ + protected array $tokens; + /** @var int Current position in token array */ + protected int $tokenPos; /** * Initialize $reduceCallbacks map. */ - protected abstract function initReduceCallbacks(); + protected abstract function initReduceCallbacks() : void; /** * Creates a parser instance. * - * Options: Currently none. + * Options: + * * phpVersion: ?PhpVersion, * * @param Lexer $lexer A lexer - * @param array $options Options array. + * @param PhpVersion $phpVersion PHP version to target, defaults to latest supported. This + * option is best-effort: Even if specified, parsing will generally assume the latest + * supported version and only adjust behavior in minor ways, for example by omitting + * errors in older versions and interpreting type hints as a name or identifier depending + * on version. */ - public function __construct(Lexer $lexer, array $options = []) + public function __construct(Lexer $lexer, ?PhpVersion $phpVersion = null) { $this->lexer = $lexer; - if (isset($options['throwOnError'])) { - throw new \LogicException('"throwOnError" is no longer supported, use "errorHandler" instead'); - } + $this->phpVersion = $phpVersion ?? PhpVersion::getNewestSupported(); $this->initReduceCallbacks(); + $this->phpTokenToSymbol = $this->createTokenMap(); + $this->dropTokens = \array_fill_keys([\T_WHITESPACE, \T_OPEN_TAG, \T_COMMENT, \T_DOC_COMMENT, \T_BAD_CHARACTER], \true); } /** * Parses PHP code into a node tree. @@ -19064,32 +20387,49 @@ abstract class ParserAbstract implements Parser * @return Node\Stmt[]|null Array of statements (or null non-throwing error handler is used and * the parser was unable to recover from an error). */ - public function parse(string $code, ErrorHandler $errorHandler = null) + public function parse(string $code, ?ErrorHandler $errorHandler = null) : ?array { $this->errorHandler = $errorHandler ?: new ErrorHandler\Throwing(); - $this->lexer->startLexing($code, $this->errorHandler); + $this->createdArrays = new \SplObjectStorage(); + $this->tokens = $this->lexer->tokenize($code, $this->errorHandler); $result = $this->doParse(); + // Report errors for any empty elements used inside arrays. This is delayed until after the main parse, + // because we don't know a priori whether a given array expression will be used in a destructuring context + // or not. + foreach ($this->createdArrays as $node) { + foreach ($node->items as $item) { + if ($item->value instanceof Expr\Error) { + $this->errorHandler->handleError(new Error('Cannot use empty array elements in arrays', $item->getAttributes())); + } + } + } // Clear out some of the interior state, so we don't hold onto unnecessary // memory between uses of the parser - $this->startAttributeStack = []; - $this->endAttributeStack = []; + $this->tokenStartStack = []; + $this->tokenEndStack = []; $this->semStack = []; $this->semValue = null; + $this->createdArrays = null; + if ($result !== null) { + $traverser = new NodeTraverser(new CommentAnnotatingVisitor($this->tokens)); + $traverser->traverse($result); + } return $result; } - protected function doParse() + public function getTokens() : array + { + return $this->tokens; + } + /** @return Stmt[]|null */ + protected function doParse() : ?array { // We start off with no lookahead-token $symbol = self::SYMBOL_NONE; - // The attributes for a node are taken from the first and last token of the node. - // From the first token only the startAttributes are taken and from the last only - // the endAttributes. Both are merged using the array union operator (+). - $startAttributes = []; - $endAttributes = []; - $this->endAttributes = $endAttributes; + $tokenValue = null; + $this->tokenPos = -1; // Keep stack of start and end attributes - $this->startAttributeStack = []; - $this->endAttributeStack = [$endAttributes]; + $this->tokenStartStack = []; + $this->tokenEndStack = [0]; // Start off in the initial state and keep a stack of previous states $state = 0; $stateStack = [$state]; @@ -19104,18 +20444,16 @@ abstract class ParserAbstract implements Parser $rule = $this->actionDefault[$state]; } else { if ($symbol === self::SYMBOL_NONE) { - // Fetch the next token id from the lexer and fetch additional info by-ref. - // The end attributes are fetched into a temporary variable and only set once the token is really - // shifted (not during read). Otherwise you would sometimes get off-by-one errors, when a rule is - // reduced after a token was read but not yet shifted. - $tokenId = $this->lexer->getNextToken($tokenValue, $startAttributes, $endAttributes); - // map the lexer token id to the internally used symbols - $symbol = $tokenId >= 0 && $tokenId < $this->tokenToSymbolMapSize ? $this->tokenToSymbol[$tokenId] : $this->invalidSymbol; - if ($symbol === $this->invalidSymbol) { + do { + $token = $this->tokens[++$this->tokenPos]; + $tokenId = $token->id; + } while (isset($this->dropTokens[$tokenId])); + // Map the lexer token id to the internally used symbols. + $tokenValue = $token->text; + if (!isset($this->phpTokenToSymbol[$tokenId])) { throw new \RangeException(\sprintf('The lexer returned an invalid token (id=%d, value=%s)', $tokenId, $tokenValue)); } - // Allow productions to access the start attributes of the lookahead token. - $this->lookaheadStartAttributes = $startAttributes; + $symbol = $this->phpTokenToSymbol[$tokenId]; //$this->traceRead($symbol); } $idx = $this->actionBase[$state] + $symbol; @@ -19133,9 +20471,8 @@ abstract class ParserAbstract implements Parser ++$stackPos; $stateStack[$stackPos] = $state = $action; $this->semStack[$stackPos] = $tokenValue; - $this->startAttributeStack[$stackPos] = $startAttributes; - $this->endAttributeStack[$stackPos] = $endAttributes; - $this->endAttributes = $endAttributes; + $this->tokenStartStack[$stackPos] = $this->tokenPos; + $this->tokenEndStack[$stackPos] = $this->tokenPos; $symbol = self::SYMBOL_NONE; if ($this->errorState) { --$this->errorState; @@ -19157,22 +20494,28 @@ abstract class ParserAbstract implements Parser /* accept */ //$this->traceAccept(); return $this->semValue; - } elseif ($rule !== $this->unexpectedTokenRule) { + } + if ($rule !== $this->unexpectedTokenRule) { /* reduce */ //$this->traceReduce($rule); + $ruleLength = $this->ruleToLength[$rule]; try { - $this->reduceCallbacks[$rule]($stackPos); + $callback = $this->reduceCallbacks[$rule]; + if ($callback !== null) { + $callback($stackPos); + } elseif ($ruleLength > 0) { + $this->semValue = $this->semStack[$stackPos - $ruleLength + 1]; + } } catch (Error $e) { - if (-1 === $e->getStartLine() && isset($startAttributes['startLine'])) { - $e->setStartLine($startAttributes['startLine']); + if (-1 === $e->getStartLine()) { + $e->setStartLine($this->tokens[$this->tokenPos]->line); } $this->emitError($e); // Can't recover from this type of error return null; } /* Goto - shift nonterminal */ - $lastEndAttributes = $this->endAttributeStack[$stackPos]; - $ruleLength = $this->ruleToLength[$rule]; + $lastTokenEnd = $this->tokenEndStack[$stackPos]; $stackPos -= $ruleLength; $nonTerminal = $this->ruleToNonTerminal[$rule]; $idx = $this->gotoBase[$nonTerminal] + $stateStack[$stackPos]; @@ -19184,18 +20527,19 @@ abstract class ParserAbstract implements Parser ++$stackPos; $stateStack[$stackPos] = $state; $this->semStack[$stackPos] = $this->semValue; - $this->endAttributeStack[$stackPos] = $lastEndAttributes; + $this->tokenEndStack[$stackPos] = $lastTokenEnd; if ($ruleLength === 0) { // Empty productions use the start attributes of the lookahead token. - $this->startAttributeStack[$stackPos] = $this->lookaheadStartAttributes; + $this->tokenStartStack[$stackPos] = $this->tokenPos; } } else { /* error */ switch ($this->errorState) { case 0: $msg = $this->getErrorMessage($symbol, $state); - $this->emitError(new Error($msg, $startAttributes + $endAttributes)); + $this->emitError(new Error($msg, $this->getAttributesForToken($this->tokenPos))); // Break missing intentionally + // no break case 1: case 2: $this->errorState = 3; @@ -19214,9 +20558,8 @@ abstract class ParserAbstract implements Parser $stateStack[$stackPos] = $state = $action; // We treat the error symbol as being empty, so we reset the end attributes // to the end attributes of the last non-error symbol - $this->startAttributeStack[$stackPos] = $this->lookaheadStartAttributes; - $this->endAttributeStack[$stackPos] = $this->endAttributeStack[$stackPos - 1]; - $this->endAttributes = $this->endAttributeStack[$stackPos - 1]; + $this->tokenStartStack[$stackPos] = $this->tokenPos; + $this->tokenEndStack[$stackPos] = $this->tokenEndStack[$stackPos - 1]; break; case 3: if ($symbol === 0) { @@ -19237,7 +20580,7 @@ abstract class ParserAbstract implements Parser } throw new \RuntimeException('Reached end of parser loop'); } - protected function emitError(Error $error) + protected function emitError(Error $error) : void { $this->errorHandler->handleError($error); } @@ -19245,7 +20588,7 @@ abstract class ParserAbstract implements Parser * Format error message including expected tokens. * * @param int $symbol Unexpected symbol - * @param int $state State at time of error + * @param int $state State at time of error * * @return string Formatted error message */ @@ -19282,36 +20625,63 @@ abstract class ParserAbstract implements Parser } return $expected; } + /** + * Get attributes for a node with the given start and end token positions. + * + * @param int $tokenStartPos Token position the node starts at + * @param int $tokenEndPos Token position the node ends at + * @return array Attributes + */ + protected function getAttributes(int $tokenStartPos, int $tokenEndPos) : array + { + $startToken = $this->tokens[$tokenStartPos]; + $afterEndToken = $this->tokens[$tokenEndPos + 1]; + return ['startLine' => $startToken->line, 'startTokenPos' => $tokenStartPos, 'startFilePos' => $startToken->pos, 'endLine' => $afterEndToken->line, 'endTokenPos' => $tokenEndPos, 'endFilePos' => $afterEndToken->pos - 1]; + } + /** + * Get attributes for a single token at the given token position. + * + * @return array Attributes + */ + protected function getAttributesForToken(int $tokenPos) : array + { + if ($tokenPos < \count($this->tokens) - 1) { + return $this->getAttributes($tokenPos, $tokenPos); + } + // Get attributes for the sentinel token. + $token = $this->tokens[$tokenPos]; + return ['startLine' => $token->line, 'startTokenPos' => $tokenPos, 'startFilePos' => $token->pos, 'endLine' => $token->line, 'endTokenPos' => $tokenPos, 'endFilePos' => $token->pos]; + } /* * Tracing functions used for debugging the parser. */ /* - protected function traceNewState($state, $symbol) { + protected function traceNewState($state, $symbol): void { echo '% State ' . $state . ', Lookahead ' . ($symbol == self::SYMBOL_NONE ? '--none--' : $this->symbolToName[$symbol]) . "\n"; } - protected function traceRead($symbol) { + protected function traceRead($symbol): void { echo '% Reading ' . $this->symbolToName[$symbol] . "\n"; } - protected function traceShift($symbol) { + protected function traceShift($symbol): void { echo '% Shift ' . $this->symbolToName[$symbol] . "\n"; } - protected function traceAccept() { + protected function traceAccept(): void { echo "% Accepted.\n"; } - protected function traceReduce($n) { + protected function traceReduce($n): void { echo '% Reduce by (' . $n . ') ' . $this->productions[$n] . "\n"; } - protected function tracePop($state) { + protected function tracePop($state): void { echo '% Recovering, uncovered state ' . $state . "\n"; } - protected function traceDiscard($symbol) { + protected function traceDiscard($symbol): void { echo '% Discard ' . $this->symbolToName[$symbol] . "\n"; } */ @@ -19331,7 +20701,8 @@ abstract class ParserAbstract implements Parser if (null === $style) { // not namespaced, nothing to do return $stmts; - } elseif ('brace' === $style) { + } + if ('brace' === $style) { // For braced namespaces we only have to check that there are no invalid statements between the namespaces $afterFirstNamespace = \false; foreach ($stmts as $stmt) { @@ -19377,7 +20748,7 @@ abstract class ParserAbstract implements Parser return $resultStmts; } } - private function fixupNamespaceAttributes(Node\Stmt\Namespace_ $stmt) + private function fixupNamespaceAttributes(Node\Stmt\Namespace_ $stmt) : void { // We moved the statements into the namespace node, as such the end of the namespace node // needs to be extended to the end of the statements. @@ -19394,6 +20765,22 @@ abstract class ParserAbstract implements Parser } } } + /** @return array */ + private function getNamespaceErrorAttributes(Namespace_ $node) : array + { + $attrs = $node->getAttributes(); + // Adjust end attributes to only cover the "namespace" keyword, not the whole namespace. + if (isset($attrs['startLine'])) { + $attrs['endLine'] = $attrs['startLine']; + } + if (isset($attrs['startTokenPos'])) { + $attrs['endTokenPos'] = $attrs['startTokenPos']; + } + if (isset($attrs['startFilePos'])) { + $attrs['endFilePos'] = $attrs['startFilePos'] + \strlen('namespace') - 1; + } + return $attrs; + } /** * Determine namespacing style (semicolon or brace) * @@ -19401,7 +20788,7 @@ abstract class ParserAbstract implements Parser * * @return null|string One of "semicolon", "brace" or null (no namespaces) */ - private function getNamespacingStyle(array $stmts) + private function getNamespacingStyle(array $stmts) : ?string { $style = null; $hasNotAllowedStmts = \false; @@ -19411,10 +20798,10 @@ abstract class ParserAbstract implements Parser if (null === $style) { $style = $currentStyle; if ($hasNotAllowedStmts) { - $this->emitError(new Error('Namespace declaration statement has to be the very first statement in the script', $stmt->getLine())); + $this->emitError(new Error('Namespace declaration statement has to be the very first statement in the script', $this->getNamespaceErrorAttributes($stmt))); } } elseif ($style !== $currentStyle) { - $this->emitError(new Error('Cannot mix bracketed namespace declarations with unbracketed namespace declarations', $stmt->getLine())); + $this->emitError(new Error('Cannot mix bracketed namespace declarations with unbracketed namespace declarations', $this->getNamespaceErrorAttributes($stmt))); // Treat like semicolon style for namespace normalization return 'semicolon'; } @@ -19433,64 +20820,14 @@ abstract class ParserAbstract implements Parser } return $style; } - /** - * Fix up parsing of static property calls in PHP 5. - * - * In PHP 5 A::$b[c][d] and A::$b[c][d]() have very different interpretation. The former is - * interpreted as (A::$b)[c][d], while the latter is the same as A::{$b[c][d]}(). We parse the - * latter as the former initially and this method fixes the AST into the correct form when we - * encounter the "()". - * - * @param Node\Expr\StaticPropertyFetch|Node\Expr\ArrayDimFetch $prop - * @param Node\Arg[] $args - * @param array $attributes - * - * @return Expr\StaticCall - */ - protected function fixupPhp5StaticPropCall($prop, array $args, array $attributes) : Expr\StaticCall - { - if ($prop instanceof Node\Expr\StaticPropertyFetch) { - $name = $prop->name instanceof VarLikeIdentifier ? $prop->name->toString() : $prop->name; - $var = new Expr\Variable($name, $prop->name->getAttributes()); - return new Expr\StaticCall($prop->class, $var, $args, $attributes); - } elseif ($prop instanceof Node\Expr\ArrayDimFetch) { - $tmp = $prop; - while ($tmp->var instanceof Node\Expr\ArrayDimFetch) { - $tmp = $tmp->var; - } - /** @var Expr\StaticPropertyFetch $staticProp */ - $staticProp = $tmp->var; - // Set start attributes to attributes of innermost node - $tmp = $prop; - $this->fixupStartAttributes($tmp, $staticProp->name); - while ($tmp->var instanceof Node\Expr\ArrayDimFetch) { - $tmp = $tmp->var; - $this->fixupStartAttributes($tmp, $staticProp->name); - } - $name = $staticProp->name instanceof VarLikeIdentifier ? $staticProp->name->toString() : $staticProp->name; - $tmp->var = new Expr\Variable($name, $staticProp->name->getAttributes()); - return new Expr\StaticCall($staticProp->class, $prop, $args, $attributes); - } else { - throw new \Exception(); - } - } - protected function fixupStartAttributes(Node $to, Node $from) - { - $startAttributes = ['startLine', 'startFilePos', 'startTokenPos']; - foreach ($startAttributes as $startAttribute) { - if ($from->hasAttribute($startAttribute)) { - $to->setAttribute($startAttribute, $from->getAttribute($startAttribute)); - } - } - } + /** @return Name|Identifier */ protected function handleBuiltinTypes(Name $name) { - $builtinTypes = ['bool' => \true, 'int' => \true, 'float' => \true, 'string' => \true, 'iterable' => \true, 'void' => \true, 'object' => \true, 'null' => \true, 'false' => \true, 'mixed' => \true, 'never' => \true, 'true' => \true]; if (!$name->isUnqualified()) { return $name; } $lowerName = $name->toLowerString(); - if (!isset($builtinTypes[$lowerName])) { + if (!$this->phpVersion->supportsBuiltinType($lowerName)) { return $name; } return new Node\Identifier($lowerName, $name->getAttributes()); @@ -19498,13 +20835,13 @@ abstract class ParserAbstract implements Parser /** * Get combined start and end attributes at a stack location * - * @param int $pos Stack location + * @param int $stackPos Stack location * - * @return array Combined start and end attributes + * @return array Combined start and end attributes */ - protected function getAttributesAt(int $pos) : array + protected function getAttributesAt(int $stackPos) : array { - return $this->startAttributeStack[$pos] + $this->endAttributeStack[$pos]; + return $this->getAttributes($this->tokenStartStack[$stackPos], $this->tokenEndStack[$stackPos]); } protected function getFloatCastKind(string $cast) : int { @@ -19517,23 +20854,24 @@ abstract class ParserAbstract implements Parser } return Double::KIND_DOUBLE; } - protected function parseLNumber($str, $attributes, $allowInvalidOctal = \false) + /** @param array $attributes */ + protected function parseLNumber(string $str, array $attributes, bool $allowInvalidOctal = \false) : Int_ { try { - return LNumber::fromString($str, $attributes, $allowInvalidOctal); + return Int_::fromString($str, $attributes, $allowInvalidOctal); } catch (Error $error) { $this->emitError($error); // Use dummy value - return new LNumber(0, $attributes); + return new Int_(0, $attributes); } } /** * Parse a T_NUM_STRING token into either an integer or string node. * - * @param string $str Number string - * @param array $attributes Attributes + * @param string $str Number string + * @param array $attributes Attributes * - * @return LNumber|String_ Integer or string node. + * @return Int_|String_ Integer or string node. */ protected function parseNumString(string $str, array $attributes) { @@ -19544,9 +20882,10 @@ abstract class ParserAbstract implements Parser if (!\is_int($num)) { return new String_($str, $attributes); } - return new LNumber($num, $attributes); + return new Int_($num, $attributes); } - protected function stripIndentation(string $string, int $indentLen, string $indentChar, bool $newlineAtStart, bool $newlineAtEnd, array $attributes) + /** @param array $attributes */ + protected function stripIndentation(string $string, int $indentLen, string $indentChar, bool $newlineAtStart, bool $newlineAtEnd, array $attributes) : string { if ($indentLen === 0) { return $string; @@ -19564,7 +20903,12 @@ abstract class ParserAbstract implements Parser return \substr($matches[0], \strlen($prefix)); }, $string); } - protected function parseDocString(string $startToken, $contents, string $endToken, array $attributes, array $endTokenAttributes, bool $parseUnicodeEscape) + /** + * @param string|(Expr|InterpolatedStringPart)[] $contents + * @param array $attributes + * @param array $endTokenAttributes + */ + protected function parseDocString(string $startToken, $contents, string $endToken, array $attributes, array $endTokenAttributes, bool $parseUnicodeEscape) : Expr { $kind = \strpos($startToken, "'") === \false ? String_::KIND_HEREDOC : String_::KIND_NOWDOC; $regex = '/\\A[bB]?<<<[ \\t]*[\'"]?([a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*)[\'"]?(?:\\r\\n|\\n|\\r)\\z/'; @@ -19588,67 +20932,136 @@ abstract class ParserAbstract implements Parser $indentChar = $indentHasSpaces ? " " : "\t"; if (\is_string($contents)) { if ($contents === '') { + $attributes['rawValue'] = $contents; return new String_('', $attributes); } $contents = $this->stripIndentation($contents, $indentLen, $indentChar, \true, \true, $attributes); $contents = \preg_replace('~(\\r\\n|\\n|\\r)\\z~', '', $contents); + $attributes['rawValue'] = $contents; if ($kind === String_::KIND_HEREDOC) { $contents = String_::parseEscapeSequences($contents, null, $parseUnicodeEscape); } return new String_($contents, $attributes); } else { \assert(\count($contents) > 0); - if (!$contents[0] instanceof Node\Scalar\EncapsedStringPart) { + if (!$contents[0] instanceof Node\InterpolatedStringPart) { // If there is no leading encapsed string part, pretend there is an empty one $this->stripIndentation('', $indentLen, $indentChar, \true, \false, $contents[0]->getAttributes()); } $newContents = []; foreach ($contents as $i => $part) { - if ($part instanceof Node\Scalar\EncapsedStringPart) { + if ($part instanceof Node\InterpolatedStringPart) { $isLast = $i === \count($contents) - 1; $part->value = $this->stripIndentation($part->value, $indentLen, $indentChar, $i === 0, $isLast, $part->getAttributes()); - $part->value = String_::parseEscapeSequences($part->value, null, $parseUnicodeEscape); if ($isLast) { $part->value = \preg_replace('~(\\r\\n|\\n|\\r)\\z~', '', $part->value); } + $part->setAttribute('rawValue', $part->value); + $part->value = String_::parseEscapeSequences($part->value, null, $parseUnicodeEscape); if ('' === $part->value) { continue; } } $newContents[] = $part; } - return new Encapsed($newContents, $attributes); + return new InterpolatedString($newContents, $attributes); } } + protected function createCommentFromToken(Token $token, int $tokenPos) : Comment + { + \assert($token->id === \T_COMMENT || $token->id == \T_DOC_COMMENT); + return \T_DOC_COMMENT === $token->id ? new Comment\Doc($token->text, $token->line, $token->pos, $tokenPos, $token->getEndLine(), $token->getEndPos() - 1, $tokenPos) : new Comment($token->text, $token->line, $token->pos, $tokenPos, $token->getEndLine(), $token->getEndPos() - 1, $tokenPos); + } /** - * Create attributes for a zero-length common-capturing nop. - * - * @param Comment[] $comments - * @return array + * Get last comment before the given token position, if any */ - protected function createCommentNopAttributes(array $comments) + protected function getCommentBeforeToken(int $tokenPos) : ?Comment { - $comment = $comments[\count($comments) - 1]; + while (--$tokenPos >= 0) { + $token = $this->tokens[$tokenPos]; + if (!isset($this->dropTokens[$token->id])) { + break; + } + if ($token->id === \T_COMMENT || $token->id === \T_DOC_COMMENT) { + return $this->createCommentFromToken($token, $tokenPos); + } + } + return null; + } + /** + * Create a zero-length nop to capture preceding comments, if any. + */ + protected function maybeCreateZeroLengthNop(int $tokenPos) : ?Nop + { + $comment = $this->getCommentBeforeToken($tokenPos); + if ($comment === null) { + return null; + } $commentEndLine = $comment->getEndLine(); $commentEndFilePos = $comment->getEndFilePos(); $commentEndTokenPos = $comment->getEndTokenPos(); - $attributes = ['comments' => $comments]; - if (-1 !== $commentEndLine) { - $attributes['startLine'] = $commentEndLine; - $attributes['endLine'] = $commentEndLine; + $attributes = ['startLine' => $commentEndLine, 'endLine' => $commentEndLine, 'startFilePos' => $commentEndFilePos + 1, 'endFilePos' => $commentEndFilePos, 'startTokenPos' => $commentEndTokenPos + 1, 'endTokenPos' => $commentEndTokenPos]; + return new Nop($attributes); + } + protected function maybeCreateNop(int $tokenStartPos, int $tokenEndPos) : ?Nop + { + if ($this->getCommentBeforeToken($tokenStartPos) === null) { + return null; } - if (-1 !== $commentEndFilePos) { - $attributes['startFilePos'] = $commentEndFilePos + 1; - $attributes['endFilePos'] = $commentEndFilePos; + return new Nop($this->getAttributes($tokenStartPos, $tokenEndPos)); + } + protected function handleHaltCompiler() : string + { + // Prevent the lexer from returning any further tokens. + $nextToken = $this->tokens[$this->tokenPos + 1]; + $this->tokenPos = \count($this->tokens) - 2; + // Return text after __halt_compiler. + return $nextToken->id === \T_INLINE_HTML ? $nextToken->text : ''; + } + protected function inlineHtmlHasLeadingNewline(int $stackPos) : bool + { + $tokenPos = $this->tokenStartStack[$stackPos]; + $token = $this->tokens[$tokenPos]; + \assert($token->id == \T_INLINE_HTML); + if ($tokenPos > 0) { + $prevToken = $this->tokens[$tokenPos - 1]; + \assert($prevToken->id == \T_CLOSE_TAG); + return \false !== \strpos($prevToken->text, "\n") || \false !== \strpos($prevToken->text, "\r"); } - if (-1 !== $commentEndTokenPos) { - $attributes['startTokenPos'] = $commentEndTokenPos + 1; - $attributes['endTokenPos'] = $commentEndTokenPos; + return \true; + } + /** + * @return array + */ + protected function createEmptyElemAttributes(int $tokenPos) : array + { + return $this->getAttributesForToken($tokenPos); + } + protected function fixupArrayDestructuring(Array_ $node) : Expr\List_ + { + $this->createdArrays->detach($node); + return new Expr\List_(\array_map(function (Node\ArrayItem $item) { + if ($item->value instanceof Expr\Error) { + // We used Error as a placeholder for empty elements, which are legal for destructuring. + return null; + } + if ($item->value instanceof Array_) { + return new Node\ArrayItem($this->fixupArrayDestructuring($item->value), $item->key, $item->byRef, $item->getAttributes()); + } + return $item; + }, $node->items), ['kind' => Expr\List_::KIND_ARRAY] + $node->getAttributes()); + } + protected function postprocessList(Expr\List_ $node) : void + { + foreach ($node->items as $i => $item) { + if ($item->value instanceof Expr\Error) { + // We used Error as a placeholder for empty elements, which are legal for destructuring. + $node->items[$i] = null; + } } - return $attributes; } /** @param ElseIf_|Else_ $node */ - protected function fixupAlternativeElse($node) + protected function fixupAlternativeElse($node) : void { // Make sure a trailing nop statement carrying comments is part of the node. $numStmts = \count($node->stmts); @@ -19665,38 +21078,38 @@ abstract class ParserAbstract implements Parser } } } - protected function checkClassModifier($a, $b, $modifierPos) + protected function checkClassModifier(int $a, int $b, int $modifierPos) : void { try { - Class_::verifyClassModifier($a, $b); + Modifiers::verifyClassModifier($a, $b); } catch (Error $error) { $error->setAttributes($this->getAttributesAt($modifierPos)); $this->emitError($error); } } - protected function checkModifier($a, $b, $modifierPos) + protected function checkModifier(int $a, int $b, int $modifierPos) : void { // Jumping through some hoops here because verifyModifier() is also used elsewhere try { - Class_::verifyModifier($a, $b); + Modifiers::verifyModifier($a, $b); } catch (Error $error) { $error->setAttributes($this->getAttributesAt($modifierPos)); $this->emitError($error); } } - protected function checkParam(Param $node) + protected function checkParam(Param $node) : void { if ($node->variadic && null !== $node->default) { $this->emitError(new Error('Variadic parameter cannot have a default value', $node->default->getAttributes())); } } - protected function checkTryCatch(TryCatch $node) + protected function checkTryCatch(TryCatch $node) : void { if (empty($node->catches) && null === $node->finally) { $this->emitError(new Error('Cannot use try without catch or finally', $node->getAttributes())); } } - protected function checkNamespace(Namespace_ $node) + protected function checkNamespace(Namespace_ $node) : void { if (null !== $node->stmts) { foreach ($node->stmts as $stmt) { @@ -19706,13 +21119,14 @@ abstract class ParserAbstract implements Parser } } } - private function checkClassName($name, $namePos) + private function checkClassName(?Identifier $name, int $namePos) : void { if (null !== $name && $name->isSpecialClassName()) { $this->emitError(new Error(\sprintf('Cannot use \'%s\' as class name as it is reserved', $name), $this->getAttributesAt($namePos))); } } - private function checkImplementedInterfaces(array $interfaces) + /** @param Name[] $interfaces */ + private function checkImplementedInterfaces(array $interfaces) : void { foreach ($interfaces as $interface) { if ($interface->isSpecialClassName()) { @@ -19720,7 +21134,7 @@ abstract class ParserAbstract implements Parser } } } - protected function checkClass(Class_ $node, $namePos) + protected function checkClass(Class_ $node, int $namePos) : void { $this->checkClassName($node->name, $namePos); if ($node->extends && $node->extends->isSpecialClassName()) { @@ -19728,19 +21142,19 @@ abstract class ParserAbstract implements Parser } $this->checkImplementedInterfaces($node->implements); } - protected function checkInterface(Interface_ $node, $namePos) + protected function checkInterface(Interface_ $node, int $namePos) : void { $this->checkClassName($node->name, $namePos); $this->checkImplementedInterfaces($node->extends); } - protected function checkEnum(Enum_ $node, $namePos) + protected function checkEnum(Enum_ $node, int $namePos) : void { $this->checkClassName($node->name, $namePos); $this->checkImplementedInterfaces($node->implements); } - protected function checkClassMethod(ClassMethod $node, $modifierPos) + protected function checkClassMethod(ClassMethod $node, int $modifierPos) : void { - if ($node->flags & Class_::MODIFIER_STATIC) { + if ($node->flags & Modifiers::STATIC) { switch ($node->name->toLowerString()) { case '__construct': $this->emitError(new Error(\sprintf('Constructor %s() cannot be static', $node->name), $this->getAttributesAt($modifierPos))); @@ -19753,76 +21167,337 @@ abstract class ParserAbstract implements Parser break; } } - if ($node->flags & Class_::MODIFIER_READONLY) { + if ($node->flags & Modifiers::READONLY) { $this->emitError(new Error(\sprintf('Method %s() cannot be readonly', $node->name), $this->getAttributesAt($modifierPos))); } } - protected function checkClassConst(ClassConst $node, $modifierPos) + protected function checkClassConst(ClassConst $node, int $modifierPos) : void { - if ($node->flags & Class_::MODIFIER_STATIC) { + if ($node->flags & Modifiers::STATIC) { $this->emitError(new Error("Cannot use 'static' as constant modifier", $this->getAttributesAt($modifierPos))); } - if ($node->flags & Class_::MODIFIER_ABSTRACT) { + if ($node->flags & Modifiers::ABSTRACT) { $this->emitError(new Error("Cannot use 'abstract' as constant modifier", $this->getAttributesAt($modifierPos))); } - if ($node->flags & Class_::MODIFIER_READONLY) { + if ($node->flags & Modifiers::READONLY) { $this->emitError(new Error("Cannot use 'readonly' as constant modifier", $this->getAttributesAt($modifierPos))); } } - protected function checkProperty(Property $node, $modifierPos) + protected function checkProperty(Property $node, int $modifierPos) : void { - if ($node->flags & Class_::MODIFIER_ABSTRACT) { + if ($node->flags & Modifiers::ABSTRACT) { $this->emitError(new Error('Properties cannot be declared abstract', $this->getAttributesAt($modifierPos))); } - if ($node->flags & Class_::MODIFIER_FINAL) { + if ($node->flags & Modifiers::FINAL) { $this->emitError(new Error('Properties cannot be declared final', $this->getAttributesAt($modifierPos))); } } - protected function checkUseUse(UseUse $node, $namePos) + protected function checkUseUse(UseItem $node, int $namePos) : void { if ($node->alias && $node->alias->isSpecialClassName()) { $this->emitError(new Error(\sprintf('Cannot use %s as %s because \'%2$s\' is a special class name', $node->name, $node->alias), $this->getAttributesAt($namePos))); } } + /** + * Creates the token map. + * + * The token map maps the PHP internal token identifiers + * to the identifiers used by the Parser. Additionally it + * maps T_OPEN_TAG_WITH_ECHO to T_ECHO and T_CLOSE_TAG to ';'. + * + * @return array The token map + */ + protected function createTokenMap() : array + { + $tokenMap = []; + for ($i = 0; $i < 1000; ++$i) { + if ($i < 256) { + // Single-char tokens use an identity mapping. + $tokenMap[$i] = $i; + } elseif (\T_DOUBLE_COLON === $i) { + // T_DOUBLE_COLON is equivalent to T_PAAMAYIM_NEKUDOTAYIM + $tokenMap[$i] = static::T_PAAMAYIM_NEKUDOTAYIM; + } elseif (\T_OPEN_TAG_WITH_ECHO === $i) { + // T_OPEN_TAG_WITH_ECHO with dropped T_OPEN_TAG results in T_ECHO + $tokenMap[$i] = static::T_ECHO; + } elseif (\T_CLOSE_TAG === $i) { + // T_CLOSE_TAG is equivalent to ';' + $tokenMap[$i] = \ord(';'); + } elseif ('UNKNOWN' !== ($name = \token_name($i))) { + if (\defined($name = static::class . '::' . $name)) { + // Other tokens can be mapped directly + $tokenMap[$i] = \constant($name); + } + } + } + // Assign tokens for which we define compatibility constants, as token_name() does not know them. + $tokenMap[\T_FN] = static::T_FN; + $tokenMap[\T_COALESCE_EQUAL] = static::T_COALESCE_EQUAL; + $tokenMap[\T_NAME_QUALIFIED] = static::T_NAME_QUALIFIED; + $tokenMap[\T_NAME_FULLY_QUALIFIED] = static::T_NAME_FULLY_QUALIFIED; + $tokenMap[\T_NAME_RELATIVE] = static::T_NAME_RELATIVE; + $tokenMap[\T_MATCH] = static::T_MATCH; + $tokenMap[\T_NULLSAFE_OBJECT_OPERATOR] = static::T_NULLSAFE_OBJECT_OPERATOR; + $tokenMap[\T_ATTRIBUTE] = static::T_ATTRIBUTE; + $tokenMap[\T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG] = static::T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG; + $tokenMap[\T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG] = static::T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG; + $tokenMap[\T_ENUM] = static::T_ENUM; + $tokenMap[\T_READONLY] = static::T_READONLY; + // We have create a map from PHP token IDs to external symbol IDs. + // Now map them to the internal symbol ID. + $fullTokenMap = []; + foreach ($tokenMap as $phpToken => $extSymbol) { + $intSymbol = $this->tokenToSymbol[$extSymbol]; + if ($intSymbol === $this->invalidSymbol) { + continue; + } + $fullTokenMap[$phpToken] = $intSymbol; + } + return $fullTokenMap; + } } isHostVersion()) { + $lexer = new Lexer(); + } else { + $lexer = new Lexer\Emulative($version); } - switch ($kind) { - case self::PREFER_PHP7: - return new Parser\Multiple([new Parser\Php7($lexer, $parserOptions), new Parser\Php5($lexer, $parserOptions)]); - case self::PREFER_PHP5: - return new Parser\Multiple([new Parser\Php5($lexer, $parserOptions), new Parser\Php7($lexer, $parserOptions)]); - case self::ONLY_PHP7: - return new Parser\Php7($lexer, $parserOptions); - case self::ONLY_PHP5: - return new Parser\Php5($lexer, $parserOptions); - default: - throw new \LogicException('Kind must be one of ::PREFER_PHP7, ::PREFER_PHP5, ::ONLY_PHP7 or ::ONLY_PHP5'); + if ($version->id >= 80000) { + return new Php8($lexer, $version); + } + return new Php7($lexer, $version); + } + /** + * Create a parser targeting the newest version supported by this library. Code for older + * versions will be accepted if there have been no relevant backwards-compatibility breaks in + * PHP. + */ + public function createForNewestSupportedVersion() : Parser + { + return $this->createForVersion(PhpVersion::getNewestSupported()); + } + /** + * Create a parser targeting the host PHP version, that is the PHP version we're currently + * running on. This parser will not use any token emulation. + */ + public function createForHostVersion() : Parser + { + return $this->createForVersion(PhpVersion::getHostVersion()); + } +} + 50100, 'callable' => 50400, 'bool' => 70000, 'int' => 70000, 'float' => 70000, 'string' => 70000, 'iterable' => 70100, 'void' => 70100, 'object' => 70200, 'null' => 80000, 'false' => 80000, 'mixed' => 80000, 'never' => 80100, 'true' => 80200]; + private function __construct(int $id) + { + $this->id = $id; + } + /** + * Create a PhpVersion object from major and minor version components. + */ + public static function fromComponents(int $major, int $minor) : self + { + return new self($major * 10000 + $minor * 100); + } + /** + * Get the newest PHP version supported by this library. Support for this version may be partial, + * if it is still under development. + */ + public static function getNewestSupported() : self + { + return self::fromComponents(8, 2); + } + /** + * Get the host PHP version, that is the PHP version we're currently running on. + */ + public static function getHostVersion() : self + { + return self::fromComponents(\PHP_MAJOR_VERSION, \PHP_MINOR_VERSION); + } + /** + * Parse the version from a string like "8.1". + */ + public static function fromString(string $version) : self + { + if (!\preg_match('/^(\\d+)\\.(\\d+)/', $version, $matches)) { + throw new \LogicException("Invalid PHP version \"{$version}\""); } + return self::fromComponents((int) $matches[1], (int) $matches[2]); + } + /** + * Check whether two versions are the same. + */ + public function equals(PhpVersion $other) : bool + { + return $this->id === $other->id; + } + /** + * Check whether this version is greater than or equal to the argument. + */ + public function newerOrEqual(PhpVersion $other) : bool + { + return $this->id >= $other->id; + } + /** + * Check whether this version is older than the argument. + */ + public function older(PhpVersion $other) : bool + { + return $this->id < $other->id; + } + /** + * Check whether this is the host PHP version. + */ + public function isHostVersion() : bool + { + return $this->equals(self::getHostVersion()); + } + /** + * Check whether this PHP version supports the given builtin type. Type name must be lowercase. + */ + public function supportsBuiltinType(string $type) : bool + { + $minVersion = self::BUILTIN_TYPE_VERSIONS[$type] ?? null; + return $minVersion !== null && $this->id >= $minVersion; + } + /** + * Whether this version supports [] array literals. + */ + public function supportsShortArraySyntax() : bool + { + return $this->id >= 50400; + } + /** + * Whether this version supports [] for destructuring. + */ + public function supportsShortArrayDestructuring() : bool + { + return $this->id >= 70100; + } + /** + * Whether this version supports flexible heredoc/nowdoc. + */ + public function supportsFlexibleHeredoc() : bool + { + return $this->id >= 70300; } + /** + * Whether this version supports trailing commas in parameter lists. + */ + public function supportsTrailingCommaInParamList() : bool + { + return $this->id >= 80000; + } + /** + * Whether this version allows "$var =& new Obj". + */ + public function allowsAssignNewByReference() : bool + { + return $this->id < 70000; + } + /** + * Whether this version allows invalid octals like "08". + */ + public function allowsInvalidOctals() : bool + { + return $this->id < 70000; + } + /** + * Whether this version allows DEL (\x7f) to occur in identifiers. + */ + public function allowsDelInIdentifiers() : bool + { + return $this->id < 70100; + } + /** + * Whether this version supports yield in expression context without parentheses. + */ + public function supportsYieldWithoutParentheses() : bool + { + return $this->id >= 70000; + } + /** + * Whether this version supports unicode escape sequences in strings. + */ + public function supportsUnicodeEscapes() : bool + { + return $this->id >= 70000; + } +} +pAttrGroups($node->attrGroups, \true) . $this->pModifiers($node->flags) . ($node->type ? $this->p($node->type) . ' ' : '') . ($node->byRef ? '&' : '') . ($node->variadic ? '...' : '') . $this->p($node->var) . ($node->default ? ' = ' . $this->p($node->default) : ''); } - protected function pArg(Node\Arg $node) + protected function pArg(Node\Arg $node) : string { return ($node->name ? $node->name->toString() . ': ' : '') . ($node->byRef ? '&' : '') . ($node->unpack ? '...' : '') . $this->p($node->value); } - protected function pVariadicPlaceholder(Node\VariadicPlaceholder $node) + protected function pVariadicPlaceholder(Node\VariadicPlaceholder $node) : string { return '...'; } - protected function pConst(Node\Const_ $node) + protected function pConst(Node\Const_ $node) : string { return $node->name . ' = ' . $this->p($node->value); } - protected function pNullableType(Node\NullableType $node) + protected function pNullableType(Node\NullableType $node) : string { return '?' . $this->p($node->type); } - protected function pUnionType(Node\UnionType $node) + protected function pUnionType(Node\UnionType $node) : string { $types = []; foreach ($node->types as $typeNode) { @@ -19874,125 +21549,139 @@ class Standard extends PrettyPrinterAbstract } return \implode('|', $types); } - protected function pIntersectionType(Node\IntersectionType $node) + protected function pIntersectionType(Node\IntersectionType $node) : string { return $this->pImplode($node->types, '&'); } - protected function pIdentifier(Node\Identifier $node) + protected function pIdentifier(Node\Identifier $node) : string { return $node->name; } - protected function pVarLikeIdentifier(Node\VarLikeIdentifier $node) + protected function pVarLikeIdentifier(Node\VarLikeIdentifier $node) : string { return '$' . $node->name; } - protected function pAttribute(Node\Attribute $node) + protected function pAttribute(Node\Attribute $node) : string { return $this->p($node->name) . ($node->args ? '(' . $this->pCommaSeparated($node->args) . ')' : ''); } - protected function pAttributeGroup(Node\AttributeGroup $node) + protected function pAttributeGroup(Node\AttributeGroup $node) : string { return '#[' . $this->pCommaSeparated($node->attrs) . ']'; } // Names - protected function pName(Name $node) + protected function pName(Name $node) : string { - return \implode('\\', $node->parts); + return $node->name; } - protected function pName_FullyQualified(Name\FullyQualified $node) + protected function pName_FullyQualified(Name\FullyQualified $node) : string { - return '\\' . \implode('\\', $node->parts); + return '\\' . $node->name; } - protected function pName_Relative(Name\Relative $node) + protected function pName_Relative(Name\Relative $node) : string { - return 'namespace\\' . \implode('\\', $node->parts); + return 'namespace\\' . $node->name; } // Magic Constants - protected function pScalar_MagicConst_Class(MagicConst\Class_ $node) + protected function pScalar_MagicConst_Class(MagicConst\Class_ $node) : string { return '__CLASS__'; } - protected function pScalar_MagicConst_Dir(MagicConst\Dir $node) + protected function pScalar_MagicConst_Dir(MagicConst\Dir $node) : string { return '__DIR__'; } - protected function pScalar_MagicConst_File(MagicConst\File $node) + protected function pScalar_MagicConst_File(MagicConst\File $node) : string { return '__FILE__'; } - protected function pScalar_MagicConst_Function(MagicConst\Function_ $node) + protected function pScalar_MagicConst_Function(MagicConst\Function_ $node) : string { return '__FUNCTION__'; } - protected function pScalar_MagicConst_Line(MagicConst\Line $node) + protected function pScalar_MagicConst_Line(MagicConst\Line $node) : string { return '__LINE__'; } - protected function pScalar_MagicConst_Method(MagicConst\Method $node) + protected function pScalar_MagicConst_Method(MagicConst\Method $node) : string { return '__METHOD__'; } - protected function pScalar_MagicConst_Namespace(MagicConst\Namespace_ $node) + protected function pScalar_MagicConst_Namespace(MagicConst\Namespace_ $node) : string { return '__NAMESPACE__'; } - protected function pScalar_MagicConst_Trait(MagicConst\Trait_ $node) + protected function pScalar_MagicConst_Trait(MagicConst\Trait_ $node) : string { return '__TRAIT__'; } // Scalars - protected function pScalar_String(Scalar\String_ $node) + private function indentString(string $str) : string + { + return \str_replace("\n", $this->nl, $str); + } + protected function pScalar_String(Scalar\String_ $node) : string { $kind = $node->getAttribute('kind', Scalar\String_::KIND_SINGLE_QUOTED); switch ($kind) { case Scalar\String_::KIND_NOWDOC: $label = $node->getAttribute('docLabel'); if ($label && !$this->containsEndLabel($node->value, $label)) { + $shouldIdent = $this->phpVersion->supportsFlexibleHeredoc(); + $nl = $shouldIdent ? $this->nl : $this->newline; if ($node->value === '') { - return "<<<'{$label}'\n{$label}" . $this->docStringEndToken; + return "<<<'{$label}'{$nl}{$label}{$this->docStringEndToken}"; + } + // Make sure trailing \r is not combined with following \n into CRLF. + if ($node->value[\strlen($node->value) - 1] !== "\r") { + $value = $shouldIdent ? $this->indentString($node->value) : $node->value; + return "<<<'{$label}'{$nl}{$value}{$nl}{$label}{$this->docStringEndToken}"; } - return "<<<'{$label}'\n{$node->value}\n{$label}" . $this->docStringEndToken; } /* break missing intentionally */ + // no break case Scalar\String_::KIND_SINGLE_QUOTED: return $this->pSingleQuotedString($node->value); case Scalar\String_::KIND_HEREDOC: $label = $node->getAttribute('docLabel'); - if ($label && !$this->containsEndLabel($node->value, $label)) { - if ($node->value === '') { - return "<<<{$label}\n{$label}" . $this->docStringEndToken; + $escaped = $this->escapeString($node->value, null); + if ($label && !$this->containsEndLabel($escaped, $label)) { + $nl = $this->phpVersion->supportsFlexibleHeredoc() ? $this->nl : $this->newline; + if ($escaped === '') { + return "<<<{$label}{$nl}{$label}{$this->docStringEndToken}"; } - $escaped = $this->escapeString($node->value, null); - return "<<<{$label}\n" . $escaped . "\n{$label}" . $this->docStringEndToken; + return "<<<{$label}{$nl}{$escaped}{$nl}{$label}{$this->docStringEndToken}"; } /* break missing intentionally */ + // no break case Scalar\String_::KIND_DOUBLE_QUOTED: return '"' . $this->escapeString($node->value, '"') . '"'; } throw new \Exception('Invalid string kind'); } - protected function pScalar_Encapsed(Scalar\Encapsed $node) + protected function pScalar_InterpolatedString(Scalar\InterpolatedString $node) : string { if ($node->getAttribute('kind') === Scalar\String_::KIND_HEREDOC) { $label = $node->getAttribute('docLabel'); if ($label && !$this->encapsedContainsEndLabel($node->parts, $label)) { - if (\count($node->parts) === 1 && $node->parts[0] instanceof Scalar\EncapsedStringPart && $node->parts[0]->value === '') { - return "<<<{$label}\n{$label}" . $this->docStringEndToken; + $nl = $this->phpVersion->supportsFlexibleHeredoc() ? $this->nl : $this->newline; + if (\count($node->parts) === 1 && $node->parts[0] instanceof Node\InterpolatedStringPart && $node->parts[0]->value === '') { + return "<<<{$label}{$nl}{$label}{$this->docStringEndToken}"; } - return "<<<{$label}\n" . $this->pEncapsList($node->parts, null) . "\n{$label}" . $this->docStringEndToken; + return "<<<{$label}{$nl}" . $this->pEncapsList($node->parts, null) . "{$nl}{$label}{$this->docStringEndToken}"; } } return '"' . $this->pEncapsList($node->parts, '"') . '"'; } - protected function pScalar_LNumber(Scalar\LNumber $node) + protected function pScalar_Int(Scalar\Int_ $node) : string { if ($node->value === -\PHP_INT_MAX - 1) { // PHP_INT_MIN cannot be represented as a literal, // because the sign is not part of the literal return '(-' . \PHP_INT_MAX . '-1)'; } - $kind = $node->getAttribute('kind', Scalar\LNumber::KIND_DEC); - if (Scalar\LNumber::KIND_DEC === $kind) { + $kind = $node->getAttribute('kind', Scalar\Int_::KIND_DEC); + if (Scalar\Int_::KIND_DEC === $kind) { return (string) $node->value; } if ($node->value < 0) { @@ -20003,29 +21692,30 @@ class Standard extends PrettyPrinterAbstract $str = (string) $node->value; } switch ($kind) { - case Scalar\LNumber::KIND_BIN: + case Scalar\Int_::KIND_BIN: return $sign . '0b' . \base_convert($str, 10, 2); - case Scalar\LNumber::KIND_OCT: + case Scalar\Int_::KIND_OCT: return $sign . '0' . \base_convert($str, 10, 8); - case Scalar\LNumber::KIND_HEX: + case Scalar\Int_::KIND_HEX: return $sign . '0x' . \base_convert($str, 10, 16); } throw new \Exception('Invalid number kind'); } - protected function pScalar_DNumber(Scalar\DNumber $node) + protected function pScalar_Float(Scalar\Float_ $node) : string { if (!\is_finite($node->value)) { if ($node->value === \INF) { - return '\\INF'; - } elseif ($node->value === -\INF) { - return '-\\INF'; + return '1.0E+1000'; + } + if ($node->value === -\INF) { + return '-1.0E+1000'; } else { return '\\NAN'; } } // Try to find a short full-precision representation $stringValue = \sprintf('%.16G', $node->value); - if ($node->value !== (double) $stringValue) { + if ($node->value !== (float) $stringValue) { $stringValue = \sprintf('%.17G', $node->value); } // %G is locale dependent and there exists no locale-independent alternative. We don't want @@ -20035,319 +21725,312 @@ class Standard extends PrettyPrinterAbstract // ensure that number is really printed as float return \preg_match('/^-?[0-9]+$/', $stringValue) ? $stringValue . '.0' : $stringValue; } - protected function pScalar_EncapsedStringPart(Scalar\EncapsedStringPart $node) - { - throw new \LogicException('Cannot directly print EncapsedStringPart'); - } // Assignments - protected function pExpr_Assign(Expr\Assign $node) + protected function pExpr_Assign(Expr\Assign $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(Expr\Assign::class, $node->var, ' = ', $node->expr); + return $this->pPrefixOp(Expr\Assign::class, $this->p($node->var) . ' = ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_AssignRef(Expr\AssignRef $node) + protected function pExpr_AssignRef(Expr\AssignRef $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(Expr\AssignRef::class, $node->var, ' =& ', $node->expr); + return $this->pPrefixOp(Expr\AssignRef::class, $this->p($node->var) . ' =& ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_AssignOp_Plus(AssignOp\Plus $node) + protected function pExpr_AssignOp_Plus(AssignOp\Plus $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(AssignOp\Plus::class, $node->var, ' += ', $node->expr); + return $this->pPrefixOp(AssignOp\Plus::class, $this->p($node->var) . ' += ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_AssignOp_Minus(AssignOp\Minus $node) + protected function pExpr_AssignOp_Minus(AssignOp\Minus $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(AssignOp\Minus::class, $node->var, ' -= ', $node->expr); + return $this->pPrefixOp(AssignOp\Minus::class, $this->p($node->var) . ' -= ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_AssignOp_Mul(AssignOp\Mul $node) + protected function pExpr_AssignOp_Mul(AssignOp\Mul $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(AssignOp\Mul::class, $node->var, ' *= ', $node->expr); + return $this->pPrefixOp(AssignOp\Mul::class, $this->p($node->var) . ' *= ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_AssignOp_Div(AssignOp\Div $node) + protected function pExpr_AssignOp_Div(AssignOp\Div $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(AssignOp\Div::class, $node->var, ' /= ', $node->expr); + return $this->pPrefixOp(AssignOp\Div::class, $this->p($node->var) . ' /= ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_AssignOp_Concat(AssignOp\Concat $node) + protected function pExpr_AssignOp_Concat(AssignOp\Concat $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(AssignOp\Concat::class, $node->var, ' .= ', $node->expr); + return $this->pPrefixOp(AssignOp\Concat::class, $this->p($node->var) . ' .= ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_AssignOp_Mod(AssignOp\Mod $node) + protected function pExpr_AssignOp_Mod(AssignOp\Mod $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(AssignOp\Mod::class, $node->var, ' %= ', $node->expr); + return $this->pPrefixOp(AssignOp\Mod::class, $this->p($node->var) . ' %= ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_AssignOp_BitwiseAnd(AssignOp\BitwiseAnd $node) + protected function pExpr_AssignOp_BitwiseAnd(AssignOp\BitwiseAnd $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(AssignOp\BitwiseAnd::class, $node->var, ' &= ', $node->expr); + return $this->pPrefixOp(AssignOp\BitwiseAnd::class, $this->p($node->var) . ' &= ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_AssignOp_BitwiseOr(AssignOp\BitwiseOr $node) + protected function pExpr_AssignOp_BitwiseOr(AssignOp\BitwiseOr $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(AssignOp\BitwiseOr::class, $node->var, ' |= ', $node->expr); + return $this->pPrefixOp(AssignOp\BitwiseOr::class, $this->p($node->var) . ' |= ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_AssignOp_BitwiseXor(AssignOp\BitwiseXor $node) + protected function pExpr_AssignOp_BitwiseXor(AssignOp\BitwiseXor $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(AssignOp\BitwiseXor::class, $node->var, ' ^= ', $node->expr); + return $this->pPrefixOp(AssignOp\BitwiseXor::class, $this->p($node->var) . ' ^= ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_AssignOp_ShiftLeft(AssignOp\ShiftLeft $node) + protected function pExpr_AssignOp_ShiftLeft(AssignOp\ShiftLeft $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(AssignOp\ShiftLeft::class, $node->var, ' <<= ', $node->expr); + return $this->pPrefixOp(AssignOp\ShiftLeft::class, $this->p($node->var) . ' <<= ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_AssignOp_ShiftRight(AssignOp\ShiftRight $node) + protected function pExpr_AssignOp_ShiftRight(AssignOp\ShiftRight $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(AssignOp\ShiftRight::class, $node->var, ' >>= ', $node->expr); + return $this->pPrefixOp(AssignOp\ShiftRight::class, $this->p($node->var) . ' >>= ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_AssignOp_Pow(AssignOp\Pow $node) + protected function pExpr_AssignOp_Pow(AssignOp\Pow $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(AssignOp\Pow::class, $node->var, ' **= ', $node->expr); + return $this->pPrefixOp(AssignOp\Pow::class, $this->p($node->var) . ' **= ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_AssignOp_Coalesce(AssignOp\Coalesce $node) + protected function pExpr_AssignOp_Coalesce(AssignOp\Coalesce $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(AssignOp\Coalesce::class, $node->var, ' ??= ', $node->expr); + return $this->pPrefixOp(AssignOp\Coalesce::class, $this->p($node->var) . ' ??= ', $node->expr, $precedence, $lhsPrecedence); } // Binary expressions - protected function pExpr_BinaryOp_Plus(BinaryOp\Plus $node) + protected function pExpr_BinaryOp_Plus(BinaryOp\Plus $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\Plus::class, $node->left, ' + ', $node->right); + return $this->pInfixOp(BinaryOp\Plus::class, $node->left, ' + ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_Minus(BinaryOp\Minus $node) + protected function pExpr_BinaryOp_Minus(BinaryOp\Minus $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\Minus::class, $node->left, ' - ', $node->right); + return $this->pInfixOp(BinaryOp\Minus::class, $node->left, ' - ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_Mul(BinaryOp\Mul $node) + protected function pExpr_BinaryOp_Mul(BinaryOp\Mul $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\Mul::class, $node->left, ' * ', $node->right); + return $this->pInfixOp(BinaryOp\Mul::class, $node->left, ' * ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_Div(BinaryOp\Div $node) + protected function pExpr_BinaryOp_Div(BinaryOp\Div $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\Div::class, $node->left, ' / ', $node->right); + return $this->pInfixOp(BinaryOp\Div::class, $node->left, ' / ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_Concat(BinaryOp\Concat $node) + protected function pExpr_BinaryOp_Concat(BinaryOp\Concat $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\Concat::class, $node->left, ' . ', $node->right); + return $this->pInfixOp(BinaryOp\Concat::class, $node->left, ' . ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_Mod(BinaryOp\Mod $node) + protected function pExpr_BinaryOp_Mod(BinaryOp\Mod $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\Mod::class, $node->left, ' % ', $node->right); + return $this->pInfixOp(BinaryOp\Mod::class, $node->left, ' % ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_BooleanAnd(BinaryOp\BooleanAnd $node) + protected function pExpr_BinaryOp_BooleanAnd(BinaryOp\BooleanAnd $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\BooleanAnd::class, $node->left, ' && ', $node->right); + return $this->pInfixOp(BinaryOp\BooleanAnd::class, $node->left, ' && ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_BooleanOr(BinaryOp\BooleanOr $node) + protected function pExpr_BinaryOp_BooleanOr(BinaryOp\BooleanOr $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\BooleanOr::class, $node->left, ' || ', $node->right); + return $this->pInfixOp(BinaryOp\BooleanOr::class, $node->left, ' || ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_BitwiseAnd(BinaryOp\BitwiseAnd $node) + protected function pExpr_BinaryOp_BitwiseAnd(BinaryOp\BitwiseAnd $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\BitwiseAnd::class, $node->left, ' & ', $node->right); + return $this->pInfixOp(BinaryOp\BitwiseAnd::class, $node->left, ' & ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_BitwiseOr(BinaryOp\BitwiseOr $node) + protected function pExpr_BinaryOp_BitwiseOr(BinaryOp\BitwiseOr $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\BitwiseOr::class, $node->left, ' | ', $node->right); + return $this->pInfixOp(BinaryOp\BitwiseOr::class, $node->left, ' | ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_BitwiseXor(BinaryOp\BitwiseXor $node) + protected function pExpr_BinaryOp_BitwiseXor(BinaryOp\BitwiseXor $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\BitwiseXor::class, $node->left, ' ^ ', $node->right); + return $this->pInfixOp(BinaryOp\BitwiseXor::class, $node->left, ' ^ ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_ShiftLeft(BinaryOp\ShiftLeft $node) + protected function pExpr_BinaryOp_ShiftLeft(BinaryOp\ShiftLeft $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\ShiftLeft::class, $node->left, ' << ', $node->right); + return $this->pInfixOp(BinaryOp\ShiftLeft::class, $node->left, ' << ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_ShiftRight(BinaryOp\ShiftRight $node) + protected function pExpr_BinaryOp_ShiftRight(BinaryOp\ShiftRight $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\ShiftRight::class, $node->left, ' >> ', $node->right); + return $this->pInfixOp(BinaryOp\ShiftRight::class, $node->left, ' >> ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_Pow(BinaryOp\Pow $node) + protected function pExpr_BinaryOp_Pow(BinaryOp\Pow $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\Pow::class, $node->left, ' ** ', $node->right); + return $this->pInfixOp(BinaryOp\Pow::class, $node->left, ' ** ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_LogicalAnd(BinaryOp\LogicalAnd $node) + protected function pExpr_BinaryOp_LogicalAnd(BinaryOp\LogicalAnd $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\LogicalAnd::class, $node->left, ' and ', $node->right); + return $this->pInfixOp(BinaryOp\LogicalAnd::class, $node->left, ' and ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_LogicalOr(BinaryOp\LogicalOr $node) + protected function pExpr_BinaryOp_LogicalOr(BinaryOp\LogicalOr $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\LogicalOr::class, $node->left, ' or ', $node->right); + return $this->pInfixOp(BinaryOp\LogicalOr::class, $node->left, ' or ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_LogicalXor(BinaryOp\LogicalXor $node) + protected function pExpr_BinaryOp_LogicalXor(BinaryOp\LogicalXor $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\LogicalXor::class, $node->left, ' xor ', $node->right); + return $this->pInfixOp(BinaryOp\LogicalXor::class, $node->left, ' xor ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_Equal(BinaryOp\Equal $node) + protected function pExpr_BinaryOp_Equal(BinaryOp\Equal $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\Equal::class, $node->left, ' == ', $node->right); + return $this->pInfixOp(BinaryOp\Equal::class, $node->left, ' == ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_NotEqual(BinaryOp\NotEqual $node) + protected function pExpr_BinaryOp_NotEqual(BinaryOp\NotEqual $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\NotEqual::class, $node->left, ' != ', $node->right); + return $this->pInfixOp(BinaryOp\NotEqual::class, $node->left, ' != ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_Identical(BinaryOp\Identical $node) + protected function pExpr_BinaryOp_Identical(BinaryOp\Identical $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\Identical::class, $node->left, ' === ', $node->right); + return $this->pInfixOp(BinaryOp\Identical::class, $node->left, ' === ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_NotIdentical(BinaryOp\NotIdentical $node) + protected function pExpr_BinaryOp_NotIdentical(BinaryOp\NotIdentical $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\NotIdentical::class, $node->left, ' !== ', $node->right); + return $this->pInfixOp(BinaryOp\NotIdentical::class, $node->left, ' !== ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_Spaceship(BinaryOp\Spaceship $node) + protected function pExpr_BinaryOp_Spaceship(BinaryOp\Spaceship $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\Spaceship::class, $node->left, ' <=> ', $node->right); + return $this->pInfixOp(BinaryOp\Spaceship::class, $node->left, ' <=> ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_Greater(BinaryOp\Greater $node) + protected function pExpr_BinaryOp_Greater(BinaryOp\Greater $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\Greater::class, $node->left, ' > ', $node->right); + return $this->pInfixOp(BinaryOp\Greater::class, $node->left, ' > ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_GreaterOrEqual(BinaryOp\GreaterOrEqual $node) + protected function pExpr_BinaryOp_GreaterOrEqual(BinaryOp\GreaterOrEqual $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\GreaterOrEqual::class, $node->left, ' >= ', $node->right); + return $this->pInfixOp(BinaryOp\GreaterOrEqual::class, $node->left, ' >= ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_Smaller(BinaryOp\Smaller $node) + protected function pExpr_BinaryOp_Smaller(BinaryOp\Smaller $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\Smaller::class, $node->left, ' < ', $node->right); + return $this->pInfixOp(BinaryOp\Smaller::class, $node->left, ' < ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_SmallerOrEqual(BinaryOp\SmallerOrEqual $node) + protected function pExpr_BinaryOp_SmallerOrEqual(BinaryOp\SmallerOrEqual $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\SmallerOrEqual::class, $node->left, ' <= ', $node->right); + return $this->pInfixOp(BinaryOp\SmallerOrEqual::class, $node->left, ' <= ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_BinaryOp_Coalesce(BinaryOp\Coalesce $node) + protected function pExpr_BinaryOp_Coalesce(BinaryOp\Coalesce $node, int $precedence, int $lhsPrecedence) : string { - return $this->pInfixOp(BinaryOp\Coalesce::class, $node->left, ' ?? ', $node->right); + return $this->pInfixOp(BinaryOp\Coalesce::class, $node->left, ' ?? ', $node->right, $precedence, $lhsPrecedence); } - protected function pExpr_Instanceof(Expr\Instanceof_ $node) + protected function pExpr_Instanceof(Expr\Instanceof_ $node, int $precedence, int $lhsPrecedence) : string { - list($precedence, $associativity) = $this->precedenceMap[Expr\Instanceof_::class]; - return $this->pPrec($node->expr, $precedence, $associativity, -1) . ' instanceof ' . $this->pNewVariable($node->class); + return $this->pPostfixOp(Expr\Instanceof_::class, $node->expr, ' instanceof ' . $this->pNewOperand($node->class), $precedence, $lhsPrecedence); } // Unary expressions - protected function pExpr_BooleanNot(Expr\BooleanNot $node) + protected function pExpr_BooleanNot(Expr\BooleanNot $node, int $precedence, int $lhsPrecedence) : string { - return $this->pPrefixOp(Expr\BooleanNot::class, '!', $node->expr); + return $this->pPrefixOp(Expr\BooleanNot::class, '!', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_BitwiseNot(Expr\BitwiseNot $node) + protected function pExpr_BitwiseNot(Expr\BitwiseNot $node, int $precedence, int $lhsPrecedence) : string { - return $this->pPrefixOp(Expr\BitwiseNot::class, '~', $node->expr); + return $this->pPrefixOp(Expr\BitwiseNot::class, '~', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_UnaryMinus(Expr\UnaryMinus $node) + protected function pExpr_UnaryMinus(Expr\UnaryMinus $node, int $precedence, int $lhsPrecedence) : string { - if ($node->expr instanceof Expr\UnaryMinus || $node->expr instanceof Expr\PreDec) { - // Enforce -(-$expr) instead of --$expr - return '-(' . $this->p($node->expr) . ')'; - } - return $this->pPrefixOp(Expr\UnaryMinus::class, '-', $node->expr); + return $this->pPrefixOp(Expr\UnaryMinus::class, '-', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_UnaryPlus(Expr\UnaryPlus $node) + protected function pExpr_UnaryPlus(Expr\UnaryPlus $node, int $precedence, int $lhsPrecedence) : string { - if ($node->expr instanceof Expr\UnaryPlus || $node->expr instanceof Expr\PreInc) { - // Enforce +(+$expr) instead of ++$expr - return '+(' . $this->p($node->expr) . ')'; - } - return $this->pPrefixOp(Expr\UnaryPlus::class, '+', $node->expr); + return $this->pPrefixOp(Expr\UnaryPlus::class, '+', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_PreInc(Expr\PreInc $node) + protected function pExpr_PreInc(Expr\PreInc $node) : string { - return $this->pPrefixOp(Expr\PreInc::class, '++', $node->var); + return '++' . $this->p($node->var); } - protected function pExpr_PreDec(Expr\PreDec $node) + protected function pExpr_PreDec(Expr\PreDec $node) : string { - return $this->pPrefixOp(Expr\PreDec::class, '--', $node->var); + return '--' . $this->p($node->var); } - protected function pExpr_PostInc(Expr\PostInc $node) + protected function pExpr_PostInc(Expr\PostInc $node) : string { - return $this->pPostfixOp(Expr\PostInc::class, $node->var, '++'); + return $this->p($node->var) . '++'; } - protected function pExpr_PostDec(Expr\PostDec $node) + protected function pExpr_PostDec(Expr\PostDec $node) : string { - return $this->pPostfixOp(Expr\PostDec::class, $node->var, '--'); + return $this->p($node->var) . '--'; } - protected function pExpr_ErrorSuppress(Expr\ErrorSuppress $node) + protected function pExpr_ErrorSuppress(Expr\ErrorSuppress $node, int $precedence, int $lhsPrecedence) : string { - return $this->pPrefixOp(Expr\ErrorSuppress::class, '@', $node->expr); + return $this->pPrefixOp(Expr\ErrorSuppress::class, '@', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_YieldFrom(Expr\YieldFrom $node) + protected function pExpr_YieldFrom(Expr\YieldFrom $node, int $precedence, int $lhsPrecedence) : string { - return $this->pPrefixOp(Expr\YieldFrom::class, 'yield from ', $node->expr); + return $this->pPrefixOp(Expr\YieldFrom::class, 'yield from ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_Print(Expr\Print_ $node) + protected function pExpr_Print(Expr\Print_ $node, int $precedence, int $lhsPrecedence) : string { - return $this->pPrefixOp(Expr\Print_::class, 'print ', $node->expr); + return $this->pPrefixOp(Expr\Print_::class, 'print ', $node->expr, $precedence, $lhsPrecedence); } // Casts - protected function pExpr_Cast_Int(Cast\Int_ $node) + protected function pExpr_Cast_Int(Cast\Int_ $node, int $precedence, int $lhsPrecedence) : string { - return $this->pPrefixOp(Cast\Int_::class, '(int) ', $node->expr); + return $this->pPrefixOp(Cast\Int_::class, '(int) ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_Cast_Double(Cast\Double $node) + protected function pExpr_Cast_Double(Cast\Double $node, int $precedence, int $lhsPrecedence) : string { $kind = $node->getAttribute('kind', Cast\Double::KIND_DOUBLE); if ($kind === Cast\Double::KIND_DOUBLE) { $cast = '(double)'; } elseif ($kind === Cast\Double::KIND_FLOAT) { $cast = '(float)'; - } elseif ($kind === Cast\Double::KIND_REAL) { + } else { + \assert($kind === Cast\Double::KIND_REAL); $cast = '(real)'; } - return $this->pPrefixOp(Cast\Double::class, $cast . ' ', $node->expr); + return $this->pPrefixOp(Cast\Double::class, $cast . ' ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_Cast_String(Cast\String_ $node) + protected function pExpr_Cast_String(Cast\String_ $node, int $precedence, int $lhsPrecedence) : string { - return $this->pPrefixOp(Cast\String_::class, '(string) ', $node->expr); + return $this->pPrefixOp(Cast\String_::class, '(string) ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_Cast_Array(Cast\Array_ $node) + protected function pExpr_Cast_Array(Cast\Array_ $node, int $precedence, int $lhsPrecedence) : string { - return $this->pPrefixOp(Cast\Array_::class, '(array) ', $node->expr); + return $this->pPrefixOp(Cast\Array_::class, '(array) ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_Cast_Object(Cast\Object_ $node) + protected function pExpr_Cast_Object(Cast\Object_ $node, int $precedence, int $lhsPrecedence) : string { - return $this->pPrefixOp(Cast\Object_::class, '(object) ', $node->expr); + return $this->pPrefixOp(Cast\Object_::class, '(object) ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_Cast_Bool(Cast\Bool_ $node) + protected function pExpr_Cast_Bool(Cast\Bool_ $node, int $precedence, int $lhsPrecedence) : string { - return $this->pPrefixOp(Cast\Bool_::class, '(bool) ', $node->expr); + return $this->pPrefixOp(Cast\Bool_::class, '(bool) ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_Cast_Unset(Cast\Unset_ $node) + protected function pExpr_Cast_Unset(Cast\Unset_ $node, int $precedence, int $lhsPrecedence) : string { - return $this->pPrefixOp(Cast\Unset_::class, '(unset) ', $node->expr); + return $this->pPrefixOp(Cast\Unset_::class, '(unset) ', $node->expr, $precedence, $lhsPrecedence); } // Function calls and similar constructs - protected function pExpr_FuncCall(Expr\FuncCall $node) + protected function pExpr_FuncCall(Expr\FuncCall $node) : string { return $this->pCallLhs($node->name) . '(' . $this->pMaybeMultiline($node->args) . ')'; } - protected function pExpr_MethodCall(Expr\MethodCall $node) + protected function pExpr_MethodCall(Expr\MethodCall $node) : string { return $this->pDereferenceLhs($node->var) . '->' . $this->pObjectProperty($node->name) . '(' . $this->pMaybeMultiline($node->args) . ')'; } - protected function pExpr_NullsafeMethodCall(Expr\NullsafeMethodCall $node) + protected function pExpr_NullsafeMethodCall(Expr\NullsafeMethodCall $node) : string { return $this->pDereferenceLhs($node->var) . '?->' . $this->pObjectProperty($node->name) . '(' . $this->pMaybeMultiline($node->args) . ')'; } - protected function pExpr_StaticCall(Expr\StaticCall $node) + protected function pExpr_StaticCall(Expr\StaticCall $node) : string { - return $this->pDereferenceLhs($node->class) . '::' . ($node->name instanceof Expr ? $node->name instanceof Expr\Variable ? $this->p($node->name) : '{' . $this->p($node->name) . '}' : $node->name) . '(' . $this->pMaybeMultiline($node->args) . ')'; + return $this->pStaticDereferenceLhs($node->class) . '::' . ($node->name instanceof Expr ? $node->name instanceof Expr\Variable ? $this->p($node->name) : '{' . $this->p($node->name) . '}' : $node->name) . '(' . $this->pMaybeMultiline($node->args) . ')'; } - protected function pExpr_Empty(Expr\Empty_ $node) + protected function pExpr_Empty(Expr\Empty_ $node) : string { return 'empty(' . $this->p($node->expr) . ')'; } - protected function pExpr_Isset(Expr\Isset_ $node) + protected function pExpr_Isset(Expr\Isset_ $node) : string { return 'isset(' . $this->pCommaSeparated($node->vars) . ')'; } - protected function pExpr_Eval(Expr\Eval_ $node) + protected function pExpr_Eval(Expr\Eval_ $node) : string { return 'eval(' . $this->p($node->expr) . ')'; } - protected function pExpr_Include(Expr\Include_ $node) + protected function pExpr_Include(Expr\Include_ $node, int $precedence, int $lhsPrecedence) : string { static $map = [Expr\Include_::TYPE_INCLUDE => 'include', Expr\Include_::TYPE_INCLUDE_ONCE => 'include_once', Expr\Include_::TYPE_REQUIRE => 'require', Expr\Include_::TYPE_REQUIRE_ONCE => 'require_once']; - return $map[$node->type] . ' ' . $this->p($node->expr); + return $this->pPrefixOp(Expr\Include_::class, $map[$node->type] . ' ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_List(Expr\List_ $node) + protected function pExpr_List(Expr\List_ $node) : string { - return 'list(' . $this->pCommaSeparated($node->items) . ')'; + $syntax = $node->getAttribute('kind', $this->phpVersion->supportsShortArrayDestructuring() ? Expr\List_::KIND_ARRAY : Expr\List_::KIND_LIST); + if ($syntax === Expr\List_::KIND_ARRAY) { + return '[' . $this->pMaybeMultiline($node->items, \true) . ']'; + } else { + return 'list(' . $this->pMaybeMultiline($node->items, \true) . ')'; + } } // Other - protected function pExpr_Error(Expr\Error $node) + protected function pExpr_Error(Expr\Error $node) : string { throw new \LogicException('Cannot pretty-print AST with Error nodes'); } - protected function pExpr_Variable(Expr\Variable $node) + protected function pExpr_Variable(Expr\Variable $node) : string { if ($node->name instanceof Expr) { return '${' . $this->p($node->name) . '}'; @@ -20355,105 +22038,131 @@ class Standard extends PrettyPrinterAbstract return '$' . $node->name; } } - protected function pExpr_Array(Expr\Array_ $node) + protected function pExpr_Array(Expr\Array_ $node) : string { - $syntax = $node->getAttribute('kind', $this->options['shortArraySyntax'] ? Expr\Array_::KIND_SHORT : Expr\Array_::KIND_LONG); + $syntax = $node->getAttribute('kind', $this->shortArraySyntax ? Expr\Array_::KIND_SHORT : Expr\Array_::KIND_LONG); if ($syntax === Expr\Array_::KIND_SHORT) { return '[' . $this->pMaybeMultiline($node->items, \true) . ']'; } else { return 'array(' . $this->pMaybeMultiline($node->items, \true) . ')'; } } - protected function pExpr_ArrayItem(Expr\ArrayItem $node) + protected function pKey(?Node $node) : string + { + if ($node === null) { + return ''; + } + // => is not really an operator and does not typically participate in precedence resolution. + // However, there is an exception if yield expressions with keys are involved: + // [yield $a => $b] is interpreted as [(yield $a => $b)], so we need to ensure that + // [(yield $a) => $b] is printed with parentheses. We approximate this by lowering the LHS + // precedence to that of yield (which will also print unnecessary parentheses for rare low + // precedence unary operators like include). + $yieldPrecedence = $this->precedenceMap[Expr\Yield_::class][0]; + return $this->p($node, self::MAX_PRECEDENCE, $yieldPrecedence) . ' => '; + } + protected function pArrayItem(Node\ArrayItem $node) : string { - return (null !== $node->key ? $this->p($node->key) . ' => ' : '') . ($node->byRef ? '&' : '') . ($node->unpack ? '...' : '') . $this->p($node->value); + return $this->pKey($node->key) . ($node->byRef ? '&' : '') . ($node->unpack ? '...' : '') . $this->p($node->value); } - protected function pExpr_ArrayDimFetch(Expr\ArrayDimFetch $node) + protected function pExpr_ArrayDimFetch(Expr\ArrayDimFetch $node) : string { return $this->pDereferenceLhs($node->var) . '[' . (null !== $node->dim ? $this->p($node->dim) : '') . ']'; } - protected function pExpr_ConstFetch(Expr\ConstFetch $node) + protected function pExpr_ConstFetch(Expr\ConstFetch $node) : string { return $this->p($node->name); } - protected function pExpr_ClassConstFetch(Expr\ClassConstFetch $node) + protected function pExpr_ClassConstFetch(Expr\ClassConstFetch $node) : string { - return $this->pDereferenceLhs($node->class) . '::' . $this->p($node->name); + return $this->pStaticDereferenceLhs($node->class) . '::' . $this->pObjectProperty($node->name); } - protected function pExpr_PropertyFetch(Expr\PropertyFetch $node) + protected function pExpr_PropertyFetch(Expr\PropertyFetch $node) : string { return $this->pDereferenceLhs($node->var) . '->' . $this->pObjectProperty($node->name); } - protected function pExpr_NullsafePropertyFetch(Expr\NullsafePropertyFetch $node) + protected function pExpr_NullsafePropertyFetch(Expr\NullsafePropertyFetch $node) : string { return $this->pDereferenceLhs($node->var) . '?->' . $this->pObjectProperty($node->name); } - protected function pExpr_StaticPropertyFetch(Expr\StaticPropertyFetch $node) + protected function pExpr_StaticPropertyFetch(Expr\StaticPropertyFetch $node) : string { - return $this->pDereferenceLhs($node->class) . '::$' . $this->pObjectProperty($node->name); + return $this->pStaticDereferenceLhs($node->class) . '::$' . $this->pObjectProperty($node->name); } - protected function pExpr_ShellExec(Expr\ShellExec $node) + protected function pExpr_ShellExec(Expr\ShellExec $node) : string { return '`' . $this->pEncapsList($node->parts, '`') . '`'; } - protected function pExpr_Closure(Expr\Closure $node) + protected function pExpr_Closure(Expr\Closure $node) : string { - return $this->pAttrGroups($node->attrGroups, \true) . ($node->static ? 'static ' : '') . 'function ' . ($node->byRef ? '&' : '') . '(' . $this->pCommaSeparated($node->params) . ')' . (!empty($node->uses) ? ' use(' . $this->pCommaSeparated($node->uses) . ')' : '') . (null !== $node->returnType ? ' : ' . $this->p($node->returnType) : '') . ' {' . $this->pStmts($node->stmts) . $this->nl . '}'; + return $this->pAttrGroups($node->attrGroups, \true) . $this->pStatic($node->static) . 'function ' . ($node->byRef ? '&' : '') . '(' . $this->pMaybeMultiline($node->params, $this->phpVersion->supportsTrailingCommaInParamList()) . ')' . (!empty($node->uses) ? ' use (' . $this->pCommaSeparated($node->uses) . ')' : '') . (null !== $node->returnType ? ': ' . $this->p($node->returnType) : '') . ' {' . $this->pStmts($node->stmts) . $this->nl . '}'; } - protected function pExpr_Match(Expr\Match_ $node) + protected function pExpr_Match(Expr\Match_ $node) : string { return 'match (' . $this->p($node->cond) . ') {' . $this->pCommaSeparatedMultiline($node->arms, \true) . $this->nl . '}'; } - protected function pMatchArm(Node\MatchArm $node) + protected function pMatchArm(Node\MatchArm $node) : string { - return ($node->conds ? $this->pCommaSeparated($node->conds) : 'default') . ' => ' . $this->p($node->body); + $result = ''; + if ($node->conds) { + for ($i = 0, $c = \count($node->conds); $i + 1 < $c; $i++) { + $result .= $this->p($node->conds[$i]) . ', '; + } + $result .= $this->pKey($node->conds[$i]); + } else { + $result = 'default => '; + } + return $result . $this->p($node->body); } - protected function pExpr_ArrowFunction(Expr\ArrowFunction $node) + protected function pExpr_ArrowFunction(Expr\ArrowFunction $node, int $precedence, int $lhsPrecedence) : string { - return $this->pAttrGroups($node->attrGroups, \true) . ($node->static ? 'static ' : '') . 'fn' . ($node->byRef ? '&' : '') . '(' . $this->pCommaSeparated($node->params) . ')' . (null !== $node->returnType ? ': ' . $this->p($node->returnType) : '') . ' => ' . $this->p($node->expr); + return $this->pPrefixOp(Expr\ArrowFunction::class, $this->pAttrGroups($node->attrGroups, \true) . $this->pStatic($node->static) . 'fn' . ($node->byRef ? '&' : '') . '(' . $this->pMaybeMultiline($node->params, $this->phpVersion->supportsTrailingCommaInParamList()) . ')' . (null !== $node->returnType ? ': ' . $this->p($node->returnType) : '') . ' => ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_ClosureUse(Expr\ClosureUse $node) + protected function pClosureUse(Node\ClosureUse $node) : string { return ($node->byRef ? '&' : '') . $this->p($node->var); } - protected function pExpr_New(Expr\New_ $node) + protected function pExpr_New(Expr\New_ $node) : string { if ($node->class instanceof Stmt\Class_) { $args = $node->args ? '(' . $this->pMaybeMultiline($node->args) . ')' : ''; return 'new ' . $this->pClassCommon($node->class, $args); } - return 'new ' . $this->pNewVariable($node->class) . '(' . $this->pMaybeMultiline($node->args) . ')'; + return 'new ' . $this->pNewOperand($node->class) . '(' . $this->pMaybeMultiline($node->args) . ')'; } - protected function pExpr_Clone(Expr\Clone_ $node) + protected function pExpr_Clone(Expr\Clone_ $node, int $precedence, int $lhsPrecedence) : string { - return 'clone ' . $this->p($node->expr); + return $this->pPrefixOp(Expr\Clone_::class, 'clone ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_Ternary(Expr\Ternary $node) + protected function pExpr_Ternary(Expr\Ternary $node, int $precedence, int $lhsPrecedence) : string { // a bit of cheating: we treat the ternary as a binary op where the ?...: part is the operator. // this is okay because the part between ? and : never needs parentheses. - return $this->pInfixOp(Expr\Ternary::class, $node->cond, ' ?' . (null !== $node->if ? ' ' . $this->p($node->if) . ' ' : '') . ': ', $node->else); + return $this->pInfixOp(Expr\Ternary::class, $node->cond, ' ?' . (null !== $node->if ? ' ' . $this->p($node->if) . ' ' : '') . ': ', $node->else, $precedence, $lhsPrecedence); } - protected function pExpr_Exit(Expr\Exit_ $node) + protected function pExpr_Exit(Expr\Exit_ $node) : string { $kind = $node->getAttribute('kind', Expr\Exit_::KIND_DIE); return ($kind === Expr\Exit_::KIND_EXIT ? 'exit' : 'die') . (null !== $node->expr ? '(' . $this->p($node->expr) . ')' : ''); } - protected function pExpr_Throw(Expr\Throw_ $node) + protected function pExpr_Throw(Expr\Throw_ $node, int $precedence, int $lhsPrecedence) : string { - return 'throw ' . $this->p($node->expr); + return $this->pPrefixOp(Expr\Throw_::class, 'throw ', $node->expr, $precedence, $lhsPrecedence); } - protected function pExpr_Yield(Expr\Yield_ $node) + protected function pExpr_Yield(Expr\Yield_ $node, int $precedence, int $lhsPrecedence) : string { if ($node->value === null) { - return 'yield'; + $opPrecedence = $this->precedenceMap[Expr\Yield_::class][0]; + return $opPrecedence >= $lhsPrecedence ? '(yield)' : 'yield'; } else { - // this is a bit ugly, but currently there is no way to detect whether the parentheses are necessary - return '(yield ' . ($node->key !== null ? $this->p($node->key) . ' => ' : '') . $this->p($node->value) . ')'; + if (!$this->phpVersion->supportsYieldWithoutParentheses()) { + return '(yield ' . $this->pKey($node->key) . $this->p($node->value) . ')'; + } + return $this->pPrefixOp(Expr\Yield_::class, 'yield ' . $this->pKey($node->key), $node->value, $precedence, $lhsPrecedence); } } // Declarations - protected function pStmt_Namespace(Stmt\Namespace_ $node) + protected function pStmt_Namespace(Stmt\Namespace_ $node) : string { if ($this->canUseSemicolonNamespaces) { return 'namespace ' . $this->p($node->name) . ';' . $this->nl . $this->pStmts($node->stmts, \false); @@ -20461,215 +22170,221 @@ class Standard extends PrettyPrinterAbstract return 'namespace' . (null !== $node->name ? ' ' . $this->p($node->name) : '') . ' {' . $this->pStmts($node->stmts) . $this->nl . '}'; } } - protected function pStmt_Use(Stmt\Use_ $node) + protected function pStmt_Use(Stmt\Use_ $node) : string { return 'use ' . $this->pUseType($node->type) . $this->pCommaSeparated($node->uses) . ';'; } - protected function pStmt_GroupUse(Stmt\GroupUse $node) + protected function pStmt_GroupUse(Stmt\GroupUse $node) : string { return 'use ' . $this->pUseType($node->type) . $this->pName($node->prefix) . '\\{' . $this->pCommaSeparated($node->uses) . '};'; } - protected function pStmt_UseUse(Stmt\UseUse $node) + protected function pUseItem(Node\UseItem $node) : string { return $this->pUseType($node->type) . $this->p($node->name) . (null !== $node->alias ? ' as ' . $node->alias : ''); } - protected function pUseType($type) + protected function pUseType(int $type) : string { return $type === Stmt\Use_::TYPE_FUNCTION ? 'function ' : ($type === Stmt\Use_::TYPE_CONSTANT ? 'const ' : ''); } - protected function pStmt_Interface(Stmt\Interface_ $node) + protected function pStmt_Interface(Stmt\Interface_ $node) : string { return $this->pAttrGroups($node->attrGroups) . 'interface ' . $node->name . (!empty($node->extends) ? ' extends ' . $this->pCommaSeparated($node->extends) : '') . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; } - protected function pStmt_Enum(Stmt\Enum_ $node) + protected function pStmt_Enum(Stmt\Enum_ $node) : string { - return $this->pAttrGroups($node->attrGroups) . 'enum ' . $node->name . ($node->scalarType ? " : {$node->scalarType}" : '') . (!empty($node->implements) ? ' implements ' . $this->pCommaSeparated($node->implements) : '') . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; + return $this->pAttrGroups($node->attrGroups) . 'enum ' . $node->name . ($node->scalarType ? ' : ' . $this->p($node->scalarType) : '') . (!empty($node->implements) ? ' implements ' . $this->pCommaSeparated($node->implements) : '') . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; } - protected function pStmt_Class(Stmt\Class_ $node) + protected function pStmt_Class(Stmt\Class_ $node) : string { return $this->pClassCommon($node, ' ' . $node->name); } - protected function pStmt_Trait(Stmt\Trait_ $node) + protected function pStmt_Trait(Stmt\Trait_ $node) : string { return $this->pAttrGroups($node->attrGroups) . 'trait ' . $node->name . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; } - protected function pStmt_EnumCase(Stmt\EnumCase $node) + protected function pStmt_EnumCase(Stmt\EnumCase $node) : string { return $this->pAttrGroups($node->attrGroups) . 'case ' . $node->name . ($node->expr ? ' = ' . $this->p($node->expr) : '') . ';'; } - protected function pStmt_TraitUse(Stmt\TraitUse $node) + protected function pStmt_TraitUse(Stmt\TraitUse $node) : string { return 'use ' . $this->pCommaSeparated($node->traits) . (empty($node->adaptations) ? ';' : ' {' . $this->pStmts($node->adaptations) . $this->nl . '}'); } - protected function pStmt_TraitUseAdaptation_Precedence(Stmt\TraitUseAdaptation\Precedence $node) + protected function pStmt_TraitUseAdaptation_Precedence(Stmt\TraitUseAdaptation\Precedence $node) : string { return $this->p($node->trait) . '::' . $node->method . ' insteadof ' . $this->pCommaSeparated($node->insteadof) . ';'; } - protected function pStmt_TraitUseAdaptation_Alias(Stmt\TraitUseAdaptation\Alias $node) + protected function pStmt_TraitUseAdaptation_Alias(Stmt\TraitUseAdaptation\Alias $node) : string { return (null !== $node->trait ? $this->p($node->trait) . '::' : '') . $node->method . ' as' . (null !== $node->newModifier ? ' ' . \rtrim($this->pModifiers($node->newModifier), ' ') : '') . (null !== $node->newName ? ' ' . $node->newName : '') . ';'; } - protected function pStmt_Property(Stmt\Property $node) + protected function pStmt_Property(Stmt\Property $node) : string { return $this->pAttrGroups($node->attrGroups) . (0 === $node->flags ? 'var ' : $this->pModifiers($node->flags)) . ($node->type ? $this->p($node->type) . ' ' : '') . $this->pCommaSeparated($node->props) . ';'; } - protected function pStmt_PropertyProperty(Stmt\PropertyProperty $node) + protected function pPropertyItem(Node\PropertyItem $node) : string { return '$' . $node->name . (null !== $node->default ? ' = ' . $this->p($node->default) : ''); } - protected function pStmt_ClassMethod(Stmt\ClassMethod $node) + protected function pStmt_ClassMethod(Stmt\ClassMethod $node) : string { - return $this->pAttrGroups($node->attrGroups) . $this->pModifiers($node->flags) . 'function ' . ($node->byRef ? '&' : '') . $node->name . '(' . $this->pMaybeMultiline($node->params) . ')' . (null !== $node->returnType ? ' : ' . $this->p($node->returnType) : '') . (null !== $node->stmts ? $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}' : ';'); + return $this->pAttrGroups($node->attrGroups) . $this->pModifiers($node->flags) . 'function ' . ($node->byRef ? '&' : '') . $node->name . '(' . $this->pMaybeMultiline($node->params, $this->phpVersion->supportsTrailingCommaInParamList()) . ')' . (null !== $node->returnType ? ': ' . $this->p($node->returnType) : '') . (null !== $node->stmts ? $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}' : ';'); } - protected function pStmt_ClassConst(Stmt\ClassConst $node) + protected function pStmt_ClassConst(Stmt\ClassConst $node) : string { - return $this->pAttrGroups($node->attrGroups) . $this->pModifiers($node->flags) . 'const ' . $this->pCommaSeparated($node->consts) . ';'; + return $this->pAttrGroups($node->attrGroups) . $this->pModifiers($node->flags) . 'const ' . (null !== $node->type ? $this->p($node->type) . ' ' : '') . $this->pCommaSeparated($node->consts) . ';'; } - protected function pStmt_Function(Stmt\Function_ $node) + protected function pStmt_Function(Stmt\Function_ $node) : string { - return $this->pAttrGroups($node->attrGroups) . 'function ' . ($node->byRef ? '&' : '') . $node->name . '(' . $this->pCommaSeparated($node->params) . ')' . (null !== $node->returnType ? ' : ' . $this->p($node->returnType) : '') . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; + return $this->pAttrGroups($node->attrGroups) . 'function ' . ($node->byRef ? '&' : '') . $node->name . '(' . $this->pMaybeMultiline($node->params, $this->phpVersion->supportsTrailingCommaInParamList()) . ')' . (null !== $node->returnType ? ': ' . $this->p($node->returnType) : '') . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; } - protected function pStmt_Const(Stmt\Const_ $node) + protected function pStmt_Const(Stmt\Const_ $node) : string { return 'const ' . $this->pCommaSeparated($node->consts) . ';'; } - protected function pStmt_Declare(Stmt\Declare_ $node) + protected function pStmt_Declare(Stmt\Declare_ $node) : string { return 'declare (' . $this->pCommaSeparated($node->declares) . ')' . (null !== $node->stmts ? ' {' . $this->pStmts($node->stmts) . $this->nl . '}' : ';'); } - protected function pStmt_DeclareDeclare(Stmt\DeclareDeclare $node) + protected function pDeclareItem(Node\DeclareItem $node) : string { return $node->key . '=' . $this->p($node->value); } // Control flow - protected function pStmt_If(Stmt\If_ $node) + protected function pStmt_If(Stmt\If_ $node) : string { return 'if (' . $this->p($node->cond) . ') {' . $this->pStmts($node->stmts) . $this->nl . '}' . ($node->elseifs ? ' ' . $this->pImplode($node->elseifs, ' ') : '') . (null !== $node->else ? ' ' . $this->p($node->else) : ''); } - protected function pStmt_ElseIf(Stmt\ElseIf_ $node) + protected function pStmt_ElseIf(Stmt\ElseIf_ $node) : string { return 'elseif (' . $this->p($node->cond) . ') {' . $this->pStmts($node->stmts) . $this->nl . '}'; } - protected function pStmt_Else(Stmt\Else_ $node) + protected function pStmt_Else(Stmt\Else_ $node) : string { + if (\count($node->stmts) === 1 && $node->stmts[0] instanceof Stmt\If_) { + // Print as "else if" rather than "else { if }" + return 'else ' . $this->p($node->stmts[0]); + } return 'else {' . $this->pStmts($node->stmts) . $this->nl . '}'; } - protected function pStmt_For(Stmt\For_ $node) + protected function pStmt_For(Stmt\For_ $node) : string { return 'for (' . $this->pCommaSeparated($node->init) . ';' . (!empty($node->cond) ? ' ' : '') . $this->pCommaSeparated($node->cond) . ';' . (!empty($node->loop) ? ' ' : '') . $this->pCommaSeparated($node->loop) . ') {' . $this->pStmts($node->stmts) . $this->nl . '}'; } - protected function pStmt_Foreach(Stmt\Foreach_ $node) + protected function pStmt_Foreach(Stmt\Foreach_ $node) : string { return 'foreach (' . $this->p($node->expr) . ' as ' . (null !== $node->keyVar ? $this->p($node->keyVar) . ' => ' : '') . ($node->byRef ? '&' : '') . $this->p($node->valueVar) . ') {' . $this->pStmts($node->stmts) . $this->nl . '}'; } - protected function pStmt_While(Stmt\While_ $node) + protected function pStmt_While(Stmt\While_ $node) : string { return 'while (' . $this->p($node->cond) . ') {' . $this->pStmts($node->stmts) . $this->nl . '}'; } - protected function pStmt_Do(Stmt\Do_ $node) + protected function pStmt_Do(Stmt\Do_ $node) : string { return 'do {' . $this->pStmts($node->stmts) . $this->nl . '} while (' . $this->p($node->cond) . ');'; } - protected function pStmt_Switch(Stmt\Switch_ $node) + protected function pStmt_Switch(Stmt\Switch_ $node) : string { return 'switch (' . $this->p($node->cond) . ') {' . $this->pStmts($node->cases) . $this->nl . '}'; } - protected function pStmt_Case(Stmt\Case_ $node) + protected function pStmt_Case(Stmt\Case_ $node) : string { return (null !== $node->cond ? 'case ' . $this->p($node->cond) : 'default') . ':' . $this->pStmts($node->stmts); } - protected function pStmt_TryCatch(Stmt\TryCatch $node) + protected function pStmt_TryCatch(Stmt\TryCatch $node) : string { return 'try {' . $this->pStmts($node->stmts) . $this->nl . '}' . ($node->catches ? ' ' . $this->pImplode($node->catches, ' ') : '') . ($node->finally !== null ? ' ' . $this->p($node->finally) : ''); } - protected function pStmt_Catch(Stmt\Catch_ $node) + protected function pStmt_Catch(Stmt\Catch_ $node) : string { return 'catch (' . $this->pImplode($node->types, '|') . ($node->var !== null ? ' ' . $this->p($node->var) : '') . ') {' . $this->pStmts($node->stmts) . $this->nl . '}'; } - protected function pStmt_Finally(Stmt\Finally_ $node) + protected function pStmt_Finally(Stmt\Finally_ $node) : string { return 'finally {' . $this->pStmts($node->stmts) . $this->nl . '}'; } - protected function pStmt_Break(Stmt\Break_ $node) + protected function pStmt_Break(Stmt\Break_ $node) : string { return 'break' . ($node->num !== null ? ' ' . $this->p($node->num) : '') . ';'; } - protected function pStmt_Continue(Stmt\Continue_ $node) + protected function pStmt_Continue(Stmt\Continue_ $node) : string { return 'continue' . ($node->num !== null ? ' ' . $this->p($node->num) : '') . ';'; } - protected function pStmt_Return(Stmt\Return_ $node) + protected function pStmt_Return(Stmt\Return_ $node) : string { return 'return' . (null !== $node->expr ? ' ' . $this->p($node->expr) : '') . ';'; } - protected function pStmt_Throw(Stmt\Throw_ $node) - { - return 'throw ' . $this->p($node->expr) . ';'; - } - protected function pStmt_Label(Stmt\Label $node) + protected function pStmt_Label(Stmt\Label $node) : string { return $node->name . ':'; } - protected function pStmt_Goto(Stmt\Goto_ $node) + protected function pStmt_Goto(Stmt\Goto_ $node) : string { return 'goto ' . $node->name . ';'; } // Other - protected function pStmt_Expression(Stmt\Expression $node) + protected function pStmt_Expression(Stmt\Expression $node) : string { return $this->p($node->expr) . ';'; } - protected function pStmt_Echo(Stmt\Echo_ $node) + protected function pStmt_Echo(Stmt\Echo_ $node) : string { return 'echo ' . $this->pCommaSeparated($node->exprs) . ';'; } - protected function pStmt_Static(Stmt\Static_ $node) + protected function pStmt_Static(Stmt\Static_ $node) : string { return 'static ' . $this->pCommaSeparated($node->vars) . ';'; } - protected function pStmt_Global(Stmt\Global_ $node) + protected function pStmt_Global(Stmt\Global_ $node) : string { return 'global ' . $this->pCommaSeparated($node->vars) . ';'; } - protected function pStmt_StaticVar(Stmt\StaticVar $node) + protected function pStaticVar(Node\StaticVar $node) : string { return $this->p($node->var) . (null !== $node->default ? ' = ' . $this->p($node->default) : ''); } - protected function pStmt_Unset(Stmt\Unset_ $node) + protected function pStmt_Unset(Stmt\Unset_ $node) : string { return 'unset(' . $this->pCommaSeparated($node->vars) . ');'; } - protected function pStmt_InlineHTML(Stmt\InlineHTML $node) + protected function pStmt_InlineHTML(Stmt\InlineHTML $node) : string { - $newline = $node->getAttribute('hasLeadingNewline', \true) ? "\n" : ''; + $newline = $node->getAttribute('hasLeadingNewline', \true) ? $this->newline : ''; return '?>' . $newline . $node->value . 'remaining; } - protected function pStmt_Nop(Stmt\Nop $node) + protected function pStmt_Nop(Stmt\Nop $node) : string { return ''; } + protected function pStmt_Block(Stmt\Block $node) : string + { + return '{' . $this->pStmts($node->stmts) . $this->nl . '}'; + } // Helpers - protected function pClassCommon(Stmt\Class_ $node, $afterClassToken) + protected function pClassCommon(Stmt\Class_ $node, string $afterClassToken) : string { return $this->pAttrGroups($node->attrGroups, $node->name === null) . $this->pModifiers($node->flags) . 'class' . $afterClassToken . (null !== $node->extends ? ' extends ' . $this->p($node->extends) : '') . (!empty($node->implements) ? ' implements ' . $this->pCommaSeparated($node->implements) : '') . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; } - protected function pObjectProperty($node) + protected function pObjectProperty(Node $node) : string { if ($node instanceof Expr) { return '{' . $this->p($node) . '}'; } else { - return $node; + \assert($node instanceof Node\Identifier); + return $node->name; } } - protected function pEncapsList(array $encapsList, $quote) + /** @param (Expr|Node\InterpolatedStringPart)[] $encapsList */ + protected function pEncapsList(array $encapsList, ?string $quote) : string { $return = ''; foreach ($encapsList as $element) { - if ($element instanceof Scalar\EncapsedStringPart) { + if ($element instanceof Node\InterpolatedStringPart) { $return .= $this->escapeString($element->value, $quote); } else { $return .= '{' . $this->p($element) . '}'; @@ -20677,15 +22392,26 @@ class Standard extends PrettyPrinterAbstract } return $return; } - protected function pSingleQuotedString(string $string) + protected function pSingleQuotedString(string $string) : string { - return '\'' . \addcslashes($string, '\'\\') . '\''; + // It is idiomatic to only escape backslashes when necessary, i.e. when followed by ', \ or + // the end of the string ('Foo\Bar' instead of 'Foo\\Bar'). However, we also don't want to + // produce an odd number of backslashes, so '\\\\a' should not get rendered as '\\\a', even + // though that would be legal. + $regex = '/\'|\\\\(?=[\'\\\\]|$)|(?<=\\\\)\\\\/'; + return '\'' . \preg_replace($regex, '\\\\$0', $string) . '\''; } - protected function escapeString($string, $quote) + protected function escapeString(string $string, ?string $quote) : string { if (null === $quote) { // For doc strings, don't escape newlines $escaped = \addcslashes($string, "\t\f\v\$\\"); + // But do escape isolated \r. Combined with the terminating newline, it might get + // interpreted as \r\n and dropped from the string contents. + $escaped = \preg_replace('/\\r(?!\\n)/', '\\r', $escaped); + if ($this->phpVersion->supportsFlexibleHeredoc()) { + $escaped = $this->indentString($escaped); + } } else { $escaped = \addcslashes($string, "\n\r\t\f\v\$" . $quote . "\\"); } @@ -20706,30 +22432,28 @@ class Standard extends PrettyPrinterAbstract | (?<=[\\xF0-\\xF4])[\\x80-\\xBF](?![\\x80-\\xBF]{2}) # Short 4 byte sequence | (?<=[\\xF0-\\xF4][\\x80-\\xBF])[\\x80-\\xBF](?![\\x80-\\xBF]) # Short 4 byte sequence (2) )/x'; - return \preg_replace_callback($regex, function ($matches) { + return \preg_replace_callback($regex, function ($matches) : string { \assert(\strlen($matches[0]) === 1); $hex = \dechex(\ord($matches[0])); return '\\x' . \str_pad($hex, 2, '0', \STR_PAD_LEFT); }, $escaped); } - protected function containsEndLabel($string, $label, $atStart = \true, $atEnd = \true) + protected function containsEndLabel(string $string, string $label, bool $atStart = \true) : bool { - $start = $atStart ? '(?:^|[\\r\\n])' : '[\\r\\n]'; - $end = $atEnd ? '(?:$|[;\\r\\n])' : '[;\\r\\n]'; - return \false !== \strpos($string, $label) && \preg_match('/' . $start . $label . $end . '/', $string); + $start = $atStart ? '(?:^|[\\r\\n])[ \\t]*' : '[\\r\\n][ \\t]*'; + return \false !== \strpos($string, $label) && \preg_match('/' . $start . $label . '(?:$|[^_A-Za-z0-9\\x80-\\xff])/', $string); } - protected function encapsedContainsEndLabel(array $parts, $label) + /** @param (Expr|Node\InterpolatedStringPart)[] $parts */ + protected function encapsedContainsEndLabel(array $parts, string $label) : bool { foreach ($parts as $i => $part) { - $atStart = $i === 0; - $atEnd = $i === \count($parts) - 1; - if ($part instanceof Scalar\EncapsedStringPart && $this->containsEndLabel($part->value, $label, $atStart, $atEnd)) { + if ($part instanceof Node\InterpolatedStringPart && $this->containsEndLabel($this->escapeString($part->value, null), $label, $i === 0)) { return \true; } } return \false; } - protected function pDereferenceLhs(Node $node) + protected function pDereferenceLhs(Node $node) : string { if (!$this->dereferenceLhsRequiresParens($node)) { return $this->p($node); @@ -20737,7 +22461,15 @@ class Standard extends PrettyPrinterAbstract return '(' . $this->p($node) . ')'; } } - protected function pCallLhs(Node $node) + protected function pStaticDereferenceLhs(Node $node) : string + { + if (!$this->staticDereferenceLhsRequiresParens($node)) { + return $this->p($node); + } else { + return '(' . $this->p($node) . ')'; + } + } + protected function pCallLhs(Node $node) : string { if (!$this->callLhsRequiresParens($node)) { return $this->p($node); @@ -20745,16 +22477,18 @@ class Standard extends PrettyPrinterAbstract return '(' . $this->p($node) . ')'; } } - protected function pNewVariable(Node $node) + protected function pNewOperand(Node $node) : string { - // TODO: This is not fully accurate. - return $this->pDereferenceLhs($node); + if (!$this->newOperandRequiresParens($node)) { + return $this->p($node); + } else { + return '(' . $this->p($node) . ')'; + } } /** * @param Node[] $nodes - * @return bool */ - protected function hasNodeWithComments(array $nodes) + protected function hasNodeWithComments(array $nodes) : bool { foreach ($nodes as $node) { if ($node && $node->getComments()) { @@ -20763,7 +22497,8 @@ class Standard extends PrettyPrinterAbstract } return \false; } - protected function pMaybeMultiline(array $nodes, bool $trailingComma = \false) + /** @param Node[] $nodes */ + protected function pMaybeMultiline(array $nodes, bool $trailingComma = \false) : string { if (!$this->hasNodeWithComments($nodes)) { return $this->pCommaSeparated($nodes); @@ -20771,6 +22506,7 @@ class Standard extends PrettyPrinterAbstract return $this->pCommaSeparatedMultiline($nodes, $trailingComma) . $this->nl; } } + /** @param Node\AttributeGroup[] $nodes */ protected function pAttrGroups(array $nodes, bool $inline = \false) : string { $result = ''; @@ -20787,162 +22523,201 @@ declare (strict_types=1); namespace PHPUnit\PhpParser; use PHPUnit\PhpParser\Internal\DiffElem; +use PHPUnit\PhpParser\Internal\Differ; use PHPUnit\PhpParser\Internal\PrintableNewAnonClassNode; use PHPUnit\PhpParser\Internal\TokenStream; +use PHPUnit\PhpParser\Node\AttributeGroup; use PHPUnit\PhpParser\Node\Expr; use PHPUnit\PhpParser\Node\Expr\AssignOp; use PHPUnit\PhpParser\Node\Expr\BinaryOp; use PHPUnit\PhpParser\Node\Expr\Cast; +use PHPUnit\PhpParser\Node\IntersectionType; +use PHPUnit\PhpParser\Node\MatchArm; +use PHPUnit\PhpParser\Node\Param; use PHPUnit\PhpParser\Node\Scalar; use PHPUnit\PhpParser\Node\Stmt; -abstract class PrettyPrinterAbstract +use PHPUnit\PhpParser\Node\UnionType; +abstract class PrettyPrinterAbstract implements PrettyPrinter { - const FIXUP_PREC_LEFT = 0; + protected const FIXUP_PREC_LEFT = 0; // LHS operand affected by precedence - const FIXUP_PREC_RIGHT = 1; + protected const FIXUP_PREC_RIGHT = 1; // RHS operand affected by precedence - const FIXUP_CALL_LHS = 2; + protected const FIXUP_PREC_UNARY = 2; + // Only operand affected by precedence + protected const FIXUP_CALL_LHS = 3; // LHS of call - const FIXUP_DEREF_LHS = 3; + protected const FIXUP_DEREF_LHS = 4; // LHS of dereferencing operation - const FIXUP_BRACED_NAME = 4; + protected const FIXUP_STATIC_DEREF_LHS = 5; + // LHS of static dereferencing operation + protected const FIXUP_BRACED_NAME = 6; // Name operand that may require bracing - const FIXUP_VAR_BRACED_NAME = 5; + protected const FIXUP_VAR_BRACED_NAME = 7; // Name operand that may require ${} bracing - const FIXUP_ENCAPSED = 6; + protected const FIXUP_ENCAPSED = 8; // Encapsed string part - protected $precedenceMap = [ - // [precedence, associativity] - // where for precedence -1 is %left, 0 is %nonassoc and 1 is %right - BinaryOp\Pow::class => [0, 1], - Expr\BitwiseNot::class => [10, 1], - Expr\PreInc::class => [10, 1], - Expr\PreDec::class => [10, 1], - Expr\PostInc::class => [10, -1], - Expr\PostDec::class => [10, -1], - Expr\UnaryPlus::class => [10, 1], - Expr\UnaryMinus::class => [10, 1], - Cast\Int_::class => [10, 1], - Cast\Double::class => [10, 1], - Cast\String_::class => [10, 1], - Cast\Array_::class => [10, 1], - Cast\Object_::class => [10, 1], - Cast\Bool_::class => [10, 1], - Cast\Unset_::class => [10, 1], - Expr\ErrorSuppress::class => [10, 1], - Expr\Instanceof_::class => [20, 0], - Expr\BooleanNot::class => [30, 1], - BinaryOp\Mul::class => [40, -1], - BinaryOp\Div::class => [40, -1], - BinaryOp\Mod::class => [40, -1], - BinaryOp\Plus::class => [50, -1], - BinaryOp\Minus::class => [50, -1], - BinaryOp\Concat::class => [50, -1], - BinaryOp\ShiftLeft::class => [60, -1], - BinaryOp\ShiftRight::class => [60, -1], - BinaryOp\Smaller::class => [70, 0], - BinaryOp\SmallerOrEqual::class => [70, 0], - BinaryOp\Greater::class => [70, 0], - BinaryOp\GreaterOrEqual::class => [70, 0], - BinaryOp\Equal::class => [80, 0], - BinaryOp\NotEqual::class => [80, 0], - BinaryOp\Identical::class => [80, 0], - BinaryOp\NotIdentical::class => [80, 0], - BinaryOp\Spaceship::class => [80, 0], - BinaryOp\BitwiseAnd::class => [90, -1], - BinaryOp\BitwiseXor::class => [100, -1], - BinaryOp\BitwiseOr::class => [110, -1], - BinaryOp\BooleanAnd::class => [120, -1], - BinaryOp\BooleanOr::class => [130, -1], - BinaryOp\Coalesce::class => [140, 1], - Expr\Ternary::class => [150, 0], - // parser uses %left for assignments, but they really behave as %right - Expr\Assign::class => [160, 1], - Expr\AssignRef::class => [160, 1], - AssignOp\Plus::class => [160, 1], - AssignOp\Minus::class => [160, 1], - AssignOp\Mul::class => [160, 1], - AssignOp\Div::class => [160, 1], - AssignOp\Concat::class => [160, 1], - AssignOp\Mod::class => [160, 1], - AssignOp\BitwiseAnd::class => [160, 1], - AssignOp\BitwiseOr::class => [160, 1], - AssignOp\BitwiseXor::class => [160, 1], - AssignOp\ShiftLeft::class => [160, 1], - AssignOp\ShiftRight::class => [160, 1], - AssignOp\Pow::class => [160, 1], - AssignOp\Coalesce::class => [160, 1], - Expr\YieldFrom::class => [165, 1], - Expr\Print_::class => [168, 1], - BinaryOp\LogicalAnd::class => [170, -1], - BinaryOp\LogicalXor::class => [180, -1], - BinaryOp\LogicalOr::class => [190, -1], - Expr\Include_::class => [200, -1], + protected const FIXUP_NEW = 9; + // New/instanceof operand + protected const MAX_PRECEDENCE = 1000; + /** @var array */ + protected array $precedenceMap = [ + // [precedence, precedenceLHS, precedenceRHS] + // Where the latter two are the precedences to use for the LHS and RHS of a binary operator, + // where 1 is added to one of the sides depending on associativity. This information is not + // used for unary operators and set to -1. + Expr\Clone_::class => [-10, 0, 1], + BinaryOp\Pow::class => [0, 0, 1], + Expr\BitwiseNot::class => [10, -1, -1], + Expr\UnaryPlus::class => [10, -1, -1], + Expr\UnaryMinus::class => [10, -1, -1], + Cast\Int_::class => [10, -1, -1], + Cast\Double::class => [10, -1, -1], + Cast\String_::class => [10, -1, -1], + Cast\Array_::class => [10, -1, -1], + Cast\Object_::class => [10, -1, -1], + Cast\Bool_::class => [10, -1, -1], + Cast\Unset_::class => [10, -1, -1], + Expr\ErrorSuppress::class => [10, -1, -1], + Expr\Instanceof_::class => [20, -1, -1], + Expr\BooleanNot::class => [30, -1, -1], + BinaryOp\Mul::class => [40, 41, 40], + BinaryOp\Div::class => [40, 41, 40], + BinaryOp\Mod::class => [40, 41, 40], + BinaryOp\Plus::class => [50, 51, 50], + BinaryOp\Minus::class => [50, 51, 50], + BinaryOp\Concat::class => [50, 51, 50], + BinaryOp\ShiftLeft::class => [60, 61, 60], + BinaryOp\ShiftRight::class => [60, 61, 60], + BinaryOp\Smaller::class => [70, 70, 70], + BinaryOp\SmallerOrEqual::class => [70, 70, 70], + BinaryOp\Greater::class => [70, 70, 70], + BinaryOp\GreaterOrEqual::class => [70, 70, 70], + BinaryOp\Equal::class => [80, 80, 80], + BinaryOp\NotEqual::class => [80, 80, 80], + BinaryOp\Identical::class => [80, 80, 80], + BinaryOp\NotIdentical::class => [80, 80, 80], + BinaryOp\Spaceship::class => [80, 80, 80], + BinaryOp\BitwiseAnd::class => [90, 91, 90], + BinaryOp\BitwiseXor::class => [100, 101, 100], + BinaryOp\BitwiseOr::class => [110, 111, 110], + BinaryOp\BooleanAnd::class => [120, 121, 120], + BinaryOp\BooleanOr::class => [130, 131, 130], + BinaryOp\Coalesce::class => [140, 140, 141], + Expr\Ternary::class => [150, -1, -1], + Expr\Assign::class => [160, -1, -1], + Expr\AssignRef::class => [160, -1, -1], + AssignOp\Plus::class => [160, -1, -1], + AssignOp\Minus::class => [160, -1, -1], + AssignOp\Mul::class => [160, -1, -1], + AssignOp\Div::class => [160, -1, -1], + AssignOp\Concat::class => [160, -1, -1], + AssignOp\Mod::class => [160, -1, -1], + AssignOp\BitwiseAnd::class => [160, -1, -1], + AssignOp\BitwiseOr::class => [160, -1, -1], + AssignOp\BitwiseXor::class => [160, -1, -1], + AssignOp\ShiftLeft::class => [160, -1, -1], + AssignOp\ShiftRight::class => [160, -1, -1], + AssignOp\Pow::class => [160, -1, -1], + AssignOp\Coalesce::class => [160, -1, -1], + Expr\YieldFrom::class => [170, -1, -1], + Expr\Yield_::class => [175, -1, -1], + Expr\Print_::class => [180, -1, -1], + BinaryOp\LogicalAnd::class => [190, 191, 190], + BinaryOp\LogicalXor::class => [200, 201, 200], + BinaryOp\LogicalOr::class => [210, 211, 210], + Expr\Include_::class => [220, -1, -1], + Expr\ArrowFunction::class => [230, -1, -1], + Expr\Throw_::class => [240, -1, -1], ]; /** @var int Current indentation level. */ - protected $indentLevel; + protected int $indentLevel; + /** @var string Newline style. Does not include current indentation. */ + protected string $newline; /** @var string Newline including current indentation. */ - protected $nl; - /** @var string Token placed at end of doc string to ensure it is followed by a newline. */ - protected $docStringEndToken; + protected string $nl; + /** @var string|null Token placed at end of doc string to ensure it is followed by a newline. + * Null if flexible doc strings are used. */ + protected ?string $docStringEndToken; /** @var bool Whether semicolon namespaces can be used (i.e. no global namespace is used) */ - protected $canUseSemicolonNamespaces; - /** @var array Pretty printer options */ - protected $options; - /** @var TokenStream Original tokens for use in format-preserving pretty print */ - protected $origTokens; - /** @var Internal\Differ Differ for node lists */ - protected $nodeListDiffer; - /** @var bool[] Map determining whether a certain character is a label character */ - protected $labelCharMap; + protected bool $canUseSemicolonNamespaces; + /** @var bool Whether to use short array syntax if the node specifies no preference */ + protected bool $shortArraySyntax; + /** @var PhpVersion PHP version to target */ + protected PhpVersion $phpVersion; + /** @var TokenStream|null Original tokens for use in format-preserving pretty print */ + protected ?TokenStream $origTokens; + /** @var Internal\Differ Differ for node lists */ + protected Differ $nodeListDiffer; + /** @var array Map determining whether a certain character is a label character */ + protected array $labelCharMap; + /** + * @var array> Map from token classes and subnode names to FIXUP_* constants. + * This is used during format-preserving prints to place additional parens/braces if necessary. + */ + protected array $fixupMap; /** - * @var int[][] Map from token classes and subnode names to FIXUP_* constants. This is used - * during format-preserving prints to place additional parens/braces if necessary. + * @var array Map from "{$node->getType()}->{$subNode}" + * to ['left' => $l, 'right' => $r], where $l and $r specify the token type that needs to be stripped + * when removing this node. */ - protected $fixupMap; + protected array $removalMap; /** - * @var int[][] Map from "{$node->getType()}->{$subNode}" to ['left' => $l, 'right' => $r], - * where $l and $r specify the token type that needs to be stripped when removing - * this node. + * @var array Map from + * "{$node->getType()}->{$subNode}" to [$find, $beforeToken, $extraLeft, $extraRight]. + * $find is an optional token after which the insertion occurs. $extraLeft/Right + * are optionally added before/after the main insertions. */ - protected $removalMap; + protected array $insertionMap; /** - * @var mixed[] Map from "{$node->getType()}->{$subNode}" to [$find, $beforeToken, $extraLeft, $extraRight]. - * $find is an optional token after which the insertion occurs. $extraLeft/Right - * are optionally added before/after the main insertions. + * @var array Map From "{$class}->{$subNode}" to string that should be inserted + * between elements of this list subnode. */ - protected $insertionMap; + protected array $listInsertionMap; /** - * @var string[] Map From "{$node->getType()}->{$subNode}" to string that should be inserted - * between elements of this list subnode. + * @var array */ - protected $listInsertionMap; - protected $emptyListInsertionMap; - /** @var int[] Map from "{$node->getType()}->{$subNode}" to token before which the modifiers - * should be reprinted. */ - protected $modifierChangeMap; + protected array $emptyListInsertionMap; + /** @var array Map from "{$class}->{$subNode}" to [$printFn, $token] + * where $printFn is the function to print the modifiers and $token is the token before which + * the modifiers should be reprinted. */ + protected array $modifierChangeMap; /** * Creates a pretty printer instance using the given options. * * Supported options: - * * bool $shortArraySyntax = false: Whether to use [] instead of array() as the default array - * syntax, if the node does not specify a format. - * - * @param array $options Dictionary of formatting options + * * PhpVersion $phpVersion: The PHP version to target (default to PHP 7.4). This option + * controls compatibility of the generated code with older PHP + * versions in cases where a simple stylistic choice exists (e.g. + * array() vs []). It is safe to pretty-print an AST for a newer + * PHP version while specifying an older target (but the result will + * of course not be compatible with the older version in that case). + * * string $newline: The newline style to use. Should be "\n" (default) or "\r\n". + * * bool $shortArraySyntax: Whether to use [] instead of array() as the default array + * syntax, if the node does not specify a format. Defaults to whether + * the phpVersion support short array syntax. + * + * @param array{ + * phpVersion?: PhpVersion, newline?: string, shortArraySyntax?: bool + * } $options Dictionary of formatting options */ public function __construct(array $options = []) { - $this->docStringEndToken = '_DOC_STRING_END_' . \mt_rand(); - $defaultOptions = ['shortArraySyntax' => \false]; - $this->options = $options + $defaultOptions; + $this->phpVersion = $options['phpVersion'] ?? PhpVersion::fromComponents(7, 4); + $this->newline = $options['newline'] ?? "\n"; + if ($this->newline !== "\n" && $this->newline != "\r\n") { + throw new \LogicException('Option "newline" must be one of "\\n" or "\\r\\n"'); + } + $this->shortArraySyntax = $options['shortArraySyntax'] ?? $this->phpVersion->supportsShortArraySyntax(); + $this->docStringEndToken = $this->phpVersion->supportsFlexibleHeredoc() ? null : '_DOC_STRING_END_' . \mt_rand(); } /** * Reset pretty printing state. */ - protected function resetState() + protected function resetState() : void { $this->indentLevel = 0; - $this->nl = "\n"; + $this->nl = $this->newline; $this->origTokens = null; } /** @@ -20950,15 +22725,15 @@ abstract class PrettyPrinterAbstract * * @param int $level Level in number of spaces */ - protected function setIndentLevel(int $level) + protected function setIndentLevel(int $level) : void { $this->indentLevel = $level; - $this->nl = "\n" . \str_repeat(' ', $level); + $this->nl = $this->newline . \str_repeat(' ', $level); } /** * Increase indentation level. */ - protected function indent() + protected function indent() : void { $this->indentLevel += 4; $this->nl .= ' '; @@ -20966,11 +22741,11 @@ abstract class PrettyPrinterAbstract /** * Decrease indentation level. */ - protected function outdent() + protected function outdent() : void { \assert($this->indentLevel >= 4); $this->indentLevel -= 4; - $this->nl = "\n" . \str_repeat(' ', $this->indentLevel); + $this->nl = $this->newline . \str_repeat(' ', $this->indentLevel); } /** * Pretty prints an array of statements. @@ -21007,11 +22782,11 @@ abstract class PrettyPrinterAbstract public function prettyPrintFile(array $stmts) : string { if (!$stmts) { - return "newline . $this->newline; } - $p = "prettyPrint($stmts); + $p = "newline . $this->newline . $this->prettyPrint($stmts); if ($stmts[0] instanceof Stmt\InlineHTML) { - $p = \preg_replace('/^<\\?php\\s+\\?>\\n?/', '', $p); + $p = \preg_replace('/^<\\?php\\s+\\?>\\r?\\n?/', '', $p); } if ($stmts[\count($stmts) - 1] instanceof Stmt\InlineHTML) { $p = \preg_replace('/<\\?php$/', '', \rtrim($p)); @@ -21023,7 +22798,7 @@ abstract class PrettyPrinterAbstract * * @param Node[] $nodes Array of nodes */ - protected function preprocessNodes(array $nodes) + protected function preprocessNodes(array $nodes) : void { /* We can use semicolon-namespaces unless there is a global namespace declaration */ $this->canUseSemicolonNamespaces = \true; @@ -21035,23 +22810,22 @@ abstract class PrettyPrinterAbstract } } /** - * Handles (and removes) no-indent and doc-string-end tokens. - * - * @param string $str - * @return string + * Handles (and removes) doc-string-end tokens. */ protected function handleMagicTokens(string $str) : string { - // Replace doc-string-end tokens with nothing or a newline - $str = \str_replace($this->docStringEndToken . ";\n", ";\n", $str); - $str = \str_replace($this->docStringEndToken, "\n", $str); + if ($this->docStringEndToken !== null) { + // Replace doc-string-end tokens with nothing or a newline + $str = \str_replace($this->docStringEndToken . ';' . $this->newline, ';' . $this->newline, $str); + $str = \str_replace($this->docStringEndToken, $this->newline, $str); + } return $str; } /** * Pretty prints an array of nodes (statements) and indents them optionally. * - * @param Node[] $nodes Array of nodes - * @param bool $indent Whether to indent the printed nodes + * @param Node[] $nodes Array of nodes + * @param bool $indent Whether to indent the printed nodes * * @return string Pretty printed statements */ @@ -21079,76 +22853,88 @@ abstract class PrettyPrinterAbstract /** * Pretty-print an infix operation while taking precedence into account. * - * @param string $class Node class of operator - * @param Node $leftNode Left-hand side node + * @param string $class Node class of operator + * @param Node $leftNode Left-hand side node * @param string $operatorString String representation of the operator - * @param Node $rightNode Right-hand side node + * @param Node $rightNode Right-hand side node + * @param int $precedence Precedence of parent operator + * @param int $lhsPrecedence Precedence for unary operator on LHS of binary operator * * @return string Pretty printed infix operation */ - protected function pInfixOp(string $class, Node $leftNode, string $operatorString, Node $rightNode) : string + protected function pInfixOp(string $class, Node $leftNode, string $operatorString, Node $rightNode, int $precedence, int $lhsPrecedence) : string { - list($precedence, $associativity) = $this->precedenceMap[$class]; - return $this->pPrec($leftNode, $precedence, $associativity, -1) . $operatorString . $this->pPrec($rightNode, $precedence, $associativity, 1); + list($opPrecedence, $newPrecedenceLHS, $newPrecedenceRHS) = $this->precedenceMap[$class]; + $prefix = ''; + $suffix = ''; + if ($opPrecedence >= $precedence) { + $prefix = '('; + $suffix = ')'; + $lhsPrecedence = self::MAX_PRECEDENCE; + } + return $prefix . $this->p($leftNode, $newPrecedenceLHS, $newPrecedenceLHS) . $operatorString . $this->p($rightNode, $newPrecedenceRHS, $lhsPrecedence) . $suffix; } /** * Pretty-print a prefix operation while taking precedence into account. * - * @param string $class Node class of operator + * @param string $class Node class of operator * @param string $operatorString String representation of the operator - * @param Node $node Node + * @param Node $node Node + * @param int $precedence Precedence of parent operator + * @param int $lhsPrecedence Precedence for unary operator on LHS of binary operator * * @return string Pretty printed prefix operation */ - protected function pPrefixOp(string $class, string $operatorString, Node $node) : string + protected function pPrefixOp(string $class, string $operatorString, Node $node, int $precedence, int $lhsPrecedence) : string { - list($precedence, $associativity) = $this->precedenceMap[$class]; - return $operatorString . $this->pPrec($node, $precedence, $associativity, 1); + $opPrecedence = $this->precedenceMap[$class][0]; + $prefix = ''; + $suffix = ''; + if ($opPrecedence >= $lhsPrecedence) { + $prefix = '('; + $suffix = ')'; + $lhsPrecedence = self::MAX_PRECEDENCE; + } + $printedArg = $this->p($node, $opPrecedence, $lhsPrecedence); + if ($operatorString === '+' && $printedArg[0] === '+' || $operatorString === '-' && $printedArg[0] === '-') { + // Avoid printing +(+$a) as ++$a and similar. + $printedArg = '(' . $printedArg . ')'; + } + return $prefix . $operatorString . $printedArg . $suffix; } /** * Pretty-print a postfix operation while taking precedence into account. * - * @param string $class Node class of operator + * @param string $class Node class of operator * @param string $operatorString String representation of the operator - * @param Node $node Node + * @param Node $node Node + * @param int $precedence Precedence of parent operator + * @param int $lhsPrecedence Precedence for unary operator on LHS of binary operator * * @return string Pretty printed postfix operation */ - protected function pPostfixOp(string $class, Node $node, string $operatorString) : string - { - list($precedence, $associativity) = $this->precedenceMap[$class]; - return $this->pPrec($node, $precedence, $associativity, -1) . $operatorString; - } - /** - * Prints an expression node with the least amount of parentheses necessary to preserve the meaning. - * - * @param Node $node Node to pretty print - * @param int $parentPrecedence Precedence of the parent operator - * @param int $parentAssociativity Associativity of parent operator - * (-1 is left, 0 is nonassoc, 1 is right) - * @param int $childPosition Position of the node relative to the operator - * (-1 is left, 1 is right) - * - * @return string The pretty printed node - */ - protected function pPrec(Node $node, int $parentPrecedence, int $parentAssociativity, int $childPosition) : string + protected function pPostfixOp(string $class, Node $node, string $operatorString, int $precedence, int $lhsPrecedence) : string { - $class = \get_class($node); - if (isset($this->precedenceMap[$class])) { - $childPrecedence = $this->precedenceMap[$class][0]; - if ($childPrecedence > $parentPrecedence || $parentPrecedence === $childPrecedence && $parentAssociativity !== $childPosition) { - return '(' . $this->p($node) . ')'; - } + $opPrecedence = $this->precedenceMap[$class][0]; + $prefix = ''; + $suffix = ''; + if ($opPrecedence >= $precedence) { + $prefix = '('; + $suffix = ')'; + $lhsPrecedence = self::MAX_PRECEDENCE; + } + if ($opPrecedence < $lhsPrecedence) { + $lhsPrecedence = $opPrecedence; } - return $this->p($node); + return $prefix . $this->p($node, $opPrecedence, $lhsPrecedence) . $operatorString . $suffix; } /** * Pretty prints an array of nodes and implodes the printed values. * * @param Node[] $nodes Array of Nodes to be printed - * @param string $glue Character to implode with + * @param string $glue Character to implode with * - * @return string Imploded pretty printed nodes + * @return string Imploded pretty printed nodes> $pre */ protected function pImplode(array $nodes, string $glue = '') : string { @@ -21178,8 +22964,8 @@ abstract class PrettyPrinterAbstract * * The result includes a leading newline and one level of indentation (same as pStmts). * - * @param Node[] $nodes Array of Nodes to be printed - * @param bool $trailingComma Whether to use a trailing comma + * @param Node[] $nodes Array of Nodes to be printed + * @param bool $trailingComma Whether to use a trailing comma * * @return string Comma separated pretty printed nodes in multiline style */ @@ -21231,11 +23017,9 @@ abstract class PrettyPrinterAbstract * * The CloningVisitor must be run on the AST prior to modification. * * The original tokens must be provided, using the getTokens() method on the lexer. * - * @param Node[] $stmts Modified AST with links to original AST - * @param Node[] $origStmts Original AST with token offset information - * @param array $origTokens Tokens of the original code - * - * @return string + * @param Node[] $stmts Modified AST with links to original AST + * @param Node[] $origStmts Original AST with token offset information + * @param Token[] $origTokens Tokens of the original code */ public function printFormatPreserving(array $stmts, array $origStmts, array $origTokens) : string { @@ -21253,17 +23037,17 @@ abstract class PrettyPrinterAbstract $pos = 0; $result = $this->pArray($stmts, $origStmts, $pos, 0, 'File', 'stmts', null); if (null !== $result) { - $result .= $this->origTokens->getTokenCode($pos, \count($origTokens), 0); + $result .= $this->origTokens->getTokenCode($pos, \count($origTokens) - 1, 0); } else { // Fallback // TODO Add pStmts($stmts, \false); + $result = "newline . $this->pStmts($stmts, \false); } - return \ltrim($this->handleMagicTokens($result)); + return $this->handleMagicTokens($result); } - protected function pFallback(Node $node) + protected function pFallback(Node $node, int $precedence, int $lhsPrecedence) : string { - return $this->{'p' . $node->getType()}($node); + return $this->{'p' . $node->getType()}($node, $precedence, $lhsPrecedence); } /** * Pretty prints a node. @@ -21271,20 +23055,22 @@ abstract class PrettyPrinterAbstract * This method also handles formatting preservation for nodes. * * @param Node $node Node to be pretty printed + * @param int $precedence Precedence of parent operator + * @param int $lhsPrecedence Precedence for unary operator on LHS of binary operator * @param bool $parentFormatPreserved Whether parent node has preserved formatting * * @return string Pretty printed node */ - protected function p(Node $node, $parentFormatPreserved = \false) : string + protected function p(Node $node, int $precedence = self::MAX_PRECEDENCE, int $lhsPrecedence = self::MAX_PRECEDENCE, bool $parentFormatPreserved = \false) : string { // No orig tokens means this is a normal pretty print without preservation of formatting if (!$this->origTokens) { - return $this->{'p' . $node->getType()}($node); + return $this->{'p' . $node->getType()}($node, $precedence, $lhsPrecedence); } - /** @var Node $origNode */ + /** @var Node|null $origNode */ $origNode = $node->getAttribute('origNode'); if (null === $origNode) { - return $this->pFallback($node); + return $this->pFallback($node, $precedence, $lhsPrecedence); } $class = \get_class($node); \assert($class === \get_class($origNode)); @@ -21294,14 +23080,16 @@ abstract class PrettyPrinterAbstract $fallbackNode = $node; if ($node instanceof Expr\New_ && $node->class instanceof Stmt\Class_) { // Normalize node structure of anonymous classes + \assert($origNode instanceof Expr\New_); $node = PrintableNewAnonClassNode::fromNewNode($node); $origNode = PrintableNewAnonClassNode::fromNewNode($origNode); + $class = PrintableNewAnonClassNode::class; } // InlineHTML node does not contain closing and opening PHP tags. If the parent formatting // is not preserved, then we need to use the fallback code to make sure the tags are // printed. if ($node instanceof Stmt\InlineHTML && !$parentFormatPreserved) { - return $this->pFallback($fallbackNode); + return $this->pFallback($fallbackNode, $precedence, $lhsPrecedence); } $indentAdjustment = $this->indentLevel - $this->origTokens->getIndentationBefore($startPos); $type = $node->getType(); @@ -21318,28 +23106,22 @@ abstract class PrettyPrinterAbstract } if (\is_array($subNode) && \is_array($origSubNode)) { // Array subnode changed, we might be able to reconstruct it - $listResult = $this->pArray($subNode, $origSubNode, $pos, $indentAdjustment, $type, $subNodeName, $fixupInfo[$subNodeName] ?? null); + $listResult = $this->pArray($subNode, $origSubNode, $pos, $indentAdjustment, $class, $subNodeName, $fixupInfo[$subNodeName] ?? null); if (null === $listResult) { - return $this->pFallback($fallbackNode); + return $this->pFallback($fallbackNode, $precedence, $lhsPrecedence); } $result .= $listResult; continue; } - if (\is_int($subNode) && \is_int($origSubNode)) { - // Check if this is a modifier change - $key = $type . '->' . $subNodeName; - if (!isset($this->modifierChangeMap[$key])) { - return $this->pFallback($fallbackNode); - } - $findToken = $this->modifierChangeMap[$key]; - $result .= $this->pModifiers($subNode); - $pos = $this->origTokens->findRight($pos, $findToken); - continue; + // Check if this is a modifier change + $key = $class . '->' . $subNodeName; + if (!isset($this->modifierChangeMap[$key])) { + return $this->pFallback($fallbackNode, $precedence, $lhsPrecedence); } - // If a non-node, non-array subnode changed, we don't be able to do a partial - // reconstructions, as we don't have enough offset information. Pretty print the - // whole node instead. - return $this->pFallback($fallbackNode); + [$printFn, $findToken] = $this->modifierChangeMap[$key]; + $result .= $this->{$printFn}($subNode); + $pos = $this->origTokens->findRight($pos, $findToken); + continue; } $extraLeft = ''; $extraRight = ''; @@ -21355,7 +23137,7 @@ abstract class PrettyPrinterAbstract // A node has been inserted, check if we have insertion information for it $key = $type . '->' . $subNodeName; if (!isset($this->insertionMap[$key])) { - return $this->pFallback($fallbackNode); + return $this->pFallback($fallbackNode, $precedence, $lhsPrecedence); } list($findToken, $beforeToken, $extraLeft, $extraRight) = $this->insertionMap[$key]; if (null !== $findToken) { @@ -21373,7 +23155,7 @@ abstract class PrettyPrinterAbstract // A node has been removed, check if we have removal information for it $key = $type . '->' . $subNodeName; if (!isset($this->removalMap[$key])) { - return $this->pFallback($fallbackNode); + return $this->pFallback($fallbackNode, $precedence, $lhsPrecedence); } // Adjust positions to account for additional tokens that must be skipped $removalInfo = $this->removalMap[$key]; @@ -21396,7 +23178,7 @@ abstract class PrettyPrinterAbstract $fixup = $fixupInfo[$subNodeName]; $res = $this->pFixup($fixup, $subNode, $class, $subStartPos, $subEndPos); } else { - $res = $this->p($subNode, \true); + $res = $this->p($subNode, self::MAX_PRECEDENCE, self::MAX_PRECEDENCE, \true); } $this->safeAppend($result, $res); $this->setIndentLevel($origIndentLevel); @@ -21410,20 +23192,20 @@ abstract class PrettyPrinterAbstract /** * Perform a format-preserving pretty print of an array. * - * @param array $nodes New nodes - * @param array $origNodes Original nodes - * @param int $pos Current token position (updated by reference) - * @param int $indentAdjustment Adjustment for indentation - * @param string $parentNodeType Type of the containing node. - * @param string $subNodeName Name of array subnode. - * @param null|int $fixup Fixup information for array item nodes + * @param Node[] $nodes New nodes + * @param Node[] $origNodes Original nodes + * @param int $pos Current token position (updated by reference) + * @param int $indentAdjustment Adjustment for indentation + * @param string $parentNodeClass Class of the containing node. + * @param string $subNodeName Name of array subnode. + * @param null|int $fixup Fixup information for array item nodes * * @return null|string Result of pretty print or null if cannot preserve formatting */ - protected function pArray(array $nodes, array $origNodes, int &$pos, int $indentAdjustment, string $parentNodeType, string $subNodeName, $fixup) + protected function pArray(array $nodes, array $origNodes, int &$pos, int $indentAdjustment, string $parentNodeClass, string $subNodeName, ?int $fixup) : ?string { $diff = $this->nodeListDiffer->diffWithReplacements($origNodes, $nodes); - $mapKey = $parentNodeType . '->' . $subNodeName; + $mapKey = $parentNodeClass . '->' . $subNodeName; $insertStr = $this->listInsertionMap[$mapKey] ?? null; $isStmtList = $subNodeName === 'stmts'; $beforeFirstKeepOrReplace = \true; @@ -21450,9 +23232,9 @@ abstract class PrettyPrinterAbstract $result = ''; foreach ($diff as $i => $diffElem) { $diffType = $diffElem->type; - /** @var Node|null $arrItem */ + /** @var Node|string|null $arrItem */ $arrItem = $diffElem->new; - /** @var Node|null $origArrItem */ + /** @var Node|string|null $origArrItem */ $origArrItem = $diffElem->old; if ($diffType === DiffElem::TYPE_KEEP || $diffType === DiffElem::TYPE_REPLACE) { $beforeFirstKeepOrReplace = \false; @@ -21483,8 +23265,8 @@ abstract class PrettyPrinterAbstract $commentStartPos = $itemStartPos; } if ($skipRemovedNode) { - if ($isStmtList && ($this->origTokens->haveBracesInRange($pos, $itemStartPos) || $this->origTokens->haveTagInRange($pos, $itemStartPos))) { - // We'd remove the brace of a code block. + if ($isStmtList && $this->origTokens->haveTagInRange($pos, $itemStartPos)) { + // We'd remove an opening/closing PHP tag. // TODO: Preserve formatting. $this->setIndentLevel($origIndentLevel); return null; @@ -21501,7 +23283,7 @@ abstract class PrettyPrinterAbstract $result .= $this->pComments($delayedAddComments) . $this->nl; } } - $this->safeAppend($result, $this->p($delayedAddNode, \true)); + $this->safeAppend($result, $this->p($delayedAddNode, self::MAX_PRECEDENCE, self::MAX_PRECEDENCE, \true)); if ($insertNewline) { $result .= $insertStr . $this->nl; } else { @@ -21524,9 +23306,14 @@ abstract class PrettyPrinterAbstract // We don't have insertion information for this list type return null; } + if (!$arrItem instanceof Node) { + // We only support list insertion of nodes. + return null; + } // We go multiline if the original code was multiline, // or if it's an array item with a comment above it. - if ($insertStr === ', ' && ($this->isMultiline($origNodes) || $arrItem->getComments())) { + // Match always uses multiline formatting. + if ($insertStr === ', ' && ($this->isMultiline($origNodes) || $arrItem->getComments() || $parentNodeClass === Expr\Match_::class)) { $insertStr = ','; $insertNewline = \true; } @@ -21567,8 +23354,8 @@ abstract class PrettyPrinterAbstract $result .= $this->origTokens->getTokenCode($pos, $itemStartPos, $indentAdjustment); $skipRemovedNode = \true; } else { - if ($isStmtList && ($this->origTokens->haveBracesInRange($pos, $itemStartPos) || $this->origTokens->haveTagInRange($pos, $itemStartPos))) { - // We'd remove the brace of a code block. + if ($isStmtList && $this->origTokens->haveTagInRange($pos, $itemStartPos)) { + // We'd remove an opening/closing PHP tag. // TODO: Preserve formatting. return null; } @@ -21581,7 +23368,7 @@ abstract class PrettyPrinterAbstract if (null !== $fixup && $arrItem->getAttribute('origNode') !== $origArrItem) { $res = $this->pFixup($fixup, $arrItem, null, $itemStartPos, $itemEndPos); } else { - $res = $this->p($arrItem, \true); + $res = $this->p($arrItem, self::MAX_PRECEDENCE, self::MAX_PRECEDENCE, \true); } $this->safeAppend($result, $res); $this->setIndentLevel($origIndentLevel); @@ -21610,7 +23397,7 @@ abstract class PrettyPrinterAbstract $result .= $this->nl; } } - $result .= $this->p($delayedAddNode, \true); + $result .= $this->p($delayedAddNode, self::MAX_PRECEDENCE, self::MAX_PRECEDENCE, \true); $first = \false; } $result .= $extraRight === "\n" ? $this->nl : $extraRight; @@ -21624,22 +23411,34 @@ abstract class PrettyPrinterAbstract * are required to preserve program semantics in a certain context (e.g. to maintain precedence * or because only certain expressions are allowed in certain places). * - * @param int $fixup Fixup type - * @param Node $subNode Subnode to print + * @param int $fixup Fixup type + * @param Node $subNode Subnode to print * @param string|null $parentClass Class of parent node - * @param int $subStartPos Original start pos of subnode - * @param int $subEndPos Original end pos of subnode + * @param int $subStartPos Original start pos of subnode + * @param int $subEndPos Original end pos of subnode * * @return string Result of fixed-up print of subnode */ - protected function pFixup(int $fixup, Node $subNode, $parentClass, int $subStartPos, int $subEndPos) : string + protected function pFixup(int $fixup, Node $subNode, ?string $parentClass, int $subStartPos, int $subEndPos) : string { switch ($fixup) { case self::FIXUP_PREC_LEFT: + // We use a conservative approximation where lhsPrecedence == precedence. + if (!$this->origTokens->haveParens($subStartPos, $subEndPos)) { + $precedence = $this->precedenceMap[$parentClass][1]; + return $this->p($subNode, $precedence, $precedence); + } + break; case self::FIXUP_PREC_RIGHT: if (!$this->origTokens->haveParens($subStartPos, $subEndPos)) { - list($precedence, $associativity) = $this->precedenceMap[$parentClass]; - return $this->pPrec($subNode, $precedence, $associativity, $fixup === self::FIXUP_PREC_LEFT ? -1 : 1); + $precedence = $this->precedenceMap[$parentClass][2]; + return $this->p($subNode, $precedence, $precedence); + } + break; + case self::FIXUP_PREC_UNARY: + if (!$this->origTokens->haveParens($subStartPos, $subEndPos)) { + $precedence = $this->precedenceMap[$parentClass][0]; + return $this->p($subNode, $precedence, $precedence); } break; case self::FIXUP_CALL_LHS: @@ -21652,6 +23451,16 @@ abstract class PrettyPrinterAbstract return '(' . $this->p($subNode) . ')'; } break; + case self::FIXUP_STATIC_DEREF_LHS: + if ($this->staticDereferenceLhsRequiresParens($subNode) && !$this->origTokens->haveParens($subStartPos, $subEndPos)) { + return '(' . $this->p($subNode) . ')'; + } + break; + case self::FIXUP_NEW: + if ($this->newOperandRequiresParens($subNode) && !$this->origTokens->haveParens($subStartPos, $subEndPos)) { + return '(' . $this->p($subNode) . ')'; + } + break; case self::FIXUP_BRACED_NAME: case self::FIXUP_VAR_BRACED_NAME: if ($subNode instanceof Expr && !$this->origTokens->haveBraces($subStartPos, $subEndPos)) { @@ -21659,7 +23468,7 @@ abstract class PrettyPrinterAbstract } break; case self::FIXUP_ENCAPSED: - if (!$subNode instanceof Scalar\EncapsedStringPart && !$this->origTokens->haveBraces($subStartPos, $subEndPos)) { + if (!$subNode instanceof Node\InterpolatedStringPart && !$this->origTokens->haveBraces($subStartPos, $subEndPos)) { return '{' . $this->p($subNode) . '}'; } break; @@ -21674,11 +23483,8 @@ abstract class PrettyPrinterAbstract * * Example: "echo" and "$x" result in "echo$x", but "echo" and "x" result in "echo x". * Without safeAppend the result would be "echox", which does not preserve semantics. - * - * @param string $str - * @param string $append */ - protected function safeAppend(string &$str, string $append) + protected function safeAppend(string &$str, string $append) : void { if ($str === "") { $str = $append; @@ -21705,7 +23511,7 @@ abstract class PrettyPrinterAbstract return !($node instanceof Node\Name || $node instanceof Expr\Variable || $node instanceof Expr\ArrayDimFetch || $node instanceof Expr\FuncCall || $node instanceof Expr\MethodCall || $node instanceof Expr\NullsafeMethodCall || $node instanceof Expr\StaticCall || $node instanceof Expr\Array_); } /** - * Determines whether the LHS of a dereferencing operation must be wrapped in parenthesis. + * Determines whether the LHS of an array/object operation must be wrapped in parentheses. * * @param Node $node LHS of dereferencing operation * @@ -21713,7 +23519,39 @@ abstract class PrettyPrinterAbstract */ protected function dereferenceLhsRequiresParens(Node $node) : bool { - return !($node instanceof Expr\Variable || $node instanceof Node\Name || $node instanceof Expr\ArrayDimFetch || $node instanceof Expr\PropertyFetch || $node instanceof Expr\NullsafePropertyFetch || $node instanceof Expr\StaticPropertyFetch || $node instanceof Expr\FuncCall || $node instanceof Expr\MethodCall || $node instanceof Expr\NullsafeMethodCall || $node instanceof Expr\StaticCall || $node instanceof Expr\Array_ || $node instanceof Scalar\String_ || $node instanceof Expr\ConstFetch || $node instanceof Expr\ClassConstFetch); + // A constant can occur on the LHS of an array/object deref, but not a static deref. + return $this->staticDereferenceLhsRequiresParens($node) && !$node instanceof Expr\ConstFetch; + } + /** + * Determines whether the LHS of a static operation must be wrapped in parentheses. + * + * @param Node $node LHS of dereferencing operation + * + * @return bool Whether parentheses are required + */ + protected function staticDereferenceLhsRequiresParens(Node $node) : bool + { + return !($node instanceof Expr\Variable || $node instanceof Node\Name || $node instanceof Expr\ArrayDimFetch || $node instanceof Expr\PropertyFetch || $node instanceof Expr\NullsafePropertyFetch || $node instanceof Expr\StaticPropertyFetch || $node instanceof Expr\FuncCall || $node instanceof Expr\MethodCall || $node instanceof Expr\NullsafeMethodCall || $node instanceof Expr\StaticCall || $node instanceof Expr\Array_ || $node instanceof Scalar\String_ || $node instanceof Expr\ClassConstFetch); + } + /** + * Determines whether an expression used in "new" or "instanceof" requires parentheses. + * + * @param Node $node New or instanceof operand + * + * @return bool Whether parentheses are required + */ + protected function newOperandRequiresParens(Node $node) : bool + { + if ($node instanceof Node\Name || $node instanceof Expr\Variable) { + return \false; + } + if ($node instanceof Expr\ArrayDimFetch || $node instanceof Expr\PropertyFetch || $node instanceof Expr\NullsafePropertyFetch) { + return $this->newOperandRequiresParens($node->var); + } + if ($node instanceof Expr\StaticPropertyFetch) { + return $this->newOperandRequiresParens($node->class); + } + return \true; } /** * Print modifiers, including trailing whitespace. @@ -21722,9 +23560,13 @@ abstract class PrettyPrinterAbstract * * @return string Printed modifiers */ - protected function pModifiers(int $modifiers) + protected function pModifiers(int $modifiers) : string { - return ($modifiers & Stmt\Class_::MODIFIER_PUBLIC ? 'public ' : '') . ($modifiers & Stmt\Class_::MODIFIER_PROTECTED ? 'protected ' : '') . ($modifiers & Stmt\Class_::MODIFIER_PRIVATE ? 'private ' : '') . ($modifiers & Stmt\Class_::MODIFIER_STATIC ? 'static ' : '') . ($modifiers & Stmt\Class_::MODIFIER_ABSTRACT ? 'abstract ' : '') . ($modifiers & Stmt\Class_::MODIFIER_FINAL ? 'final ' : '') . ($modifiers & Stmt\Class_::MODIFIER_READONLY ? 'readonly ' : ''); + return ($modifiers & Modifiers::FINAL ? 'final ' : '') . ($modifiers & Modifiers::ABSTRACT ? 'abstract ' : '') . ($modifiers & Modifiers::PUBLIC ? 'public ' : '') . ($modifiers & Modifiers::PROTECTED ? 'protected ' : '') . ($modifiers & Modifiers::PRIVATE ? 'private ' : '') . ($modifiers & Modifiers::STATIC ? 'static ' : '') . ($modifiers & Modifiers::READONLY ? 'readonly ' : ''); + } + protected function pStatic(bool $static) : string + { + return $static ? 'static ' : ''; } /** * Determine whether a list of nodes uses multiline formatting. @@ -21762,17 +23604,18 @@ abstract class PrettyPrinterAbstract * * The label char map determines whether a certain character may occur in a label. */ - protected function initializeLabelCharMap() + protected function initializeLabelCharMap() : void { - if ($this->labelCharMap) { + if (isset($this->labelCharMap)) { return; } $this->labelCharMap = []; for ($i = 0; $i < 256; $i++) { - // Since PHP 7.1 The lower range is 0x80. However, we also want to support code for - // older versions. $chr = \chr($i); - $this->labelCharMap[$chr] = $i >= 0x7f || \ctype_alnum($chr); + $this->labelCharMap[$chr] = $i >= 0x80 || \ctype_alnum($chr); + } + if ($this->phpVersion->allowsDelInIdentifiers()) { + $this->labelCharMap[""] = \true; } } /** @@ -21780,9 +23623,9 @@ abstract class PrettyPrinterAbstract * * The node list differ is used to determine differences between two array subnodes. */ - protected function initializeNodeListDiffer() + protected function initializeNodeListDiffer() : void { - if ($this->nodeListDiffer) { + if (isset($this->nodeListDiffer)) { return; } $this->nodeListDiffer = new Internal\Differ(function ($a, $b) { @@ -21799,42 +23642,19 @@ abstract class PrettyPrinterAbstract * The fixup map is used to determine whether a certain subnode of a certain node may require * some kind of "fixup" operation, e.g. the addition of parenthesis or braces. */ - protected function initializeFixupMap() + protected function initializeFixupMap() : void { - if ($this->fixupMap) { + if (isset($this->fixupMap)) { return; } - $this->fixupMap = [ - Expr\PreInc::class => ['var' => self::FIXUP_PREC_RIGHT], - Expr\PreDec::class => ['var' => self::FIXUP_PREC_RIGHT], - Expr\PostInc::class => ['var' => self::FIXUP_PREC_LEFT], - Expr\PostDec::class => ['var' => self::FIXUP_PREC_LEFT], - Expr\Instanceof_::class => ['expr' => self::FIXUP_PREC_LEFT, 'class' => self::FIXUP_PREC_RIGHT], - Expr\Ternary::class => ['cond' => self::FIXUP_PREC_LEFT, 'else' => self::FIXUP_PREC_RIGHT], - Expr\FuncCall::class => ['name' => self::FIXUP_CALL_LHS], - Expr\StaticCall::class => ['class' => self::FIXUP_DEREF_LHS], - Expr\ArrayDimFetch::class => ['var' => self::FIXUP_DEREF_LHS], - Expr\ClassConstFetch::class => ['var' => self::FIXUP_DEREF_LHS], - Expr\New_::class => ['class' => self::FIXUP_DEREF_LHS], - // TODO: FIXUP_NEW_VARIABLE - Expr\MethodCall::class => ['var' => self::FIXUP_DEREF_LHS, 'name' => self::FIXUP_BRACED_NAME], - Expr\NullsafeMethodCall::class => ['var' => self::FIXUP_DEREF_LHS, 'name' => self::FIXUP_BRACED_NAME], - Expr\StaticPropertyFetch::class => ['class' => self::FIXUP_DEREF_LHS, 'name' => self::FIXUP_VAR_BRACED_NAME], - Expr\PropertyFetch::class => ['var' => self::FIXUP_DEREF_LHS, 'name' => self::FIXUP_BRACED_NAME], - Expr\NullsafePropertyFetch::class => ['var' => self::FIXUP_DEREF_LHS, 'name' => self::FIXUP_BRACED_NAME], - Scalar\Encapsed::class => ['parts' => self::FIXUP_ENCAPSED], - ]; + $this->fixupMap = [Expr\Instanceof_::class => ['expr' => self::FIXUP_PREC_UNARY, 'class' => self::FIXUP_NEW], Expr\Ternary::class => ['cond' => self::FIXUP_PREC_LEFT, 'else' => self::FIXUP_PREC_RIGHT], Expr\Yield_::class => ['value' => self::FIXUP_PREC_UNARY], Expr\FuncCall::class => ['name' => self::FIXUP_CALL_LHS], Expr\StaticCall::class => ['class' => self::FIXUP_STATIC_DEREF_LHS], Expr\ArrayDimFetch::class => ['var' => self::FIXUP_DEREF_LHS], Expr\ClassConstFetch::class => ['class' => self::FIXUP_STATIC_DEREF_LHS, 'name' => self::FIXUP_BRACED_NAME], Expr\New_::class => ['class' => self::FIXUP_NEW], Expr\MethodCall::class => ['var' => self::FIXUP_DEREF_LHS, 'name' => self::FIXUP_BRACED_NAME], Expr\NullsafeMethodCall::class => ['var' => self::FIXUP_DEREF_LHS, 'name' => self::FIXUP_BRACED_NAME], Expr\StaticPropertyFetch::class => ['class' => self::FIXUP_STATIC_DEREF_LHS, 'name' => self::FIXUP_VAR_BRACED_NAME], Expr\PropertyFetch::class => ['var' => self::FIXUP_DEREF_LHS, 'name' => self::FIXUP_BRACED_NAME], Expr\NullsafePropertyFetch::class => ['var' => self::FIXUP_DEREF_LHS, 'name' => self::FIXUP_BRACED_NAME], Scalar\InterpolatedString::class => ['parts' => self::FIXUP_ENCAPSED]]; $binaryOps = [BinaryOp\Pow::class, BinaryOp\Mul::class, BinaryOp\Div::class, BinaryOp\Mod::class, BinaryOp\Plus::class, BinaryOp\Minus::class, BinaryOp\Concat::class, BinaryOp\ShiftLeft::class, BinaryOp\ShiftRight::class, BinaryOp\Smaller::class, BinaryOp\SmallerOrEqual::class, BinaryOp\Greater::class, BinaryOp\GreaterOrEqual::class, BinaryOp\Equal::class, BinaryOp\NotEqual::class, BinaryOp\Identical::class, BinaryOp\NotIdentical::class, BinaryOp\Spaceship::class, BinaryOp\BitwiseAnd::class, BinaryOp\BitwiseXor::class, BinaryOp\BitwiseOr::class, BinaryOp\BooleanAnd::class, BinaryOp\BooleanOr::class, BinaryOp\Coalesce::class, BinaryOp\LogicalAnd::class, BinaryOp\LogicalXor::class, BinaryOp\LogicalOr::class]; foreach ($binaryOps as $binaryOp) { $this->fixupMap[$binaryOp] = ['left' => self::FIXUP_PREC_LEFT, 'right' => self::FIXUP_PREC_RIGHT]; } - $assignOps = [Expr\Assign::class, Expr\AssignRef::class, AssignOp\Plus::class, AssignOp\Minus::class, AssignOp\Mul::class, AssignOp\Div::class, AssignOp\Concat::class, AssignOp\Mod::class, AssignOp\BitwiseAnd::class, AssignOp\BitwiseOr::class, AssignOp\BitwiseXor::class, AssignOp\ShiftLeft::class, AssignOp\ShiftRight::class, AssignOp\Pow::class, AssignOp\Coalesce::class]; - foreach ($assignOps as $assignOp) { - $this->fixupMap[$assignOp] = ['var' => self::FIXUP_PREC_LEFT, 'expr' => self::FIXUP_PREC_RIGHT]; - } - $prefixOps = [Expr\BitwiseNot::class, Expr\BooleanNot::class, Expr\UnaryPlus::class, Expr\UnaryMinus::class, Cast\Int_::class, Cast\Double::class, Cast\String_::class, Cast\Array_::class, Cast\Object_::class, Cast\Bool_::class, Cast\Unset_::class, Expr\ErrorSuppress::class, Expr\YieldFrom::class, Expr\Print_::class, Expr\Include_::class]; + $prefixOps = [Expr\Clone_::class, Expr\BitwiseNot::class, Expr\BooleanNot::class, Expr\UnaryPlus::class, Expr\UnaryMinus::class, Cast\Int_::class, Cast\Double::class, Cast\String_::class, Cast\Array_::class, Cast\Object_::class, Cast\Bool_::class, Cast\Unset_::class, Expr\ErrorSuppress::class, Expr\YieldFrom::class, Expr\Print_::class, Expr\Include_::class, Expr\Assign::class, Expr\AssignRef::class, AssignOp\Plus::class, AssignOp\Minus::class, AssignOp\Mul::class, AssignOp\Div::class, AssignOp\Concat::class, AssignOp\Mod::class, AssignOp\BitwiseAnd::class, AssignOp\BitwiseOr::class, AssignOp\BitwiseXor::class, AssignOp\ShiftLeft::class, AssignOp\ShiftRight::class, AssignOp\Pow::class, AssignOp\Coalesce::class, Expr\ArrowFunction::class, Expr\Throw_::class]; foreach ($prefixOps as $prefixOp) { - $this->fixupMap[$prefixOp] = ['expr' => self::FIXUP_PREC_RIGHT]; + $this->fixupMap[$prefixOp] = ['expr' => self::FIXUP_PREC_UNARY]; } } /** @@ -21843,9 +23663,9 @@ abstract class PrettyPrinterAbstract * The removal map is used to determine which additional tokens should be removed when a * certain node is replaced by null. */ - protected function initializeRemovalMap() + protected function initializeRemovalMap() : void { - if ($this->removalMap) { + if (isset($this->removalMap)) { return; } $stripBoth = ['left' => \T_WHITESPACE, 'right' => \T_WHITESPACE]; @@ -21854,20 +23674,20 @@ abstract class PrettyPrinterAbstract $stripDoubleArrow = ['right' => \T_DOUBLE_ARROW]; $stripColon = ['left' => ':']; $stripEquals = ['left' => '=']; - $this->removalMap = ['Expr_ArrayDimFetch->dim' => $stripBoth, 'Expr_ArrayItem->key' => $stripDoubleArrow, 'Expr_ArrowFunction->returnType' => $stripColon, 'Expr_Closure->returnType' => $stripColon, 'Expr_Exit->expr' => $stripBoth, 'Expr_Ternary->if' => $stripBoth, 'Expr_Yield->key' => $stripDoubleArrow, 'Expr_Yield->value' => $stripBoth, 'Param->type' => $stripRight, 'Param->default' => $stripEquals, 'Stmt_Break->num' => $stripBoth, 'Stmt_Catch->var' => $stripLeft, 'Stmt_ClassMethod->returnType' => $stripColon, 'Stmt_Class->extends' => ['left' => \T_EXTENDS], 'Stmt_Enum->scalarType' => $stripColon, 'Stmt_EnumCase->expr' => $stripEquals, 'Expr_PrintableNewAnonClass->extends' => ['left' => \T_EXTENDS], 'Stmt_Continue->num' => $stripBoth, 'Stmt_Foreach->keyVar' => $stripDoubleArrow, 'Stmt_Function->returnType' => $stripColon, 'Stmt_If->else' => $stripLeft, 'Stmt_Namespace->name' => $stripLeft, 'Stmt_Property->type' => $stripRight, 'Stmt_PropertyProperty->default' => $stripEquals, 'Stmt_Return->expr' => $stripBoth, 'Stmt_StaticVar->default' => $stripEquals, 'Stmt_TraitUseAdaptation_Alias->newName' => $stripLeft, 'Stmt_TryCatch->finally' => $stripLeft]; + $this->removalMap = ['Expr_ArrayDimFetch->dim' => $stripBoth, 'ArrayItem->key' => $stripDoubleArrow, 'Expr_ArrowFunction->returnType' => $stripColon, 'Expr_Closure->returnType' => $stripColon, 'Expr_Exit->expr' => $stripBoth, 'Expr_Ternary->if' => $stripBoth, 'Expr_Yield->key' => $stripDoubleArrow, 'Expr_Yield->value' => $stripBoth, 'Param->type' => $stripRight, 'Param->default' => $stripEquals, 'Stmt_Break->num' => $stripBoth, 'Stmt_Catch->var' => $stripLeft, 'Stmt_ClassConst->type' => $stripRight, 'Stmt_ClassMethod->returnType' => $stripColon, 'Stmt_Class->extends' => ['left' => \T_EXTENDS], 'Stmt_Enum->scalarType' => $stripColon, 'Stmt_EnumCase->expr' => $stripEquals, 'Expr_PrintableNewAnonClass->extends' => ['left' => \T_EXTENDS], 'Stmt_Continue->num' => $stripBoth, 'Stmt_Foreach->keyVar' => $stripDoubleArrow, 'Stmt_Function->returnType' => $stripColon, 'Stmt_If->else' => $stripLeft, 'Stmt_Namespace->name' => $stripLeft, 'Stmt_Property->type' => $stripRight, 'PropertyItem->default' => $stripEquals, 'Stmt_Return->expr' => $stripBoth, 'Stmt_StaticVar->default' => $stripEquals, 'Stmt_TraitUseAdaptation_Alias->newName' => $stripLeft, 'Stmt_TryCatch->finally' => $stripLeft]; } - protected function initializeInsertionMap() + protected function initializeInsertionMap() : void { - if ($this->insertionMap) { + if (isset($this->insertionMap)) { return; } // TODO: "yield" where both key and value are inserted doesn't work // [$find, $beforeToken, $extraLeft, $extraRight] $this->insertionMap = [ 'Expr_ArrayDimFetch->dim' => ['[', \false, null, null], - 'Expr_ArrayItem->key' => [null, \false, null, ' => '], - 'Expr_ArrowFunction->returnType' => [')', \false, ' : ', null], - 'Expr_Closure->returnType' => [')', \false, ' : ', null], + 'ArrayItem->key' => [null, \false, null, ' => '], + 'Expr_ArrowFunction->returnType' => [')', \false, ': ', null], + 'Expr_Closure->returnType' => [')', \false, ': ', null], 'Expr_Ternary->if' => ['?', \false, ' ', ' '], 'Expr_Yield->key' => [\T_YIELD, \false, null, ' => '], 'Expr_Yield->value' => [\T_YIELD, \false, ' ', null], @@ -21875,138 +23695,213 @@ abstract class PrettyPrinterAbstract 'Param->default' => [null, \false, ' = ', null], 'Stmt_Break->num' => [\T_BREAK, \false, ' ', null], 'Stmt_Catch->var' => [null, \false, ' ', null], - 'Stmt_ClassMethod->returnType' => [')', \false, ' : ', null], + 'Stmt_ClassMethod->returnType' => [')', \false, ': ', null], + 'Stmt_ClassConst->type' => [\T_CONST, \false, ' ', null], 'Stmt_Class->extends' => [null, \false, ' extends ', null], 'Stmt_Enum->scalarType' => [null, \false, ' : ', null], 'Stmt_EnumCase->expr' => [null, \false, ' = ', null], - 'Expr_PrintableNewAnonClass->extends' => [null, ' extends ', null], + 'Expr_PrintableNewAnonClass->extends' => [null, \false, ' extends ', null], 'Stmt_Continue->num' => [\T_CONTINUE, \false, ' ', null], 'Stmt_Foreach->keyVar' => [\T_AS, \false, null, ' => '], - 'Stmt_Function->returnType' => [')', \false, ' : ', null], + 'Stmt_Function->returnType' => [')', \false, ': ', null], 'Stmt_If->else' => [null, \false, ' ', null], 'Stmt_Namespace->name' => [\T_NAMESPACE, \false, ' ', null], 'Stmt_Property->type' => [\T_VARIABLE, \true, null, ' '], - 'Stmt_PropertyProperty->default' => [null, \false, ' = ', null], + 'PropertyItem->default' => [null, \false, ' = ', null], 'Stmt_Return->expr' => [\T_RETURN, \false, ' ', null], 'Stmt_StaticVar->default' => [null, \false, ' = ', null], //'Stmt_TraitUseAdaptation_Alias->newName' => [T_AS, false, ' ', null], // TODO 'Stmt_TryCatch->finally' => [null, \false, ' ', null], ]; } - protected function initializeListInsertionMap() + protected function initializeListInsertionMap() : void { - if ($this->listInsertionMap) { + if (isset($this->listInsertionMap)) { return; } $this->listInsertionMap = [ // special //'Expr_ShellExec->parts' => '', // TODO These need to be treated more carefully - //'Scalar_Encapsed->parts' => '', - 'Stmt_Catch->types' => '|', - 'UnionType->types' => '|', - 'IntersectionType->types' => '&', - 'Stmt_If->elseifs' => ' ', - 'Stmt_TryCatch->catches' => ' ', + //'Scalar_InterpolatedString->parts' => '', + Stmt\Catch_::class . '->types' => '|', + UnionType::class . '->types' => '|', + IntersectionType::class . '->types' => '&', + Stmt\If_::class . '->elseifs' => ' ', + Stmt\TryCatch::class . '->catches' => ' ', // comma-separated lists - 'Expr_Array->items' => ', ', - 'Expr_ArrowFunction->params' => ', ', - 'Expr_Closure->params' => ', ', - 'Expr_Closure->uses' => ', ', - 'Expr_FuncCall->args' => ', ', - 'Expr_Isset->vars' => ', ', - 'Expr_List->items' => ', ', - 'Expr_MethodCall->args' => ', ', - 'Expr_NullsafeMethodCall->args' => ', ', - 'Expr_New->args' => ', ', - 'Expr_PrintableNewAnonClass->args' => ', ', - 'Expr_StaticCall->args' => ', ', - 'Stmt_ClassConst->consts' => ', ', - 'Stmt_ClassMethod->params' => ', ', - 'Stmt_Class->implements' => ', ', - 'Stmt_Enum->implements' => ', ', - 'Expr_PrintableNewAnonClass->implements' => ', ', - 'Stmt_Const->consts' => ', ', - 'Stmt_Declare->declares' => ', ', - 'Stmt_Echo->exprs' => ', ', - 'Stmt_For->init' => ', ', - 'Stmt_For->cond' => ', ', - 'Stmt_For->loop' => ', ', - 'Stmt_Function->params' => ', ', - 'Stmt_Global->vars' => ', ', - 'Stmt_GroupUse->uses' => ', ', - 'Stmt_Interface->extends' => ', ', - 'Stmt_Match->arms' => ', ', - 'Stmt_Property->props' => ', ', - 'Stmt_StaticVar->vars' => ', ', - 'Stmt_TraitUse->traits' => ', ', - 'Stmt_TraitUseAdaptation_Precedence->insteadof' => ', ', - 'Stmt_Unset->vars' => ', ', - 'Stmt_Use->uses' => ', ', - 'MatchArm->conds' => ', ', - 'AttributeGroup->attrs' => ', ', + Expr\Array_::class . '->items' => ', ', + Expr\ArrowFunction::class . '->params' => ', ', + Expr\Closure::class . '->params' => ', ', + Expr\Closure::class . '->uses' => ', ', + Expr\FuncCall::class . '->args' => ', ', + Expr\Isset_::class . '->vars' => ', ', + Expr\List_::class . '->items' => ', ', + Expr\MethodCall::class . '->args' => ', ', + Expr\NullsafeMethodCall::class . '->args' => ', ', + Expr\New_::class . '->args' => ', ', + PrintableNewAnonClassNode::class . '->args' => ', ', + Expr\StaticCall::class . '->args' => ', ', + Stmt\ClassConst::class . '->consts' => ', ', + Stmt\ClassMethod::class . '->params' => ', ', + Stmt\Class_::class . '->implements' => ', ', + Stmt\Enum_::class . '->implements' => ', ', + PrintableNewAnonClassNode::class . '->implements' => ', ', + Stmt\Const_::class . '->consts' => ', ', + Stmt\Declare_::class . '->declares' => ', ', + Stmt\Echo_::class . '->exprs' => ', ', + Stmt\For_::class . '->init' => ', ', + Stmt\For_::class . '->cond' => ', ', + Stmt\For_::class . '->loop' => ', ', + Stmt\Function_::class . '->params' => ', ', + Stmt\Global_::class . '->vars' => ', ', + Stmt\GroupUse::class . '->uses' => ', ', + Stmt\Interface_::class . '->extends' => ', ', + Expr\Match_::class . '->arms' => ', ', + Stmt\Property::class . '->props' => ', ', + Stmt\StaticVar::class . '->vars' => ', ', + Stmt\TraitUse::class . '->traits' => ', ', + Stmt\TraitUseAdaptation\Precedence::class . '->insteadof' => ', ', + Stmt\Unset_::class . '->vars' => ', ', + Stmt\UseUse::class . '->uses' => ', ', + MatchArm::class . '->conds' => ', ', + AttributeGroup::class . '->attrs' => ', ', // statement lists - 'Expr_Closure->stmts' => "\n", - 'Stmt_Case->stmts' => "\n", - 'Stmt_Catch->stmts' => "\n", - 'Stmt_Class->stmts' => "\n", - 'Stmt_Enum->stmts' => "\n", - 'Expr_PrintableNewAnonClass->stmts' => "\n", - 'Stmt_Interface->stmts' => "\n", - 'Stmt_Trait->stmts' => "\n", - 'Stmt_ClassMethod->stmts' => "\n", - 'Stmt_Declare->stmts' => "\n", - 'Stmt_Do->stmts' => "\n", - 'Stmt_ElseIf->stmts' => "\n", - 'Stmt_Else->stmts' => "\n", - 'Stmt_Finally->stmts' => "\n", - 'Stmt_Foreach->stmts' => "\n", - 'Stmt_For->stmts' => "\n", - 'Stmt_Function->stmts' => "\n", - 'Stmt_If->stmts' => "\n", - 'Stmt_Namespace->stmts' => "\n", - 'Stmt_Class->attrGroups' => "\n", - 'Stmt_Enum->attrGroups' => "\n", - 'Stmt_EnumCase->attrGroups' => "\n", - 'Stmt_Interface->attrGroups' => "\n", - 'Stmt_Trait->attrGroups' => "\n", - 'Stmt_Function->attrGroups' => "\n", - 'Stmt_ClassMethod->attrGroups' => "\n", - 'Stmt_ClassConst->attrGroups' => "\n", - 'Stmt_Property->attrGroups' => "\n", - 'Expr_PrintableNewAnonClass->attrGroups' => ' ', - 'Expr_Closure->attrGroups' => ' ', - 'Expr_ArrowFunction->attrGroups' => ' ', - 'Param->attrGroups' => ' ', - 'Stmt_Switch->cases' => "\n", - 'Stmt_TraitUse->adaptations' => "\n", - 'Stmt_TryCatch->stmts' => "\n", - 'Stmt_While->stmts' => "\n", + Expr\Closure::class . '->stmts' => "\n", + Stmt\Case_::class . '->stmts' => "\n", + Stmt\Catch_::class . '->stmts' => "\n", + Stmt\Class_::class . '->stmts' => "\n", + Stmt\Enum_::class . '->stmts' => "\n", + PrintableNewAnonClassNode::class . '->stmts' => "\n", + Stmt\Interface_::class . '->stmts' => "\n", + Stmt\Trait_::class . '->stmts' => "\n", + Stmt\ClassMethod::class . '->stmts' => "\n", + Stmt\Declare_::class . '->stmts' => "\n", + Stmt\Do_::class . '->stmts' => "\n", + Stmt\ElseIf_::class . '->stmts' => "\n", + Stmt\Else_::class . '->stmts' => "\n", + Stmt\Finally_::class . '->stmts' => "\n", + Stmt\Foreach_::class . '->stmts' => "\n", + Stmt\For_::class . '->stmts' => "\n", + Stmt\Function_::class . '->stmts' => "\n", + Stmt\If_::class . '->stmts' => "\n", + Stmt\Namespace_::class . '->stmts' => "\n", + Stmt\Block::class . '->stmts' => "\n", + // Attribute groups + Stmt\Class_::class . '->attrGroups' => "\n", + Stmt\Enum_::class . '->attrGroups' => "\n", + Stmt\EnumCase::class . '->attrGroups' => "\n", + Stmt\Interface_::class . '->attrGroups' => "\n", + Stmt\Trait_::class . '->attrGroups' => "\n", + Stmt\Function_::class . '->attrGroups' => "\n", + Stmt\ClassMethod::class . '->attrGroups' => "\n", + Stmt\ClassConst::class . '->attrGroups' => "\n", + Stmt\Property::class . '->attrGroups' => "\n", + PrintableNewAnonClassNode::class . '->attrGroups' => ' ', + Expr\Closure::class . '->attrGroups' => ' ', + Expr\ArrowFunction::class . '->attrGroups' => ' ', + Param::class . '->attrGroups' => ' ', + Stmt\Switch_::class . '->cases' => "\n", + Stmt\TraitUse::class . '->adaptations' => "\n", + Stmt\TryCatch::class . '->stmts' => "\n", + Stmt\While_::class . '->stmts' => "\n", // dummy for top-level context 'File->stmts' => "\n", ]; } - protected function initializeEmptyListInsertionMap() + protected function initializeEmptyListInsertionMap() : void { - if ($this->emptyListInsertionMap) { + if (isset($this->emptyListInsertionMap)) { return; } // TODO Insertion into empty statement lists. // [$find, $extraLeft, $extraRight] - $this->emptyListInsertionMap = ['Expr_ArrowFunction->params' => ['(', '', ''], 'Expr_Closure->uses' => [')', ' use(', ')'], 'Expr_Closure->params' => ['(', '', ''], 'Expr_FuncCall->args' => ['(', '', ''], 'Expr_MethodCall->args' => ['(', '', ''], 'Expr_NullsafeMethodCall->args' => ['(', '', ''], 'Expr_New->args' => ['(', '', ''], 'Expr_PrintableNewAnonClass->args' => ['(', '', ''], 'Expr_PrintableNewAnonClass->implements' => [null, ' implements ', ''], 'Expr_StaticCall->args' => ['(', '', ''], 'Stmt_Class->implements' => [null, ' implements ', ''], 'Stmt_Enum->implements' => [null, ' implements ', ''], 'Stmt_ClassMethod->params' => ['(', '', ''], 'Stmt_Interface->extends' => [null, ' extends ', ''], 'Stmt_Function->params' => ['(', '', ''], 'Stmt_Interface->attrGroups' => [null, '', "\n"], 'Stmt_Class->attrGroups' => [null, '', "\n"], 'Stmt_ClassConst->attrGroups' => [null, '', "\n"], 'Stmt_ClassMethod->attrGroups' => [null, '', "\n"], 'Stmt_Function->attrGroups' => [null, '', "\n"], 'Stmt_Property->attrGroups' => [null, '', "\n"], 'Stmt_Trait->attrGroups' => [null, '', "\n"], 'Expr_ArrowFunction->attrGroups' => [null, '', ' '], 'Expr_Closure->attrGroups' => [null, '', ' '], 'Expr_PrintableNewAnonClass->attrGroups' => [\T_NEW, ' ', '']]; + $this->emptyListInsertionMap = [Expr\ArrowFunction::class . '->params' => ['(', '', ''], Expr\Closure::class . '->uses' => [')', ' use (', ')'], Expr\Closure::class . '->params' => ['(', '', ''], Expr\FuncCall::class . '->args' => ['(', '', ''], Expr\MethodCall::class . '->args' => ['(', '', ''], Expr\NullsafeMethodCall::class . '->args' => ['(', '', ''], Expr\New_::class . '->args' => ['(', '', ''], PrintableNewAnonClassNode::class . '->args' => ['(', '', ''], PrintableNewAnonClassNode::class . '->implements' => [null, ' implements ', ''], Expr\StaticCall::class . '->args' => ['(', '', ''], Stmt\Class_::class . '->implements' => [null, ' implements ', ''], Stmt\Enum_::class . '->implements' => [null, ' implements ', ''], Stmt\ClassMethod::class . '->params' => ['(', '', ''], Stmt\Interface_::class . '->extends' => [null, ' extends ', ''], Stmt\Function_::class . '->params' => ['(', '', ''], Stmt\Interface_::class . '->attrGroups' => [null, '', "\n"], Stmt\Class_::class . '->attrGroups' => [null, '', "\n"], Stmt\ClassConst::class . '->attrGroups' => [null, '', "\n"], Stmt\ClassMethod::class . '->attrGroups' => [null, '', "\n"], Stmt\Function_::class . '->attrGroups' => [null, '', "\n"], Stmt\Property::class . '->attrGroups' => [null, '', "\n"], Stmt\Trait_::class . '->attrGroups' => [null, '', "\n"], Expr\ArrowFunction::class . '->attrGroups' => [null, '', ' '], Expr\Closure::class . '->attrGroups' => [null, '', ' '], PrintableNewAnonClassNode::class . '->attrGroups' => [\T_NEW, ' ', '']]; } - protected function initializeModifierChangeMap() + protected function initializeModifierChangeMap() : void { - if ($this->modifierChangeMap) { + if (isset($this->modifierChangeMap)) { return; } - $this->modifierChangeMap = ['Stmt_ClassConst->flags' => \T_CONST, 'Stmt_ClassMethod->flags' => \T_FUNCTION, 'Stmt_Class->flags' => \T_CLASS, 'Stmt_Property->flags' => \T_VARIABLE, 'Param->flags' => \T_VARIABLE]; + $this->modifierChangeMap = [Stmt\ClassConst::class . '->flags' => ['pModifiers', \T_CONST], Stmt\ClassMethod::class . '->flags' => ['pModifiers', \T_FUNCTION], Stmt\Class_::class . '->flags' => ['pModifiers', \T_CLASS], Stmt\Property::class . '->flags' => ['pModifiers', \T_VARIABLE], PrintableNewAnonClassNode::class . '->flags' => ['pModifiers', \T_CLASS], Param::class . '->flags' => ['pModifiers', \T_VARIABLE], Expr\Closure::class . '->static' => ['pStatic', \T_FUNCTION], Expr\ArrowFunction::class . '->static' => ['pStatic', \T_FN]]; // List of integer subnodes that are not modifiers: // Expr_Include->type // Stmt_GroupUse->type // Stmt_Use->type - // Stmt_UseUse->type + // UseItem->type } } +pos + \strlen($this->text); + } + /** Get 1-based end line number of the token. */ + public function getEndLine() : int + { + return $this->line + \substr_count($this->text, "\n"); + } +} + + * @psalm-var array> + */ + private array $linesToBeIgnored = []; + /** + * @psalm-var array */ private array $tests = []; /** @@ -24641,6 +26546,7 @@ final class CodeCoverage private array $parentClassesExcludedFromUnintentionallyCoveredCodeCheck = []; private ?FileAnalyser $analyser = null; private ?string $cacheDirectory = null; + private ?Directory $cachedReport = null; public function __construct(Driver $driver, Filter $filter) { $this->driver = $driver; @@ -24653,7 +26559,10 @@ final class CodeCoverage */ public function getReport() : Directory { - return (new Builder($this->analyser()))->build($this); + if ($this->cachedReport === null) { + $this->cachedReport = (new Builder($this->analyser()))->build($this); + } + return $this->cachedReport; } /** * Clears collected code coverage data. @@ -24664,6 +26573,14 @@ final class CodeCoverage $this->currentSize = null; $this->data = new ProcessedCodeCoverageData(); $this->tests = []; + $this->cachedReport = null; + } + /** + * @internal + */ + public function clearCache() : void + { + $this->cachedReport = null; } /** * Returns the filter object used. @@ -24692,14 +26609,14 @@ final class CodeCoverage $this->data = $data; } /** - * @psalm-return array + * @psalm-return array */ public function getTests() : array { return $this->tests; } /** - * @psalm-param array $tests + * @psalm-param array $tests */ public function setTests(array $tests) : void { @@ -24713,21 +26630,29 @@ final class CodeCoverage $this->currentId = $id; $this->currentSize = $size; $this->driver->start(); + $this->cachedReport = null; } - public function stop(bool $append = \true, TestStatus $status = null, array|false $linesToBeCovered = [], array $linesToBeUsed = []) : RawCodeCoverageData + /** + * @psalm-param array> $linesToBeIgnored + */ + public function stop(bool $append = \true, TestStatus $status = null, array|false $linesToBeCovered = [], array $linesToBeUsed = [], array $linesToBeIgnored = []) : RawCodeCoverageData { $data = $this->driver->stop(); - $this->append($data, null, $append, $status, $linesToBeCovered, $linesToBeUsed); + $this->linesToBeIgnored = array_merge_recursive($this->linesToBeIgnored, $linesToBeIgnored); + $this->append($data, null, $append, $status, $linesToBeCovered, $linesToBeUsed, $linesToBeIgnored); $this->currentId = null; $this->currentSize = null; + $this->cachedReport = null; return $data; } /** + * @psalm-param array> $linesToBeIgnored + * * @throws ReflectionException * @throws TestIdMissingException * @throws UnintentionallyCoveredCodeException */ - public function append(RawCodeCoverageData $rawData, string $id = null, bool $append = \true, TestStatus $status = null, array|false $linesToBeCovered = [], array $linesToBeUsed = []) : void + public function append(RawCodeCoverageData $rawData, string $id = null, bool $append = \true, TestStatus $status = null, array|false $linesToBeCovered = [], array $linesToBeUsed = [], array $linesToBeIgnored = []) : void { if ($id === null) { $id = $this->currentId; @@ -24735,6 +26660,7 @@ final class CodeCoverage if ($id === null) { throw new TestIdMissingException(); } + $this->cachedReport = null; if ($status === null) { $status = TestStatus::unknown(); } @@ -24745,20 +26671,21 @@ final class CodeCoverage $this->applyFilter($rawData); $this->applyExecutableLinesFilter($rawData); if ($this->useAnnotationsForIgnoringCode) { - $this->applyIgnoredLinesFilter($rawData); + $this->applyIgnoredLinesFilter($rawData, $linesToBeIgnored); } $this->data->initializeUnseenData($rawData); if (!$append) { return; } - if ($id !== self::UNCOVERED_FILES) { - $this->applyCoversAndUsesFilter($rawData, $linesToBeCovered, $linesToBeUsed, $size); - if (empty($rawData->lineCoverage())) { - return; - } - $this->tests[$id] = ['size' => $size->asString(), 'status' => $status->asString()]; - $this->data->markCodeAsExecutedByTestCase($id, $rawData); + if ($id === self::UNCOVERED_FILES) { + return; + } + $this->applyCoversAndUsesFilter($rawData, $linesToBeCovered, $linesToBeUsed, $size); + if (empty($rawData->lineCoverage())) { + return; } + $this->tests[$id] = ['size' => $size->asString(), 'status' => $status->asString()]; + $this->data->markCodeAsExecutedByTestCase($id, $rawData); } /** * Merges the data from another instance. @@ -24768,6 +26695,7 @@ final class CodeCoverage $this->filter->includeFiles($that->filter()->files()); $this->data->merge($that->data); $this->tests = array_merge($this->tests, $that->getTests()); + $this->cachedReport = null; } public function enableCheckForUnintentionallyCoveredCode() : void { @@ -24899,12 +26827,18 @@ final class CodeCoverage $data->markExecutableLineByBranch($filename, $linesToBranchMap); } } - private function applyIgnoredLinesFilter(RawCodeCoverageData $data) : void + /** + * @psalm-param array> $linesToBeIgnored + */ + private function applyIgnoredLinesFilter(RawCodeCoverageData $data, array $linesToBeIgnored) : void { foreach (array_keys($data->lineCoverage()) as $filename) { if (!$this->filter->isFile($filename)) { continue; } + if (isset($linesToBeIgnored[$filename])) { + $data->removeCoverageDataForLines($filename, $linesToBeIgnored[$filename]); + } $data->removeCoverageDataForLines($filename, $this->analyser()->ignoredLinesFor($filename)); } } @@ -24916,7 +26850,7 @@ final class CodeCoverage $uncoveredFiles = array_diff($this->filter->files(), $this->data->coveredFiles()); foreach ($uncoveredFiles as $uncoveredFile) { if (is_file($uncoveredFile)) { - $this->append(RawCodeCoverageData::fromUncoveredFile($uncoveredFile, $this->analyser()), self::UNCOVERED_FILES); + $this->append(RawCodeCoverageData::fromUncoveredFile($uncoveredFile, $this->analyser()), self::UNCOVERED_FILES, linesToBeIgnored: $this->linesToBeIgnored); } } } @@ -25000,7 +26934,7 @@ final class CodeCoverage } $this->analyser = new ParsingFileAnalyser($this->useAnnotationsForIgnoringCode, $this->ignoreDeprecatedCode); if ($this->cachesStaticAnalysis()) { - $this->analyser = new CachingFileAnalyser($this->cacheDirectory, $this->analyser); + $this->analyser = new CachingFileAnalyser($this->cacheDirectory, $this->analyser, $this->useAnnotationsForIgnoringCode, $this->ignoreDeprecatedCode); } return $this->analyser; } @@ -25028,18 +26962,41 @@ use function ksort; use PHPUnit\SebastianBergmann\CodeCoverage\Driver\Driver; /** * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage + * + * @psalm-import-type XdebugFunctionCoverageType from \SebastianBergmann\CodeCoverage\Driver\XdebugDriver + * + * @psalm-type TestIdType = string */ final class ProcessedCodeCoverageData { /** * Line coverage data. * An array of filenames, each having an array of linenumbers, each executable line having an array of testcase ids. + * + * @psalm-var array>> */ private array $lineCoverage = []; /** * Function coverage data. * Maintains base format of raw data (@see https://xdebug.org/docs/code_coverage), but each 'hit' entry is an array * of testcase ids. + * + * @psalm-var array, + * out: array, + * out_hit: array, + * }>, + * paths: array, + * hit: list, + * }>, + * hit: list + * }>> */ private array $functionCoverage = []; public function initializeUnseenData(RawCodeCoverageData $rawData) : void @@ -25181,6 +27138,8 @@ final class ProcessedCodeCoverageData } /** * For a function we have never seen before, copy all data over and simply init the 'hit' array. + * + * @psalm-param XdebugFunctionCoverageType $functionData */ private function initPreviouslyUnseenFunction(string $file, string $functionName, array $functionData) : void { @@ -25196,6 +27155,8 @@ final class ProcessedCodeCoverageData * For a function we have seen before, only copy over and init the 'hit' array for any unseen branches and paths. * Techniques such as mocking and where the contents of a file are different vary during tests (e.g. compiling * containers) mean that the functions inside a file cannot be relied upon to be static. + * + * @psalm-param XdebugFunctionCoverageType $functionData */ private function initPreviouslySeenFunction(string $file, string $functionName, array $functionData) : void { @@ -25236,12 +27197,19 @@ use function explode; use function file_get_contents; use function in_array; use function is_file; +use function preg_replace; use function range; +use function str_ends_with; +use function str_starts_with; use function trim; use PHPUnit\SebastianBergmann\CodeCoverage\Driver\Driver; use PHPUnit\SebastianBergmann\CodeCoverage\StaticAnalysis\FileAnalyser; /** * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage + * + * @psalm-import-type XdebugFunctionsCoverageType from \SebastianBergmann\CodeCoverage\Driver\XdebugDriver + * @psalm-import-type XdebugCodeCoverageWithoutPathCoverageType from \SebastianBergmann\CodeCoverage\Driver\XdebugDriver + * @psalm-import-type XdebugCodeCoverageWithPathCoverageType from \SebastianBergmann\CodeCoverage\Driver\XdebugDriver */ final class RawCodeCoverageData { @@ -25250,22 +27218,37 @@ final class RawCodeCoverageData */ private static array $emptyLineCache = []; /** - * @see https://xdebug.org/docs/code_coverage for format + * @psalm-var XdebugCodeCoverageWithoutPathCoverageType */ private array $lineCoverage; /** - * @see https://xdebug.org/docs/code_coverage for format + * @psalm-var array */ private array $functionCoverage; + /** + * @psalm-param XdebugCodeCoverageWithoutPathCoverageType $rawCoverage + */ public static function fromXdebugWithoutPathCoverage(array $rawCoverage) : self { return new self($rawCoverage, []); } + /** + * @psalm-param XdebugCodeCoverageWithPathCoverageType $rawCoverage + */ public static function fromXdebugWithPathCoverage(array $rawCoverage) : self { $lineCoverage = []; $functionCoverage = []; foreach ($rawCoverage as $file => $fileCoverageData) { + // Xdebug annotates the function name of traits, strip that off + foreach ($fileCoverageData['functions'] as $existingKey => $data) { + if (str_ends_with($existingKey, '}') && !str_starts_with($existingKey, '{')) { + // don't want to catch {main} + $newKey = preg_replace('/\\{.*}$/', '', $existingKey); + $fileCoverageData['functions'][$newKey] = $data; + unset($fileCoverageData['functions'][$existingKey]); + } + } $lineCoverage[$file] = $fileCoverageData['lines']; $functionCoverage[$file] = $fileCoverageData['functions']; } @@ -25279,6 +27262,10 @@ final class RawCodeCoverageData } return new self([$filename => $lineCoverage], []); } + /** + * @psalm-param XdebugCodeCoverageWithoutPathCoverageType $lineCoverage + * @psalm-param array $functionCoverage + */ private function __construct(array $lineCoverage, array $functionCoverage) { $this->lineCoverage = $lineCoverage; @@ -25289,10 +27276,16 @@ final class RawCodeCoverageData { $this->lineCoverage = $this->functionCoverage = []; } + /** + * @psalm-return XdebugCodeCoverageWithoutPathCoverageType + */ public function lineCoverage() : array { return $this->lineCoverage; } + /** + * @psalm-return array + */ public function functionCoverage() : array { return $this->functionCoverage; @@ -25679,6 +27672,34 @@ use PHPUnit\SebastianBergmann\CodeCoverage\Data\RawCodeCoverageData; use PHPUnit\SebastianBergmann\CodeCoverage\Filter; /** * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage + * + * @see https://xdebug.org/docs/code_coverage#xdebug_get_code_coverage + * + * @psalm-type XdebugLinesCoverageType = array + * @psalm-type XdebugBranchCoverageType = array{ + * op_start: int, + * op_end: int, + * line_start: int, + * line_end: int, + * hit: int, + * out: array, + * out_hit: array, + * } + * @psalm-type XdebugPathCoverageType = array{ + * path: array, + * hit: int, + * } + * @psalm-type XdebugFunctionCoverageType = array{ + * branches: array, + * paths: array, + * } + * @psalm-type XdebugFunctionsCoverageType = array + * @psalm-type XdebugPathAndBranchesCoverageType = array{ + * lines: XdebugLinesCoverageType, + * functions: XdebugFunctionsCoverageType, + * } + * @psalm-type XdebugCodeCoverageWithoutPathCoverageType = array + * @psalm-type XdebugCodeCoverageWithPathCoverageType = array */ final class XdebugDriver extends Driver { @@ -25718,8 +27739,10 @@ final class XdebugDriver extends Driver $data = xdebug_get_code_coverage(); xdebug_stop_code_coverage(); if ($this->collectsBranchAndPathCoverage()) { + /* @var XdebugCodeCoverageWithPathCoverageType $data */ return RawCodeCoverageData::fromXdebugWithPathCoverage($data); } + /* @var XdebugCodeCoverageWithoutPathCoverageType $data */ return RawCodeCoverageData::fromXdebugWithoutPathCoverage($data); } public function nameAndVersion() : string @@ -25837,6 +27860,23 @@ declare (strict_types=1); */ namespace PHPUnit\SebastianBergmann\CodeCoverage; +use RuntimeException; +final class FileCouldNotBeWrittenException extends RuntimeException implements Exception +{ +} + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ +namespace PHPUnit\SebastianBergmann\CodeCoverage; + final class InvalidArgumentException extends \InvalidArgumentException implements Exception { } @@ -26177,6 +28217,9 @@ final class Filter * @psalm-var array */ private array $isFileCache = []; + /** + * @deprecated + */ public function includeDirectory(string $directory, string $suffix = '.php', string $prefix = '') : void { foreach ((new FileIteratorFacade())->getFilesAsArray($directory, $suffix, $prefix) as $file) { @@ -26200,12 +28243,18 @@ final class Filter } $this->files[$filename] = \true; } + /** + * @deprecated + */ public function excludeDirectory(string $directory, string $suffix = '.php', string $prefix = '') : void { foreach ((new FileIteratorFacade())->getFilesAsArray($directory, $suffix, $prefix) as $file) { $this->excludeFile($file); } } + /** + * @deprecated + */ public function excludeFile(string $filename) : void { $filename = realpath($filename); @@ -26294,6 +28343,11 @@ use Countable; use PHPUnit\SebastianBergmann\CodeCoverage\Util\Percentage; /** * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage + * + * @psalm-import-type LinesOfCodeType from \SebastianBergmann\CodeCoverage\StaticAnalysis\FileAnalyser + * @psalm-import-type ProcessedFunctionType from \SebastianBergmann\CodeCoverage\Node\File + * @psalm-import-type ProcessedClassType from \SebastianBergmann\CodeCoverage\Node\File + * @psalm-import-type ProcessedTraitType from \SebastianBergmann\CodeCoverage\Node\File */ abstract class AbstractNode implements Countable { @@ -26388,11 +28442,20 @@ abstract class AbstractNode implements Countable { return $this->numberOfTestedFunctions() + $this->numberOfTestedMethods(); } + /** + * @psalm-return array + */ public abstract function classes() : array; + /** + * @psalm-return array + */ public abstract function traits() : array; + /** + * @psalm-return array + */ public abstract function functions() : array; /** - * @psalm-return array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int} + * @psalm-return LinesOfCodeType */ public abstract function linesOfCode() : array; public abstract function numberOfExecutableLines() : int; @@ -26464,6 +28527,8 @@ use PHPUnit\SebastianBergmann\CodeCoverage\Data\ProcessedCodeCoverageData; use PHPUnit\SebastianBergmann\CodeCoverage\StaticAnalysis\FileAnalyser; /** * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage + * + * @psalm-import-type TestType from \SebastianBergmann\CodeCoverage\CodeCoverage */ final class Builder { @@ -26482,7 +28547,7 @@ final class Builder return $root; } /** - * @psalm-param array $tests + * @psalm-param array $tests */ private function addItems(Directory $root, array $items, array $tests) : void { @@ -26539,6 +28604,8 @@ final class Builder * ) * ) * + * + * @psalm-return array, functionCoverage: array>}>> */ private function buildDirectoryStructure(ProcessedCodeCoverageData $data) : array { @@ -26702,6 +28769,8 @@ use IteratorAggregate; use RecursiveIteratorIterator; /** * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage + * + * @psalm-import-type LinesOfCodeType from \SebastianBergmann\CodeCoverage\StaticAnalysis\FileAnalyser */ final class Directory extends AbstractNode implements IteratorAggregate { @@ -26721,7 +28790,7 @@ final class Directory extends AbstractNode implements IteratorAggregate private ?array $traits = null; private ?array $functions = null; /** - * @psalm-var null|array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int} + * @psalm-var null|LinesOfCodeType */ private ?array $linesOfCode = null; private int $numFiles = -1; @@ -26810,7 +28879,7 @@ final class Directory extends AbstractNode implements IteratorAggregate return $this->functions; } /** - * @psalm-return array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int} + * @psalm-return LinesOfCodeType */ public function linesOfCode() : array { @@ -26984,9 +29053,86 @@ use function count; use function range; /** * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage + * + * @psalm-import-type CodeUnitFunctionType from \SebastianBergmann\CodeCoverage\StaticAnalysis\CodeUnitFindingVisitor + * @psalm-import-type CodeUnitMethodType from \SebastianBergmann\CodeCoverage\StaticAnalysis\CodeUnitFindingVisitor + * @psalm-import-type CodeUnitClassType from \SebastianBergmann\CodeCoverage\StaticAnalysis\CodeUnitFindingVisitor + * @psalm-import-type CodeUnitTraitType from \SebastianBergmann\CodeCoverage\StaticAnalysis\CodeUnitFindingVisitor + * @psalm-import-type LinesOfCodeType from \SebastianBergmann\CodeCoverage\StaticAnalysis\FileAnalyser + * @psalm-import-type LinesType from \SebastianBergmann\CodeCoverage\StaticAnalysis\FileAnalyser + * + * @psalm-type ProcessedFunctionType = array{ + * functionName: string, + * namespace: string, + * signature: string, + * startLine: int, + * endLine: int, + * executableLines: int, + * executedLines: int, + * executableBranches: int, + * executedBranches: int, + * executablePaths: int, + * executedPaths: int, + * ccn: int, + * coverage: int|float, + * crap: int|string, + * link: string + * } + * @psalm-type ProcessedMethodType = array{ + * methodName: string, + * visibility: string, + * signature: string, + * startLine: int, + * endLine: int, + * executableLines: int, + * executedLines: int, + * executableBranches: int, + * executedBranches: int, + * executablePaths: int, + * executedPaths: int, + * ccn: int, + * coverage: float|int, + * crap: int|string, + * link: string + * } + * @psalm-type ProcessedClassType = array{ + * className: string, + * namespace: string, + * methods: array, + * startLine: int, + * executableLines: int, + * executedLines: int, + * executableBranches: int, + * executedBranches: int, + * executablePaths: int, + * executedPaths: int, + * ccn: int, + * coverage: int|float, + * crap: int|string, + * link: string + * } + * @psalm-type ProcessedTraitType = array{ + * traitName: string, + * namespace: string, + * methods: array, + * startLine: int, + * executableLines: int, + * executedLines: int, + * executableBranches: int, + * executedBranches: int, + * executablePaths: int, + * executedPaths: int, + * ccn: int, + * coverage: float|int, + * crap: int|string, + * link: string + * } */ final class File extends AbstractNode { + /** + * @psalm-var array> + */ private array $lineCoverageData; private array $functionCoverageData; private readonly array $testData; @@ -26996,11 +29142,20 @@ final class File extends AbstractNode private int $numExecutedBranches = 0; private int $numExecutablePaths = 0; private int $numExecutedPaths = 0; + /** + * @psalm-var array + */ private array $classes = []; + /** + * @psalm-var array + */ private array $traits = []; + /** + * @psalm-var array + */ private array $functions = []; /** - * @psalm-return array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int} + * @psalm-var LinesOfCodeType */ private readonly array $linesOfCode; private ?int $numClasses = null; @@ -27010,9 +29165,16 @@ final class File extends AbstractNode private ?int $numMethods = null; private ?int $numTestedMethods = null; private ?int $numTestedFunctions = null; + /** + * @var array + */ private array $codeUnitsByLine = []; /** - * @psalm-param array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int} $linesOfCode + * @psalm-param array> $lineCoverageData + * @psalm-param LinesOfCodeType $linesOfCode + * @psalm-param array $classes + * @psalm-param array $traits + * @psalm-param array $functions */ public function __construct(string $name, AbstractNode $parent, array $lineCoverageData, array $functionCoverageData, array $testData, array $classes, array $traits, array $functions, array $linesOfCode) { @@ -27027,6 +29189,9 @@ final class File extends AbstractNode { return 1; } + /** + * @psalm-return array> + */ public function lineCoverageData() : array { return $this->lineCoverageData; @@ -27051,9 +29216,6 @@ final class File extends AbstractNode { return $this->functions; } - /** - * @psalm-return array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int} - */ public function linesOfCode() : array { return $this->linesOfCode; @@ -27178,6 +29340,11 @@ final class File extends AbstractNode } return $this->numTestedFunctions; } + /** + * @psalm-param array $classes + * @psalm-param array $traits + * @psalm-param array $functions + */ private function calculateStatistics(array $classes, array $traits, array $functions) : void { foreach (range(1, $this->linesOfCode['linesOfCode']) as $lineNumber) { @@ -27253,6 +29420,9 @@ final class File extends AbstractNode } } } + /** + * @psalm-param array $classes + */ private function processClasses(array $classes) : void { $link = $this->id() . '.html#'; @@ -27275,6 +29445,9 @@ final class File extends AbstractNode } } } + /** + * @psalm-param array $traits + */ private function processTraits(array $traits) : void { $link = $this->id() . '.html#'; @@ -27297,6 +29470,9 @@ final class File extends AbstractNode } } } + /** + * @psalm-param array $functions + */ private function processFunctions(array $functions) : void { $link = $this->id() . '.html#'; @@ -27323,6 +29499,11 @@ final class File extends AbstractNode $this->numExecutedPaths += $this->functions[$functionName]['executedPaths']; } } + /** + * @psalm-param CodeUnitMethodType $method + * + * @psalm-return ProcessedMethodType + */ private function newMethod(string $className, string $methodName, array $method, string $link) : array { $methodData = ['methodName' => $methodName, 'visibility' => $method['visibility'], 'signature' => $method['signature'], 'startLine' => $method['startLine'], 'endLine' => $method['endLine'], 'executableLines' => 0, 'executedLines' => 0, 'executableBranches' => 0, 'executedBranches' => 0, 'executablePaths' => 0, 'executedPaths' => 0, 'ccn' => $method['ccn'], 'coverage' => 0, 'crap' => 0, 'link' => $link . $method['startLine']]; @@ -27441,6 +29622,7 @@ use function is_string; use function ksort; use function max; use function range; +use function strpos; use function time; use DOMDocument; use PHPUnit\SebastianBergmann\CodeCoverage\CodeCoverage; @@ -27496,7 +29678,7 @@ final class Clover } $methodCount = 0; foreach (range($method['startLine'], $method['endLine']) as $line) { - if (isset($coverageData[$line]) && $coverageData[$line] !== null) { + if (isset($coverageData[$line])) { $methodCount = max($methodCount, count($coverageData[$line])); } } @@ -27601,7 +29783,9 @@ final class Clover $xmlProject->appendChild($xmlMetrics); $buffer = $xmlDocument->saveXML(); if ($target !== null) { - Filesystem::createDirectory(dirname($target)); + if (!strpos($target, '://') !== \false) { + Filesystem::createDirectory(dirname($target)); + } if (@file_put_contents($target, $buffer) === \false) { throw new WriteOperationFailedException($target); } @@ -27629,6 +29813,7 @@ use function file_put_contents; use function preg_match; use function range; use function str_replace; +use function strpos; use function time; use DOMImplementation; use PHPUnit\SebastianBergmann\CodeCoverage\CodeCoverage; @@ -27738,7 +29923,7 @@ final class Cobertura $methodLinesElement = $document->createElement('lines'); $methodElement->appendChild($methodLinesElement); foreach (range($method['startLine'], $method['endLine']) as $line) { - if (!isset($coverageData[$line]) || $coverageData[$line] === null) { + if (!isset($coverageData[$line])) { continue; } $methodLineElement = $document->createElement('line'); @@ -27751,7 +29936,7 @@ final class Cobertura $methodsElement->appendChild($methodElement); } } - if ($report->numberOfFunctions() === 0) { + if ($item->numberOfFunctions() === 0) { $packageElement->setAttribute('complexity', (string) $packageComplexity); continue; } @@ -27767,7 +29952,7 @@ final class Cobertura $classElement->appendChild($methodsElement); $classLinesElement = $document->createElement('lines'); $classElement->appendChild($classLinesElement); - $functions = $report->functions(); + $functions = $item->functions(); foreach ($functions as $functionName => $function) { if ($function['executableLines'] === 0) { continue; @@ -27794,7 +29979,7 @@ final class Cobertura $methodLinesElement = $document->createElement('lines'); $methodElement->appendChild($methodLinesElement); foreach (range($function['startLine'], $function['endLine']) as $line) { - if (!isset($coverageData[$line]) || $coverageData[$line] === null) { + if (!isset($coverageData[$line])) { continue; } $methodLineElement = $document->createElement('line'); @@ -27820,7 +30005,9 @@ final class Cobertura $coverageElement->setAttribute('complexity', (string) $complexity); $buffer = $document->saveXML(); if ($target !== null) { - Filesystem::createDirectory(dirname($target)); + if (!strpos($target, '://') !== \false) { + Filesystem::createDirectory(dirname($target)); + } if (@file_put_contents($target, $buffer) === \false) { throw new WriteOperationFailedException($target); } @@ -27847,6 +30034,7 @@ use function file_put_contents; use function htmlspecialchars; use function is_string; use function round; +use function strpos; use DOMDocument; use PHPUnit\SebastianBergmann\CodeCoverage\CodeCoverage; use PHPUnit\SebastianBergmann\CodeCoverage\Driver\WriteOperationFailedException; @@ -27927,7 +30115,9 @@ final class Crap4j $root->appendChild($methodsNode); $buffer = $document->saveXML(); if ($target !== null) { - Filesystem::createDirectory(dirname($target)); + if (!strpos($target, '://') !== \false) { + Filesystem::createDirectory(dirname($target)); + } if (@file_put_contents($target, $buffer) === \false) { throw new WriteOperationFailedException($target); } @@ -28071,9 +30261,11 @@ use function date; use function dirname; use function str_ends_with; use PHPUnit\SebastianBergmann\CodeCoverage\CodeCoverage; +use PHPUnit\SebastianBergmann\CodeCoverage\FileCouldNotBeWrittenException; use PHPUnit\SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode; use PHPUnit\SebastianBergmann\CodeCoverage\Report\Thresholds; use PHPUnit\SebastianBergmann\CodeCoverage\Util\Filesystem; +use PHPUnit\SebastianBergmann\Template\Exception; use PHPUnit\SebastianBergmann\Template\Template; final class Facade { @@ -28137,7 +30329,11 @@ final class Facade { $template = new Template($this->templatePath . 'css/style.css', '{{', '}}'); $template->setVar(['success-low' => $this->colors->successLow(), 'success-medium' => $this->colors->successMedium(), 'success-high' => $this->colors->successHigh(), 'warning' => $this->colors->warning(), 'danger' => $this->colors->danger()]); - $template->renderTo($this->directory($target . '_css') . 'style.css'); + try { + $template->renderTo($this->directory($target . '_css') . 'style.css'); + } catch (Exception $e) { + throw new FileCouldNotBeWrittenException($e->getMessage(), $e->getCode(), $e); + } } private function directory(string $directory) : string { @@ -28341,8 +30537,10 @@ use function floor; use function json_encode; use function sprintf; use function str_replace; +use PHPUnit\SebastianBergmann\CodeCoverage\FileCouldNotBeWrittenException; use PHPUnit\SebastianBergmann\CodeCoverage\Node\AbstractNode; use PHPUnit\SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode; +use PHPUnit\SebastianBergmann\Template\Exception; use PHPUnit\SebastianBergmann\Template\Template; /** * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage @@ -28361,7 +30559,11 @@ final class Dashboard extends Renderer $insufficientCoverage = $this->insufficientCoverage($classes, $baseLink); $projectRisks = $this->projectRisks($classes, $baseLink); $template->setVar(['insufficient_coverage_classes' => $insufficientCoverage['class'], 'insufficient_coverage_methods' => $insufficientCoverage['method'], 'project_risks_classes' => $projectRisks['class'], 'project_risks_methods' => $projectRisks['method'], 'complexity_class' => $complexity['class'], 'complexity_method' => $complexity['method'], 'class_coverage_distribution' => $coverageDistribution['class'], 'method_coverage_distribution' => $coverageDistribution['method']]); - $template->renderTo($file); + try { + $template->renderTo($file); + } catch (Exception $e) { + throw new FileCouldNotBeWrittenException($e->getMessage(), $e->getCode(), $e); + } } protected function activeBreadcrumb(AbstractNode $node) : string { @@ -28497,8 +30699,10 @@ namespace PHPUnit\SebastianBergmann\CodeCoverage\Report\Html; use function count; use function sprintf; use function str_repeat; +use PHPUnit\SebastianBergmann\CodeCoverage\FileCouldNotBeWrittenException; use PHPUnit\SebastianBergmann\CodeCoverage\Node\AbstractNode as Node; use PHPUnit\SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode; +use PHPUnit\SebastianBergmann\Template\Exception; use PHPUnit\SebastianBergmann\Template\Template; /** * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage @@ -28518,7 +30722,11 @@ final class Directory extends Renderer $items .= $this->renderItem($item); } $template->setVar(['id' => $node->id(), 'items' => $items]); - $template->renderTo($file); + try { + $template->renderTo($file); + } catch (Exception $e) { + throw new FileCouldNotBeWrittenException($e->getMessage(), $e->getCode(), $e); + } } private function renderItem(Node $node, bool $total = \false) : string { @@ -28629,9 +30837,7 @@ use function array_keys; use function array_merge; use function array_pop; use function array_unique; -use function constant; use function count; -use function defined; use function explode; use function file_get_contents; use function htmlspecialchars; @@ -28644,8 +30850,10 @@ use function str_ends_with; use function str_replace; use function token_get_all; use function trim; +use PHPUnit\SebastianBergmann\CodeCoverage\FileCouldNotBeWrittenException; use PHPUnit\SebastianBergmann\CodeCoverage\Node\File as FileNode; use PHPUnit\SebastianBergmann\CodeCoverage\Util\Percentage; +use PHPUnit\SebastianBergmann\Template\Exception; use PHPUnit\SebastianBergmann\Template\Template; /** * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage @@ -28655,7 +30863,7 @@ final class File extends Renderer /** * @psalm-var array */ - private static array $keywordTokens = []; + private const KEYWORD_TOKENS = [T_ABSTRACT => \true, T_ARRAY => \true, T_AS => \true, T_BREAK => \true, T_CALLABLE => \true, T_CASE => \true, T_CATCH => \true, T_CLASS => \true, T_CLONE => \true, T_CONST => \true, T_CONTINUE => \true, T_DECLARE => \true, T_DEFAULT => \true, T_DO => \true, T_ECHO => \true, T_ELSE => \true, T_ELSEIF => \true, T_EMPTY => \true, T_ENDDECLARE => \true, T_ENDFOR => \true, T_ENDFOREACH => \true, T_ENDIF => \true, T_ENDSWITCH => \true, T_ENDWHILE => \true, \T_ENUM => \true, T_EVAL => \true, T_EXIT => \true, T_EXTENDS => \true, T_FINAL => \true, T_FINALLY => \true, \T_FN => \true, T_FOR => \true, T_FOREACH => \true, T_FUNCTION => \true, T_GLOBAL => \true, T_GOTO => \true, T_HALT_COMPILER => \true, T_IF => \true, T_IMPLEMENTS => \true, T_INCLUDE => \true, T_INCLUDE_ONCE => \true, T_INSTANCEOF => \true, T_INSTEADOF => \true, T_INTERFACE => \true, T_ISSET => \true, T_LIST => \true, \T_MATCH => \true, T_NAMESPACE => \true, T_NEW => \true, T_PRINT => \true, T_PRIVATE => \true, T_PROTECTED => \true, T_PUBLIC => \true, \T_READONLY => \true, T_REQUIRE => \true, T_REQUIRE_ONCE => \true, T_RETURN => \true, T_STATIC => \true, T_SWITCH => \true, T_THROW => \true, T_TRAIT => \true, T_TRY => \true, T_UNSET => \true, T_USE => \true, T_VAR => \true, T_WHILE => \true, T_YIELD => \true, T_YIELD_FROM => \true]; private static array $formattedSourceCache = []; private int $htmlSpecialCharsFlags = ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE; public function render(FileNode $node, string $file) : void @@ -28664,12 +30872,24 @@ final class File extends Renderer $template = new Template($templateName, '{{', '}}'); $this->setCommonTemplateVariables($template, $node); $template->setVar(['items' => $this->renderItems($node), 'lines' => $this->renderSourceWithLineCoverage($node), 'legend' => '

(X&n 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 z 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�*P73 z^W~S4=4`@{;p^8vi>=}GwT2?OuDC#4*LkLLs;=MOHW*&Wf9Z4DCJ5RY%*{!^*_sK( zY2?O9`#rmi!*YkhFpKIZaC|Kk&1W4v^wL>q7rgh579ZFhxMyy6ah2jv1fjlu+!>zg z=4LT+ER|j@*xoSYG@p?t+hS*-ub=PeNN;`LvGe`tOp2d`!_TdAU(_h!YJ_XPFjxB@ zHU~~@tg(>He+WyCU#VjfRTBZB8b=TgoW=N#tg=*sqDbzSUb%9Vj_b_SWKsi##;We_d}ZyEV1BzI`P1(E1;(Rc%k( zFcAKpU*Sm=NxDL{uauS*=p-aIP>UuZV3kR))FN?$?R2Z4|9$5qZ5$_MXq#2Fsqf`^ z?);o{bet>_$C*J8QURV+f(2@-Rtd=dC%@-7oJJrM8UQ(sqa>Cf#_*gn0jCQHo@`SIv_o)H%=jJkB?+1zm!W^dW=- zVV?3pv6vGUC1E^+UUfGS@HmaA3KmU<=QLJ!1lBzjkc3#LWx<9-1!@p;smR&+cyxMw zIlh@rMpwh}5FgP#XPkxvn6Gzh`~;p6SRvIRc^cB1W1ZU~J2}0aR>{ggG#O-wc{lW$#{y`uAfB0@P+8)we8XL@ ze-(ppM&=@pNJ}l4+#etd)REnDuM(vfho8G8Sa+|5)Ku*mEIW>iwjrI>?7Ds1@v04HdGok-^6z(u(U`?S4*ec2T15USy) zC!3%vs<3n}J%e_J;;&7Va*nb-WD}&H?BQW^Vq_wFd&ZUN)u?vzB>RI$&_ovcmEifl zom4NpA{FB)^eUFMQ$znyLA0A}BA!qQ|B9Gj7EM*Wdny`qUN%bSlRIQy34B}Ne>+dT zQMVZ=iZ?S_vaKF)=1KbfKG7-cE*3m*@6BG6!o|C70tw31kbA>Bu!C}5yMCh>Eh4DO zy;g#cHj``p`8sl7we^ax1+bcx8c76lxSlw^iHV}W;U%>|hmI5p8fIKy= z(=1tr0(}VD6@73FgOyG;7h2Lt%CWcRf8UY%B4ycgmY~>x>LHHF`}p1Oj(3#bT;$8# z^J0iN72r!HSfu7^n}dA&Q*iEiDP4igX$0gdTjiMq@e%$gn1HJ#ME4->e{L9u4_QQ2 zCQ!VPKrV%#+xH4Yxu%zXg|z-^z9&T*DVC*#YT5aU=I6cZAQsTOBOorK{;f6T1<1}8 zlk=E~-NgjacUC!auL=Kk+Od6fl>g80`m?JIvysTAXe|iygbU$Te~XTx>98)D;cPnW?L)&Exws%{!8!KU+TxZ0kBOEe1GQu_oN$v^ zlf(DvRi%3kn0uzfk$$6V5S2;`P+H>_8JGS6U@n&FY~%z!a!ohEw(G(1(Cv?xf^S;y zcffut#jBUXY^K2X!F=|Tn9rVpS${lwdm4~E_9tW@P0vEpf3lKm#098Aq@Af~_Ns#} z*c#(+Pr4Icb=q6=d(OI%>z?z3Q-zHOn(Ib&6YH>Q8Fw}?XeZilwdY2mj-h^}qRMVs zeel~aHEauV{Zyn`7fatUQW_3yW9N>MM>iDAe{VH9e#*P3OHOm;^>;9~QSR^(5Pc!_ z?G*I{X#uDze>=^@igNa+NxrR4PRVdQ#J}dgYjH8s>p>^@9s=~!)`Pnj?5p~n(sc2) zg{YQ6eQW8|;CM{lu`~grAF>5nfRJ)dKBo_Y=ARVaq|Hs8+)$33;ZequzXpQdKCrad zoD)qASrk;nlF$WZDbB4g46o`B(hO&L+D)hR0^kqtf9{5cq)`R*N$0xc&2%W;jtwd zy!-==mc$~1P}!R7&J30izxoxVRSEhgOPQ2LrZXA|V5hB&#Y`M!%T6$Cl%SEhq{tgw z$1#NcOg$6Z)>2PW8~2|3Uz_ZsGPgHr`%%?%Dy~kHDk%H@8rl2^<5rUZDw%0URB;Ag`_ARR~QH V=_CePBeL~MD@002iqO+qn|JkJ0C delta 321445 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ν_08&VYkrPI3EsTFAR!*%p);CX)@Z4tt85Z>5 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