36 ReflectionProvider $reflectionProvider,
37 \PHPStan\Rules\Generics\GenericAncestorsCheck $genericAncestorsCheck
43 $forbidden_classes = [];
48 $forbidden_classes = array_merge(
54 $this->forbidden_classes = array_unique($forbidden_classes);
59 if (isset($this->ancestor_cache[$class_name])) {
60 return $this->ancestor_cache[$class_name];
63 $ancestors[] = $class_name;
66 $reflection = $this->reflectionProvider->getClass($class_name);
67 $ancestors = array_merge($ancestors, $reflection->getParentClassesNames());
68 }
catch (\PHPStan\Broker\ClassNotFoundException
$e) {
73 return array_unique($ancestors);
78 $this->ancestor_cache[$class_name] = $ancestor_classes;
83 return CallLike::class;
104 if ($node->class instanceof Node\Name) {
105 $class_name = $node->class->toString();
111 $array_intersect = array_intersect($class_names_to_test, $this->forbidden_classes);
112 if ($array_intersect !== []) {
121 if (!$node->name instanceof Node\
Identifier) {
124 $method_name = $node->name->name;
125 $called_classes = $scope->getType($node->var)->getObjectClassNames();
128 return array_intersect($called_classes, $forbidden_classes) !== [];
135 && ($node instanceof Node\Expr\StaticCall || $node instanceof Node\Expr\New_)
138 $class_name = $node->class->toString();
140 RuleErrorBuilder::message(
"Usage of $class_name is forbidden.")
150 if ($node instanceof Node\Expr\MethodCall
154 $method_name = $node->name->name;
155 $class_name = $scope->getType($node->var)->getObjectClassNames()[0];
157 RuleErrorBuilder::message(
"Usage of $class_name::$method_name is forbidden.")
getClassAncestors(string $class_name)
cacheAncestors($class_name, array $ancestor_classes)
__construct(ReflectionProvider $reflectionProvider, \PHPStan\Rules\Generics\GenericAncestorsCheck $genericAncestorsCheck)
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
PHPStan Rules Generics GenericAncestorsCheck $genericAncestorsCheck
instantiatesForbiddenClasses(Node $node)
usesMethodsOfForbiddenClass(Node $node, Scope $scope)
processNode(Node $node, Scope $scope)
getHumanReadableRuleName()
getRelevantILIASVersion()
ReflectionProvider $reflectionProvider