PHPMD\RuleSetFactory::parseSingleRuleNode PHP Method

parseSingleRuleNode() private method

This method will create a single rule instance and add it to the given {@link \PHPMD\RuleSet} object.
private parseSingleRuleNode ( phpmd\RuleSet $ruleSet, SimpleXMLElement $ruleNode ) : void
$ruleSet phpmd\RuleSet
$ruleNode SimpleXMLElement
return void
    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);
        }
    }