You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.6 KiB
98 lines
2.6 KiB
<?php declare(strict_types=1); |
|
/* |
|
* This file is part of sebastian/lines-of-code. |
|
* |
|
* (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\LinesOfCode; |
|
|
|
/** |
|
* @psalm-immutable |
|
*/ |
|
final class LinesOfCode |
|
{ |
|
/** |
|
* @var int |
|
*/ |
|
private $linesOfCode; |
|
|
|
/** |
|
* @var int |
|
*/ |
|
private $commentLinesOfCode; |
|
|
|
/** |
|
* @var int |
|
*/ |
|
private $nonCommentLinesOfCode; |
|
|
|
/** |
|
* @var int |
|
*/ |
|
private $logicalLinesOfCode; |
|
|
|
/** |
|
* @throws IllogicalValuesException |
|
* @throws NegativeValueException |
|
*/ |
|
public function __construct(int $linesOfCode, int $commentLinesOfCode, int $nonCommentLinesOfCode, int $logicalLinesOfCode) |
|
{ |
|
if ($linesOfCode < 0) { |
|
throw new NegativeValueException('$linesOfCode must not be negative'); |
|
} |
|
|
|
if ($commentLinesOfCode < 0) { |
|
throw new NegativeValueException('$commentLinesOfCode must not be negative'); |
|
} |
|
|
|
if ($nonCommentLinesOfCode < 0) { |
|
throw new NegativeValueException('$nonCommentLinesOfCode must not be negative'); |
|
} |
|
|
|
if ($logicalLinesOfCode < 0) { |
|
throw new NegativeValueException('$logicalLinesOfCode must not be negative'); |
|
} |
|
|
|
if ($linesOfCode - $commentLinesOfCode !== $nonCommentLinesOfCode) { |
|
throw new IllogicalValuesException('$linesOfCode !== $commentLinesOfCode + $nonCommentLinesOfCode'); |
|
} |
|
|
|
$this->linesOfCode = $linesOfCode; |
|
$this->commentLinesOfCode = $commentLinesOfCode; |
|
$this->nonCommentLinesOfCode = $nonCommentLinesOfCode; |
|
$this->logicalLinesOfCode = $logicalLinesOfCode; |
|
} |
|
|
|
public function linesOfCode(): int |
|
{ |
|
return $this->linesOfCode; |
|
} |
|
|
|
public function commentLinesOfCode(): int |
|
{ |
|
return $this->commentLinesOfCode; |
|
} |
|
|
|
public function nonCommentLinesOfCode(): int |
|
{ |
|
return $this->nonCommentLinesOfCode; |
|
} |
|
|
|
public function logicalLinesOfCode(): int |
|
{ |
|
return $this->logicalLinesOfCode; |
|
} |
|
|
|
public function plus(self $other): self |
|
{ |
|
return new self( |
|
$this->linesOfCode() + $other->linesOfCode(), |
|
$this->commentLinesOfCode() + $other->commentLinesOfCode(), |
|
$this->nonCommentLinesOfCode() + $other->nonCommentLinesOfCode(), |
|
$this->logicalLinesOfCode() + $other->logicalLinesOfCode(), |
|
); |
|
} |
|
}
|
|
|