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);
}