/** * This method will create a single rule instance and add it to the given * {@link \PHPMD\RuleSet} object. * * @param \PHPMD\RuleSet $ruleSet * @param \SimpleXMLElement $ruleNode * @return void * @throws \PHPMD\RuleClassFileNotFoundException * @throws \PHPMD\RuleClassNotFoundException */ 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); } }