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.

array
resolveConstructorInputs(array $parameters, array $properties)

Get the constructor parameters that receive raw input without a public data property.

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 $constructorInputs, array $properties, array $lifecycleMethods, bool $propertyMorphable)

Resolve a fixed construction recipe for an eligible declaration.

bool
supportsDirectConstructorInstantiation(ReflectionClass $reflectionClass, ReflectionMethod|null $constructor, array $constructorParameters, array $contextualParameters, array $constructorInputs, 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 183
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 206
protected array resolveContextualParameters(array $parameters)

Get constructor parameters resolved from contextual attributes.

Parameters

array $parameters

Return Value

array

at line 226
protected array resolveReflectionProperties(ReflectionClass $reflectionClass)

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

Parameters

ReflectionClass $reflectionClass

Return Value

array

at line 249
protected array resolveConstructorInputs(array $parameters, array $properties)

Get the constructor parameters that receive raw input without a public data property.

These are non-promoted parameters without a matching property. A non-public promoted parameter is the object's own state, so input never reaches it, as in Spatie.

Parameters

array $parameters
array $properties

Return Value

array

at line 275
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 365
protected bool hasIterableAnnotationCandidate(iterable $declarations)

Determine if any declaration can use iterable item metadata.

Parameters

iterable $declarations

Return Value

bool

at line 379
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 418
protected array resolveClassAnnotations(ReflectionClass $reflectionClass)

Resolve nearest class-level iterable annotations across inheritance.

Parameters

ReflectionClass $reflectionClass

Return Value

array

at line 446
protected array resolveMethods(ReflectionClass $reflectionClass)

Build named creation method metadata in declaration order.

Parameters

ReflectionClass $reflectionClass

Return Value

array

at line 475
protected array resolveLifecycleMethods(ReflectionClass $reflectionClass)

Compile user-owned creation lifecycle method presence.

Parameters

ReflectionClass $reflectionClass

Return Value

array

at line 514
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 574
protected DataCreationRecipe|null resolveCreationRecipe(ReflectionClass $reflectionClass, array $contextualParameters, array $constructorInputs, array $properties, array $lifecycleMethods, bool $propertyMorphable)

Resolve a fixed construction recipe for an eligible declaration.

Parameters

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

Return Value

DataCreationRecipe|null

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

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

Parameters

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

Return Value

bool

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

Resolve a fixed transformation recipe for an eligible declaration.

Parameters

array $properties

Return Value

DataTransformationRecipe|null

at line 685
protected bool supportsBulkCopyTransformation(array $properties)

Determine if declared values can be copied directly during transformation.

Parameters

array $properties

Return Value

bool