From 75f911ea2c05f8ccfeb066e5d913c9842fb30833 Mon Sep 17 00:00:00 2001 From: Markus Staab Date: Wed, 5 Nov 2025 12:44:20 +0100 Subject: [PATCH] Faster coverage-xml report --- src/Report/Xml/Coverage.php | 42 +++++++++++++------------------------ src/Report/Xml/Facade.php | 7 +------ 2 files changed, 15 insertions(+), 34 deletions(-) diff --git a/src/Report/Xml/Coverage.php b/src/Report/Xml/Coverage.php index afb70a069..812672081 100644 --- a/src/Report/Xml/Coverage.php +++ b/src/Report/Xml/Coverage.php @@ -10,7 +10,6 @@ namespace SebastianBergmann\CodeCoverage\Report\Xml; use DOMElement; -use SebastianBergmann\CodeCoverage\ReportAlreadyFinalizedException; use XMLWriter; /** @@ -18,48 +17,35 @@ */ final class Coverage { - private readonly XMLWriter $writer; private readonly DOMElement $contextNode; - private bool $finalized = false; + private readonly string $line; public function __construct(DOMElement $context, string $line) { $this->contextNode = $context; - - $this->writer = new XMLWriter; - $this->writer->openMemory(); - $this->writer->startElementNs(null, $context->nodeName, 'https://schema.phpunit.de/coverage/1.0'); - $this->writer->writeAttribute('nr', $line); + $this->line = $line; } - /** - * @throws ReportAlreadyFinalizedException - */ - public function addTest(string $test): void + public function finalize(array $tests): void { - if ($this->finalized) { - // @codeCoverageIgnoreStart - throw new ReportAlreadyFinalizedException; - // @codeCoverageIgnoreEnd + $writer = new XMLWriter; + $writer->openMemory(); + $writer->startElementNs(null, $this->contextNode->nodeName, 'https://schema.phpunit.de/coverage/1.0'); + $writer->writeAttribute('nr', $this->line); + + foreach ($tests as $test) { + $writer->startElement('covered'); + $writer->writeAttribute('by', $test); + $writer->endElement(); } - - $this->writer->startElement('covered'); - $this->writer->writeAttribute('by', $test); - $this->writer->endElement(); - } - - public function finalize(): void - { - $this->writer->endElement(); + $writer->endElement(); $fragment = $this->contextNode->ownerDocument->createDocumentFragment(); - $fragment->appendXML($this->writer->outputMemory()); + $fragment->appendXML($writer->outputMemory()); $this->contextNode->parentNode->replaceChild( $fragment, $this->contextNode, ); - - $this->finalized = true; } } diff --git a/src/Report/Xml/Facade.php b/src/Report/Xml/Facade.php index ba008f2ff..30c35e269 100644 --- a/src/Report/Xml/Facade.php +++ b/src/Report/Xml/Facade.php @@ -165,12 +165,7 @@ private function processFile(FileNode $file, Directory $context): void } $coverage = $fileReport->lineCoverage((string) $line); - - foreach ($tests as $test) { - $coverage->addTest($test); - } - - $coverage->finalize(); + $coverage->finalize($tests); } $fileReport->source()->setSourceCode(