From d04aa09a9734d3e14fa843004673a957862fcc66 Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Thu, 20 Nov 2025 10:46:19 +0100 Subject: [PATCH 1/2] Don't query the line-coverage element over and over --- src/Report/Xml/File.php | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/Report/Xml/File.php b/src/Report/Xml/File.php index 0d1e73955..329d0ef77 100644 --- a/src/Report/Xml/File.php +++ b/src/Report/Xml/File.php @@ -12,6 +12,7 @@ use function assert; use DOMDocument; use DOMElement; +use DOMNode; /** * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage @@ -20,6 +21,7 @@ class File { private readonly DOMDocument $dom; private readonly DOMElement $contextNode; + private ?DOMNode $lineCoverage = null; public function __construct(DOMElement $context) { @@ -47,21 +49,17 @@ public function totals(): Totals public function lineCoverage(string $line): Coverage { - $coverage = $this->contextNode->getElementsByTagNameNS( - Facade::XML_NAMESPACE, - 'coverage', - )->item(0); - - if ($coverage === null) { - $coverage = $this->contextNode->appendChild( + if ($this->lineCoverage === null) { + $this->lineCoverage = $this->contextNode->appendChild( $this->dom->createElementNS( Facade::XML_NAMESPACE, 'coverage', ), ); } + assert($this->lineCoverage instanceof DOMElement); - $lineNode = $coverage->appendChild( + $lineNode = $this->lineCoverage->appendChild( $this->dom->createElementNS( Facade::XML_NAMESPACE, 'line', From b2770d95bc174031df79f3f4a2bf6536b23fda92 Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Thu, 20 Nov 2025 10:48:14 +0100 Subject: [PATCH 2/2] totals-element cannot already exist at this point in time --- src/Report/Xml/File.php | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/Report/Xml/File.php b/src/Report/Xml/File.php index 329d0ef77..b7c90efa5 100644 --- a/src/Report/Xml/File.php +++ b/src/Report/Xml/File.php @@ -31,16 +31,12 @@ public function __construct(DOMElement $context) public function totals(): Totals { - $totalsContainer = $this->contextNode->firstChild; - - if ($totalsContainer === null) { - $totalsContainer = $this->contextNode->appendChild( - $this->dom->createElementNS( - Facade::XML_NAMESPACE, - 'totals', - ), - ); - } + $totalsContainer = $this->contextNode->appendChild( + $this->dom->createElementNS( + Facade::XML_NAMESPACE, + 'totals', + ), + ); assert($totalsContainer instanceof DOMElement);