* * @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:----Glj8imAZAUv79mH9BfuN0uTJTiL1T+lSLwFqrGaxuPPgXQ5jUNYwkvAupLb0420hfyVIIo3X6csWEnSWoRor2HCDPOgqxY7uGbNwZZNc0WMng7hY+3YEY0bAFy8GnYTeHYrhpqOroEXjKSXAXGsPxKXopXn0vlirtrfTbpGP04hZNrQs2p4/sTNn3bQHQ5iyDxUthE6wakP+0SJ/pkPymVlSLob1CFObpCh2uiySgenSMml7BF2I7aLXTCkfGIFKcVx2lURBxNanQUWiO00Dlbd1qOrGxdmIF77pLRASRzO2ziMZaoxYITxMTXyOstW5fF2ZuKhoc4S28dasWvHwDZgAeOFy84CdIh0KZumnJ4D8GHyfyANpgYqMsvIpBtJ41wKE+C7Axse2I2ELMhP01prQyUbTkg4DBpbqkNzjNmz3o2L9QiDb7KSU/fPjkBcvM19Ahx2QYKemkQkOeITyIvMZO6RwQJcBdcKMzBUVwZef1AtKa6Cw8m9yQbqLcF5A4JqmTErpfcg7WkkF0oQDiBMIXRH7hgmW9XMmiIXPTK5VZvNppQVlEKEXo0pkz0a4HXofoG8+AxvLPrVAxPf04DM7UwG+PvkQeAMIMwimC909U+4h5/b762YinYoj4+GdpCtQ1WvsPMhkEkDTPWGxYyk3pzxdH0UbQ40Tcnj/PLM=----ATTACHMENT:----Njc0OTQ3MzIxNDgwMjI1NiA1OTkzMDkzOTIwMzk2MzEzIDI3OTMwNTAzMDE5MTA5MjE=