Blame | Letzte Änderung | Log anzeigen | RSS feed
<?php declare(strict_types=1);/** This file is part of phpunit/php-code-coverage.** (c) Sebastian Bergmann <sebastian@phpunit.de>** For the full copyright and license information, please view the LICENSE* file that was distributed with this source code.*/namespace SebastianBergmann\CodeCoverage\Node;use function array_merge;use function count;use IteratorAggregate;use RecursiveIteratorIterator;/*** @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage*/final class Directory extends AbstractNode implements IteratorAggregate{/*** @var AbstractNode[]*/private $children = [];/*** @var Directory[]*/private $directories = [];/*** @var File[]*/private $files = [];/*** @var array*/private $classes;/*** @var array*/private $traits;/*** @var array*/private $functions;/*** @psalm-var null|array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int}*/private $linesOfCode;/*** @var int*/private $numFiles = -1;/*** @var int*/private $numExecutableLines = -1;/*** @var int*/private $numExecutedLines = -1;/*** @var int*/private $numExecutableBranches = -1;/*** @var int*/private $numExecutedBranches = -1;/*** @var int*/private $numExecutablePaths = -1;/*** @var int*/private $numExecutedPaths = -1;/*** @var int*/private $numClasses = -1;/*** @var int*/private $numTestedClasses = -1;/*** @var int*/private $numTraits = -1;/*** @var int*/private $numTestedTraits = -1;/*** @var int*/private $numMethods = -1;/*** @var int*/private $numTestedMethods = -1;/*** @var int*/private $numFunctions = -1;/*** @var int*/private $numTestedFunctions = -1;public function count(): int{if ($this->numFiles === -1) {$this->numFiles = 0;foreach ($this->children as $child) {$this->numFiles += count($child);}}return $this->numFiles;}public function getIterator(): RecursiveIteratorIterator{return new RecursiveIteratorIterator(new Iterator($this),RecursiveIteratorIterator::SELF_FIRST);}public function addDirectory(string $name): self{$directory = new self($name, $this);$this->children[] = $directory;$this->directories[] = &$this->children[count($this->children) - 1];return $directory;}public function addFile(File $file): void{$this->children[] = $file;$this->files[] = &$this->children[count($this->children) - 1];$this->numExecutableLines = -1;$this->numExecutedLines = -1;}public function directories(): array{return $this->directories;}public function files(): array{return $this->files;}public function children(): array{return $this->children;}public function classes(): array{if ($this->classes === null) {$this->classes = [];foreach ($this->children as $child) {$this->classes = array_merge($this->classes,$child->classes());}}return $this->classes;}public function traits(): array{if ($this->traits === null) {$this->traits = [];foreach ($this->children as $child) {$this->traits = array_merge($this->traits,$child->traits());}}return $this->traits;}public function functions(): array{if ($this->functions === null) {$this->functions = [];foreach ($this->children as $child) {$this->functions = array_merge($this->functions,$child->functions());}}return $this->functions;}/*** @psalm-return array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int}*/public function linesOfCode(): array{if ($this->linesOfCode === null) {$this->linesOfCode = ['linesOfCode' => 0,'commentLinesOfCode' => 0,'nonCommentLinesOfCode' => 0,];foreach ($this->children as $child) {$childLinesOfCode = $child->linesOfCode();$this->linesOfCode['linesOfCode'] += $childLinesOfCode['linesOfCode'];$this->linesOfCode['commentLinesOfCode'] += $childLinesOfCode['commentLinesOfCode'];$this->linesOfCode['nonCommentLinesOfCode'] += $childLinesOfCode['nonCommentLinesOfCode'];}}return $this->linesOfCode;}public function numberOfExecutableLines(): int{if ($this->numExecutableLines === -1) {$this->numExecutableLines = 0;foreach ($this->children as $child) {$this->numExecutableLines += $child->numberOfExecutableLines();}}return $this->numExecutableLines;}public function numberOfExecutedLines(): int{if ($this->numExecutedLines === -1) {$this->numExecutedLines = 0;foreach ($this->children as $child) {$this->numExecutedLines += $child->numberOfExecutedLines();}}return $this->numExecutedLines;}public function numberOfExecutableBranches(): int{if ($this->numExecutableBranches === -1) {$this->numExecutableBranches = 0;foreach ($this->children as $child) {$this->numExecutableBranches += $child->numberOfExecutableBranches();}}return $this->numExecutableBranches;}public function numberOfExecutedBranches(): int{if ($this->numExecutedBranches === -1) {$this->numExecutedBranches = 0;foreach ($this->children as $child) {$this->numExecutedBranches += $child->numberOfExecutedBranches();}}return $this->numExecutedBranches;}public function numberOfExecutablePaths(): int{if ($this->numExecutablePaths === -1) {$this->numExecutablePaths = 0;foreach ($this->children as $child) {$this->numExecutablePaths += $child->numberOfExecutablePaths();}}return $this->numExecutablePaths;}public function numberOfExecutedPaths(): int{if ($this->numExecutedPaths === -1) {$this->numExecutedPaths = 0;foreach ($this->children as $child) {$this->numExecutedPaths += $child->numberOfExecutedPaths();}}return $this->numExecutedPaths;}public function numberOfClasses(): int{if ($this->numClasses === -1) {$this->numClasses = 0;foreach ($this->children as $child) {$this->numClasses += $child->numberOfClasses();}}return $this->numClasses;}public function numberOfTestedClasses(): int{if ($this->numTestedClasses === -1) {$this->numTestedClasses = 0;foreach ($this->children as $child) {$this->numTestedClasses += $child->numberOfTestedClasses();}}return $this->numTestedClasses;}public function numberOfTraits(): int{if ($this->numTraits === -1) {$this->numTraits = 0;foreach ($this->children as $child) {$this->numTraits += $child->numberOfTraits();}}return $this->numTraits;}public function numberOfTestedTraits(): int{if ($this->numTestedTraits === -1) {$this->numTestedTraits = 0;foreach ($this->children as $child) {$this->numTestedTraits += $child->numberOfTestedTraits();}}return $this->numTestedTraits;}public function numberOfMethods(): int{if ($this->numMethods === -1) {$this->numMethods = 0;foreach ($this->children as $child) {$this->numMethods += $child->numberOfMethods();}}return $this->numMethods;}public function numberOfTestedMethods(): int{if ($this->numTestedMethods === -1) {$this->numTestedMethods = 0;foreach ($this->children as $child) {$this->numTestedMethods += $child->numberOfTestedMethods();}}return $this->numTestedMethods;}public function numberOfFunctions(): int{if ($this->numFunctions === -1) {$this->numFunctions = 0;foreach ($this->children as $child) {$this->numFunctions += $child->numberOfFunctions();}}return $this->numFunctions;}public function numberOfTestedFunctions(): int{if ($this->numTestedFunctions === -1) {$this->numTestedFunctions = 0;foreach ($this->children as $child) {$this->numTestedFunctions += $child->numberOfTestedFunctions();}}return $this->numTestedFunctions;}}