diff --git a/src/Report/Xml/Facade.php b/src/Report/Xml/Facade.php index 85d5cd5cf..126b8c53d 100644 --- a/src/Report/Xml/Facade.php +++ b/src/Report/Xml/Facade.php @@ -182,20 +182,25 @@ private function processFile(FileNode $file, Directory $context): void private function processUnit(array $unit, Report $report): void { if (isset($unit['className'])) { - $unitObject = $report->classObject($unit['className']); + $unitObject = $report->classObject( + $unit['className'], + $unit['namespace'], + $unit['startLine'], + $unit['executableLines'], + $unit['executedLines'], + (float) $unit['crap'], + ); } else { - $unitObject = $report->traitObject($unit['traitName']); + $unitObject = $report->traitObject( + $unit['traitName'], + $unit['namespace'], + $unit['startLine'], + $unit['executableLines'], + $unit['executedLines'], + (float) $unit['crap'], + ); } - $unitObject->setLines( - $unit['startLine'], - $unit['executableLines'], - $unit['executedLines'], - ); - - $unitObject->setCrap((float) $unit['crap']); - $unitObject->setNamespace($unit['namespace']); - foreach ($unit['methods'] as $method) { $methodObject = $unitObject->addMethod($method['methodName']); $methodObject->setSignature($method['signature']); diff --git a/src/Report/Xml/Report.php b/src/Report/Xml/Report.php index 5a9c622f0..601e466c3 100644 --- a/src/Report/Xml/Report.php +++ b/src/Report/Xml/Report.php @@ -59,14 +59,44 @@ public function functionObject(string $name): Method return new Method($node, $name); } - public function classObject(string $name): Unit - { - return $this->unitObject('class', $name); + public function classObject( + string $name, + string $namespace, + int $start, + int $executable, + int $executed, + float $crap + ): Unit { + $node = $this->contextNode()->appendChild( + $this->dom()->createElementNS( + Facade::XML_NAMESPACE, + 'class', + ), + ); + + assert($node instanceof DOMElement); + + return new Unit($node, $name, $namespace, $start, $executable, $executed, $crap); } - public function traitObject(string $name): Unit - { - return $this->unitObject('trait', $name); + public function traitObject( + string $name, + string $namespace, + int $start, + int $executable, + int $executed, + float $crap + ): Unit { + $node = $this->contextNode()->appendChild( + $this->dom()->createElementNS( + Facade::XML_NAMESPACE, + 'trait', + ), + ); + + assert($node instanceof DOMElement); + + return new Unit($node, $name, $namespace, $start, $executable, $executed, $crap); } public function source(): Source @@ -89,18 +119,4 @@ public function source(): Source return new Source($source); } - - private function unitObject(string $tagName, string $name): Unit - { - $node = $this->contextNode()->appendChild( - $this->dom()->createElementNS( - Facade::XML_NAMESPACE, - $tagName, - ), - ); - - assert($node instanceof DOMElement); - - return new Unit($node, $name); - } } diff --git a/src/Report/Xml/Unit.php b/src/Report/Xml/Unit.php index 84e189fbf..35175f30b 100644 --- a/src/Report/Xml/Unit.php +++ b/src/Report/Xml/Unit.php @@ -19,41 +19,29 @@ { private DOMElement $contextNode; - public function __construct(DOMElement $context, string $name) - { + public function __construct( + DOMElement $context, + string $name, + string $namespace, + int $start, + int $executable, + int $executed, + float $crap + ) { $this->contextNode = $context; - $this->setName($name); - } - - public function setLines(int $start, int $executable, int $executed): void - { + $this->contextNode->setAttribute('name', $name); $this->contextNode->setAttribute('start', (string) $start); $this->contextNode->setAttribute('executable', (string) $executable); $this->contextNode->setAttribute('executed', (string) $executed); - } - - public function setCrap(float $crap): void - { $this->contextNode->setAttribute('crap', (string) $crap); - } - - public function setNamespace(string $namespace): void - { - $node = $this->contextNode->getElementsByTagNameNS( - Facade::XML_NAMESPACE, - 'namespace', - )->item(0); - - if ($node === null) { - $node = $this->contextNode->appendChild( - $this->contextNode->ownerDocument->createElementNS( - Facade::XML_NAMESPACE, - 'namespace', - ), - ); - } + $node = $this->contextNode->appendChild( + $this->contextNode->ownerDocument->createElementNS( + Facade::XML_NAMESPACE, + 'namespace', + ), + ); assert($node instanceof DOMElement); $node->setAttribute('name', $namespace); @@ -72,9 +60,4 @@ public function addMethod(string $name): Method return new Method($node, $name); } - - private function setName(string $name): void - { - $this->contextNode->setAttribute('name', $name); - } }