Documentation

DocParser
in package

A parser for docblock annotations.

It is strongly discouraged to change the default annotation parsing process.

Table of Contents

$annotationMetadata  : array<class-string, array<string|int, mixed>>
Hash-map for caching annotation metadata.
$classExists  : array<class-string, bool>
This hashmap is used internally to cache results of class_exists() look-ups.
$classIdentifiers  : mixed
An array of all valid tokens for a class name.
$context  : string
$ignoredAnnotationNames  : array<string|int, bool>
A list with annotations that are not causing exceptions when not resolved to an annotation class.
$ignoredAnnotationNamespaces  : array<string|int, bool>
A list with annotations in namespaced format that are not causing exceptions when not resolved to an annotation class.
$ignoreNotImportedAnnotations  : bool
Whether annotations that have not been imported should be ignored.
$imports  : array<string, class-string>
Hashmap containing all use-statements that are to be used when parsing the given doc block.
$isNestedAnnotation  : bool
Flag to control if the current annotation is nested or not.
$lexer  : DocLexer
The lexer.
$metadataParser  : DocParser
Doc parser used to collect annotation target.
$namespaces  : array<string|int, string>
An array of default namespaces if operating in simple mode.
$target  : int
Current target context.
$typeMap  : array<string, string>
Hash-map for handle types declaration.
__construct()  : mixed
Constructs a new DocParser.
addNamespace()  : void
Sets the default namespaces.
parse()  : mixed
Parses the given docblock string for annotations.
setIgnoredAnnotationNames()  : void
Sets the annotation names that are ignored during the parsing process.
setIgnoredAnnotationNamespaces()  : void
Sets the annotation namespaces that are ignored during the parsing process.
setIgnoreNotImportedAnnotations()  : void
Sets ignore on not-imported annotations.
setImports()  : void
Sets the imports.
setTarget()  : void
Sets current target context as bitmask.
Annotation()  : object|false
Annotation ::= "@" AnnotationName MethodCall AnnotationName ::= QualifiedName | SimpleName QualifiedName ::= NameSpacePart "\" {NameSpacePart "\"}* SimpleName NameSpacePart ::= identifier | null | false | true SimpleName ::= identifier | null | false | true
Annotations()  : array<string|int, mixed>
Annotations ::= Annotation {[ "*" ]* [Annotation]}*
ArrayEntry()  : array<string|int, mixed>
ArrayEntry ::= Value | KeyValuePair KeyValuePair ::= Key ("=" | ":") PlainValue | Constant Key ::= string | integer | Constant
Arrayx()  : array<string|int, mixed>
Array ::= "{" ArrayEntry {"," ArrayEntry}* [","] "}"
classExists()  : bool
Attempts to check if a class exists or not. This never goes through the PHP autoloading mechanism but uses the {@link AnnotationRegistry} to load classes.
collectAnnotationMetadata()  : void
Collects parsing metadata for a given annotation class
collectAttributeTypeMetadata()  : void
Collects parsing metadata for a given attribute.
Constant()  : mixed
Constant ::= integer | string | float | boolean
FieldAssignment()  : stdClass
FieldAssignment ::= FieldName "=" PlainValue FieldName ::= identifier
findInitialTokenPosition()  : int|null
Finds the first valid annotation
getClassConstantPositionInIdentifier()  : int|false
Identifier()  : string
Identifier ::= string
identifierEndsWithClassConstant()  : bool
identifierStartsWithBackslash()  : bool
instantiateAnnotiation()  : object
Try to instantiate the annotation and catch and process any exceptions related to failure
isIgnoredAnnotation()  : bool
Checks whether the given $name matches any ignored annotation name or namespace
match()  : bool
Attempts to match the given token with the current lookahead token.
matchAny()  : bool
Attempts to match the current lookahead token with any of the given tokens.
MethodCall()  : array<string|int, mixed>
MethodCall ::= ["(" [Values] ")"]
PlainValue()  : mixed
PlainValue ::= integer | string | float | boolean | Array | Annotation
resolvePositionalValues()  : array<string, mixed>
Resolve positional arguments (without name) to named ones
syntaxError()  : AnnotationException
Generates a new syntax error.
Value()  : mixed
Value ::= PlainValue | FieldAssignment
Values()  : array<string|int, mixed>
Values ::= Array | Value {"," Value}* [","]

Properties

$annotationMetadata

Hash-map for caching annotation metadata.

private static array<class-string, array<string|int, mixed>> $annotationMetadata = [\Doctrine\Common\Annotations\Annotation\Target::class => ['is_annotation' => true, 'has_constructor' => true, 'has_named_argument_constructor' => false, 'properties' => [], 'targets_literal' => 'ANNOTATION_CLASS', 'targets' => \Doctrine\Common\Annotations\Annotation\Target::TARGET_CLASS, 'default_property' => 'value', 'attribute_types' => ['value' => ['required' => false, 'type' => 'array', 'array_type' => 'string', 'value' => 'array<string>']]], \Doctrine\Common\Annotations\Annotation\Attribute::class => ['is_annotation' => true, 'has_constructor' => false, 'has_named_argument_constructor' => false, 'targets_literal' => 'ANNOTATION_ANNOTATION', 'targets' => \Doctrine\Common\Annotations\Annotation\Target::TARGET_ANNOTATION, 'default_property' => 'name', 'properties' => ['name' => 'name', 'type' => 'type', 'required' => 'required'], 'attribute_types' => ['value' => ['required' => true, 'type' => 'string', 'value' => 'string'], 'type' => ['required' => true, 'type' => 'string', 'value' => 'string'], 'required' => ['required' => false, 'type' => 'boolean', 'value' => 'boolean']]], \Doctrine\Common\Annotations\Annotation\Attributes::class => ['is_annotation' => true, 'has_constructor' => false, 'has_named_argument_constructor' => false, 'targets_literal' => 'ANNOTATION_CLASS', 'targets' => \Doctrine\Common\Annotations\Annotation\Target::TARGET_CLASS, 'default_property' => 'value', 'properties' => ['value' => 'value'], 'attribute_types' => ['value' => ['type' => 'array', 'required' => true, 'array_type' => \Doctrine\Common\Annotations\Annotation\Attribute::class, 'value' => 'array<' . \Doctrine\Common\Annotations\Annotation\Attribute::class . '>']]], \Doctrine\Common\Annotations\Annotation\Enum::class => ['is_annotation' => true, 'has_constructor' => true, 'has_named_argument_constructor' => false, 'targets_literal' => 'ANNOTATION_PROPERTY', 'targets' => \Doctrine\Common\Annotations\Annotation\Target::TARGET_PROPERTY, 'default_property' => 'value', 'properties' => ['value' => 'value'], 'attribute_types' => ['value' => ['type' => 'array', 'required' => true], 'literal' => ['type' => 'array', 'required' => false]]], \Doctrine\Common\Annotations\Annotation\NamedArgumentConstructor::class => ['is_annotation' => true, 'has_constructor' => false, 'has_named_argument_constructor' => false, 'targets_literal' => 'ANNOTATION_CLASS', 'targets' => \Doctrine\Common\Annotations\Annotation\Target::TARGET_CLASS, 'default_property' => null, 'properties' => [], 'attribute_types' => []]]

$classExists

This hashmap is used internally to cache results of class_exists() look-ups.

private array<class-string, bool> $classExists = []

$classIdentifiers

An array of all valid tokens for a class name.

private static mixed $classIdentifiers = [\Doctrine\Common\Annotations\DocLexer::T_IDENTIFIER, \Doctrine\Common\Annotations\DocLexer::T_TRUE, \Doctrine\Common\Annotations\DocLexer::T_FALSE, \Doctrine\Common\Annotations\DocLexer::T_NULL]
Tags
phpstan-var

list

$ignoredAnnotationNames

A list with annotations that are not causing exceptions when not resolved to an annotation class.

private array<string|int, bool> $ignoredAnnotationNames = []

The names must be the raw names as used in the class, not the fully qualified

indexed by annotation name

$ignoredAnnotationNamespaces

A list with annotations in namespaced format that are not causing exceptions when not resolved to an annotation class.

private array<string|int, bool> $ignoredAnnotationNamespaces = []

indexed by namespace name

$ignoreNotImportedAnnotations

Whether annotations that have not been imported should be ignored.

private bool $ignoreNotImportedAnnotations = false

$imports

Hashmap containing all use-statements that are to be used when parsing the given doc block.

private array<string, class-string> $imports = []

$isNestedAnnotation

Flag to control if the current annotation is nested or not.

private bool $isNestedAnnotation = false

$metadataParser

Doc parser used to collect annotation target.

private static DocParser $metadataParser

$namespaces

An array of default namespaces if operating in simple mode.

private array<string|int, string> $namespaces = []

$target

Current target context.

private int $target

$typeMap

Hash-map for handle types declaration.

private static array<string, string> $typeMap = [ 'float' => 'double', 'bool' => 'boolean', // allow uppercase Boolean in honor of George Boole 'Boolean' => 'boolean', 'int' => 'integer', ]

Methods

__construct()

Constructs a new DocParser.

public __construct() : mixed
Return values
mixed —

addNamespace()

Sets the default namespaces.

public addNamespace(string $namespace) : void
Parameters
$namespace : string
Tags
throws
RuntimeException
Return values
void —

parse()

Parses the given docblock string for annotations.

public parse(string $input[, string $context = '' ]) : mixed
Parameters
$input : string

The docblock string to parse.

$context : string = ''

The parsing context.

Tags
throws
AnnotationException
throws
ReflectionException
phpstan-return

list Array of annotations. If no annotations are found, an empty array is returned.

Return values
mixed —

setIgnoredAnnotationNames()

Sets the annotation names that are ignored during the parsing process.

public setIgnoredAnnotationNames(array<string|int, bool> $names) : void

The names are supposed to be the raw names as used in the class, not the fully qualified class names.

Parameters
$names : array<string|int, bool>

indexed by annotation name

Return values
void —

setIgnoredAnnotationNamespaces()

Sets the annotation namespaces that are ignored during the parsing process.

public setIgnoredAnnotationNamespaces(array<string|int, bool> $ignoredAnnotationNamespaces) : void
Parameters
$ignoredAnnotationNamespaces : array<string|int, bool>

indexed by annotation namespace name

Return values
void —

setIgnoreNotImportedAnnotations()

Sets ignore on not-imported annotations.

public setIgnoreNotImportedAnnotations(bool $bool) : void
Parameters
$bool : bool
Return values
void —

setImports()

Sets the imports.

public setImports(array<string, class-string> $imports) : void
Parameters
$imports : array<string, class-string>
Tags
throws
RuntimeException
Return values
void —

setTarget()

Sets current target context as bitmask.

public setTarget(int $target) : void
Parameters
$target : int
Return values
void —

Annotation()

Annotation ::= "@" AnnotationName MethodCall AnnotationName ::= QualifiedName | SimpleName QualifiedName ::= NameSpacePart "\" {NameSpacePart "\"}* SimpleName NameSpacePart ::= identifier | null | false | true SimpleName ::= identifier | null | false | true

private Annotation() : object|false
Tags
throws
AnnotationException
throws
ReflectionException
Return values
object|false —

False if it is not a valid annotation.

Annotations()

Annotations ::= Annotation {[ "*" ]* [Annotation]}*

private Annotations() : array<string|int, mixed>
Tags
throws
AnnotationException
throws
ReflectionException
phpstan-return

list

Return values
array<string|int, mixed> —

ArrayEntry()

ArrayEntry ::= Value | KeyValuePair KeyValuePair ::= Key ("=" | ":") PlainValue | Constant Key ::= string | integer | Constant

private ArrayEntry() : array<string|int, mixed>
Tags
throws
AnnotationException
throws
ReflectionException
phpstan-return

array{mixed, mixed}

Return values
array<string|int, mixed> —

Arrayx()

Array ::= "{" ArrayEntry {"," ArrayEntry}* [","] "}"

private Arrayx() : array<string|int, mixed>
Tags
throws
AnnotationException
throws
ReflectionException
Return values
array<string|int, mixed> —

classExists()

Attempts to check if a class exists or not. This never goes through the PHP autoloading mechanism but uses the {@link AnnotationRegistry} to load classes.

private classExists(class-string $fqcn) : bool
Parameters
$fqcn : class-string
Return values
bool —

collectAnnotationMetadata()

Collects parsing metadata for a given annotation class

private collectAnnotationMetadata(class-string $name) : void
Parameters
$name : class-string

The annotation name

Tags
throws
AnnotationException
throws
ReflectionException
Return values
void —

collectAttributeTypeMetadata()

Collects parsing metadata for a given attribute.

private collectAttributeTypeMetadata(array<string|int, mixed> &$metadata, Attribute $attribute) : void
Parameters
$metadata : array<string|int, mixed>
$attribute : Attribute
Return values
void —

Constant()

Constant ::= integer | string | float | boolean

private Constant() : mixed
Tags
throws
AnnotationException
Return values
mixed —

FieldAssignment()

FieldAssignment ::= FieldName "=" PlainValue FieldName ::= identifier

private FieldAssignment() : stdClass
Tags
throws
AnnotationException
throws
ReflectionException
Return values
stdClass —

findInitialTokenPosition()

Finds the first valid annotation

private findInitialTokenPosition(string $input) : int|null
Parameters
$input : string

The docblock string to parse

Return values
int|null —

getClassConstantPositionInIdentifier()

private getClassConstantPositionInIdentifier(string $identifier) : int|false
Parameters
$identifier : string
Return values
int|false —

identifierEndsWithClassConstant()

private identifierEndsWithClassConstant(string $identifier) : bool
Parameters
$identifier : string
Return values
bool —

identifierStartsWithBackslash()

private identifierStartsWithBackslash(string $identifier) : bool
Parameters
$identifier : string
Return values
bool —

instantiateAnnotiation()

Try to instantiate the annotation and catch and process any exceptions related to failure

private instantiateAnnotiation(string $originalName, string $context, class-string $name, array<string, mixed> $arguments) : object
Parameters
$originalName : string
$context : string
$name : class-string
$arguments : array<string, mixed>
Tags
throws
AnnotationException
Return values
object —

isIgnoredAnnotation()

Checks whether the given $name matches any ignored annotation name or namespace

private isIgnoredAnnotation(string $name) : bool
Parameters
$name : string
Return values
bool —

match()

Attempts to match the given token with the current lookahead token.

private match(int $token) : bool

If they match, updates the lookahead token; otherwise raises a syntax error.

Parameters
$token : int

Type of token.

Tags
throws
AnnotationException
Return values
bool —

True if tokens match; false otherwise.

matchAny()

Attempts to match the current lookahead token with any of the given tokens.

private matchAny(array<string|int, mixed> $tokens) : bool

If any of them matches, this method updates the lookahead token; otherwise a syntax error is raised.

Parameters
$tokens : array<string|int, mixed>
Tags
throws
AnnotationException
phpstan-param

list<mixed[]> $tokens

Return values
bool —

MethodCall()

MethodCall ::= ["(" [Values] ")"]

private MethodCall() : array<string|int, mixed>
Tags
throws
AnnotationException
throws
ReflectionException
Return values
array<string|int, mixed> —

PlainValue()

PlainValue ::= integer | string | float | boolean | Array | Annotation

private PlainValue() : mixed
Tags
throws
AnnotationException
throws
ReflectionException
Return values
mixed —

resolvePositionalValues()

Resolve positional arguments (without name) to named ones

private resolvePositionalValues(array<string, mixed> $arguments, string $name) : array<string, mixed>
Parameters
$arguments : array<string, mixed>
$name : string
Return values
array<string, mixed> —

syntaxError()

Generates a new syntax error.

private syntaxError(string $expected[, array<string|int, mixed>|null $token = null ]) : AnnotationException
Parameters
$expected : string

Expected string.

$token : array<string|int, mixed>|null = null

Optional token.

Return values
AnnotationException —

Value()

Value ::= PlainValue | FieldAssignment

private Value() : mixed
Tags
throws
AnnotationException
throws
ReflectionException
Return values
mixed —

Values()

Values ::= Array | Value {"," Value}* [","]

private Values() : array<string|int, mixed>
Tags
throws
AnnotationException
throws
ReflectionException
Return values
array<string|int, mixed> —

Search results