ClassStaticMethodsCheck
class ClassStaticMethodsCheck extends AbstractMemberFlagCheck implements DescribesMethodMismatch (View source)
Validates that the static modifier on methods in stubs matches reflection.
For each class identified by $entityId the validator:
- Iterates all methods reported by reflection for the class.
- Looks up each method in the version-filtered stub hierarchy (parent classes and interfaces), stripping PS_UNRESERVEPREFIX where needed.
- If the stub method is not found it is silently skipped — existence is ClassMethodsExistCheck's responsibility.
- When both sides are found, their isStatic flags are compared and any mismatch is reported as a failure.
Known problems are supported at two granularities:
- class-level: EntityType::CLASS_TYPE + classId + 'ClassStaticMethodsCheck' → skips all static-method checks for the class.
- method-level: EntityType::METHOD + '\ClassName::methodName' + 'ClassStaticMethodsCheck' → skips only that specific mismatch.
Constants
| private FUNCTION_LOOKUP_UNSUPPORTED |
|
| private NO_DESCRIBER |
|
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
No description
Records a skipped-success result if a known problem covers this entity, and returns true.
Look up an entity by ID, dispatching to the right lookup method based on config.
Collect version-filtered methods, dispatching based on config.
Collect version-filtered properties, dispatching based on config.
No description
Which member kind this check compares. Supplies the id format, the known-problem entity type and the reflection-member accessor, all of which used to be one-line abstract hooks.
Compare an attribute on the reflection and stub method.
Details
__construct(ReflectionProviderInterface|null $reflectionProvider = null, KnownProblemsRegistry|null $knownProblemsRegistry = null, EntityLookupService|null $entityLookup = null, MethodCollectionService|null $methodCollection = null, EntityTypeConfig|null $entityTypeConfig = null)
No description
protected bool
skipWithKnownProblem(CheckResultSet $results, string $entityType, string $entityId, CheckType $checkType, string $phpVersion)
Records a skipped-success result if a known problem covers this entity, and returns true.
Returns false if validation should proceed normally.
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.
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.
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.
protected string
getEntityLabel()
No description
protected string
getEntityType()
No description
protected string
getConstantEntityType()
No description
protected PHPClass|null
findClassById(StubDataQueryInterface $storage, string $entityId)
No description
protected PHPEnum|null
findEnumById(StubDataQueryInterface $storage, string $entityId)
No description
protected PHPInterface|null
findInterfaceById(StubDataQueryInterface $storage, string $entityId)
No description
protected CheckType
getCheckName()
No description
protected MemberKind
memberKind()
Which member kind this check compares. Supplies the id format, the known-problem entity type and the reflection-member accessor, all of which used to be one-line abstract hooks.
bool
supports(string $phpVersion)
No description
CheckResultSet
run(StubDataQueryInterface $stubs, string $entityId, string $phpVersion)
No description
string|null
describeMethodMismatch(string $methodEntityId, PHPMethod $reflMethod, PHPMethod $stubMethod, string $phpVersion)
Compare an attribute on the reflection and stub method.
Return a descriptive failure message if there is a mismatch, or null if they match.
Both sides are PHPMethod: the reflection half is read back out of the reflection cache into
the same model as the stub half, and MemberKind::METHOD only ever yields
PHPClassLikeObject::getMethods(). Declaring it rather than mixed is the whole point of
this interface — it lets the 12 leaves state a concrete signature instead of narrowing an
inherited one — and it matches DescribesPropertyMismatch, which types both sides
PHPProperty. AbstractMemberFlagCheck dispatches through a mixed argument, so a wrong type
now surfaces as a TypeError here instead of a silently skipped comparison.