private function parseSingleRuleNode(RuleSet $ruleSet, \SimpleXMLElement $ruleNode)
{
$fileName = "";
$ruleSetFolderPath = dirname($ruleSet->getFileName());
if (isset($ruleNode['file'])) {
if (is_readable((string) $ruleNode['file'])) {
$fileName = (string) $ruleNode['file'];
} elseif (is_readable($ruleSetFolderPath . DIRECTORY_SEPARATOR . (string) $ruleNode['file'])) {
$fileName = $ruleSetFolderPath . DIRECTORY_SEPARATOR . (string) $ruleNode['file'];
}
}
$className = (string) $ruleNode['class'];
if (!is_readable($fileName)) {
$fileName = strtr($className, '\\', '/') . '.php';
}
if (!is_readable($fileName)) {
$fileName = str_replace(array('\\', '_'), '/', $className) . '.php';
}
if (class_exists($className) === false) {
$handle = @fopen($fileName, 'r', true);
if ($handle === false) {
throw new RuleClassFileNotFoundException($className);
}
fclose($handle);
include_once $fileName;
if (class_exists($className) === false) {
throw new RuleClassNotFoundException($className);
}
}
/* @var $rule \PHPMD\Rule */
$rule = new $className();
$rule->setName((string) $ruleNode['name']);
$rule->setMessage((string) $ruleNode['message']);
$rule->setExternalInfoUrl((string) $ruleNode['externalInfoUrl']);
$rule->setRuleSetName($ruleSet->getName());
if (trim($ruleNode['since']) !== '') {
$rule->setSince((string) $ruleNode['since']);
}
foreach ($ruleNode->children() as $node) {
if ($node->getName() === 'description') {
$rule->setDescription((string) $node);
} elseif ($node->getName() === 'example') {
$rule->addExample((string) $node);
} elseif ($node->getName() === 'priority') {
$rule->setPriority((int) $node);
} elseif ($node->getName() === 'properties') {
$this->parsePropertiesNode($rule, $node);
}
}
if ($rule->getPriority() <= $this->minimumPriority) {
$ruleSet->addRule($rule);
}
}