public function enterNode(Node $node)
{
$checkedName = '';
$usagePatternName = null;
if ($node instanceof Node\Stmt\ClassLike) {
$checkedName = $node->name;
$usagePatternName = 'as a class, interface or trait name';
} elseif ($this->functionAnalyzer->isFunctionCallByStaticName($node, 'class_alias')) {
/** @var Node\Expr\FuncCall $node */
$secondArgument = isset($node->args[1]) ? $node->args[1] : null;
if (!$secondArgument || !$secondArgument->value instanceof Node\Scalar\String_) {
return;
}
$checkedName = $secondArgument->value->value;
$usagePatternName = 'as a class alias';
} elseif ($node instanceof Node\Stmt\UseUse) {
$checkedName = $node->alias;
$usagePatternName = 'as a use statement alias';
}
$checkedName = strtolower($checkedName);
if ($checkedName && isset($this->reservedNamesToMessagesMap[$checkedName])) {
$this->addContextMessage(sprintf($this->reservedNamesToMessagesMap[$checkedName], $checkedName, $usagePatternName), $node);
}
}