class DataClassFactory

Methods

__construct(DataPropertyFactory $propertyFactory, DataMethodFactory $methodFactory, DataParameterFactory $parameterFactory, DataIterableAnnotationReader $iterableAnnotationReader, NameMapperResolver $nameMapperResolver, DataConfig $config)

Create a new data class factory.

build(ReflectionClass $reflectionClass)

Build immutable metadata for a data class.

array
resolveConstructorParameters(ReflectionClass $reflectionClass, ReflectionMethod|null $constructor)

Build constructor parameter metadata keyed by parameter name.

array
resolveContextualParameters(array $parameters)

Get constructor parameters resolved from contextual attributes.

array
resolveReflectionProperties(ReflectionClass $reflectionClass)

Get public, non-static data properties keyed by name.

void
validateConstructorParameters(string $class, array $parameters, array $properties)

Validate that constructor inputs have one supported ownership form.

array
resolveProperties(string $class, ReflectionClass $reflectionClass, array $reflectionProperties, ReflectionMethod|null $constructor, array $constructorParameters, NameMapper|null $classInputNameMapper, NameMapper|null $classOutputNameMapper, ReflectionAttribute|null $classAutoLazy)

Build data properties and their selected iterable annotations.

bool
hasIterableAnnotationCandidate(iterable $declarations)

Determine if any declaration can use iterable item metadata.

bool
typeCanUseIterableAnnotation(ReflectionType|null $type)

Determine if a native type can use iterable item metadata.

array
resolveClassAnnotations(ReflectionClass $reflectionClass)

Resolve nearest class-level iterable annotations across inheritance.

array
resolveMethods(ReflectionClass $reflectionClass)

Build named creation method metadata in declaration order.

array
resolveLifecycleMethods(ReflectionClass $reflectionClass)

Compile user-owned creation lifecycle method presence.

array
validateMappings(string $class, array $properties)

Validate mapping ownership and build the output reverse map.

resolveCreationRecipe(ReflectionClass $reflectionClass, array $contextualParameters, array $properties, array $lifecycleMethods, bool $propertyMorphable)

Resolve a fixed construction recipe for an eligible declaration.

bool
supportsDirectConstructorInstantiation(ReflectionClass $reflectionClass, ReflectionMethod|null $constructor, array $contextualParameters, array $properties)

Determine if resolved recipe values can be spread directly into the constructor.

resolveTransformationRecipe(array $properties)

Resolve a fixed transformation recipe for an eligible declaration.

bool
supportsBulkCopyTransformation(array $properties)

Determine if declared values can be copied directly during transformation.

Details

at line 60
__construct(DataPropertyFactory $propertyFactory, DataMethodFactory $methodFactory, DataParameterFactory $parameterFactory, DataIterableAnnotationReader $iterableAnnotationReader, NameMapperResolver $nameMapperResolver, DataConfig $config)

Create a new data class factory.

Parameters

DataPropertyFactory $propertyFactory
DataMethodFactory $methodFactory
DataParameterFactory $parameterFactory
DataIterableAnnotationReader $iterableAnnotationReader
NameMapperResolver $nameMapperResolver
DataConfig $config

at line 75
DataClass build(ReflectionClass $reflectionClass)

Build immutable metadata for a data class.

Parameters

ReflectionClass $reflectionClass

Return Value

DataClass

at line 180
protected array resolveConstructorParameters(ReflectionClass $reflectionClass, ReflectionMethod|null $constructor)

Build constructor parameter metadata keyed by parameter name.

Parameters

ReflectionClass $reflectionClass
ReflectionMethod|null $constructor

Return Value

array

at line 203
protected array resolveContextualParameters(array $parameters)

Get constructor parameters resolved from contextual attributes.

Parameters

array $parameters

Return Value

array

at line 223
protected array resolveReflectionProperties(ReflectionClass $reflectionClass)

Get public, non-static data properties keyed by name.

Parameters

ReflectionClass $reflectionClass

Return Value

array

at line 243
protected void validateConstructorParameters(string $class, array $parameters, array $properties)

Validate that constructor inputs have one supported ownership form.

Parameters

string $class
array $parameters
array $properties

Return Value

void

at line 271
protected array resolveProperties(string $class, ReflectionClass $reflectionClass, array $reflectionProperties, ReflectionMethod|null $constructor, array $constructorParameters, NameMapper|null $classInputNameMapper, NameMapper|null $classOutputNameMapper, ReflectionAttribute|null $classAutoLazy)

Build data properties and their selected iterable annotations.

Parameters

string $class
ReflectionClass $reflectionClass
array $reflectionProperties
ReflectionMethod|null $constructor
array $constructorParameters
NameMapper|null $classInputNameMapper
NameMapper|null $classOutputNameMapper
ReflectionAttribute|null $classAutoLazy

Return Value

array

at line 356
protected bool hasIterableAnnotationCandidate(iterable $declarations)

Determine if any declaration can use iterable item metadata.

Parameters

iterable $declarations

Return Value

bool

at line 370
protected bool typeCanUseIterableAnnotation(ReflectionType|null $type)

Determine if a native type can use iterable item metadata.

Parameters

ReflectionType|null $type

Return Value

bool

at line 409
protected array resolveClassAnnotations(ReflectionClass $reflectionClass)

Resolve nearest class-level iterable annotations across inheritance.

Parameters

ReflectionClass $reflectionClass

Return Value

array

at line 437
protected array resolveMethods(ReflectionClass $reflectionClass)

Build named creation method metadata in declaration order.

Parameters

ReflectionClass $reflectionClass

Return Value

array

at line 466
protected array resolveLifecycleMethods(ReflectionClass $reflectionClass)

Compile user-owned creation lifecycle method presence.

Parameters

ReflectionClass $reflectionClass

Return Value

array

at line 504
protected array validateMappings(string $class, array $properties)

Validate mapping ownership and build the output reverse map.

Parameters

string $class
array $properties

Return Value

array

at line 563
protected DataCreationRecipe|null resolveCreationRecipe(ReflectionClass $reflectionClass, array $contextualParameters, array $properties, array $lifecycleMethods, bool $propertyMorphable)

Resolve a fixed construction recipe for an eligible declaration.

Parameters

ReflectionClass $reflectionClass
array $contextualParameters
array $properties
array $lifecycleMethods
bool $propertyMorphable

Return Value

DataCreationRecipe|null

at line 602
protected bool supportsDirectConstructorInstantiation(ReflectionClass $reflectionClass, ReflectionMethod|null $constructor, array $contextualParameters, array $properties)

Determine if resolved recipe values can be spread directly into the constructor.

Parameters

ReflectionClass $reflectionClass
ReflectionMethod|null $constructor
array $contextualParameters
array $properties

Return Value

bool

at line 628
protected DataTransformationRecipe|null resolveTransformationRecipe(array $properties)

Resolve a fixed transformation recipe for an eligible declaration.

Parameters

array $properties

Return Value

DataTransformationRecipe|null

at line 659
protected bool supportsBulkCopyTransformation(array $properties)

Determine if declared values can be copied directly during transformation.

Parameters

array $properties

Return Value

bool