From d44eb397129e3ec826ce2ec25c689a6700d414e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Paris?= Date: Sat, 13 Mar 2021 12:08:36 +0100 Subject: [PATCH] Add type declarations where backwards-compatible This includes: - private methods - return type declarations of final protected methods - return type declarations of public and protected methods of final classes Parameter type declarations are a more delicate matter and should probably be handled separately to make it easier to catch issues during code review. Type declarations can be more trusted than simple phpdoc when it comes to static analysis, having them means we can infer the phpdoc of calling methods with confidence. Note that it seems that some of the phpdoc I initially inferred these declarations from were apparently wrong, in particular some mentioning Doctrine\Dbal\Statement when was is really passed around is Doctrine\Dbal\Driver\Statement. --- lib/Doctrine/ORM/AbstractQuery.php | 9 +- lib/Doctrine/ORM/Cache/DefaultCache.php | 15 ++- .../ORM/Cache/DefaultCacheFactory.php | 7 +- lib/Doctrine/ORM/Cache/DefaultQueryCache.php | 14 +-- .../Entity/AbstractEntityPersister.php | 5 +- ...onStrictReadWriteCachedEntityPersister.php | 8 +- .../ORM/Cache/Region/FileLockRegion.php | 22 +--- .../Cache/TimestampQueryCacheValidator.php | 5 +- lib/Doctrine/ORM/EntityManager.php | 4 +- lib/Doctrine/ORM/Event/PreUpdateEventArgs.php | 6 +- .../ORM/Internal/CommitOrderCalculator.php | 4 +- .../ORM/Internal/Hydration/ArrayHydrator.php | 11 +- .../ORM/Internal/Hydration/ObjectHydrator.php | 25 ++--- .../ORM/Internal/HydrationCompleteHandler.php | 4 +- .../ORM/Mapping/ClassMetadataFactory.php | 58 ++++------ .../ORM/Mapping/ClassMetadataInfo.php | 6 +- .../ORM/Mapping/Driver/AnnotationDriver.php | 21 +--- .../ORM/Mapping/Driver/DatabaseDriver.php | 35 +++--- lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php | 14 +-- .../ORM/Mapping/Driver/YamlDriver.php | 2 +- .../Reflection/ReflectionPropertiesGetter.php | 21 +--- lib/Doctrine/ORM/NativeQuery.php | 2 +- lib/Doctrine/ORM/PersistentCollection.php | 103 ++++++------------ .../Collection/ManyToManyPersister.php | 39 ++++--- .../Collection/OneToManyPersister.php | 8 +- .../Entity/BasicEntityPersister.php | 61 +++++------ .../Entity/JoinedSubclassPersister.php | 11 +- lib/Doctrine/ORM/Proxy/ProxyFactory.php | 12 +- lib/Doctrine/ORM/Query.php | 53 +++------ .../ORM/Query/AST/Functions/TrimFunction.php | 9 +- lib/Doctrine/ORM/Query/Expr/Composite.php | 4 +- lib/Doctrine/ORM/Query/Filter/SQLFilter.php | 4 +- lib/Doctrine/ORM/Query/Parser.php | 16 +-- .../ORM/Query/ResultSetMappingBuilder.php | 20 ++-- lib/Doctrine/ORM/Query/SqlWalker.php | 14 ++- lib/Doctrine/ORM/QueryBuilder.php | 19 +--- .../Repository/DefaultRepositoryFactory.php | 10 +- .../Command/MappingDescribeCommand.php | 31 +++--- .../ORM/Tools/ConvertDoctrine1Schema.php | 46 ++++---- .../ORM/Tools/DebugUnitOfWorkListener.php | 11 +- lib/Doctrine/ORM/Tools/EntityGenerator.php | 5 +- .../ORM/Tools/EntityRepositoryGenerator.php | 23 +--- .../Pagination/LimitSubqueryOutputWalker.php | 14 +-- .../Tools/Pagination/LimitSubqueryWalker.php | 5 +- .../ORM/Tools/Pagination/Paginator.php | 23 +--- .../ORM/Tools/ResolveTargetEntityListener.php | 8 +- lib/Doctrine/ORM/Tools/SchemaTool.php | 12 +- lib/Doctrine/ORM/UnitOfWork.php | 81 ++++---------- .../ORM/Utility/IdentifierFlattener.php | 2 +- 49 files changed, 329 insertions(+), 613 deletions(-) diff --git a/lib/Doctrine/ORM/AbstractQuery.php b/lib/Doctrine/ORM/AbstractQuery.php index 0aa53b09a44..055a2b836ca 100644 --- a/lib/Doctrine/ORM/AbstractQuery.php +++ b/lib/Doctrine/ORM/AbstractQuery.php @@ -507,10 +507,8 @@ protected function getResultSetMapping() /** * Allows to translate entity namespaces to full qualified names. - * - * @return void */ - private function translateNamespaces(Query\ResultSetMapping $rsm) + private function translateNamespaces(Query\ResultSetMapping $rsm): void { $translate = function ($alias): string { return $this->_em->getClassMetadata($alias)->getName(); @@ -1137,10 +1135,7 @@ private function executeUsingQueryCache($parameters = null, $hydrationMode = nul return $result; } - /** - * @return TimestampCacheKey|null - */ - private function getTimestampKey() + private function getTimestampKey(): ?TimestampCacheKey { $entityName = reset($this->_resultSetMapping->aliasMap); diff --git a/lib/Doctrine/ORM/Cache/DefaultCache.php b/lib/Doctrine/ORM/Cache/DefaultCache.php index 54c933799cc..fe8ba92f4df 100644 --- a/lib/Doctrine/ORM/Cache/DefaultCache.php +++ b/lib/Doctrine/ORM/Cache/DefaultCache.php @@ -278,10 +278,8 @@ public function getQueryCache($regionName = null) /** * @param ClassMetadata $metadata The entity metadata. * @param mixed $identifier The entity identifier. - * - * @return EntityCacheKey */ - private function buildEntityCacheKey(ClassMetadata $metadata, $identifier) + private function buildEntityCacheKey(ClassMetadata $metadata, $identifier): EntityCacheKey { if (! is_array($identifier)) { $identifier = $this->toIdentifierArray($metadata, $identifier); @@ -294,11 +292,12 @@ private function buildEntityCacheKey(ClassMetadata $metadata, $identifier) * @param ClassMetadata $metadata The entity metadata. * @param string $association The field name that represents the association. * @param mixed $ownerIdentifier The identifier of the owning entity. - * - * @return CollectionCacheKey */ - private function buildCollectionCacheKey(ClassMetadata $metadata, $association, $ownerIdentifier) - { + private function buildCollectionCacheKey( + ClassMetadata $metadata, + string $association, + $ownerIdentifier + ): CollectionCacheKey { if (! is_array($ownerIdentifier)) { $ownerIdentifier = $this->toIdentifierArray($metadata, $ownerIdentifier); } @@ -312,7 +311,7 @@ private function buildCollectionCacheKey(ClassMetadata $metadata, $association, * * @return array */ - private function toIdentifierArray(ClassMetadata $metadata, $identifier) + private function toIdentifierArray(ClassMetadata $metadata, $identifier): array { if (is_object($identifier) && $this->em->getMetadataFactory()->hasMetadataFor(ClassUtils::getClass($identifier))) { $identifier = $this->uow->getSingleIdentifierValue($identifier); diff --git a/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php b/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php index 45f3a88584d..f265c7a6261 100644 --- a/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php +++ b/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php @@ -207,12 +207,7 @@ public function getRegion(array $cache) return $this->regions[$cache['region']] = $region; } - /** - * @param string $name - * - * @return CacheAdapter - */ - private function createRegionCache($name) + private function createRegionCache(string $name): CacheAdapter { $cacheAdapter = clone $this->cache; diff --git a/lib/Doctrine/ORM/Cache/DefaultQueryCache.php b/lib/Doctrine/ORM/Cache/DefaultQueryCache.php index 8d31931dbac..b4c97fdb8a8 100644 --- a/lib/Doctrine/ORM/Cache/DefaultQueryCache.php +++ b/lib/Doctrine/ORM/Cache/DefaultQueryCache.php @@ -344,11 +344,9 @@ public function put(QueryCacheKey $key, ResultSetMapping $rsm, $result, array $h * @param array $assoc * @param mixed $assocValue * - * @return mixed[]|null - * * @psalm-return array{targetEntity: string, type: mixed, list?: array[], identifier?: array}|null */ - private function storeAssociationCache(QueryCacheKey $key, array $assoc, $assocValue) + private function storeAssociationCache(QueryCacheKey $key, array $assoc, $assocValue): ?array { $assocPersister = $this->uow->getEntityPersister($assoc['targetEntity']); $assocMetadata = $assocPersister->getClassMetadata(); @@ -398,13 +396,13 @@ private function storeAssociationCache(QueryCacheKey $key, array $assoc, $assocV } /** - * @param string $assocAlias - * @param object $entity - * * @return array|object */ - private function getAssociationValue(ResultSetMapping $rsm, $assocAlias, $entity) - { + private function getAssociationValue( + ResultSetMapping $rsm, + string $assocAlias, + object $entity + ) { $path = []; $alias = $assocAlias; diff --git a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php index 5e96c309c63..25e24e73e8e 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php @@ -223,10 +223,7 @@ public function storeEntityCache($entity, EntityCacheKey $key) return $cached; } - /** - * @param object $entity - */ - private function storeJoinedAssociations($entity) + private function storeJoinedAssociations(object $entity): void { if ($this->joinedAssociations === null) { $associations = []; diff --git a/lib/Doctrine/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersister.php b/lib/Doctrine/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersister.php index c2b36c18d00..0cafd632090 100644 --- a/lib/Doctrine/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersister.php +++ b/lib/Doctrine/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersister.php @@ -98,13 +98,7 @@ public function update($entity) $this->queuedCache['update'][] = $entity; } - /** - * @param object $entity - * @param bool $isChanged - * - * @return bool - */ - private function updateCache($entity, $isChanged) + private function updateCache(object $entity, bool $isChanged): ?bool { $class = $this->metadataFactory->getMetadataFor(get_class($entity)); $key = new EntityCacheKey($class->rootEntityName, $this->uow->getEntityIdentifier($entity)); diff --git a/lib/Doctrine/ORM/Cache/Region/FileLockRegion.php b/lib/Doctrine/ORM/Cache/Region/FileLockRegion.php index 2a09b3c1b0c..a60b8d58505 100644 --- a/lib/Doctrine/ORM/Cache/Region/FileLockRegion.php +++ b/lib/Doctrine/ORM/Cache/Region/FileLockRegion.php @@ -83,10 +83,7 @@ public function __construct(Region $region, $directory, $lockLifetime) $this->lockLifetime = $lockLifetime; } - /** - * @return bool - */ - private function isLocked(CacheKey $key, ?Lock $lock = null) + private function isLocked(CacheKey $key, ?Lock $lock = null): bool { $filename = $this->getLockFileName($key); @@ -117,30 +114,23 @@ private function isLocked(CacheKey $key, ?Lock $lock = null) return true; } - /** - * @return string - */ - private function getLockFileName(CacheKey $key) + private function getLockFileName(CacheKey $key): string { return $this->directory . DIRECTORY_SEPARATOR . $key->hash . '.' . self::LOCK_EXTENSION; } /** - * @param string $filename - * - * @return string + * @return string|false */ - private function getLockContent($filename) + private function getLockContent(string $filename) { return @file_get_contents($filename); } /** - * @param string $filename - * - * @return int + * @return int|false */ - private function getLockTime($filename) + private function getLockTime(string $filename) { return @fileatime($filename); } diff --git a/lib/Doctrine/ORM/Cache/TimestampQueryCacheValidator.php b/lib/Doctrine/ORM/Cache/TimestampQueryCacheValidator.php index 196c4e1e0f2..a9cb6f07a7f 100644 --- a/lib/Doctrine/ORM/Cache/TimestampQueryCacheValidator.php +++ b/lib/Doctrine/ORM/Cache/TimestampQueryCacheValidator.php @@ -48,10 +48,7 @@ public function isValid(QueryCacheKey $key, QueryCacheEntry $entry) return $entry->time + $key->lifetime > microtime(true); } - /** - * @return bool - */ - private function regionUpdated(QueryCacheKey $key, QueryCacheEntry $entry) + private function regionUpdated(QueryCacheKey $key, QueryCacheEntry $entry): bool { if ($key->timestampKey === null) { return false; diff --git a/lib/Doctrine/ORM/EntityManager.php b/lib/Doctrine/ORM/EntityManager.php index 66216dda028..8f4ba65a9ae 100644 --- a/lib/Doctrine/ORM/EntityManager.php +++ b/lib/Doctrine/ORM/EntityManager.php @@ -799,11 +799,9 @@ public function getConfiguration() /** * Throws an exception if the EntityManager is closed or currently not active. * - * @return void - * * @throws ORMException If the EntityManager is closed. */ - private function errorIfClosed() + private function errorIfClosed(): void { if ($this->closed) { throw ORMException::entityManagerClosed(); diff --git a/lib/Doctrine/ORM/Event/PreUpdateEventArgs.php b/lib/Doctrine/ORM/Event/PreUpdateEventArgs.php index 0f08dec473f..e0ab9155423 100644 --- a/lib/Doctrine/ORM/Event/PreUpdateEventArgs.php +++ b/lib/Doctrine/ORM/Event/PreUpdateEventArgs.php @@ -113,13 +113,9 @@ public function setNewValue($field, $value) /** * Asserts the field exists in changeset. * - * @param string $field - * - * @return void - * * @throws InvalidArgumentException */ - private function assertValidField($field) + private function assertValidField(string $field): void { if (! isset($this->entityChangeSet[$field])) { throw new InvalidArgumentException(sprintf( diff --git a/lib/Doctrine/ORM/Internal/CommitOrderCalculator.php b/lib/Doctrine/ORM/Internal/CommitOrderCalculator.php index 589a3a08776..a099d432466 100644 --- a/lib/Doctrine/ORM/Internal/CommitOrderCalculator.php +++ b/lib/Doctrine/ORM/Internal/CommitOrderCalculator.php @@ -146,10 +146,8 @@ public function sort() * Visit a given node definition for reordering. * * {@internal Highly performance-sensitive method.} - * - * @param stdClass $vertex */ - private function visit($vertex) + private function visit(stdClass $vertex): void { $vertex->state = self::IN_PROGRESS; diff --git a/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php index 80772e8e0d9..c5a6c050246 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php @@ -261,13 +261,14 @@ protected function hydrateRowData(array $row, array &$result) * * @param mixed[] $coll The element. * @param bool|int $index Index of the element in the collection. - * @param string $dqlAlias * @param bool $oneToOne Whether it is a single-valued association or not. - * - * @return void */ - private function updateResultPointer(array &$coll, $index, $dqlAlias, $oneToOne) - { + private function updateResultPointer( + array &$coll, + $index, + string $dqlAlias, + bool $oneToOne + ): void { if ($coll === null) { unset($this->_resultPointers[$dqlAlias]); // Ticket #1228 diff --git a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php index 69cd75a8f1e..c9f8ca44a49 100644 --- a/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php +++ b/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php @@ -171,15 +171,16 @@ protected function hydrateAllData() /** * Initializes a related collection. * - * @param object $entity The entity to which the collection belongs. - * @param ClassMetadata $class - * @param string $fieldName The name of the field on the entity that holds the collection. - * @param string $parentDqlAlias Alias of the parent fetch joining this collection. - * - * @return PersistentCollection + * @param object $entity The entity to which the collection belongs. + * @param string $fieldName The name of the field on the entity that holds the collection. + * @param string $parentDqlAlias Alias of the parent fetch joining this collection. */ - private function initRelatedCollection($entity, $class, $fieldName, $parentDqlAlias) - { + private function initRelatedCollection( + object $entity, + ClassMetadata $class, + string $fieldName, + string $parentDqlAlias + ): PersistentCollection { $oid = spl_object_hash($entity); $relation = $class->associationMappings[$fieldName]; $value = $class->reflFields[$fieldName]->getValue($entity); @@ -224,13 +225,11 @@ private function initRelatedCollection($entity, $class, $fieldName, $parentDqlAl * * @param string $dqlAlias The DQL alias of the entity's class. * - * @return object The entity. - * * @throws HydrationException * * @psalm-param array $data The instance data. */ - private function getEntity(array $data, $dqlAlias) + private function getEntity(array $data, string $dqlAlias): object { $className = $this->_rsm->aliasMap[$dqlAlias]; @@ -273,13 +272,11 @@ private function getEntity(array $data, $dqlAlias) } /** - * @param string $className - * * @return mixed * * @psalm-param array $data */ - private function getEntityFromIdentityMap($className, array $data) + private function getEntityFromIdentityMap(string $className, array $data) { // TODO: Abstract this code and UnitOfWork::createEntity() equivalent? $class = $this->_metadataCache[$className]; diff --git a/lib/Doctrine/ORM/Internal/HydrationCompleteHandler.php b/lib/Doctrine/ORM/Internal/HydrationCompleteHandler.php index 01185aa777e..7632ae3d123 100644 --- a/lib/Doctrine/ORM/Internal/HydrationCompleteHandler.php +++ b/lib/Doctrine/ORM/Internal/HydrationCompleteHandler.php @@ -55,7 +55,7 @@ public function __construct(ListenersInvoker $listenersInvoker, EntityManagerInt * * @param object $entity */ - public function deferPostLoadInvoking(ClassMetadata $class, $entity) + public function deferPostLoadInvoking(ClassMetadata $class, $entity): void { $invoke = $this->listenersInvoker->getSubscribedSystems($class, Events::postLoad); @@ -71,7 +71,7 @@ public function deferPostLoadInvoking(ClassMetadata $class, $entity) * * Method fires all deferred invocations of postLoad events */ - public function hydrationComplete() + public function hydrationComplete(): void { $toInvoke = $this->deferredPostLoadInvocations; $this->deferredPostLoadInvocations = []; diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php index cd821151319..9739d1573f9 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php @@ -61,7 +61,7 @@ class ClassMetadataFactory extends AbstractClassMetadataFactory /** @var EntityManagerInterface|null */ private $em; - /** @var AbstractPlatform */ + /** @var AbstractPlatform|null */ private $targetPlatform; /** @var MappingDriver */ @@ -307,11 +307,9 @@ protected function newClassMetadataInstance($className) * Populates the discriminator value of the given metadata (if not set) by iterating over discriminator * map classes and looking for a fitting one. * - * @return void - * * @throws MappingException */ - private function resolveDiscriminatorValue(ClassMetadata $metadata) + private function resolveDiscriminatorValue(ClassMetadata $metadata): void { if ( $metadata->discriminatorValue @@ -356,7 +354,7 @@ private function resolveDiscriminatorValue(ClassMetadata $metadata) * * @throws MappingException */ - private function addDefaultDiscriminatorMap(ClassMetadata $class) + private function addDefaultDiscriminatorMap(ClassMetadata $class): void { $allClasses = $this->driver->getAllClassNames(); $fqcn = $class->getName(); @@ -384,12 +382,8 @@ private function addDefaultDiscriminatorMap(ClassMetadata $class) /** * Gets the lower-case short name of a class. - * - * @param string $className - * - * @return string */ - private function getShortName($className) + private function getShortName(string $className): string { if (strpos($className, '\\') === false) { return strtolower($className); @@ -402,10 +396,8 @@ private function getShortName($className) /** * Adds inherited fields to the subclass mapping. - * - * @return void */ - private function addInheritedFields(ClassMetadata $subClass, ClassMetadata $parentClass) + private function addInheritedFields(ClassMetadata $subClass, ClassMetadata $parentClass): void { foreach ($parentClass->fieldMappings as $mapping) { if (! isset($mapping['inherited']) && ! $parentClass->isMappedSuperclass) { @@ -427,11 +419,9 @@ private function addInheritedFields(ClassMetadata $subClass, ClassMetadata $pare /** * Adds inherited association mappings to the subclass mapping. * - * @return void - * * @throws MappingException */ - private function addInheritedRelations(ClassMetadata $subClass, ClassMetadata $parentClass) + private function addInheritedRelations(ClassMetadata $subClass, ClassMetadata $parentClass): void { foreach ($parentClass->associationMappings as $field => $mapping) { if ($parentClass->isMappedSuperclass) { @@ -455,7 +445,7 @@ private function addInheritedRelations(ClassMetadata $subClass, ClassMetadata $p } } - private function addInheritedEmbeddedClasses(ClassMetadata $subClass, ClassMetadata $parentClass) + private function addInheritedEmbeddedClasses(ClassMetadata $subClass, ClassMetadata $parentClass): void { foreach ($parentClass->embeddedClasses as $field => $embeddedClass) { if (! isset($embeddedClass['inherited']) && ! $parentClass->isMappedSuperclass) { @@ -477,8 +467,11 @@ private function addInheritedEmbeddedClasses(ClassMetadata $subClass, ClassMetad * @param ClassMetadata $parentClass Parent class to add nested embedded classes metadata to. * @param string $prefix Embedded classes' prefix to use for nested embedded classes field names. */ - private function addNestedEmbeddedClasses(ClassMetadata $subClass, ClassMetadata $parentClass, $prefix) - { + private function addNestedEmbeddedClasses( + ClassMetadata $subClass, + ClassMetadata $parentClass, + string $prefix + ): void { foreach ($subClass->embeddedClasses as $property => $embeddableClass) { if (isset($embeddableClass['inherited'])) { continue; @@ -502,10 +495,8 @@ private function addNestedEmbeddedClasses(ClassMetadata $subClass, ClassMetadata /** * Copy the table indices from the parent class superclass to the child class - * - * @return void */ - private function addInheritedIndexes(ClassMetadata $subClass, ClassMetadata $parentClass) + private function addInheritedIndexes(ClassMetadata $subClass, ClassMetadata $parentClass): void { if (! $parentClass->isMappedSuperclass) { return; @@ -526,10 +517,8 @@ private function addInheritedIndexes(ClassMetadata $subClass, ClassMetadata $par /** * Adds inherited named queries to the subclass mapping. - * - * @return void */ - private function addInheritedNamedQueries(ClassMetadata $subClass, ClassMetadata $parentClass) + private function addInheritedNamedQueries(ClassMetadata $subClass, ClassMetadata $parentClass): void { foreach ($parentClass->namedQueries as $name => $query) { if (! isset($subClass->namedQueries[$name])) { @@ -545,10 +534,8 @@ private function addInheritedNamedQueries(ClassMetadata $subClass, ClassMetadata /** * Adds inherited named native queries to the subclass mapping. - * - * @return void */ - private function addInheritedNamedNativeQueries(ClassMetadata $subClass, ClassMetadata $parentClass) + private function addInheritedNamedNativeQueries(ClassMetadata $subClass, ClassMetadata $parentClass): void { foreach ($parentClass->namedNativeQueries as $name => $query) { if (! isset($subClass->namedNativeQueries[$name])) { @@ -567,10 +554,8 @@ private function addInheritedNamedNativeQueries(ClassMetadata $subClass, ClassMe /** * Adds inherited sql result set mappings to the subclass mapping. - * - * @return void */ - private function addInheritedSqlResultSetMappings(ClassMetadata $subClass, ClassMetadata $parentClass) + private function addInheritedSqlResultSetMappings(ClassMetadata $subClass, ClassMetadata $parentClass): void { foreach ($parentClass->sqlResultSetMappings as $name => $mapping) { if (! isset($subClass->sqlResultSetMappings[$name])) { @@ -599,11 +584,9 @@ private function addInheritedSqlResultSetMappings(ClassMetadata $subClass, Class * Completes the ID generator mapping. If "auto" is specified we choose the generator * most appropriate for the targeted database platform. * - * @return void - * * @throws ORMException */ - private function completeIdGeneratorMapping(ClassMetadataInfo $class) + private function completeIdGeneratorMapping(ClassMetadataInfo $class): void { $idGenType = $class->generatorType; if ($idGenType === ClassMetadata::GENERATOR_TYPE_AUTO) { @@ -715,7 +698,7 @@ private function completeIdGeneratorMapping(ClassMetadataInfo $class) /** * Inherits the ID generator mapping from a parent class. */ - private function inheritIdGeneratorMapping(ClassMetadataInfo $class, ClassMetadataInfo $parent) + private function inheritIdGeneratorMapping(ClassMetadataInfo $class, ClassMetadataInfo $parent): void { if ($parent->isIdGeneratorSequence()) { $class->setSequenceGeneratorDefinition($parent->sequenceGeneratorDefinition); @@ -774,10 +757,7 @@ protected function isEntity(ClassMetadataInterface $class) return isset($class->isMappedSuperclass) && $class->isMappedSuperclass === false; } - /** - * @return Platforms\AbstractPlatform - */ - private function getTargetPlatform() + private function getTargetPlatform(): Platforms\AbstractPlatform { if (! $this->targetPlatform) { $this->targetPlatform = $this->em->getConnection()->getDatabasePlatform(); diff --git a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php index d9867f88dc5..6397406df85 100644 --- a/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php +++ b/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php @@ -2539,11 +2539,9 @@ public function setPrimaryTable(array $table) /** * Checks whether the given type identifies an inheritance type. * - * @param int $type - * - * @return bool TRUE if the given type identifies an inheritance type, FALSe otherwise. + * @return bool TRUE if the given type identifies an inheritance type, FALSE otherwise. */ - private function isInheritanceType($type) + private function isInheritanceType(int $type): bool { return $type === self::INHERITANCE_TYPE_NONE || $type === self::INHERITANCE_TYPE_SINGLE_TABLE || diff --git a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php index 05f4e536820..9e5a00d5e0e 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php @@ -598,14 +598,11 @@ private function loadRelationShipMapping( /** * Attempts to resolve the fetch mode. * - * @param string $className The class name. - * @param string $fetchMode The fetch mode. - * - * @return int The fetch mode as defined in ClassMetadata. - * * @throws MappingException If the fetch mode is not valid. + * + * @psalm-return \Doctrine\ORM\Mapping\ClassMetadata::FETCH_* The fetch mode as defined in ClassMetadata. */ - private function getFetchMode($className, $fetchMode) + private function getFetchMode(string $className, string $fetchMode): int { if (! defined('Doctrine\ORM\Mapping\ClassMetadata::FETCH_' . $fetchMode)) { throw MappingException::invalidFetchMode($className, $fetchMode); @@ -621,7 +618,7 @@ private function getFetchMode($className, $fetchMode) * * @psalm-return list */ - private function getMethodCallbacks(ReflectionMethod $method) + private function getMethodCallbacks(ReflectionMethod $method): array { $callbacks = []; $annotations = $this->reader->getMethodAnnotations($method); @@ -666,8 +663,6 @@ private function getMethodCallbacks(ReflectionMethod $method) /** * Parse the given JoinColumn as array * - * @return mixed[] - * * @psalm-return array{ * name: string, * unique: bool, @@ -677,7 +672,7 @@ private function getMethodCallbacks(ReflectionMethod $method) * referencedColumnName: string * } */ - private function joinColumnToArray(Mapping\JoinColumn $joinColumn) + private function joinColumnToArray(Mapping\JoinColumn $joinColumn): array { return [ 'name' => $joinColumn->name, @@ -692,10 +687,6 @@ private function joinColumnToArray(Mapping\JoinColumn $joinColumn) /** * Parse the given Column as array * - * @param string $fieldName - * - * @return mixed[] - * * @psalm-return array{ * fieldName: string, * type: mixed, @@ -709,7 +700,7 @@ private function joinColumnToArray(Mapping\JoinColumn $joinColumn) * columnDefinition?: string * } */ - private function columnToArray($fieldName, Mapping\Column $column) + private function columnToArray(string $fieldName, Mapping\Column $column): array { $mapping = [ 'fieldName' => $fieldName, diff --git a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php index 190bfb2bbe4..c6a4433135d 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php @@ -259,11 +259,9 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) } /** - * @return void - * * @throws MappingException */ - private function reverseEngineerMappingFromDatabase() + private function reverseEngineerMappingFromDatabase(): void { if ($this->tables !== null) { return; @@ -316,7 +314,7 @@ private function reverseEngineerMappingFromDatabase() /** * Build indexes from a class metadata. */ - private function buildIndexes(ClassMetadataInfo $metadata) + private function buildIndexes(ClassMetadataInfo $metadata): void { $tableName = $metadata->table['name']; $indexes = $this->tables[$tableName]->getIndexes(); @@ -339,7 +337,7 @@ private function buildIndexes(ClassMetadataInfo $metadata) /** * Build field mapping from class metadata. */ - private function buildFieldMappings(ClassMetadataInfo $metadata) + private function buildFieldMappings(ClassMetadataInfo $metadata): void { $tableName = $metadata->table['name']; $columns = $this->tables[$tableName]->getColumns(); @@ -382,8 +380,6 @@ private function buildFieldMappings(ClassMetadataInfo $metadata) /** * Build field mapping from a schema column definition * - * @param string $tableName - * * @psalm-return array{ * fieldName: string, * columnName: string, @@ -400,7 +396,7 @@ private function buildFieldMappings(ClassMetadataInfo $metadata) * length?: int|null * } */ - private function buildFieldMapping($tableName, Column $column) + private function buildFieldMapping(string $tableName, Column $column): array { $fieldMapping = [ 'fieldName' => $this->getFieldNameForColumn($tableName, $column->getName(), false), @@ -501,7 +497,7 @@ private function buildToOneAssociationMappings(ClassMetadataInfo $metadata) * * @psalm-return array */ - private function getTableForeignKeys(Table $table) + private function getTableForeignKeys(Table $table): array { return $this->_sm->getDatabasePlatform()->supportsForeignKeyConstraints() ? $table->getForeignKeys() @@ -513,7 +509,7 @@ private function getTableForeignKeys(Table $table) * * @return string[] */ - private function getTablePrimaryKeys(Table $table) + private function getTablePrimaryKeys(Table $table): array { try { return $table->getPrimaryKey()->getColumns(); @@ -526,12 +522,8 @@ private function getTablePrimaryKeys(Table $table) /** * Returns the mapped class name for a table if it exists. Otherwise return "classified" version. - * - * @param string $tableName - * - * @return string */ - private function getClassNameForTable($tableName) + private function getClassNameForTable(string $tableName): string { if (isset($this->classNamesForTables[$tableName])) { return $this->namespace . $this->classNamesForTables[$tableName]; @@ -543,14 +535,13 @@ private function getClassNameForTable($tableName) /** * Return the mapped field name for a column, if it exists. Otherwise return camelized version. * - * @param string $tableName - * @param string $columnName - * @param bool $fk Whether the column is a foreignkey or not. - * - * @return string + * @param bool $fk Whether the column is a foreignkey or not. */ - private function getFieldNameForColumn($tableName, $columnName, $fk = false) - { + private function getFieldNameForColumn( + string $tableName, + string $columnName, + bool $fk = false + ): string { if (isset($this->fieldNamesForColumns[$tableName]) && isset($this->fieldNamesForColumns[$tableName][$columnName])) { return $this->fieldNamesForColumns[$tableName][$columnName]; } diff --git a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php index 27be9209ebf..c8dfcdceb6f 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php @@ -681,7 +681,7 @@ public function loadMetadataForClass($className, ClassMetadata $metadata) * * @return mixed[] The options array. */ - private function parseOptions(SimpleXMLElement $options) + private function parseOptions(SimpleXMLElement $options): array { $array = []; @@ -724,7 +724,7 @@ private function parseOptions(SimpleXMLElement $options) * columnDefinition?: string * } */ - private function joinColumnToArray(SimpleXMLElement $joinColumnElement) + private function joinColumnToArray(SimpleXMLElement $joinColumnElement): array { $joinColumn = [ 'name' => (string) $joinColumnElement['name'], @@ -753,8 +753,6 @@ private function joinColumnToArray(SimpleXMLElement $joinColumnElement) /** * Parses the given field as array. * - * @return mixed[] - * * @psalm-return array{ * fieldName: string, * type?: string, @@ -769,7 +767,7 @@ private function joinColumnToArray(SimpleXMLElement $joinColumnElement) * options?: array * } */ - private function columnToArray(SimpleXMLElement $fieldMapping) + private function columnToArray(SimpleXMLElement $fieldMapping): array { $mapping = [ 'fieldName' => (string) $fieldMapping['name'], @@ -821,11 +819,9 @@ private function columnToArray(SimpleXMLElement $fieldMapping) /** * Parse / Normalize the cache configuration * - * @return mixed[] - * * @psalm-return array{usage: mixed, region: string|null} */ - private function cacheToArray(SimpleXMLElement $cacheMapping) + private function cacheToArray(SimpleXMLElement $cacheMapping): array { $region = isset($cacheMapping['region']) ? (string) $cacheMapping['region'] : null; $usage = isset($cacheMapping['usage']) ? strtoupper($cacheMapping['usage']) : null; @@ -853,7 +849,7 @@ private function cacheToArray(SimpleXMLElement $cacheMapping) * * @psalm-return list */ - private function getCascadeMappings(SimpleXMLElement $cascadeElement) + private function getCascadeMappings(SimpleXMLElement $cascadeElement): array { $cascades = []; foreach ($cascadeElement->children() as $action) { diff --git a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php index 1f76be2031d..d0433f1721a 100644 --- a/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php +++ b/lib/Doctrine/ORM/Mapping/Driver/YamlDriver.php @@ -837,7 +837,7 @@ private function columnToArray(string $fieldName, ?array $column): array * @psalm-param array{usage: mixed, region: (string|null)} $cacheMapping * @psalm-return array{usage: mixed, region: (string|null)} */ - private function cacheToArray($cacheMapping) + private function cacheToArray(array $cacheMapping): array { $region = isset($cacheMapping['region']) ? (string) $cacheMapping['region'] : null; $usage = isset($cacheMapping['usage']) ? strtoupper($cacheMapping['usage']) : null; diff --git a/lib/Doctrine/ORM/Mapping/Reflection/ReflectionPropertiesGetter.php b/lib/Doctrine/ORM/Mapping/Reflection/ReflectionPropertiesGetter.php index 0d5be731368..7fc12cafdf1 100644 --- a/lib/Doctrine/ORM/Mapping/Reflection/ReflectionPropertiesGetter.php +++ b/lib/Doctrine/ORM/Mapping/Reflection/ReflectionPropertiesGetter.php @@ -56,7 +56,7 @@ public function __construct(ReflectionService $reflectionService) * * @psalm-param class-string $className */ - public function getProperties($className) + public function getProperties($className): array { if (isset($this->properties[$className])) { return $this->properties[$className]; @@ -76,13 +76,11 @@ public function getProperties($className) } /** - * @param string $className - * * @return ReflectionClass[] * * @psalm-return list */ - private function getHierarchyClasses($className): array + private function getHierarchyClasses(string $className): array { $classes = []; $parentClassName = $className; @@ -124,18 +122,12 @@ private function getClassProperties(ReflectionClass $reflectionClass): array ); } - /** - * @return bool - */ - private function isInstanceProperty(ReflectionProperty $reflectionProperty) + private function isInstanceProperty(ReflectionProperty $reflectionProperty): bool { return ! $reflectionProperty->isStatic(); } - /** - * @return ReflectionProperty|null - */ - private function getAccessibleProperty(ReflectionProperty $property) + private function getAccessibleProperty(ReflectionProperty $property): ?ReflectionProperty { return $this->reflectionService->getAccessibleProperty( $property->getDeclaringClass()->getName(), @@ -143,10 +135,7 @@ private function getAccessibleProperty(ReflectionProperty $property) ); } - /** - * @return string - */ - private function getLogicalName(ReflectionProperty $property) + private function getLogicalName(ReflectionProperty $property): string { $propertyName = $property->getName(); diff --git a/lib/Doctrine/ORM/NativeQuery.php b/lib/Doctrine/ORM/NativeQuery.php index d39f4a6890a..546eda7e3e7 100644 --- a/lib/Doctrine/ORM/NativeQuery.php +++ b/lib/Doctrine/ORM/NativeQuery.php @@ -60,7 +60,7 @@ public function getSQL() } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _doExecute() { diff --git a/lib/Doctrine/ORM/PersistentCollection.php b/lib/Doctrine/ORM/PersistentCollection.php index de24b0d36de..4387b0c6f8f 100644 --- a/lib/Doctrine/ORM/PersistentCollection.php +++ b/lib/Doctrine/ORM/PersistentCollection.php @@ -64,7 +64,7 @@ final class PersistentCollection extends AbstractLazyCollection implements Selec /** * The entity that owns this collection. * - * @var object + * @var object|null */ private $owner; @@ -129,11 +129,9 @@ public function __construct(EntityManagerInterface $em, $class, Collection $coll * * @param object $entity * - * @return void - * * @psalm-param array $assoc */ - public function setOwner($entity, array $assoc) + public function setOwner($entity, array $assoc): void { $this->owner = $entity; $this->association = $assoc; @@ -143,18 +141,13 @@ public function setOwner($entity, array $assoc) /** * INTERNAL: * Gets the collection owner. - * - * @return object */ - public function getOwner() + public function getOwner(): ?object { return $this->owner; } - /** - * @return Mapping\ClassMetadata - */ - public function getTypeClass() + public function getTypeClass(): Mapping\ClassMetadata { return $this->typeClass; } @@ -165,10 +158,8 @@ public function getTypeClass() * complete bidirectional associations in the case of a one-to-many association. * * @param mixed $element The element to add. - * - * @return void */ - public function hydrateAdd($element) + public function hydrateAdd($element): void { $this->collection->add($element); @@ -195,10 +186,8 @@ public function hydrateAdd($element) * * @param mixed $key The key to set. * @param mixed $element The element to set. - * - * @return void */ - public function hydrateSet($key, $element) + public function hydrateSet($key, $element): void { $this->collection->set($key, $element); @@ -216,10 +205,8 @@ public function hydrateSet($key, $element) /** * Initializes the collection by loading its contents from the database * if the collection is not yet initialized. - * - * @return void */ - public function initialize() + public function initialize(): void { if ($this->initialized || ! $this->association) { return; @@ -233,10 +220,8 @@ public function initialize() /** * INTERNAL: * Tells this collection to take a snapshot of its current state. - * - * @return void */ - public function takeSnapshot() + public function takeSnapshot(): void { $this->snapshot = $this->collection->toArray(); $this->isDirty = false; @@ -248,7 +233,7 @@ public function takeSnapshot() * * @psalm-return array The last snapshot of the elements. */ - public function getSnapshot() + public function getSnapshot(): array { return $this->snapshot; } @@ -259,7 +244,7 @@ public function getSnapshot() * * @return mixed[] */ - public function getDeleteDiff() + public function getDeleteDiff(): array { return array_udiff_assoc( $this->snapshot, @@ -276,7 +261,7 @@ static function ($a, $b): int { * * @return mixed[] */ - public function getInsertDiff() + public function getInsertDiff(): array { return array_udiff_assoc( $this->collection->toArray(), @@ -292,17 +277,15 @@ static function ($a, $b): int { * * @psalm-return array */ - public function getMapping() + public function getMapping(): array { return $this->association; } /** * Marks this collection as changed/dirty. - * - * @return void */ - private function changed() + private function changed(): void { if ($this->isDirty) { return; @@ -327,7 +310,7 @@ private function changed() * * @return bool TRUE if the collection is dirty, FALSE otherwise. */ - public function isDirty() + public function isDirty(): bool { return $this->isDirty; } @@ -336,10 +319,8 @@ public function isDirty() * Sets a boolean flag, indicating whether this collection is dirty. * * @param bool $dirty Whether the collection should be marked dirty or not. - * - * @return void */ - public function setDirty($dirty) + public function setDirty($dirty): void { $this->isDirty = $dirty; } @@ -348,20 +329,16 @@ public function setDirty($dirty) * Sets the initialized flag of the collection, forcing it into that state. * * @param bool $bool - * - * @return void */ - public function setInitialized($bool) + public function setInitialized($bool): void { $this->initialized = $bool; } /** * {@inheritdoc} - * - * @return object */ - public function remove($key) + public function remove($key): object { // TODO: If the keys are persistent as well (not yet implemented) // and the collection is not initialized and orphanRemoval is @@ -390,7 +367,7 @@ public function remove($key) /** * {@inheritdoc} */ - public function removeElement($element) + public function removeElement($element): bool { $removed = parent::removeElement($element); @@ -415,7 +392,7 @@ public function removeElement($element) /** * {@inheritdoc} */ - public function containsKey($key) + public function containsKey($key): bool { if ( ! $this->initialized && $this->association['fetch'] === ClassMetadata::FETCH_EXTRA_LAZY @@ -432,7 +409,7 @@ public function containsKey($key) /** * {@inheritdoc} */ - public function contains($element) + public function contains($element): bool { if (! $this->initialized && $this->association['fetch'] === ClassMetadata::FETCH_EXTRA_LAZY) { $persister = $this->em->getUnitOfWork()->getCollectionPersister($this->association); @@ -463,10 +440,7 @@ public function get($key) return parent::get($key); } - /** - * {@inheritdoc} - */ - public function count() + public function count(): int { if (! $this->initialized && $this->association !== null && $this->association['fetch'] === ClassMetadata::FETCH_EXTRA_LAZY) { $persister = $this->em->getUnitOfWork()->getCollectionPersister($this->association); @@ -480,7 +454,7 @@ public function count() /** * {@inheritdoc} */ - public function set($key, $value) + public function set($key, $value): void { parent::set($key, $value); @@ -494,7 +468,7 @@ public function set($key, $value) /** * {@inheritdoc} */ - public function add($value) + public function add($value): bool { $this->collection->add($value); @@ -512,7 +486,7 @@ public function add($value) /** * {@inheritdoc} */ - public function offsetExists($offset) + public function offsetExists($offset): bool { return $this->containsKey($offset); } @@ -528,7 +502,7 @@ public function offsetGet($offset) /** * {@inheritdoc} */ - public function offsetSet($offset, $value) + public function offsetSet($offset, $value): void { if (! isset($offset)) { $this->add($value); @@ -541,26 +515,18 @@ public function offsetSet($offset, $value) /** * {@inheritdoc} - * - * @return object */ - public function offsetUnset($offset) + public function offsetUnset($offset): object { return $this->remove($offset); } - /** - * {@inheritdoc} - */ - public function isEmpty() + public function isEmpty(): bool { return $this->collection->isEmpty() && $this->count() === 0; } - /** - * {@inheritdoc} - */ - public function clear() + public function clear(): void { if ($this->initialized && $this->isEmpty()) { $this->collection->clear(); @@ -625,7 +591,7 @@ public function __sleep(): array * * @psalm-return array */ - public function slice($offset, $length = null) + public function slice($offset, $length = null): array { if (! $this->initialized && ! $this->isDirty && $this->association['fetch'] === ClassMetadata::FETCH_EXTRA_LAZY) { $persister = $this->em->getUnitOfWork()->getCollectionPersister($this->association); @@ -646,8 +612,6 @@ public function slice($offset, $length = null) * 3. Snapshot leads to invalid diffs being generated. * 4. Lazy loading grabs entities from old owner object. * 5. New collection is connected to old owner and leads to duplicate keys. - * - * @return void */ public function __clone() { @@ -671,7 +635,7 @@ public function __clone() * * @throws RuntimeException */ - public function matching(Criteria $criteria) + public function matching(Criteria $criteria): Collection { if ($this->isDirty) { $this->initialize(); @@ -708,15 +672,12 @@ public function matching(Criteria $criteria) * * @return Collection */ - public function unwrap() + public function unwrap(): Collection { return $this->collection; } - /** - * {@inheritdoc} - */ - protected function doInitialize() + protected function doInitialize(): void { // Has NEW objects added through add(). Remember them. $newlyAddedDirtyObjects = []; diff --git a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php index 7f38f934640..1f72262e70e 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php @@ -526,14 +526,14 @@ protected function getInsertRowSQLParameters(PersistentCollection $collection, $ * Collects the parameters for inserting/deleting on the join table in the order * of the join table columns as specified in ManyToManyMapping#joinTableColumns. * - * @param object $element - * * @return mixed[] * * @psalm-return list */ - private function collectJoinTableColumnParameters(PersistentCollection $collection, $element) - { + private function collectJoinTableColumnParameters( + PersistentCollection $collection, + object $element + ): array { $params = []; $mapping = $collection->getMapping(); $isComposite = count($mapping['joinTableColumns']) > 2; @@ -569,8 +569,7 @@ private function collectJoinTableColumnParameters(PersistentCollection $collecti } /** - * @param string $key - * @param bool $addFilters Whether the filter SQL should be included or not. + * @param bool $addFilters Whether the filter SQL should be included or not. * * @return mixed[] ordered vector: * - quoted join table name @@ -580,8 +579,11 @@ private function collectJoinTableColumnParameters(PersistentCollection $collecti * * @psalm-return array{0: string, 1: list, 2: list, 3: list} */ - private function getJoinTableRestrictionsWithKey(PersistentCollection $collection, $key, $addFilters) - { + private function getJoinTableRestrictionsWithKey( + PersistentCollection $collection, + string $key, + bool $addFilters + ): array { $filterMapping = $collection->getMapping(); $mapping = $filterMapping; $indexBy = $mapping['indexBy']; @@ -655,8 +657,7 @@ private function getJoinTableRestrictionsWithKey(PersistentCollection $collectio } /** - * @param object $element - * @param bool $addFilters Whether the filter SQL should be included or not. + * @param bool $addFilters Whether the filter SQL should be included or not. * * @return mixed[] ordered vector: * - quoted join table name @@ -666,8 +667,11 @@ private function getJoinTableRestrictionsWithKey(PersistentCollection $collectio * * @psalm-return array{0: string, 1: list, 2: list, 3: list} */ - private function getJoinTableRestrictions(PersistentCollection $collection, $element, $addFilters) - { + private function getJoinTableRestrictions( + PersistentCollection $collection, + object $element, + bool $addFilters + ): array { $filterMapping = $collection->getMapping(); $mapping = $filterMapping; @@ -727,7 +731,7 @@ private function getJoinTableRestrictions(PersistentCollection $collection, $ele * * @return mixed[][] */ - private function expandCriteriaParameters(Criteria $criteria) + private function expandCriteriaParameters(Criteria $criteria): array { $expression = $criteria->getWhereExpression(); @@ -744,10 +748,7 @@ private function expandCriteriaParameters(Criteria $criteria) return $types; } - /** - * @return string - */ - private function getOrderingSql(Criteria $criteria, ClassMetadata $targetClass) + private function getOrderingSql(Criteria $criteria, ClassMetadata $targetClass): string { $orderings = $criteria->getOrderings(); if ($orderings) { @@ -768,11 +769,9 @@ private function getOrderingSql(Criteria $criteria, ClassMetadata $targetClass) } /** - * @return string - * * @throws DBALException */ - private function getLimitSql(Criteria $criteria) + private function getLimitSql(Criteria $criteria): string { $limit = $criteria->getMaxResults(); $offset = $criteria->getFirstResult(); diff --git a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php index f872cc1c6d4..36efcc6999a 100644 --- a/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php +++ b/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php @@ -180,11 +180,9 @@ public function loadCriteria(PersistentCollection $collection, Criteria $criteri } /** - * @return int - * * @throws DBALException */ - private function deleteEntityCollection(PersistentCollection $collection) + private function deleteEntityCollection(PersistentCollection $collection): int { $mapping = $collection->getMapping(); $identifier = $this->uow->getEntityIdentifier($collection->getOwner()); @@ -210,11 +208,9 @@ private function deleteEntityCollection(PersistentCollection $collection) * * Thanks Steve Ebersole (Hibernate) for idea on how to tackle reliably this scenario, we owe him a beer! =) * - * @return int - * * @throws DBALException */ - private function deleteJoinedEntityCollection(PersistentCollection $collection) + private function deleteJoinedEntityCollection(PersistentCollection $collection): int { $mapping = $collection->getMapping(); $sourceClass = $this->em->getClassMetadata($mapping['sourceEntity']); diff --git a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php index 9e17c7e214f..f0dbfaf38f1 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php @@ -24,9 +24,9 @@ use Doctrine\Common\Collections\Expr\Comparison; use Doctrine\Common\Util\ClassUtils; use Doctrine\DBAL\Connection; +use Doctrine\DBAL\Driver\Statement as DriverStatement; use Doctrine\DBAL\LockMode; use Doctrine\DBAL\Platforms\AbstractPlatform; -use Doctrine\DBAL\Statement; use Doctrine\DBAL\Types\Type; use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Mapping\ClassMetadata; @@ -415,13 +415,15 @@ public function update($entity) * @param mixed[] $updateData The map of columns to update (column => value). * @param bool $versioned Whether the UPDATE should be versioned. * - * @return void - * * @throws ORMException * @throws OptimisticLockException */ - final protected function updateTable($entity, $quotedTableName, array $updateData, $versioned = false) - { + final protected function updateTable( + $entity, + $quotedTableName, + array $updateData, + $versioned = false + ): void { $set = []; $types = []; $params = []; @@ -922,12 +924,11 @@ public function getManyToManyCollection(array $assoc, $sourceEntity, $offset = n /** * Loads an array of entities from a given DBAL statement. * - * @param mixed[] $assoc - * @param Statement $stmt + * @param mixed[] $assoc * * @return mixed[] */ - private function loadArrayFromStatement($assoc, $stmt) + private function loadArrayFromStatement(array $assoc, DriverStatement $stmt): array { $rsm = $this->currentPersisterContext->rsm; $hints = [UnitOfWork::HINT_DEFEREAGERLOAD => true]; @@ -943,14 +944,15 @@ private function loadArrayFromStatement($assoc, $stmt) /** * Hydrates a collection from a given DBAL statement. * - * @param mixed[] $assoc - * @param Statement $stmt - * @param PersistentCollection $coll + * @param mixed[] $assoc * * @return mixed[] */ - private function loadCollectionFromStatement($assoc, $stmt, $coll) - { + private function loadCollectionFromStatement( + array $assoc, + DriverStatement $stmt, + PersistentCollection $coll + ): array { $rsm = $this->currentPersisterContext->rsm; $hints = [ UnitOfWork::HINT_DEFEREAGERLOAD => true, @@ -976,7 +978,7 @@ public function loadManyToManyCollection(array $assoc, $sourceEntity, Persistent } /** - * @return \Doctrine\DBAL\Driver\Statement + * @return DriverStatement * * @throws MappingException * @@ -1660,8 +1662,6 @@ public function getSelectConditionStatementSQL($field, $value, $assoc = null, $c /** * Builds the left-hand-side of a where condition statement. * - * @param string $field - * * @return string[] * * @throws ORMException @@ -1669,8 +1669,10 @@ public function getSelectConditionStatementSQL($field, $value, $assoc = null, $c * @psalm-param array|null $assoc * @psalm-return list */ - private function getSelectConditionStatementColumnSQL($field, $assoc = null) - { + private function getSelectConditionStatementColumnSQL( + string $field, + ?array $assoc = null + ): array { if (isset($this->class->fieldMappings[$field])) { $className = $this->class->fieldMappings[$field]['inherited'] ?? $this->class->name; @@ -1770,16 +1772,14 @@ public function loadOneToManyCollection(array $assoc, $sourceEntity, PersistentC /** * Builds criteria and execute SQL statement to fetch the one to many entities from. * - * @param object $sourceEntity - * @param int|null $offset - * @param int|null $limit - * - * @return Statement - * * @psalm-param array $assoc */ - private function getOneToManyStatement(array $assoc, $sourceEntity, $offset = null, $limit = null) - { + private function getOneToManyStatement( + array $assoc, + object $sourceEntity, + ?int $offset = null, + ?int $limit = null + ): DriverStatement { $this->switchPersisterContext($offset, $limit); $criteria = []; @@ -1858,7 +1858,7 @@ public function expandParameters($criteria) * * @psalm-return array{0: array, 1: list} */ - private function expandToManyParameters($criteria) + private function expandToManyParameters(array $criteria): array { $params = []; $types = []; @@ -1878,8 +1878,7 @@ private function expandToManyParameters($criteria) /** * Infers field types to be used by parameter type casting. * - * @param string $field - * @param mixed $value + * @param mixed $value * * @return int[]|null[]|string[] * @@ -1887,7 +1886,7 @@ private function expandToManyParameters($criteria) * * @psalm-return list<(int|string|null)> */ - private function getTypes($field, $value, ClassMetadata $class) + private function getTypes(string $field, $value, ClassMetadata $class): array { $types = []; @@ -1938,7 +1937,7 @@ private function getTypes($field, $value, ClassMetadata $class) * * @return array{mixed} */ - private function getValues($value) + private function getValues($value): array { if (is_array($value)) { $newValue = []; diff --git a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php index 0ad5bab07b3..1f5026bb669 100644 --- a/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php +++ b/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php @@ -68,10 +68,8 @@ protected function getDiscriminatorColumnTableName() /** * This function finds the ClassMetadata instance in an inheritance hierarchy * that is responsible for enabling versioning. - * - * @return ClassMetadata */ - private function getVersionedClassMetadata() + private function getVersionedClassMetadata(): ClassMetadata { if (isset($this->class->fieldMappings[$this->class->versionField]['inherited'])) { $definingClassName = $this->class->fieldMappings[$this->class->versionField]['inherited']; @@ -576,12 +574,7 @@ protected function assignDefaultVersionValue($entity, array $id) $this->class->setFieldValue($entity, $this->class->versionField, $value); } - /** - * @param string $baseTableAlias - * - * @return string - */ - private function getJoinSql($baseTableAlias) + private function getJoinSql(string $baseTableAlias): string { $joinSql = ''; $identifierColumn = $this->class->getIdentifierColumnNames(); diff --git a/lib/Doctrine/ORM/Proxy/ProxyFactory.php b/lib/Doctrine/ORM/Proxy/ProxyFactory.php index b7aa3943992..9f7e38ab263 100644 --- a/lib/Doctrine/ORM/Proxy/ProxyFactory.php +++ b/lib/Doctrine/ORM/Proxy/ProxyFactory.php @@ -109,17 +109,15 @@ protected function createProxyDefinition($className) /** * Creates a closure capable of initializing a proxy * - * @return Closure - * * @throws EntityNotFoundException * * @psalm-return Closure(BaseProxy ): void */ - private function createInitializer(ClassMetadata $classMetadata, EntityPersister $entityPersister) + private function createInitializer(ClassMetadata $classMetadata, EntityPersister $entityPersister): Closure { $wakeupProxy = $classMetadata->getReflectionClass()->hasMethod('__wakeup'); - return function (BaseProxy $proxy) use ($entityPersister, $classMetadata, $wakeupProxy) { + return function (BaseProxy $proxy) use ($entityPersister, $classMetadata, $wakeupProxy): void { $initializer = $proxy->__getInitializer(); $cloner = $proxy->__getCloner(); @@ -162,15 +160,13 @@ private function createInitializer(ClassMetadata $classMetadata, EntityPersister /** * Creates a closure capable of finalizing state a cloned proxy * - * @return Closure - * * @throws EntityNotFoundException * * @psalm-return Closure(BaseProxy ): void */ - private function createCloner(ClassMetadata $classMetadata, EntityPersister $entityPersister) + private function createCloner(ClassMetadata $classMetadata, EntityPersister $entityPersister): Closure { - return function (BaseProxy $proxy) use ($entityPersister, $classMetadata) { + return function (BaseProxy $proxy) use ($entityPersister, $classMetadata): void { if ($proxy->__isInitialized()) { return; } diff --git a/lib/Doctrine/ORM/Query.php b/lib/Doctrine/ORM/Query.php index aefe10e5966..a2928b3e6b9 100644 --- a/lib/Doctrine/ORM/Query.php +++ b/lib/Doctrine/ORM/Query.php @@ -228,10 +228,8 @@ protected function getResultSetMapping() * Parses the DQL query, if necessary, and stores the parser result. * * Note: Populates $this->_parserResult as a side-effect. - * - * @return ParserResult */ - private function parse() + private function parse(): ParserResult { $types = []; @@ -279,7 +277,7 @@ private function parse() } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function _doExecute() { @@ -335,7 +333,7 @@ private function evictResultSetCache( array $sqlParams, array $types, array $connectionParams - ) { + ): void { if ($this->_queryCacheProfile === null || ! $this->getExpireResultCache()) { return; } @@ -353,7 +351,7 @@ private function evictResultSetCache( /** * Evict entity cache region */ - private function evictEntityCacheRegion() + private function evictEntityCacheRegion(): void { $AST = $this->getAST(); @@ -494,7 +492,7 @@ public function useQueryCache($bool): self * @return Cache|null The cache driver used for query caching or NULL, if * this Query does not use query caching. */ - public function getQueryCacheDriver() + public function getQueryCacheDriver(): ?Cache { if ($this->queryCache) { return $this->queryCache; @@ -523,10 +521,8 @@ public function setQueryCacheLifetime($timeToLive): self /** * Retrieves the lifetime of resultset cache. - * - * @return int */ - public function getQueryCacheLifetime() + public function getQueryCacheLifetime(): int { return $this->queryCacheTTL; } @@ -547,10 +543,8 @@ public function expireQueryCache($expire = true): self /** * Retrieves if the query cache is active or not. - * - * @return bool */ - public function getExpireQueryCache() + public function getExpireQueryCache(): bool { return $this->expireQueryCache; } @@ -558,7 +552,7 @@ public function getExpireQueryCache() /** * @override */ - public function free() + public function free(): void { parent::free(); @@ -583,10 +577,8 @@ public function setDQL($dqlQuery): self /** * Returns the DQL query that is represented by this query object. - * - * @return string|null */ - public function getDQL() + public function getDQL(): ?string { return $this->dql; } @@ -601,7 +593,7 @@ public function getDQL() * * @return int The query state. */ - public function getState() + public function getState(): int { return $this->_state; } @@ -610,10 +602,8 @@ public function getState() * Method to check if an arbitrary piece of DQL exists * * @param string $dql Arbitrary piece of DQL to check for. - * - * @return bool */ - public function contains($dql) + public function contains($dql): bool { return stripos($this->getDQL(), $dql) !== false; } @@ -639,7 +629,7 @@ public function setFirstResult($firstResult): self * * @return int|null The position of the first result. */ - public function getFirstResult() + public function getFirstResult(): ?int { return $this->firstResult; } @@ -665,7 +655,7 @@ public function setMaxResults($maxResults): self * * @return int|null Maximum number of results. */ - public function getMaxResults() + public function getMaxResults(): ?int { return $this->maxResults; } @@ -679,11 +669,9 @@ public function getMaxResults() * @param ArrayCollection|mixed[]|null $parameters The query parameters. * @param string|int $hydrationMode The hydration mode to use. * - * @return IterableResult - * * @psalm-param ArrayCollection|array|null $parameters */ - public function iterate($parameters = null, $hydrationMode = self::HYDRATE_OBJECT) + public function iterate($parameters = null, $hydrationMode = self::HYDRATE_OBJECT): IterableResult { $this->setHint(self::HINT_INTERNAL_ITERATION, true); @@ -701,7 +689,7 @@ public function toIterable(iterable $parameters = [], $hydrationMode = self::HYD /** * {@inheritdoc} */ - public function setHint($name, $value) + public function setHint($name, $value): self { $this->_state = self::STATE_DIRTY; @@ -711,7 +699,7 @@ public function setHint($name, $value) /** * {@inheritdoc} */ - public function setHydrationMode($hydrationMode) + public function setHydrationMode($hydrationMode): self { $this->_state = self::STATE_DIRTY; @@ -745,7 +733,7 @@ public function setLockMode($lockMode): self * * @return int|null The current lock mode of this query or NULL if no specific lock mode is set. */ - public function getLockMode() + public function getLockMode(): ?int { $lockMode = $this->getHint(self::HINT_LOCK_MODE); @@ -777,18 +765,13 @@ protected function getQueryCacheId(): string ); } - /** - * {@inheritdoc} - */ - protected function getHash() + protected function getHash(): string { return sha1(parent::getHash() . '-' . $this->firstResult . '-' . $this->maxResults); } /** * Cleanup Query resource when clone is called. - * - * @return void */ public function __clone() { diff --git a/lib/Doctrine/ORM/Query/AST/Functions/TrimFunction.php b/lib/Doctrine/ORM/Query/AST/Functions/TrimFunction.php index b7e07099036..e41122b37c7 100644 --- a/lib/Doctrine/ORM/Query/AST/Functions/TrimFunction.php +++ b/lib/Doctrine/ORM/Query/AST/Functions/TrimFunction.php @@ -93,9 +93,9 @@ public function parse(Parser $parser) } /** - * @return int + * @psalm-return AbstractPlatform::TRIM_* */ - private function getTrimMode() + private function getTrimMode(): int { if ($this->leading) { return AbstractPlatform::TRIM_LEADING; @@ -112,10 +112,7 @@ private function getTrimMode() return AbstractPlatform::TRIM_UNSPECIFIED; } - /** - * @return void - */ - private function parseTrimMode(Parser $parser) + private function parseTrimMode(Parser $parser): void { $lexer = $parser->getLexer(); $value = $lexer->lookahead['value']; diff --git a/lib/Doctrine/ORM/Query/Expr/Composite.php b/lib/Doctrine/ORM/Query/Expr/Composite.php index f65c6975ccb..f75aa8d4654 100644 --- a/lib/Doctrine/ORM/Query/Expr/Composite.php +++ b/lib/Doctrine/ORM/Query/Expr/Composite.php @@ -51,10 +51,8 @@ public function __toString() /** * @param string|object $part - * - * @return string */ - private function processQueryPart($part) + private function processQueryPart($part): string { $queryPart = (string) $part; diff --git a/lib/Doctrine/ORM/Query/Filter/SQLFilter.php b/lib/Doctrine/ORM/Query/Filter/SQLFilter.php index f9cb0a59a40..9cd80d05482 100644 --- a/lib/Doctrine/ORM/Query/Filter/SQLFilter.php +++ b/lib/Doctrine/ORM/Query/Filter/SQLFilter.php @@ -135,10 +135,8 @@ final public function __toString() /** * Returns the database connection used by the entity manager - * - * @return Connection */ - final protected function getConnection() + final protected function getConnection(): Connection { return $this->em->getConnection(); } diff --git a/lib/Doctrine/ORM/Query/Parser.php b/lib/Doctrine/ORM/Query/Parser.php index 27e1e127149..cb761fdcf27 100644 --- a/lib/Doctrine/ORM/Query/Parser.php +++ b/lib/Doctrine/ORM/Query/Parser.php @@ -464,10 +464,8 @@ public function parse() * as the hydration process relies on that order for proper operation. * * @param AST\SelectStatement|AST\DeleteStatement|AST\UpdateStatement $AST - * - * @return void */ - private function fixIdentificationVariableOrder($AST) + private function fixIdentificationVariableOrder(Node $AST): void { if (count($this->identVariableExpressions) <= 1) { return; @@ -559,7 +557,7 @@ public function semanticalError($message = '', $token = null) * * @psalm-return array| null */ - private function peekBeyondClosingParenthesis(bool $resetPeek = true) + private function peekBeyondClosingParenthesis(bool $resetPeek = true): ?array { $token = $this->lexer->peek(); $numUnmatched = 1; @@ -591,9 +589,9 @@ private function peekBeyondClosingParenthesis(bool $resetPeek = true) /** * Checks if the given token indicates a mathematical operator. * - * @psalm-param array $token + * @psalm-param array|null $token */ - private function isMathOperator($token): bool + private function isMathOperator(?array $token): bool { return $token !== null && in_array($token['type'], [Lexer::T_PLUS, Lexer::T_MINUS, Lexer::T_DIVIDE, Lexer::T_MULTIPLY]); } @@ -1043,7 +1041,7 @@ public function AbstractSchemaName() * * @throws QueryException if the name does not exist. */ - private function validateAbstractSchemaName($schemaName) + private function validateAbstractSchemaName(string $schemaName): void { if (! (class_exists($schemaName, true) || interface_exists($schemaName, true))) { $this->semanticalError( @@ -3488,10 +3486,8 @@ public function FunctionDeclaration() /** * Helper function for FunctionDeclaration grammar rule. - * - * @return FunctionNode */ - private function CustomFunctionDeclaration() + private function CustomFunctionDeclaration(): ?FunctionNode { $token = $this->lexer->lookahead; $funcName = strtolower($token['value']); diff --git a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php index 288ada32ec7..31063e7dac7 100644 --- a/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php +++ b/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php @@ -197,14 +197,10 @@ private function isInheritanceSupported(ClassMetadataInfo $classMetadata): bool /** * Gets column alias for a given column. * - * @param string $columnName - * @param int $mode - * - * @return string - * + * @psalm-param self::COLUMN_RENAMING_* $mode * @psalm-param array $customRenameColumns */ - private function getColumnAlias($columnName, $mode, array $customRenameColumns) + private function getColumnAlias(string $columnName, int $mode, array $customRenameColumns): string { switch ($mode) { case self::COLUMN_RENAMING_INCREMENT: @@ -215,6 +211,12 @@ private function getColumnAlias($columnName, $mode, array $customRenameColumns) case self::COLUMN_RENAMING_NONE: return $columnName; + + default: + throw new InvalidArgumentException(sprintf( + '%d is not a valid value for $mode', + $mode + )); } } @@ -223,15 +225,13 @@ private function getColumnAlias($columnName, $mode, array $customRenameColumns) * * This depends on the renaming mode selected by the user. * - * @param string $className - * @param int $mode - * * @return string[] * + * @psalm-param self::COLUMN_RENAMING_* $mode * @psalm-param array $customRenameColumns * @psalm-return array */ - private function getColumnAliasMap($className, $mode, array $customRenameColumns) + private function getColumnAliasMap(string $className, $mode, array $customRenameColumns): array { if ($customRenameColumns) { // for BC with 2.2-2.3 API $mode = self::COLUMN_RENAMING_CUSTOM; diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index 2831ac07a0e..b10f809091a 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -936,11 +936,11 @@ public function walkRangeVariableDeclaration($rangeVariableDeclaration) /** * Generate appropriate SQL for RangeVariableDeclaration AST node - * - * @param AST\RangeVariableDeclaration $rangeVariableDeclaration */ - private function generateRangeVariableDeclarationSQL($rangeVariableDeclaration, bool $buildNestedJoins): string - { + private function generateRangeVariableDeclarationSQL( + AST\RangeVariableDeclaration $rangeVariableDeclaration, + bool $buildNestedJoins + ): string { $class = $this->em->getClassMetadata($rangeVariableDeclaration->abstractSchemaName); $dqlAlias = $rangeVariableDeclaration->aliasIdentificationVariable; @@ -2354,8 +2354,10 @@ public function walkResultVariable($resultVariable) * * @throws QueryException */ - private function getChildDiscriminatorsFromClassMetadata(ClassMetadataInfo $rootClass, AST\InstanceOfExpression $instanceOfExpr): string - { + private function getChildDiscriminatorsFromClassMetadata( + ClassMetadataInfo $rootClass, + AST\InstanceOfExpression $instanceOfExpr + ): string { $sqlParameterList = []; $discriminators = []; foreach ($instanceOfExpr->value as $parameter) { diff --git a/lib/Doctrine/ORM/QueryBuilder.php b/lib/Doctrine/ORM/QueryBuilder.php index feb8185ef1d..b9f7c47d708 100644 --- a/lib/Doctrine/ORM/QueryBuilder.php +++ b/lib/Doctrine/ORM/QueryBuilder.php @@ -393,10 +393,8 @@ public function getQuery() * * @param string $alias The alias of the new join entity * @param string $parentAlias The parent entity alias of the join relationship - * - * @return string */ - private function findRootAlias($alias, $parentAlias) + private function findRootAlias(string $alias, string $parentAlias): string { $rootAlias = null; @@ -1394,10 +1392,7 @@ public function getDQLParts() return $this->_dqlParts; } - /** - * @return string - */ - private function getDQLForDelete() + private function getDQLForDelete(): string { return 'DELETE' . $this->getReducedDQLQueryPart('from', ['pre' => ' ', 'separator' => ', ']) @@ -1405,10 +1400,7 @@ private function getDQLForDelete() . $this->getReducedDQLQueryPart('orderBy', ['pre' => ' ORDER BY ', 'separator' => ', ']); } - /** - * @return string - */ - private function getDQLForUpdate() + private function getDQLForUpdate(): string { return 'UPDATE' . $this->getReducedDQLQueryPart('from', ['pre' => ' ', 'separator' => ', ']) @@ -1417,10 +1409,7 @@ private function getDQLForUpdate() . $this->getReducedDQLQueryPart('orderBy', ['pre' => ' ORDER BY ', 'separator' => ', ']); } - /** - * @return string - */ - private function getDQLForSelect() + private function getDQLForSelect(): string { $dql = 'SELECT' . ($this->_dqlParts['distinct'] === true ? ' DISTINCT' : '') diff --git a/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php b/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php index 53a1b017cb1..f7fe2476a42 100644 --- a/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php +++ b/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php @@ -40,7 +40,7 @@ final class DefaultRepositoryFactory implements RepositoryFactory /** * {@inheritdoc} */ - public function getRepository(EntityManagerInterface $entityManager, $entityName) + public function getRepository(EntityManagerInterface $entityManager, $entityName): ObjectRepository { $repositoryHash = $entityManager->getClassMetadata($entityName)->getName() . spl_object_hash($entityManager); @@ -56,11 +56,11 @@ public function getRepository(EntityManagerInterface $entityManager, $entityName * * @param EntityManagerInterface $entityManager The EntityManager instance. * @param string $entityName The name of the entity. - * - * @return ObjectRepository */ - private function createRepository(EntityManagerInterface $entityManager, $entityName) - { + private function createRepository( + EntityManagerInterface $entityManager, + string $entityName + ): ObjectRepository { $metadata = $entityManager->getClassMetadata($entityName); $repositoryClassName = $metadata->customRepositoryClassName ?: $entityManager->getConfiguration()->getDefaultRepositoryClassName(); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php index 4c4c41a4513..adc1b4f4841 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/MappingDescribeCommand.php @@ -59,10 +59,7 @@ */ final class MappingDescribeCommand extends Command { - /** - * {@inheritdoc} - */ - protected function configure() + protected function configure(): void { $this->setName('orm:mapping:describe') ->addArgument('entityName', InputArgument::REQUIRED, 'Full or partial name of entity') @@ -79,10 +76,7 @@ protected function configure() ); } - /** - * {@inheritdoc} - */ - protected function execute(InputInterface $input, OutputInterface $output) + protected function execute(InputInterface $input, OutputInterface $output): int { $ui = new SymfonyStyle($input, $output); @@ -99,8 +93,11 @@ protected function execute(InputInterface $input, OutputInterface $output) * * @param string $entityName Full or partial entity class name */ - private function displayEntity($entityName, EntityManagerInterface $entityManager, SymfonyStyle $ui) - { + private function displayEntity( + string $entityName, + EntityManagerInterface $entityManager, + SymfonyStyle $ui + ): void { $metadata = $this->getClassMetadata($entityName, $entityManager); $ui->table( @@ -171,11 +168,11 @@ private function getMappedEntities(EntityManagerInterface $entityManager): array * name * * @param string $entityName Full or partial entity name - * - * @return ClassMetadata */ - private function getClassMetadata($entityName, EntityManagerInterface $entityManager) - { + private function getClassMetadata( + string $entityName, + EntityManagerInterface $entityManager + ): ClassMetadata { try { return $entityManager->getClassMetadata($entityName); } catch (MappingException $e) { @@ -210,10 +207,8 @@ static function ($mappedEntity) use ($entityName) { * Format the given value for console output * * @param mixed $value - * - * @return string */ - private function formatValue($value) + private function formatValue($value): string { if ($value === '') { return ''; @@ -256,7 +251,7 @@ private function formatValue($value) * * @psalm-return array{0: string, 1: string} */ - private function formatField($label, $value): array + private function formatField(string $label, $value): array { if ($value === null) { $value = 'None'; diff --git a/lib/Doctrine/ORM/Tools/ConvertDoctrine1Schema.php b/lib/Doctrine/ORM/Tools/ConvertDoctrine1Schema.php index a4fdbf6817d..a9544396c56 100644 --- a/lib/Doctrine/ORM/Tools/ConvertDoctrine1Schema.php +++ b/lib/Doctrine/ORM/Tools/ConvertDoctrine1Schema.php @@ -107,8 +107,10 @@ public function getMetadata() /** * @param mixed[] $mappingInformation */ - private function convertToClassMetadataInfo(string $className, $mappingInformation): ClassMetadataInfo - { + private function convertToClassMetadataInfo( + string $className, + array $mappingInformation + ): ClassMetadataInfo { $metadata = new ClassMetadataInfo($className); $this->convertTableName($className, $mappingInformation, $metadata); @@ -137,13 +139,13 @@ private function convertTableName(string $className, array $model, ClassMetadata } /** - * @param string $className * @param mixed[] $model - * - * @return void */ - private function convertColumns($className, array $model, ClassMetadataInfo $metadata) - { + private function convertColumns( + string $className, + array $model, + ClassMetadataInfo $metadata + ): void { $id = false; if (isset($model['columns']) && $model['columns']) { @@ -169,16 +171,18 @@ private function convertColumns($className, array $model, ClassMetadataInfo $met } /** - * @param string $className - * @param string $name * @param string|mixed[] $column * * @return mixed[] * * @throws ToolsException */ - private function convertColumn($className, $name, $column, ClassMetadataInfo $metadata) - { + private function convertColumn( + string $className, + string $name, + $column, + ClassMetadataInfo $metadata + ): array { if (is_string($column)) { $string = $column; $column = []; @@ -259,13 +263,13 @@ private function convertColumn($className, $name, $column, ClassMetadataInfo $me } /** - * @param string $className * @param mixed[] $model - * - * @return void */ - private function convertIndexes($className, array $model, ClassMetadataInfo $metadata) - { + private function convertIndexes( + string $className, + array $model, + ClassMetadataInfo $metadata + ): void { if (empty($model['indexes'])) { return; } @@ -281,13 +285,13 @@ private function convertIndexes($className, array $model, ClassMetadataInfo $met } /** - * @param string $className * @param mixed[] $model - * - * @return void */ - private function convertRelations($className, array $model, ClassMetadataInfo $metadata) - { + private function convertRelations( + string $className, + array $model, + ClassMetadataInfo $metadata + ): void { if (empty($model['relations'])) { return; } diff --git a/lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php b/lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php index f9a9b046aba..d8dab8afab5 100644 --- a/lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php +++ b/lib/Doctrine/ORM/Tools/DebugUnitOfWorkListener.php @@ -137,10 +137,8 @@ public function dumpIdentityMap(EntityManagerInterface $em) /** * @param mixed $var - * - * @return string */ - private function getType($var) + private function getType($var): string { if (is_object($var)) { $refl = new ReflectionObject($var); @@ -151,12 +149,7 @@ private function getType($var) return gettype($var); } - /** - * @param object $entity - * - * @return string - */ - private function getIdString($entity, UnitOfWork $uow) + private function getIdString(object $entity, UnitOfWork $uow): string { if ($uow->isInIdentityMap($entity)) { $ids = $uow->getEntityIdentifier($entity); diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index 6b1a77c37ec..fb1c8471bf7 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -747,10 +747,7 @@ protected function generateEntityConstructor(ClassMetadataInfo $metadata) return ''; } - /** - * @return string - */ - private function generateEmbeddableConstructor(ClassMetadataInfo $metadata) + private function generateEmbeddableConstructor(ClassMetadataInfo $metadata): string { $paramTypes = []; $paramVariables = []; diff --git a/lib/Doctrine/ORM/Tools/EntityRepositoryGenerator.php b/lib/Doctrine/ORM/Tools/EntityRepositoryGenerator.php index d2b7487b6c1..9fbde5f53aa 100644 --- a/lib/Doctrine/ORM/Tools/EntityRepositoryGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityRepositoryGenerator.php @@ -95,24 +95,16 @@ public function generateEntityRepositoryClass($fullClassName) /** * Generates the namespace, if class do not have namespace, return empty string instead. - * - * @param string $fullClassName - * - * @return string $namespace */ - private function getClassNamespace($fullClassName) + private function getClassNamespace(string $fullClassName): string { return substr($fullClassName, 0, strrpos($fullClassName, '\\')); } /** * Generates the class name - * - * @param string $fullClassName - * - * @return string */ - private function generateClassName($fullClassName) + private function generateClassName(string $fullClassName): string { $namespace = $this->getClassNamespace($fullClassName); @@ -129,22 +121,15 @@ private function generateClassName($fullClassName) * Generates the namespace statement, if class do not have namespace, return empty string instead. * * @param string $fullClassName The full repository class name. - * - * @return string $namespace */ - private function generateEntityRepositoryNamespace($fullClassName) + private function generateEntityRepositoryNamespace(string $fullClassName): string { $namespace = $this->getClassNamespace($fullClassName); return $namespace ? 'namespace ' . $namespace . ';' : ''; } - /** - * @param string $fullClassName - * - * @return string $repositoryName - */ - private function generateEntityRepositoryName($fullClassName) + private function generateEntityRepositoryName(string $fullClassName): string { $namespace = $this->getClassNamespace($fullClassName); diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php index b783390b0dc..62521fb6450 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php @@ -128,10 +128,8 @@ public function __construct($query, $parserResult, array $queryComponents) /** * Check if the platform supports the ROW_NUMBER window function. - * - * @return bool */ - private function platformSupportsRowNumber() + private function platformSupportsRowNumber(): bool { return $this->platform instanceof PostgreSqlPlatform || $this->platform instanceof SQLServerPlatform @@ -146,7 +144,7 @@ private function platformSupportsRowNumber() * Rebuilds a select statement's order by clause for use in a * ROW_NUMBER() OVER() expression. */ - private function rebuildOrderByForRowNumber(SelectStatement $AST) + private function rebuildOrderByForRowNumber(SelectStatement $AST): void { $orderByClause = $AST->orderByClause; $selectAliasToExpressionMap = []; @@ -306,7 +304,7 @@ public function walkSelectStatementWithoutRowNumber(SelectStatement $AST, $addMi * Finds all PathExpressions in an AST's OrderByClause, and ensures that * the referenced fields are present in the SelectClause of the passed AST. */ - private function addMissingItemsFromOrderByToSelect(SelectStatement $AST) + private function addMissingItemsFromOrderByToSelect(SelectStatement $AST): void { $this->orderByPathExpressions = []; @@ -485,12 +483,10 @@ public function getOrderByPathExpressions() } /** - * @return string - * * @throws OptimisticLockException * @throws QueryException */ - private function getInnerSQL(SelectStatement $AST) + private function getInnerSQL(SelectStatement $AST): string { // Set every select expression as visible(hidden = false) to // make $AST have scalar mappings properly - this is relevant for referencing selected @@ -517,7 +513,7 @@ private function getInnerSQL(SelectStatement $AST) * * @psalm-return array */ - private function getSQLIdentifier(SelectStatement $AST) + private function getSQLIdentifier(SelectStatement $AST): array { // Find out the SQL alias of the identifier column of the root entity. // It may be possible to make this work with multiple root entities but that diff --git a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php index a40f0545481..694d06b4d3b 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php +++ b/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php @@ -24,6 +24,7 @@ use Doctrine\ORM\Mapping\ClassMetadataInfo; use Doctrine\ORM\Query; use Doctrine\ORM\Query\AST\Functions\IdentityFunction; +use Doctrine\ORM\Query\AST\Node; use Doctrine\ORM\Query\AST\PathExpression; use Doctrine\ORM\Query\AST\SelectExpression; use Doctrine\ORM\Query\AST\SelectStatement; @@ -122,7 +123,7 @@ public function walkSelectStatement(SelectStatement $AST) /** * Validate the AST to ensure that this walker is able to properly manipulate it. */ - private function validate(SelectStatement $AST) + private function validate(SelectStatement $AST): void { // Prevent LimitSubqueryWalker from being used with queries that include // a limit, a fetched to-many join, and an order by condition that @@ -163,7 +164,7 @@ private function validate(SelectStatement $AST) * * @return IdentityFunction|PathExpression */ - private function createSelectExpressionItem(PathExpression $pathExpression) + private function createSelectExpressionItem(PathExpression $pathExpression): Node { if ($pathExpression->type === PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION) { $identity = new IdentityFunction('identity'); diff --git a/lib/Doctrine/ORM/Tools/Pagination/Paginator.php b/lib/Doctrine/ORM/Tools/Pagination/Paginator.php index 4e0b9f7e628..150e39b1af9 100644 --- a/lib/Doctrine/ORM/Tools/Pagination/Paginator.php +++ b/lib/Doctrine/ORM/Tools/Pagination/Paginator.php @@ -180,14 +180,7 @@ public function getIterator() return new ArrayIterator($result); } - /** - * Clones a query. - * - * @param Query $query The query. - * - * @return Query The cloned query. - */ - private function cloneQuery(Query $query) + private function cloneQuery(Query $query): Query { $cloneQuery = clone $query; @@ -203,12 +196,8 @@ private function cloneQuery(Query $query) /** * Determines whether to use an output walker for the query. - * - * @param Query $query The query. - * - * @return bool */ - private function useOutputWalker(Query $query) + private function useOutputWalker(Query $query): bool { if ($this->useOutputWalkers === null) { return (bool) $query->getHint(Query::HINT_CUSTOM_OUTPUT_WALKER) === false; @@ -219,10 +208,8 @@ private function useOutputWalker(Query $query) /** * Appends a custom tree walker to the tree walkers hint. - * - * @param string $walkerClass */ - private function appendTreeWalker(Query $query, $walkerClass) + private function appendTreeWalker(Query $query, string $walkerClass): void { $hints = $query->getHint(Query::HINT_CUSTOM_TREE_WALKERS); @@ -236,10 +223,8 @@ private function appendTreeWalker(Query $query, $walkerClass) /** * Returns Query prepared to count. - * - * @return Query */ - private function getCountQuery() + private function getCountQuery(): Query { $countQuery = $this->cloneQuery($this->query); diff --git a/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php b/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php index 4a6459085de..45c55b177f7 100644 --- a/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php +++ b/lib/Doctrine/ORM/Tools/ResolveTargetEntityListener.php @@ -25,7 +25,6 @@ use Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs; use Doctrine\ORM\Events; use Doctrine\ORM\Mapping\ClassMetadata; -use Doctrine\ORM\Mapping\ClassMetadataInfo; use function array_key_exists; use function array_replace_recursive; @@ -110,12 +109,9 @@ public function loadClassMetadata(LoadClassMetadataEventArgs $args) } /** - * @param ClassMetadataInfo $classMetadata - * @param mixed[] $mapping - * - * @return void + * @param mixed[] $mapping */ - private function remapAssociation($classMetadata, $mapping) + private function remapAssociation(ClassMetadata $classMetadata, $mapping): void { $newMapping = $this->resolveTargetEntities[$mapping['targetEntity']]; $newMapping = array_replace_recursive($mapping, $newMapping); diff --git a/lib/Doctrine/ORM/Tools/SchemaTool.php b/lib/Doctrine/ORM/Tools/SchemaTool.php index 85443e4148c..7957fc22d63 100644 --- a/lib/Doctrine/ORM/Tools/SchemaTool.php +++ b/lib/Doctrine/ORM/Tools/SchemaTool.php @@ -373,12 +373,8 @@ static function (ClassMetadata $class) use ($idMapping): bool { /** * Gets a portable column definition as required by the DBAL for the discriminator * column of a class. - * - * @param ClassMetadata $class - * - * @return void */ - private function addDiscriminatorColumnDefinition($class, Table $table) + private function addDiscriminatorColumnDefinition(ClassMetadata $class, Table $table): void { $discrColumn = $class->discriminatorColumn; @@ -405,12 +401,8 @@ private function addDiscriminatorColumnDefinition($class, Table $table) /** * Gathers the column definitions as required by the DBAL of all field mappings * found in the given class. - * - * @param ClassMetadata $class - * - * @return void */ - private function gatherColumns($class, Table $table) + private function gatherColumns(ClassMetadata $class, Table $table): void { $pkColumns = []; diff --git a/lib/Doctrine/ORM/UnitOfWork.php b/lib/Doctrine/ORM/UnitOfWork.php index e638fd5ad69..2cc6630c7e4 100644 --- a/lib/Doctrine/ORM/UnitOfWork.php +++ b/lib/Doctrine/ORM/UnitOfWork.php @@ -513,10 +513,8 @@ private function postCommitCleanup($entity): void /** * Computes the changesets of all entities scheduled for insertion. - * - * @return void */ - private function computeScheduleInsertsChangeSets() + private function computeScheduleInsertsChangeSets(): void { foreach ($this->entityInsertions as $entity) { $class = $this->em->getClassMetadata(get_class($entity)); @@ -533,13 +531,9 @@ private function computeScheduleInsertsChangeSets() * 3. Proxies are skipped. * 4. Only if entity is properly managed. * - * @param object $entity - * - * @return void - * * @throws InvalidArgumentException */ - private function computeSingleEntityChangeSet($entity) + private function computeSingleEntityChangeSet(object $entity): void { $state = $this->getEntityState($entity); @@ -964,13 +958,7 @@ private function computeAssociationChanges(array $assoc, $value): void } } - /** - * @param ClassMetadata $class - * @param object $entity - * - * @return void - */ - private function persistNew($class, $entity) + private function persistNew(ClassMetadata $class, object $entity): void { $oid = spl_object_hash($entity); $invoke = $this->listenersInvoker->getSubscribedSystems($class, Events::prePersist); @@ -1092,12 +1080,8 @@ public function recomputeSingleEntityChangeSet(ClassMetadata $class, $entity) /** * Executes all entity insertions for entities of the specified type. - * - * @param ClassMetadata $class - * - * @return void */ - private function executeInserts($class) + private function executeInserts(ClassMetadata $class): void { $entities = []; $className = $class->name; @@ -1156,11 +1140,11 @@ private function executeInserts($class) } } - /** - * @param object $entity - */ - private function addToEntityIdentifiersAndEntityMap(ClassMetadata $class, string $oid, $entity): void - { + private function addToEntityIdentifiersAndEntityMap( + ClassMetadata $class, + string $oid, + object $entity + ): void { $identifier = []; foreach ($class->getIdentifierFieldNames() as $idField) { @@ -1182,12 +1166,8 @@ private function addToEntityIdentifiersAndEntityMap(ClassMetadata $class, string /** * Executes all entity updates for entities of the specified type. - * - * @param ClassMetadata $class - * - * @return void */ - private function executeUpdates($class) + private function executeUpdates(ClassMetadata $class): void { $className = $class->name; $persister = $this->getEntityPersister($className); @@ -1219,12 +1199,8 @@ private function executeUpdates($class) /** * Executes all entity deletions for entities of the specified type. - * - * @param ClassMetadata $class - * - * @return void */ - private function executeDeletions($class) + private function executeDeletions(ClassMetadata $class): void { $className = $class->name; $persister = $this->getEntityPersister($className); @@ -2039,15 +2015,13 @@ private function doMerge( } /** - * @param object $entity - * @param object $managedCopy - * - * @return void - * * @throws OptimisticLockException */ - private function ensureVersionMatch(ClassMetadata $class, $entity, $managedCopy) - { + private function ensureVersionMatch( + ClassMetadata $class, + object $entity, + object $managedCopy + ): void { if (! ($class->isVersioned && $this->isLoaded($managedCopy) && $this->isLoaded($entity))) { return; } @@ -2067,12 +2041,8 @@ private function ensureVersionMatch(ClassMetadata $class, $entity, $managedCopy) /** * Tests if an entity is loaded - must either be a loaded proxy or not a proxy - * - * @param object $entity - * - * @return bool */ - private function isLoaded($entity) + private function isLoaded(object $entity): bool { return ! ($entity instanceof Proxy) || $entity->__isInitialized(); } @@ -2125,14 +2095,14 @@ public function detach($entity) /** * Executes a detach operation on the given entity. * - * @param object $entity * @param mixed[] $visited * @param bool $noCascade if true, don't cascade detach operation. - * - * @return void */ - private function doDetach($entity, array &$visited, $noCascade = false) - { + private function doDetach( + object $entity, + array &$visited, + bool $noCascade = false + ): void { $oid = spl_object_hash($entity); if (isset($visited[$oid])) { @@ -2614,12 +2584,7 @@ public function isCollectionScheduledForDeletion(PersistentCollection $coll) return isset($this->collectionDeletions[spl_object_hash($coll)]); } - /** - * @param ClassMetadata $class - * - * @return ObjectManagerAware|object - */ - private function newInstance($class) + private function newInstance(ClassMetadata $class): object { $entity = $class->newInstance(); diff --git a/lib/Doctrine/ORM/Utility/IdentifierFlattener.php b/lib/Doctrine/ORM/Utility/IdentifierFlattener.php index 954501d4a4b..216fd66cb05 100644 --- a/lib/Doctrine/ORM/Utility/IdentifierFlattener.php +++ b/lib/Doctrine/ORM/Utility/IdentifierFlattener.php @@ -64,7 +64,7 @@ public function __construct(UnitOfWork $unitOfWork, ClassMetadataFactory $metada * * @psalm-return array */ - public function flattenIdentifier(ClassMetadata $class, array $id) + public function flattenIdentifier(ClassMetadata $class, array $id): array { $flatId = [];