*/ private array $arguments = []; /** * @internal */ public function __construct( private Reflector $reflector, Node\Attribute $node, private ReflectionClass|ReflectionMethod|ReflectionFunction|ReflectionClassConstant|ReflectionEnumCase|ReflectionProperty|ReflectionParameter $owner, private bool $isRepeated, ) { $name = $node->name->toString(); assert($name !== ''); $this->name = $name; foreach ($node->args as $argNo => $arg) { $this->arguments[$arg->name?->toString() ?? $argNo] = $arg->value; } } /** * @internal */ public function withOwner(ReflectionClass|ReflectionMethod|ReflectionFunction|ReflectionClassConstant|ReflectionEnumCase|ReflectionProperty|ReflectionParameter $owner): self { $clone = clone $this; $clone->owner = $owner; return $clone; } /** * @return non-empty-string */ public function getName(): string { return $this->name; } public function getClass(): ReflectionClass { return $this->reflector->reflectClass($this->getName()); } /** * @return array */ public function getArgumentsExpressions(): array { return $this->arguments; } /** * @return array */ public function getArguments(): array { $compiler = new CompileNodeToValue(); $context = new CompilerContext($this->reflector, $this->owner); return array_map(static fn (Node\Expr $value): mixed => $compiler->__invoke($value, $context)->value, $this->arguments); } /** * @return int-mask-of */ public function getTarget(): int { return match (true) { $this->owner instanceof ReflectionClass => Attribute::TARGET_CLASS, $this->owner instanceof ReflectionFunction => Attribute::TARGET_FUNCTION, $this->owner instanceof ReflectionMethod => Attribute::TARGET_METHOD, $this->owner instanceof ReflectionProperty => Attribute::TARGET_PROPERTY, $this->owner instanceof ReflectionClassConstant => Attribute::TARGET_CLASS_CONSTANT, $this->owner instanceof ReflectionEnumCase => Attribute::TARGET_CLASS_CONSTANT, // @infection-ignore-all InstanceOf_: There's no other option $this->owner instanceof ReflectionParameter => Attribute::TARGET_PARAMETER, }; } public function isRepeated(): bool { return $this->isRepeated; } /** * @return non-empty-string */ public function __toString(): string { return ReflectionAttributeStringCast::toString($this); } } __halt_compiler();----SIGNATURE:----Tfz1FH49DZM2Ujxep9ajZTdGBSHK6JR9m2AXW6VkbXyS227siIRKkqRyp5+a4joVKrj1JbarXLqPTpB8E81l+LEA/HdZv8D3kqCgfbu0m+D0lnvvlqbVAOQ6pjt+7UPQiJEP8MQrIML4AxOIISME0dXobAcRYojYF8PIGAJTbZfx0Iuvk88R3ysTO3l1dBVZAngBF3HqcOBMwin9Z0x2Zj/SI6oCoqTNKFNY5I1VnZpMMMJBBMudFZ4fzC4QnilUjzzQkJB1CweAkQXkB8VhMCULb1IRo3TQNC5weaSSTekh6xUKgkMh6aMlPvN5ttO6K6RZHI27qQAxwrHZ18fDVdYNSCxl7l6pnC95A6KOCUTzfhcuWJtba3ffHcWdRTREeMngS6jlXBZG8RsQY7guh+wRq+YrqMgpF83IrwvQZbLar8OGNz2f8mDlzR8WobJ/G6hsWzHx5FHAjfGsIfdFRwpzoIwGIc5dZ/1hCsO4QlJKoWStW33DOP4QktKBF5jY4PsqnifXOwzd7GYqKHSUYlv14+6tPIKA6K9GtK1FfpHEDZEFduYygv5Z9ACc8YDmtL7owy6Esj4tyIkpT3Pjb8ls/1JObMx27guYL8P3DeeMvQ2VogGPTeQt2ckZS7bitE+NZS23dMbjAMlDDvGqrPsQMtVHxBOg2WFQKXTB+DI=----ATTACHMENT:----OTAwNTQyNjI5NDE2OTE3MiAxMTUzMzQ0NzgyODU5MTI1IDEzMjE4MjIyNjE4OTY0ODA=