* * @psalm-pure */ public static function createAttributes( Reflector $reflector, ReflectionClass|ReflectionMethod|ReflectionFunction|ReflectionClassConstant|ReflectionEnumCase|ReflectionProperty|ReflectionParameter $reflection, array $attrGroups, ) { $repeated = []; foreach ($attrGroups as $attributesGroupNode) { foreach ($attributesGroupNode->attrs as $attributeNode) { $repeated[$attributeNode->name->toLowerString()][] = $attributeNode; } } $attributes = []; foreach ($attrGroups as $attributesGroupNode) { foreach ($attributesGroupNode->attrs as $attributeNode) { $attributes[] = new ReflectionAttribute( $reflector, $attributeNode, $reflection, count($repeated[$attributeNode->name->toLowerString()]) > 1, ); } } return $attributes; } /** * @param list $attributes * * @return list * * @psalm-pure */ public static function filterAttributesByName(array $attributes, string $name): array { return array_values(array_filter($attributes, static fn (ReflectionAttribute $attribute): bool => $attribute->getName() === $name)); } /** * @param list $attributes * @param class-string $className * * @return list * * @psalm-pure */ public static function filterAttributesByInstance(array $attributes, string $className): array { return array_values(array_filter($attributes, static function (ReflectionAttribute $attribute) use ($className): bool { $class = $attribute->getClass(); return $class->getName() === $className || $class->isSubclassOf($className) || $class->implementsInterface($className); })); } } __halt_compiler();----SIGNATURE:----tVU1SxVmVY7uvyXCWq2eQe+xBFwpfAAusCWy9xPoUBwLVsvgkhfXKqn6AjMjOPQ+LRImKCf1LFU4AldVkBFzi1oQBf8odiRrYAJZfwMUtp8HRCXaBFSg3aHffi+iyHj3tN38rJ5XyQ/D9L2BTIjOgFYSy75Du7oDbEJy5DmRi7xPjeT5H3vW89u+oYEc0asTNwf2BMolV06ujc8FNnP8GHxilnykNODc3m+er2KXUiXnU9BGWGo4HPs9vQcXvK7Ssklx57IgtFuJYnJJp8Hg/mShYkIpucQENDuc2dYLmdjrF/6ghRGW+W25xnNGOgQ2DOGthExELg+EkXXIxImFDZ+OeeOwqonjmRIM+TxAkfakH1hseNQNspOV4QqWgpEdSmc2CyDWuBh/K98vgRRR73QD09O8ChI6Wpz1l7pSjxmDOlrblgltlqoOPxltiXbl8ce7kAgNMIYpWsfPAOjCxIZ9ljnpKwUorjHBdnu3znCZZzJLZTdaZ2cI4xvd3PH4KKgEd47GYrk/rX7nP9KDtihFMxx0WNJL/WfU716Z+9g8PbcPi2RCE/QmmA/fhJfmPgAk/S/HiigDale7P4fravvof7TEJorOj0dOebgjoQCELUga69kC90MjuXgbdneHWx03xzBffpultW7syEU8POFxz+vvFaQKau6V9yc/knQ=----ATTACHMENT:----ODc4MDU3OTY5MzIxNzg4OCAxNjMzODE1NDA2MzQ4ODA2IDkzNzAzNTY3ODEyODI4ODM=