PHPMD\Renderer\XMLRenderer::renderReport PHP Method

renderReport() public method

This method will be called when the engine has finished the source analysis phase.
public renderReport ( PHPMD\Report $report ) : void
$report PHPMD\Report
return void
    public function renderReport(Report $report)
    {
        $writer = $this->getWriter();
        $writer->write('<pmd version="' . PHPMD::VERSION . '" ');
        $writer->write('timestamp="' . date('c') . '">');
        $writer->write(PHP_EOL);
        foreach ($report->getRuleViolations() as $violation) {
            $fileName = $violation->getFileName();
            if ($this->fileName !== $fileName) {
                // Not first file
                if ($this->fileName !== null) {
                    $writer->write('  </file>' . PHP_EOL);
                }
                // Store current file name
                $this->fileName = $fileName;
                $writer->write('  <file name="' . $fileName . '">' . PHP_EOL);
            }
            $rule = $violation->getRule();
            $writer->write('    <violation');
            $writer->write(' beginline="' . $violation->getBeginLine() . '"');
            $writer->write(' endline="' . $violation->getEndLine() . '"');
            $writer->write(' rule="' . $rule->getName() . '"');
            $writer->write(' ruleset="' . $rule->getRuleSetName() . '"');
            $this->maybeAdd('package', $violation->getNamespaceName());
            $this->maybeAdd('externalInfoUrl', $rule->getExternalInfoUrl());
            $this->maybeAdd('function', $violation->getFunctionName());
            $this->maybeAdd('class', $violation->getClassName());
            $this->maybeAdd('method', $violation->getMethodName());
            //$this->_maybeAdd('variable', $violation->getVariableName());
            $writer->write(' priority="' . $rule->getPriority() . '"');
            $writer->write('>' . PHP_EOL);
            $writer->write('      ' . $violation->getDescription() . PHP_EOL);
            $writer->write('    </violation>' . PHP_EOL);
        }
        // Last file and at least one violation
        if ($this->fileName !== null) {
            $writer->write('  </file>' . PHP_EOL);
        }
        foreach ($report->getErrors() as $error) {
            $writer->write('  <error filename="');
            $writer->write($error->getFile());
            $writer->write('" msg="');
            $writer->write(htmlspecialchars($error->getMessage()));
            $writer->write('" />' . PHP_EOL);
        }
        $writer->write('</pmd>' . PHP_EOL);
    }

Usage Example

Example #1
0
 /**
  * testRendererAddsProcessingErrorsToXmlReport
  *
  * @return void
  * @since 1.2.1
  */
 public function testRendererAddsProcessingErrorsToXmlReport()
 {
     // Create a writer instance.
     $writer = new WriterStub();
     $processingErrors = array(new ProcessingError('Failed for file "/tmp/foo.php".'), new ProcessingError('Failed for file "/tmp/bar.php".'), new ProcessingError('Failed for file "/tmp/baz.php".'));
     $report = $this->getReportMock(0);
     $report->expects($this->once())->method('getRuleViolations')->will($this->returnValue(new \ArrayIterator(array())));
     $report->expects($this->once())->method('getErrors')->will($this->returnValue(new \ArrayIterator($processingErrors)));
     $renderer = new XMLRenderer();
     $renderer->setWriter($writer);
     $renderer->start();
     $renderer->renderReport($report);
     $renderer->end();
     $this->assertXmlEquals($writer->getData(), 'renderer/xml_renderer_processing_errors.xml');
 }