class ClassPropertyReadonlyCheck extends AbstractPropertyFlagCheck (View source)

Validates that the readonly modifier on properties in stubs matches reflection.

For each class identified by $entityId the validator:

  1. Iterates all properties reported by reflection for the class.
  2. Looks up each property in the version-filtered stub hierarchy (parent classes), collecting a name → PHPProperty map with child-wins-over-parent priority.
  3. If the stub property is not found it is silently skipped — existence is ClassPropertiesExistCheck's responsibility.
  4. When both sides are found, their isReadonly flags are compared and any mismatch is reported as a failure.

Readonly properties were introduced in PHP 8.1, so supports() returns true only for PHP 8.1 and later.

Known problems are supported at two granularities:

  • class-level: EntityType::CLASS_TYPE + classId + 'ClassPropertyReadonlyCheck' → skips all readonly-property checks for the class.
  • property-level: EntityType::PROPERTY + '\ClassName::$propertyName' + 'ClassPropertyReadonlyCheck' → skips only that specific mismatch.

Properties

protected ReflectionProviderInterface $reflectionProvider from  AbstractReflectionCheck
protected KnownProblemsRegistry $knownProblemsRegistry from  AbstractReflectionCheck
protected EntityLookupService $entityLookup from  AbstractClassCheck
protected MethodCollectionService $methodCollection from  AbstractClassCheck
protected EntityTypeConfig|null $entityTypeConfig from  AbstractClassCheck

Methods

__construct(ReflectionProviderInterface|null $reflectionProvider = null, KnownProblemsRegistry|null $knownProblemsRegistry = null, EntityLookupService|null $entityLookup = null, MethodCollectionService|null $methodCollection = null, EntityTypeConfig|null $entityTypeConfig = null)

No description

bool
skipWithKnownProblem(CheckResultSet $results, string $entityType, string $entityId, string $checkName, string $phpVersion)

Records a skipped-success result if a known problem covers this entity, and returns true.

lookupEntityById(StubDataQueryInterface $storage, string $entityId)

Look up an entity by ID, dispatching to the right lookup method based on config.

array
collectEntityMethodsByConfig(PHPClassLikeObject $entity, string $phpVersion)

Collect version-filtered methods, dispatching based on config.

array
collectEntityPropertiesByConfig(PHPClassLikeObject $entity, string $phpVersion)

Collect version-filtered properties, dispatching based on config.

string
getEntityLabel()

No description

string
getEntityType()

No description

string
getConstantEntityType()

No description

PHPClass|null
findClassById(StubDataQueryInterface $storage, string $entityId)

No description

PHPEnum|null
findEnumById(StubDataQueryInterface $storage, string $entityId)

No description

findInterfaceById(StubDataQueryInterface $storage, string $entityId)

No description

string
getCheckName()

No description

string|null
describeMismatch(string $propertyEntityId, PHPProperty $reflProperty, PHPProperty $stubProperty, string $phpVersion)

Compare a flag on the reflection and stub property.

PHPClass|null
findEntity(StubDataQueryInterface $storage, string $entityId)

No description

bool
supports(string $phpVersion)

No description

run(StubDataQueryInterface $stubs, string $entityId, string $phpVersion)

No description

Details

__construct(ReflectionProviderInterface|null $reflectionProvider = null, KnownProblemsRegistry|null $knownProblemsRegistry = null, EntityLookupService|null $entityLookup = null, MethodCollectionService|null $methodCollection = null, EntityTypeConfig|null $entityTypeConfig = null)

No description

Parameters

ReflectionProviderInterface|null $reflectionProvider
KnownProblemsRegistry|null $knownProblemsRegistry
EntityLookupService|null $entityLookup
MethodCollectionService|null $methodCollection
EntityTypeConfig|null $entityTypeConfig

protected bool skipWithKnownProblem(CheckResultSet $results, string $entityType, string $entityId, string $checkName, string $phpVersion)

Records a skipped-success result if a known problem covers this entity, and returns true.

Returns false if validation should proceed normally.

Parameters

CheckResultSet $results
string $entityType
string $entityId
string $checkName
string $phpVersion

Return Value

bool

protected PHPClassLikeObject|null lookupEntityById(StubDataQueryInterface $storage, string $entityId)

Look up an entity by ID, dispatching to the right lookup method based on config.

Defaults to class lookup when no config is set.

Parameters

StubDataQueryInterface $storage
string $entityId

Return Value

PHPClassLikeObject|null

protected array collectEntityMethodsByConfig(PHPClassLikeObject $entity, string $phpVersion)

Collect version-filtered methods, dispatching based on config.

Defaults to class hierarchy traversal when no config is set.

Parameters

PHPClassLikeObject $entity
string $phpVersion

Return Value

array

protected array collectEntityPropertiesByConfig(PHPClassLikeObject $entity, string $phpVersion)

Collect version-filtered properties, dispatching based on config.

Only classes have properties; returns empty array for enum/interface.

Parameters

PHPClassLikeObject $entity
string $phpVersion

Return Value

array

protected string getEntityLabel()

No description

Return Value

string

protected string getEntityType()

No description

Return Value

string

protected string getConstantEntityType()

No description

Return Value

string

protected PHPClass|null findClassById(StubDataQueryInterface $storage, string $entityId)

No description

Parameters

StubDataQueryInterface $storage
string $entityId

Return Value

PHPClass|null

protected PHPEnum|null findEnumById(StubDataQueryInterface $storage, string $entityId)

No description

Parameters

StubDataQueryInterface $storage
string $entityId

Return Value

PHPEnum|null

protected PHPInterface|null findInterfaceById(StubDataQueryInterface $storage, string $entityId)

No description

Parameters

StubDataQueryInterface $storage
string $entityId

Return Value

PHPInterface|null

protected string getCheckName()

No description

Return Value

string

protected string|null describeMismatch(string $propertyEntityId, PHPProperty $reflProperty, PHPProperty $stubProperty, string $phpVersion)

Compare a flag on the reflection and stub property.

Return a descriptive failure message if there is a mismatch, or null if they match.

Parameters

string $propertyEntityId
PHPProperty $reflProperty
PHPProperty $stubProperty
string $phpVersion

Return Value

string|null

protected PHPClass|null findEntity(StubDataQueryInterface $storage, string $entityId)

No description

Parameters

StubDataQueryInterface $storage
string $entityId

Return Value

PHPClass|null

bool supports(string $phpVersion)

No description

Parameters

string $phpVersion

Return Value

bool

CheckResultSet run(StubDataQueryInterface $stubs, string $entityId, string $phpVersion)

No description

Parameters

StubDataQueryInterface $stubs

Parsed stubs data

string $entityId

Entity identifier to validate

string $phpVersion

PHP version string

Return Value

CheckResultSet