Viewing file: Directory.php (9.85 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?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; } }
|