diff --git a/.gitattributes b/.gitattributes index dc4ed6a..8cc3d67 100644 --- a/.gitattributes +++ b/.gitattributes @@ -12,7 +12,4 @@ /phpcs.xml.dist export-ignore /phpstan.neon export-ignore /phpstan-baseline.neon export-ignore -/psalm.xml export-ignore -/psalm-baseline.xml export-ignore -/psalm.phpstub export-ignore /composer.lock export-ignore diff --git a/.github/workflows/static-analysis.yml b/.github/workflows/static-analysis.yml index 49a55f4..3f68c67 100644 --- a/.github/workflows/static-analysis.yml +++ b/.github/workflows/static-analysis.yml @@ -12,4 +12,4 @@ on: jobs: static-analysis: name: "Static Analysis" - uses: "doctrine/.github/.github/workflows/static-analysis.yml@5.2.0" + uses: "doctrine/.github/.github/workflows/phpstan.yml@5.2.0" diff --git a/composer.json b/composer.json index d17baa7..d6e35a1 100644 --- a/composer.json +++ b/composer.json @@ -30,8 +30,7 @@ "phpstan/phpstan-strict-rules": "^1.1", "doctrine/coding-standard": "^12", "phpunit/phpunit": "^9.6", - "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0", - "vimeo/psalm": "4.30.0 || 5.26.1" + "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0" }, "conflict": { "doctrine/common": "<2.10" diff --git a/psalm-baseline.xml b/psalm-baseline.xml deleted file mode 100644 index 4d75d82..0000000 --- a/psalm-baseline.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - nsSeparator, '\\', $fileName)]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/psalm.phpstub b/psalm.phpstub deleted file mode 100644 index 727effe..0000000 --- a/psalm.phpstub +++ /dev/null @@ -1,12 +0,0 @@ - return - */ -function ltrim(string $string, string $characters = " \t\n\r\0\x0B") : string {} diff --git a/psalm.xml b/psalm.xml deleted file mode 100644 index bd5fbbf..0000000 --- a/psalm.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Persistence/AbstractManagerRegistry.php b/src/Persistence/AbstractManagerRegistry.php index 065d53b..68049cc 100644 --- a/src/Persistence/AbstractManagerRegistry.php +++ b/src/Persistence/AbstractManagerRegistry.php @@ -18,7 +18,7 @@ abstract class AbstractManagerRegistry implements ManagerRegistry /** * @param array $connections * @param array $managers - * @psalm-param class-string $proxyInterfaceName + * @phpstan-param class-string $proxyInterfaceName */ public function __construct( private readonly string $name, @@ -204,7 +204,7 @@ abstract class AbstractManagerRegistry implements ManagerRegistry return $this->getManager($name); } - /** @psalm-param class-string $persistentObject */ + /** @phpstan-param class-string $persistentObject */ private function selectManager( string $persistentObject, string|null $persistentManagerName = null, diff --git a/src/Persistence/Event/LifecycleEventArgs.php b/src/Persistence/Event/LifecycleEventArgs.php index d628df6..b187a11 100644 --- a/src/Persistence/Event/LifecycleEventArgs.php +++ b/src/Persistence/Event/LifecycleEventArgs.php @@ -15,7 +15,7 @@ use Doctrine\Persistence\ObjectManager; */ class LifecycleEventArgs extends EventArgs { - /** @psalm-param TObjectManager $objectManager */ + /** @phpstan-param TObjectManager $objectManager */ public function __construct( private readonly object $object, private readonly ObjectManager $objectManager, @@ -31,7 +31,7 @@ class LifecycleEventArgs extends EventArgs /** * Retrieves the associated ObjectManager. * - * @psalm-return TObjectManager + * @phpstan-return TObjectManager */ public function getObjectManager(): ObjectManager { diff --git a/src/Persistence/Event/LoadClassMetadataEventArgs.php b/src/Persistence/Event/LoadClassMetadataEventArgs.php index 14e3aad..70e2bd6 100644 --- a/src/Persistence/Event/LoadClassMetadataEventArgs.php +++ b/src/Persistence/Event/LoadClassMetadataEventArgs.php @@ -17,8 +17,8 @@ use Doctrine\Persistence\ObjectManager; class LoadClassMetadataEventArgs extends EventArgs { /** - * @psalm-param TClassMetadata $classMetadata - * @psalm-param TObjectManager $objectManager + * @phpstan-param TClassMetadata $classMetadata + * @phpstan-param TObjectManager $objectManager */ public function __construct( private readonly ClassMetadata $classMetadata, @@ -29,7 +29,7 @@ class LoadClassMetadataEventArgs extends EventArgs /** * Retrieves the associated ClassMetadata. * - * @psalm-return TClassMetadata + * @phpstan-return TClassMetadata */ public function getClassMetadata(): ClassMetadata { @@ -39,7 +39,7 @@ class LoadClassMetadataEventArgs extends EventArgs /** * Retrieves the associated ObjectManager. * - * @psalm-return TObjectManager + * @phpstan-return TObjectManager */ public function getObjectManager(): ObjectManager { diff --git a/src/Persistence/Event/ManagerEventArgs.php b/src/Persistence/Event/ManagerEventArgs.php index 309e9da..72bf44e 100644 --- a/src/Persistence/Event/ManagerEventArgs.php +++ b/src/Persistence/Event/ManagerEventArgs.php @@ -14,7 +14,7 @@ use Doctrine\Persistence\ObjectManager; */ class ManagerEventArgs extends EventArgs { - /** @psalm-param TObjectManager $objectManager */ + /** @phpstan-param TObjectManager $objectManager */ public function __construct( private readonly ObjectManager $objectManager, ) { @@ -23,7 +23,7 @@ class ManagerEventArgs extends EventArgs /** * Retrieves the associated ObjectManager. * - * @psalm-return TObjectManager + * @phpstan-return TObjectManager */ public function getObjectManager(): ObjectManager { diff --git a/src/Persistence/Event/OnClearEventArgs.php b/src/Persistence/Event/OnClearEventArgs.php index d52a349..7ec9552 100644 --- a/src/Persistence/Event/OnClearEventArgs.php +++ b/src/Persistence/Event/OnClearEventArgs.php @@ -16,7 +16,7 @@ class OnClearEventArgs extends EventArgs { /** * @param ObjectManager $objectManager The object manager. - * @psalm-param TObjectManager $objectManager + * @phpstan-param TObjectManager $objectManager */ public function __construct(private readonly ObjectManager $objectManager) { @@ -25,7 +25,7 @@ class OnClearEventArgs extends EventArgs /** * Retrieves the associated ObjectManager. * - * @psalm-return TObjectManager + * @phpstan-return TObjectManager */ public function getObjectManager(): ObjectManager { diff --git a/src/Persistence/Event/PreUpdateEventArgs.php b/src/Persistence/Event/PreUpdateEventArgs.php index c80cccb..b013467 100644 --- a/src/Persistence/Event/PreUpdateEventArgs.php +++ b/src/Persistence/Event/PreUpdateEventArgs.php @@ -22,7 +22,7 @@ class PreUpdateEventArgs extends LifecycleEventArgs /** * @param array> $changeSet - * @psalm-param TObjectManager $objectManager + * @phpstan-param TObjectManager $objectManager */ public function __construct(object $entity, ObjectManager $objectManager, array &$changeSet) { diff --git a/src/Persistence/ManagerRegistry.php b/src/Persistence/ManagerRegistry.php index 9f921ad..2e0a389 100644 --- a/src/Persistence/ManagerRegistry.php +++ b/src/Persistence/ManagerRegistry.php @@ -62,9 +62,9 @@ interface ManagerRegistry extends ConnectionRegistry * * @param string $persistentObject The name of the persistent object. * @param string|null $persistentManagerName The object manager name (null for the default one). - * @psalm-param class-string $persistentObject + * @phpstan-param class-string $persistentObject * - * @psalm-return ObjectRepository + * @phpstan-return ObjectRepository * * @template T of object */ diff --git a/src/Persistence/Mapping/AbstractClassMetadataFactory.php b/src/Persistence/Mapping/AbstractClassMetadataFactory.php index 22d2272..b2f0573 100644 --- a/src/Persistence/Mapping/AbstractClassMetadataFactory.php +++ b/src/Persistence/Mapping/AbstractClassMetadataFactory.php @@ -42,7 +42,7 @@ abstract class AbstractClassMetadataFactory implements ClassMetadataFactory /** * @var array - * @psalm-var CMTemplate[] + * @phpstan-var CMTemplate[] */ private array $loadedMetadata = []; @@ -66,7 +66,7 @@ abstract class AbstractClassMetadataFactory implements ClassMetadataFactory * Returns an array of all the loaded metadata currently in memory. * * @return ClassMetadata[] - * @psalm-return CMTemplate[] + * @phpstan-return CMTemplate[] */ public function getLoadedMetadata(): array { @@ -108,7 +108,7 @@ abstract class AbstractClassMetadataFactory implements ClassMetadataFactory /** * Wakes up reflection after ClassMetadata gets unserialized from cache. * - * @psalm-param CMTemplate $class + * @phpstan-param CMTemplate $class */ abstract protected function wakeupReflection( ClassMetadata $class, @@ -118,7 +118,7 @@ abstract class AbstractClassMetadataFactory implements ClassMetadataFactory /** * Initializes Reflection after ClassMetadata was constructed. * - * @psalm-param CMTemplate $class + * @phpstan-param CMTemplate $class */ abstract protected function initializeReflection( ClassMetadata $class, @@ -130,16 +130,16 @@ abstract class AbstractClassMetadataFactory implements ClassMetadataFactory * * This method should return false for mapped superclasses or embedded classes. * - * @psalm-param CMTemplate $class + * @phpstan-param CMTemplate $class */ abstract protected function isEntity(ClassMetadata $class): bool; /** * Removes the prepended backslash of a class string to conform with how php outputs class names * - * @psalm-param class-string $className + * @phpstan-param class-string $className * - * @psalm-return class-string + * @phpstan-return class-string */ private function normalizeClassName(string $className): string { @@ -179,7 +179,7 @@ abstract class AbstractClassMetadataFactory implements ClassMetadataFactory if ($this->cache !== null) { $cached = $this->cache->getItem($this->getCacheKey($realClassName))->get(); if ($cached instanceof ClassMetadata) { - /** @psalm-var CMTemplate $cached */ + /** @phpstan-var CMTemplate $cached */ $this->loadedMetadata[$realClassName] = $cached; $this->wakeupReflection($cached, $this->getReflectionService()); @@ -234,8 +234,8 @@ abstract class AbstractClassMetadataFactory implements ClassMetadataFactory * * NOTE: This is only useful in very special cases, like when generating proxy classes. * - * @psalm-param class-string $className - * @psalm-param CMTemplate $class + * @phpstan-param class-string $className + * @phpstan-param CMTemplate $class */ public function setMetadataFor(string $className, ClassMetadata $class): void { @@ -245,10 +245,10 @@ abstract class AbstractClassMetadataFactory implements ClassMetadataFactory /** * Gets an array of parent classes for the given entity class. * - * @psalm-param class-string $name + * @phpstan-param class-string $name * * @return string[] - * @psalm-return list + * @phpstan-return list */ protected function getParentClasses(string $name): array { @@ -277,10 +277,10 @@ abstract class AbstractClassMetadataFactory implements ClassMetadataFactory * should be used for reflection. * * @param string $name The name of the class for which the metadata should get loaded. - * @psalm-param class-string $name + * @phpstan-param class-string $name * * @return array - * @psalm-return list + * @phpstan-return list */ protected function loadMetadata(string $name): array { @@ -340,7 +340,7 @@ abstract class AbstractClassMetadataFactory implements ClassMetadataFactory * * Override this method to implement a fallback strategy for failed metadata loading * - * @psalm-return CMTemplate|null + * @phpstan-return CMTemplate|null */ protected function onNotFoundMetadata(string $className): ClassMetadata|null { @@ -352,8 +352,8 @@ abstract class AbstractClassMetadataFactory implements ClassMetadataFactory * * @param bool $rootEntityFound True when there is another entity (non-mapped superclass) class above the current class in the PHP class hierarchy. * @param list $nonSuperclassParents All parent class names that are not marked as mapped superclasses, with the direct parent class being the first and the root entity class the last element. - * @psalm-param CMTemplate $class - * @psalm-param CMTemplate|null $parent + * @phpstan-param CMTemplate $class + * @phpstan-param CMTemplate|null $parent */ abstract protected function doLoadMetadata( ClassMetadata $class, @@ -365,10 +365,10 @@ abstract class AbstractClassMetadataFactory implements ClassMetadataFactory /** * Creates a new ClassMetadata instance for the given class name. * - * @psalm-param class-string $className + * @phpstan-param class-string $className * * @return ClassMetadata - * @psalm-return CMTemplate + * @phpstan-return CMTemplate * * @template T of object */ @@ -388,7 +388,7 @@ abstract class AbstractClassMetadataFactory implements ClassMetadataFactory throw MappingException::nonExistingClass($className); } - /** @psalm-var class-string $className */ + /** @phpstan-var class-string $className */ return $this->getDriver()->isTransient($className); } @@ -416,9 +416,9 @@ abstract class AbstractClassMetadataFactory implements ClassMetadataFactory /** * Gets the real class name of a class name that could be a proxy. * - * @psalm-param class-string>|class-string $class + * @phpstan-param class-string>|class-string $class * - * @psalm-return class-string + * @phpstan-return class-string * * @template T of object */ @@ -437,9 +437,9 @@ abstract class AbstractClassMetadataFactory implements ClassMetadataFactory { $this->proxyClassNameResolver = new class implements ProxyClassNameResolver { /** - * @psalm-param class-string>|class-string $className + * @phpstan-param class-string>|class-string $className * - * @psalm-return class-string + * @phpstan-return class-string * * @template T of object */ @@ -448,11 +448,11 @@ abstract class AbstractClassMetadataFactory implements ClassMetadataFactory $pos = strrpos($className, '\\' . Proxy::MARKER . '\\'); if ($pos === false) { - /** @psalm-var class-string */ + /** @phpstan-var class-string */ return $className; } - /** @psalm-var class-string */ + /** @phpstan-var class-string */ return substr($className, $pos + Proxy::MARKER_LENGTH + 2); } }; diff --git a/src/Persistence/Mapping/ClassMetadata.php b/src/Persistence/Mapping/ClassMetadata.php index 38c628e..1d0345c 100644 --- a/src/Persistence/Mapping/ClassMetadata.php +++ b/src/Persistence/Mapping/ClassMetadata.php @@ -16,7 +16,7 @@ interface ClassMetadata /** * Gets the fully-qualified class name of this persistent class. * - * @psalm-return class-string + * @phpstan-return class-string */ public function getName(): string; @@ -26,7 +26,7 @@ interface ClassMetadata * The returned structure is an array of the identifier field names. * * @return array - * @psalm-return list + * @phpstan-return list */ public function getIdentifier(): array; @@ -88,7 +88,7 @@ interface ClassMetadata /** * Returns the target class name of the given association. * - * @psalm-return class-string|null + * @phpstan-return class-string|null */ public function getAssociationTargetClass(string $assocName): string|null; diff --git a/src/Persistence/Mapping/ClassMetadataFactory.php b/src/Persistence/Mapping/ClassMetadataFactory.php index ad6c059..68e4595 100644 --- a/src/Persistence/Mapping/ClassMetadataFactory.php +++ b/src/Persistence/Mapping/ClassMetadataFactory.php @@ -16,7 +16,7 @@ interface ClassMetadataFactory * mapping driver. * * @return ClassMetadata[] The ClassMetadata instances of all mapped classes. - * @psalm-return list + * @phpstan-return list */ public function getAllMetadata(): array; @@ -25,7 +25,7 @@ interface ClassMetadataFactory * * @param class-string $className The name of the class. * - * @psalm-return T + * @phpstan-return T */ public function getMetadataFor(string $className): ClassMetadata; @@ -42,7 +42,7 @@ interface ClassMetadataFactory * Sets the metadata descriptor for a specific class. * * @param class-string $className - * @psalm-param T $class + * @phpstan-param T $class */ public function setMetadataFor(string $className, ClassMetadata $class): void; @@ -50,7 +50,7 @@ interface ClassMetadataFactory * Returns whether the class with the specified name should have its metadata loaded. * This is only the case if it is either mapped directly or as a MappedSuperclass. * - * @psalm-param class-string $className + * @phpstan-param class-string $className */ public function isTransient(string $className): bool; } diff --git a/src/Persistence/Mapping/Driver/ColocatedMappingDriver.php b/src/Persistence/Mapping/Driver/ColocatedMappingDriver.php index ceb9095..2e95569 100644 --- a/src/Persistence/Mapping/Driver/ColocatedMappingDriver.php +++ b/src/Persistence/Mapping/Driver/ColocatedMappingDriver.php @@ -50,7 +50,7 @@ trait ColocatedMappingDriver * Cache for getAllClassNames(). * * @var array|null - * @psalm-var list|null + * @phpstan-var list|null */ protected array|null $classNames = null; @@ -112,7 +112,7 @@ trait ColocatedMappingDriver * Returns whether the class with the specified name is transient. Only non-transient * classes, that is entities and mapped superclasses, should have their metadata loaded. * - * @psalm-param class-string $className + * @phpstan-param class-string $className */ abstract public function isTransient(string $className): bool; @@ -120,7 +120,7 @@ trait ColocatedMappingDriver * Gets the names of all mapped classes known to this driver. * * @return string[] The names of all mapped classes known to this driver. - * @psalm-return list + * @phpstan-return list */ public function getAllClassNames(): array { diff --git a/src/Persistence/Mapping/Driver/DefaultFileLocator.php b/src/Persistence/Mapping/Driver/DefaultFileLocator.php index c3a48ac..ef046f4 100644 --- a/src/Persistence/Mapping/Driver/DefaultFileLocator.php +++ b/src/Persistence/Mapping/Driver/DefaultFileLocator.php @@ -131,7 +131,7 @@ class DefaultFileLocator implements FileLocator // NOTE: All files found here means classes are not transient! assert(is_string($fileName)); - /** @psalm-var class-string */ + /** @phpstan-var class-string */ $class = str_replace('.', '\\', $fileName); $classes[] = $class; } diff --git a/src/Persistence/Mapping/Driver/FileDriver.php b/src/Persistence/Mapping/Driver/FileDriver.php index 23b5cbe..f31ec12 100644 --- a/src/Persistence/Mapping/Driver/FileDriver.php +++ b/src/Persistence/Mapping/Driver/FileDriver.php @@ -29,7 +29,7 @@ abstract class FileDriver implements MappingDriver /** * @var mixed[]|null - * @psalm-var array|null + * @phpstan-var array|null */ protected array|null $classCache = null; protected string $globalBasename = ''; @@ -66,7 +66,7 @@ abstract class FileDriver implements MappingDriver * Gets the element of schema meta data for the class from the mapping file. * This will lazily load the mapping file if it is not loaded yet. * - * @psalm-param class-string $className + * @phpstan-param class-string $className * * @return T The element of schema meta data. * @@ -122,7 +122,7 @@ abstract class FileDriver implements MappingDriver return $this->locator->getAllClassNames($this->globalBasename); } - /** @psalm-var array> $classCache */ + /** @phpstan-var array> $classCache */ $classCache = $this->classCache; /** @var list $keys */ @@ -138,7 +138,7 @@ abstract class FileDriver implements MappingDriver * @param string $file The mapping file to load. * * @return mixed[] - * @psalm-return array + * @phpstan-return array */ abstract protected function loadMappingFile(string $file): array; diff --git a/src/Persistence/Mapping/Driver/FileLocator.php b/src/Persistence/Mapping/Driver/FileLocator.php index d7439b2..b438a75 100644 --- a/src/Persistence/Mapping/Driver/FileLocator.php +++ b/src/Persistence/Mapping/Driver/FileLocator.php @@ -21,7 +21,7 @@ interface FileLocator * @param string $globalBasename Passed to allow excluding the basename. * * @return array - * @psalm-return list + * @phpstan-return list */ public function getAllClassNames(string $globalBasename): array; diff --git a/src/Persistence/Mapping/Driver/MappingDriver.php b/src/Persistence/Mapping/Driver/MappingDriver.php index 2c9623e..55b2086 100644 --- a/src/Persistence/Mapping/Driver/MappingDriver.php +++ b/src/Persistence/Mapping/Driver/MappingDriver.php @@ -14,8 +14,8 @@ interface MappingDriver /** * Loads the metadata for the specified class into the provided container. * - * @psalm-param class-string $className - * @psalm-param ClassMetadata $metadata + * @phpstan-param class-string $className + * @phpstan-param ClassMetadata $metadata * * @template T of object */ @@ -25,7 +25,7 @@ interface MappingDriver * Gets the names of all mapped classes known to this driver. * * @return array The names of all mapped classes known to this driver. - * @psalm-return list + * @phpstan-return list */ public function getAllClassNames(): array; @@ -33,7 +33,7 @@ interface MappingDriver * Returns whether the class with the specified name should have its metadata loaded. * This is only the case if it is either mapped as an Entity or a MappedSuperclass. * - * @psalm-param class-string $className + * @phpstan-param class-string $className */ public function isTransient(string $className): bool; } diff --git a/src/Persistence/Mapping/Driver/PHPDriver.php b/src/Persistence/Mapping/Driver/PHPDriver.php index 0dfe9e2..10061b8 100644 --- a/src/Persistence/Mapping/Driver/PHPDriver.php +++ b/src/Persistence/Mapping/Driver/PHPDriver.php @@ -14,7 +14,7 @@ use Doctrine\Persistence\Mapping\ClassMetadata; */ class PHPDriver extends FileDriver { - /** @psalm-var ClassMetadata */ + /** @phpstan-var ClassMetadata */ protected ClassMetadata $metadata; /** @param string|array|FileLocator $locator */ diff --git a/src/Persistence/Mapping/Driver/StaticPHPDriver.php b/src/Persistence/Mapping/Driver/StaticPHPDriver.php index b62e2fd..4bf1ee4 100644 --- a/src/Persistence/Mapping/Driver/StaticPHPDriver.php +++ b/src/Persistence/Mapping/Driver/StaticPHPDriver.php @@ -34,7 +34,7 @@ class StaticPHPDriver implements MappingDriver * Map of all class names. * * @var array - * @psalm-var list + * @phpstan-var list */ private array|null $classNames = null; diff --git a/src/Persistence/Mapping/Driver/SymfonyFileLocator.php b/src/Persistence/Mapping/Driver/SymfonyFileLocator.php index 7853f1e..17d2944 100644 --- a/src/Persistence/Mapping/Driver/SymfonyFileLocator.php +++ b/src/Persistence/Mapping/Driver/SymfonyFileLocator.php @@ -185,10 +185,10 @@ class SymfonyFileLocator implements FileLocator '\\', ); - /** @psalm-var class-string */ + /** @phpstan-var class-string */ $class = $this->prefixes[$path] . str_replace(DIRECTORY_SEPARATOR, '\\', $nsSuffix) . '\\' . str_replace($this->nsSeparator, '\\', $fileName); } else { - /** @psalm-var class-string */ + /** @phpstan-var class-string */ $class = str_replace($this->nsSeparator, '\\', $fileName); } diff --git a/src/Persistence/Mapping/ProxyClassNameResolver.php b/src/Persistence/Mapping/ProxyClassNameResolver.php index 2801d90..59b8c98 100644 --- a/src/Persistence/Mapping/ProxyClassNameResolver.php +++ b/src/Persistence/Mapping/ProxyClassNameResolver.php @@ -9,9 +9,9 @@ use Doctrine\Persistence\Proxy; interface ProxyClassNameResolver { /** - * @psalm-param class-string>|class-string $className + * @phpstan-param class-string>|class-string $className * - * @psalm-return class-string + * @phpstan-return class-string * * @template T of object */ diff --git a/src/Persistence/Mapping/ReflectionService.php b/src/Persistence/Mapping/ReflectionService.php index 9557214..3648657 100644 --- a/src/Persistence/Mapping/ReflectionService.php +++ b/src/Persistence/Mapping/ReflectionService.php @@ -18,10 +18,10 @@ interface ReflectionService /** * Returns an array of the parent classes (not interfaces) for the given class. * - * @psalm-param class-string $class + * @phpstan-param class-string $class * * @return string[] - * @psalm-return class-string[] + * @phpstan-return class-string[] * * @throws MappingException */ @@ -30,19 +30,19 @@ interface ReflectionService /** * Returns the shortname of a class. * - * @psalm-param class-string $class + * @phpstan-param class-string $class */ public function getClassShortName(string $class): string; - /** @psalm-param class-string $class */ + /** @phpstan-param class-string $class */ public function getClassNamespace(string $class): string; /** * Returns a reflection class instance or null. * - * @psalm-param class-string $class + * @phpstan-param class-string $class * - * @psalm-return ReflectionClass + * @phpstan-return ReflectionClass * * @template T of object */ @@ -51,14 +51,14 @@ interface ReflectionService /** * Returns an accessible property (setAccessible(true)) or null. * - * @psalm-param class-string $class + * @phpstan-param class-string $class */ public function getAccessibleProperty(string $class, string $property): ReflectionProperty|null; /** * Checks if the class have a public method with the given name. * - * @psalm-param class-string $class + * @phpstan-param class-string $class */ public function hasPublicMethod(string $class, string $method): bool; } diff --git a/src/Persistence/Mapping/RuntimeReflectionService.php b/src/Persistence/Mapping/RuntimeReflectionService.php index adcb6ea..ac840dc 100644 --- a/src/Persistence/Mapping/RuntimeReflectionService.php +++ b/src/Persistence/Mapping/RuntimeReflectionService.php @@ -60,9 +60,9 @@ class RuntimeReflectionService implements ReflectionService } /** - * @psalm-param class-string $class + * @phpstan-param class-string $class * - * @psalm-return ReflectionClass + * @phpstan-return ReflectionClass * * @template T of object */ diff --git a/src/Persistence/ObjectManager.php b/src/Persistence/ObjectManager.php index b31103d..733b954 100644 --- a/src/Persistence/ObjectManager.php +++ b/src/Persistence/ObjectManager.php @@ -17,10 +17,10 @@ interface ObjectManager * * @param string $className The class name of the object to find. * @param mixed $id The identity of the object to find. - * @psalm-param class-string $className + * @phpstan-param class-string $className * * @return object|null The found object. - * @psalm-return T|null + * @phpstan-return T|null * * @template T of object */ @@ -82,9 +82,9 @@ interface ObjectManager /** * Gets the repository for a class. * - * @psalm-param class-string $className + * @phpstan-param class-string $className * - * @psalm-return ObjectRepository + * @phpstan-return ObjectRepository * * @template T of object */ @@ -96,9 +96,9 @@ interface ObjectManager * The class name must be the fully-qualified class name without a leading backslash * (as it is returned by get_class($obj)). * - * @psalm-param class-string $className + * @phpstan-param class-string $className * - * @psalm-return ClassMetadata + * @phpstan-return ClassMetadata * * @template T of object */ @@ -107,7 +107,7 @@ interface ObjectManager /** * Gets the metadata factory used to gather the metadata of classes. * - * @psalm-return ClassMetadataFactory> + * @phpstan-return ClassMetadataFactory> */ public function getMetadataFactory(): ClassMetadataFactory; diff --git a/src/Persistence/ObjectManagerDecorator.php b/src/Persistence/ObjectManagerDecorator.php index 3654544..dabdcdb 100644 --- a/src/Persistence/ObjectManagerDecorator.php +++ b/src/Persistence/ObjectManagerDecorator.php @@ -65,7 +65,7 @@ abstract class ObjectManagerDecorator implements ObjectManager return $this->wrapped->getClassMetadata($className); } - /** @psalm-return ClassMetadataFactory> */ + /** @phpstan-return ClassMetadataFactory> */ public function getMetadataFactory(): ClassMetadataFactory { return $this->wrapped->getMetadataFactory(); diff --git a/src/Persistence/ObjectRepository.php b/src/Persistence/ObjectRepository.php index 85b42f3..e3a4dc3 100644 --- a/src/Persistence/ObjectRepository.php +++ b/src/Persistence/ObjectRepository.php @@ -19,7 +19,7 @@ interface ObjectRepository * @param mixed $id The identifier. * * @return object|null The object. - * @psalm-return T|null + * @phpstan-return T|null */ public function find(mixed $id): object|null; @@ -27,7 +27,7 @@ interface ObjectRepository * Finds all objects in the repository. * * @return array The objects. - * @psalm-return T[] + * @phpstan-return T[] */ public function findAll(): array; @@ -40,10 +40,10 @@ interface ObjectRepository * * @param array $criteria * @param array|null $orderBy - * @psalm-param array|null $orderBy + * @phpstan-param array|null $orderBy * * @return array The objects. - * @psalm-return T[] + * @phpstan-return T[] * * @throws UnexpectedValueException */ @@ -60,14 +60,14 @@ interface ObjectRepository * @param array $criteria The criteria. * * @return object|null The object. - * @psalm-return T|null + * @phpstan-return T|null */ public function findOneBy(array $criteria): object|null; /** * Returns the class name of the object managed by the repository. * - * @psalm-return class-string + * @phpstan-return class-string */ public function getClassName(): string; } diff --git a/src/Persistence/Reflection/EnumReflectionProperty.php b/src/Persistence/Reflection/EnumReflectionProperty.php index 44c13de..141356e 100644 --- a/src/Persistence/Reflection/EnumReflectionProperty.php +++ b/src/Persistence/Reflection/EnumReflectionProperty.php @@ -23,31 +23,16 @@ class EnumReflectionProperty extends ReflectionProperty { } - /** - * {@inheritDoc} - * - * @psalm-external-mutation-free - */ public function getDeclaringClass(): ReflectionClass { return $this->originalReflectionProperty->getDeclaringClass(); } - /** - * {@inheritDoc} - * - * @psalm-external-mutation-free - */ public function getName(): string { return $this->originalReflectionProperty->getName(); } - /** - * {@inheritDoc} - * - * @psalm-external-mutation-free - */ public function getType(): ReflectionType|null { return $this->originalReflectionProperty->getType(); @@ -136,31 +121,16 @@ class EnumReflectionProperty extends ReflectionProperty return $this->enumType::from($value); } - /** - * {@inheritDoc} - * - * @psalm-external-mutation-free - */ public function getModifiers(): int { return $this->originalReflectionProperty->getModifiers(); } - /** - * {@inheritDoc} - * - * @psalm-external-mutation-free - */ public function getDocComment(): string|false { return $this->originalReflectionProperty->getDocComment(); } - /** - * {@inheritDoc} - * - * @psalm-external-mutation-free - */ public function isPrivate(): bool { return $this->originalReflectionProperty->isPrivate(); diff --git a/tests/Persistence/Event/PreUpdateEventArgsTest.php b/tests/Persistence/Event/PreUpdateEventArgsTest.php index fcaa1f9..c48b816 100644 --- a/tests/Persistence/Event/PreUpdateEventArgsTest.php +++ b/tests/Persistence/Event/PreUpdateEventArgsTest.php @@ -65,7 +65,7 @@ class PreUpdateEventArgsTest extends DoctrineTestCase $event->setNewValue('does_not_exist', 'new value'); } - /** @psalm-return PreUpdateEventArgs */ + /** @phpstan-return PreUpdateEventArgs */ private function createTestPreUpdateEventArgs(): PreUpdateEventArgs { $entity = new TestObject(); diff --git a/tests/Persistence/ManagerRegistryTest.php b/tests/Persistence/ManagerRegistryTest.php index 1292678..b01a48b 100644 --- a/tests/Persistence/ManagerRegistryTest.php +++ b/tests/Persistence/ManagerRegistryTest.php @@ -183,7 +183,7 @@ class TestManagerRegistry extends AbstractManagerRegistry /** * {@inheritDoc} * - * @psalm-param class-string $proxyInterfaceName + * @phpstan-param class-string $proxyInterfaceName */ public function __construct( string $name, diff --git a/tests/Persistence/Mapping/AbstractClassMetadataFactoryTest.php b/tests/Persistence/Mapping/AbstractClassMetadataFactoryTest.php index e8ba8fd..0393447 100644 --- a/tests/Persistence/Mapping/AbstractClassMetadataFactoryTest.php +++ b/tests/Persistence/Mapping/AbstractClassMetadataFactoryTest.php @@ -57,10 +57,6 @@ final class AbstractClassMetadataFactoryTest extends DoctrineTestCase { $cmf = $this->getMockForAbstractClass(AbstractClassMetadataFactory::class); $this->expectException(MappingException::class); - /** - * @psalm-suppress ArgumentTypeCoercion - * @psalm-suppress UndefinedClass - */ // @phpstan-ignore-next-line $cmf->getMetadataFor('App:Test'); } @@ -69,10 +65,6 @@ final class AbstractClassMetadataFactoryTest extends DoctrineTestCase { $cmf = $this->getMockForAbstractClass(AbstractClassMetadataFactory::class); $this->expectException(MappingException::class); - /** - * @psalm-suppress ArgumentTypeCoercion - * @psalm-suppress UndefinedClass - */ // @phpstan-ignore-next-line $cmf->isTransient('App:Test'); } @@ -87,7 +79,6 @@ final class AbstractClassMetadataFactoryTest extends DoctrineTestCase self::createStub(ClassMetadata::class), ); - /** @psalm-suppress ArgumentTypeCoercion */ self::assertSame($cmf->getMetadataFor(SomeOtherEntity::class), $cmf->getMetadataFor('\\' . SomeOtherEntity::class)); } } diff --git a/tests/Persistence/Mapping/ClassMetadataFactoryTest.php b/tests/Persistence/Mapping/ClassMetadataFactoryTest.php index f109115..2574eca 100644 --- a/tests/Persistence/Mapping/ClassMetadataFactoryTest.php +++ b/tests/Persistence/Mapping/ClassMetadataFactoryTest.php @@ -19,14 +19,14 @@ use Symfony\Component\Cache\Adapter\ArrayAdapter; /** @covers \Doctrine\Persistence\Mapping\AbstractClassMetadataFactory */ class ClassMetadataFactoryTest extends DoctrineTestCase { - /** @psalm-var TestClassMetadataFactory> */ + /** @phpstan-var TestClassMetadataFactory> */ private TestClassMetadataFactory $cmf; protected function setUp(): void { $driver = $this->createMock(MappingDriver::class); - /** @psalm-var ClassMetadata */ + /** @phpstan-var ClassMetadata */ $metadata = $this->createMock(ClassMetadata::class); $this->cmf = new TestClassMetadataFactory($driver, $metadata); } @@ -183,7 +183,7 @@ class ClassMetadataFactoryTest extends DoctrineTestCase self::assertSame($metadata, $this->cmf->getMetadataFor(Foo::class)); } - /** @psalm-param AbstractClassMetadataFactory> $classMetadataFactory */ + /** @phpstan-param AbstractClassMetadataFactory> $classMetadataFactory */ private static function getCache(AbstractClassMetadataFactory $classMetadataFactory): CacheItemPoolInterface|null { $method = new ReflectionMethod($classMetadataFactory, 'getCache'); diff --git a/tests/Persistence/Mapping/Fixtures/TestClassMetadata.php b/tests/Persistence/Mapping/Fixtures/TestClassMetadata.php index 9fbe1e5..5667fd5 100644 --- a/tests/Persistence/Mapping/Fixtures/TestClassMetadata.php +++ b/tests/Persistence/Mapping/Fixtures/TestClassMetadata.php @@ -14,7 +14,7 @@ use ReflectionClass; */ final class TestClassMetadata implements ClassMetadata { - /** @psalm-param class-string $className */ + /** @phpstan-param class-string $className */ public function __construct(private readonly string $className) { } diff --git a/tests/Persistence/Mapping/StaticPHPDriverTest.php b/tests/Persistence/Mapping/StaticPHPDriverTest.php index d3ac187..9519c06 100644 --- a/tests/Persistence/Mapping/StaticPHPDriverTest.php +++ b/tests/Persistence/Mapping/StaticPHPDriverTest.php @@ -30,7 +30,7 @@ class StaticPHPDriverTest extends DoctrineTestCase class TestEntity { - /** @psalm-param ClassMetadata $metadata */ + /** @phpstan-param ClassMetadata $metadata */ public static function loadMetadata(ClassMetadata $metadata): void { $metadata->getFieldNames(); diff --git a/tests/Persistence/Mapping/TestClassMetadataFactory.php b/tests/Persistence/Mapping/TestClassMetadataFactory.php index c4e6d60..0aefd35 100644 --- a/tests/Persistence/Mapping/TestClassMetadataFactory.php +++ b/tests/Persistence/Mapping/TestClassMetadataFactory.php @@ -18,7 +18,7 @@ class TestClassMetadataFactory extends AbstractClassMetadataFactory /** @var callable|null */ public $fallbackCallback; - /** @psalm-param CMTemplate $metadata */ + /** @phpstan-param CMTemplate $metadata */ public function __construct(public MappingDriver $driver, public ClassMetadata $metadata) { } diff --git a/tests/Persistence/ObjectManagerDecoratorTest.php b/tests/Persistence/ObjectManagerDecoratorTest.php index 44b28f6..ba13da0 100644 --- a/tests/Persistence/ObjectManagerDecoratorTest.php +++ b/tests/Persistence/ObjectManagerDecoratorTest.php @@ -170,7 +170,7 @@ class ObjectManagerDecoratorTest extends TestCase /** @extends ObjectManagerDecorator */ class NullObjectManagerDecorator extends ObjectManagerDecorator { - /** @psalm-param ObjectManager&MockObject $wrapped */ + /** @phpstan-param ObjectManager&MockObject $wrapped */ public function __construct(ObjectManager $wrapped) { $this->wrapped = $wrapped;