146 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			146 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								declare(strict_types=1);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Doctrine\Common\Lexer;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use ArrayAccess;
							 | 
						||
| 
								 | 
							
								use Doctrine\Deprecations\Deprecation;
							 | 
						||
| 
								 | 
							
								use ReturnTypeWillChange;
							 | 
						||
| 
								 | 
							
								use UnitEnum;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								use function in_array;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @template T of UnitEnum|string|int
							 | 
						||
| 
								 | 
							
								 * @template V of string|int
							 | 
						||
| 
								 | 
							
								 * @implements ArrayAccess<string,mixed>
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								final class Token implements ArrayAccess
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * The string value of the token in the input string
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @readonly
							 | 
						||
| 
								 | 
							
								     * @var V
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public $value;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * The type of the token (identifier, numeric, string, input parameter, none)
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @readonly
							 | 
						||
| 
								 | 
							
								     * @var T|null
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public $type;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * The position of the token in the input string
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @readonly
							 | 
						||
| 
								 | 
							
								     * @var int
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public $position;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @param V      $value
							 | 
						||
| 
								 | 
							
								     * @param T|null $type
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function __construct($value, $type, int $position)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $this->value    = $value;
							 | 
						||
| 
								 | 
							
								        $this->type     = $type;
							 | 
						||
| 
								 | 
							
								        $this->position = $position;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /** @param T ...$types */
							 | 
						||
| 
								 | 
							
								    public function isA(...$types): bool
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        return in_array($this->type, $types, true);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @deprecated Use the value, type or position property instead
							 | 
						||
| 
								 | 
							
								     * {@inheritDoc}
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function offsetExists($offset): bool
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        Deprecation::trigger(
							 | 
						||
| 
								 | 
							
								            'doctrine/lexer',
							 | 
						||
| 
								 | 
							
								            'https://github.com/doctrine/lexer/pull/79',
							 | 
						||
| 
								 | 
							
								            'Accessing %s properties via ArrayAccess is deprecated, use the value, type or position property instead',
							 | 
						||
| 
								 | 
							
								            self::class
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return in_array($offset, ['value', 'type', 'position'], true);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @deprecated Use the value, type or position property instead
							 | 
						||
| 
								 | 
							
								     * {@inheritDoc}
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @param O $offset
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @return mixed
							 | 
						||
| 
								 | 
							
								     * @psalm-return (
							 | 
						||
| 
								 | 
							
								     *     O is 'value'
							 | 
						||
| 
								 | 
							
								     *     ? V
							 | 
						||
| 
								 | 
							
								     *     : (
							 | 
						||
| 
								 | 
							
								     *         O is 'type'
							 | 
						||
| 
								 | 
							
								     *         ? T|null
							 | 
						||
| 
								 | 
							
								     *         : (
							 | 
						||
| 
								 | 
							
								     *             O is 'position'
							 | 
						||
| 
								 | 
							
								     *             ? int
							 | 
						||
| 
								 | 
							
								     *             : mixed
							 | 
						||
| 
								 | 
							
								     *         )
							 | 
						||
| 
								 | 
							
								     *     )
							 | 
						||
| 
								 | 
							
								     * )
							 | 
						||
| 
								 | 
							
								     *
							 | 
						||
| 
								 | 
							
								     * @template O of array-key
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    #[ReturnTypeWillChange]
							 | 
						||
| 
								 | 
							
								    public function offsetGet($offset)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        Deprecation::trigger(
							 | 
						||
| 
								 | 
							
								            'doctrine/lexer',
							 | 
						||
| 
								 | 
							
								            'https://github.com/doctrine/lexer/pull/79',
							 | 
						||
| 
								 | 
							
								            'Accessing %s properties via ArrayAccess is deprecated, use the value, type or position property instead',
							 | 
						||
| 
								 | 
							
								            self::class
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return $this->$offset;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @deprecated no replacement planned
							 | 
						||
| 
								 | 
							
								     * {@inheritDoc}
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function offsetSet($offset, $value): void
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        Deprecation::trigger(
							 | 
						||
| 
								 | 
							
								            'doctrine/lexer',
							 | 
						||
| 
								 | 
							
								            'https://github.com/doctrine/lexer/pull/79',
							 | 
						||
| 
								 | 
							
								            'Setting %s properties via ArrayAccess is deprecated',
							 | 
						||
| 
								 | 
							
								            self::class
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->$offset = $value;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								     * @deprecated no replacement planned
							 | 
						||
| 
								 | 
							
								     * {@inheritDoc}
							 | 
						||
| 
								 | 
							
								     */
							 | 
						||
| 
								 | 
							
								    public function offsetUnset($offset): void
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        Deprecation::trigger(
							 | 
						||
| 
								 | 
							
								            'doctrine/lexer',
							 | 
						||
| 
								 | 
							
								            'https://github.com/doctrine/lexer/pull/79',
							 | 
						||
| 
								 | 
							
								            'Setting %s properties via ArrayAccess is deprecated',
							 | 
						||
| 
								 | 
							
								            self::class
							 | 
						||
| 
								 | 
							
								        );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        $this->$offset = null;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |