Skip to content

Commit e317317

Browse files
committed
Update stubs to be more strict about mixed vs. object
1 parent 062fc75 commit e317317

20 files changed

+115
-36
lines changed

stubs/Collections/ArrayCollection.stub

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
namespace Doctrine\Common\Collections;
44

55
/**
6-
* @template TKey
6+
* @template TKey of array-key
77
* @template T
88
* @implements Collection<TKey,T>
99
* @implements Selectable<TKey,T>

stubs/DocumentManager.stub

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class DocumentManager implements ObjectManager
5050
public function getPartialReference($documentName, $identifier);
5151

5252
/**
53-
* @template T
53+
* @template T of object
5454
* @phpstan-param T $entity
5555
* @phpstan-param bool $deep
5656
* @phpstan-return T

stubs/EntityManager.stub

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class EntityManager implements EntityManagerInterface
66
{
77

88
/**
9-
* @template T
9+
* @template T of object
1010
* @phpstan-param class-string<T> $entityName
1111
* @phpstan-param mixed $id
1212
* @phpstan-param integer|null $lockMode
@@ -16,30 +16,30 @@ class EntityManager implements EntityManagerInterface
1616
public function find($entityName, $id, $lockMode = null, $lockVersion = null);
1717

1818
/**
19-
* @template T
19+
* @template T of object
2020
* @phpstan-param T $entity
2121
* @phpstan-return T
2222
* @deprecated 2.7 This method is being removed from the ORM and won't have any replacement
2323
*/
2424
public function merge($entity);
2525

2626
/**
27-
* @template T
27+
* @template T of object
2828
* @phpstan-param class-string<T> $entityName
2929
* @phpstan-return EntityRepository<T>
3030
*/
3131
public function getRepository($entityName);
3232

3333
/**
34-
* @template T
34+
* @template T of object
3535
* @phpstan-param class-string<T> $entityName
3636
* @phpstan-param mixed $id
3737
* @phpstan-return T|null
3838
*/
3939
public function getReference($entityName, $id);
4040

4141
/**
42-
* @template T
42+
* @template T of object
4343
* @phpstan-param class-string<T> $entityName
4444
* @phpstan-param mixed $identifier
4545
*
@@ -48,7 +48,7 @@ class EntityManager implements EntityManagerInterface
4848
public function getPartialReference($entityName, $identifier);
4949

5050
/**
51-
* @template T
51+
* @template T of object
5252
* @phpstan-param T $entity
5353
* @phpstan-param bool $deep
5454
* @phpstan-return T

stubs/EntityManagerDecorator.stub

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ class EntityManagerDecorator implements EntityManagerInterface
99
{
1010

1111
/**
12-
* @template T
12+
* @template T of object
1313
* @phpstan-param class-string<T> $entityName
1414
* @phpstan-param mixed $id
1515
* @phpstan-param integer|null $lockMode
@@ -19,29 +19,29 @@ class EntityManagerDecorator implements EntityManagerInterface
1919
public function find($entityName, $id, $lockMode = null, $lockVersion = null);
2020

2121
/**
22-
* @template T
22+
* @template T of object
2323
* @phpstan-param T $entity
2424
* @phpstan-return T
2525
*/
2626
public function merge($entity);
2727

2828
/**
29-
* @template T
29+
* @template T of object
3030
* @phpstan-param class-string<T> $entityName
3131
* @phpstan-return EntityRepository<T>
3232
*/
3333
public function getRepository($entityName);
3434

3535
/**
36-
* @template T
36+
* @template T of object
3737
* @phpstan-param class-string<T> $entityName
3838
* @phpstan-param mixed $id
3939
* @phpstan-return T|null
4040
*/
4141
public function getReference($entityName, $id);
4242

4343
/**
44-
* @template T
44+
* @template T of object
4545
* @phpstan-param class-string<T> $entityName
4646
* @phpstan-param mixed $identifier
4747
*
@@ -50,7 +50,7 @@ class EntityManagerDecorator implements EntityManagerInterface
5050
public function getPartialReference($entityName, $identifier);
5151

5252
/**
53-
* @template T
53+
* @template T of object
5454
* @phpstan-param T $entity
5555
* @phpstan-param bool $deep
5656
* @phpstan-return T

stubs/EntityManagerInterface.stub

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,37 +9,37 @@ interface EntityManagerInterface extends ObjectManager
99
{
1010

1111
/**
12-
* @template T
12+
* @template T of object
1313
* @phpstan-param class-string<T> $className
1414
* @phpstan-param mixed $id
1515
* @phpstan-return T|null
1616
*/
1717
public function find($className, $id);
1818

1919
/**
20-
* @template T
20+
* @template T of object
2121
* @phpstan-param T $object
2222
* @phpstan-return T
2323
*/
2424
public function merge($object);
2525

2626
/**
27-
* @template T
27+
* @template T of object
2828
* @phpstan-param class-string<T> $className
2929
* @phpstan-return ObjectRepository<T>
3030
*/
3131
public function getRepository($className);
3232

3333
/**
34-
* @template T
34+
* @template T of object
3535
* @phpstan-param class-string<T> $entityName
3636
* @phpstan-param mixed $id
3737
* @phpstan-return T|null
3838
*/
3939
public function getReference($entityName, $id);
4040

4141
/**
42-
* @template T
42+
* @template T of object
4343
* @phpstan-param class-string<T> $entityName
4444
* @phpstan-param mixed $identifier
4545
*
@@ -48,7 +48,7 @@ interface EntityManagerInterface extends ObjectManager
4848
public function getPartialReference($entityName, $identifier);
4949

5050
/**
51-
* @template T
51+
* @template T of object
5252
* @phpstan-param T $entity
5353
* @phpstan-param bool $deep
5454
* @phpstan-return T

stubs/EntityRepository.stub

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use Doctrine\Common\Collections\Criteria;
66
use Doctrine\Persistence\ObjectRepository;
77

88
/**
9-
* @template TEntityClass
9+
* @template TEntityClass of object
1010
* @implements ObjectRepository<TEntityClass>
1111
*/
1212
class EntityRepository implements ObjectRepository

stubs/ORM/AbstractQuery.stub

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ abstract class AbstractQuery
88
{
99

1010
/**
11-
* @param ArrayCollection<mixed, mixed>|array<mixed> $parameters
11+
* @param ArrayCollection<array-key, mixed>|array<mixed> $parameters
1212
* @return static
1313
*/
1414
public function setParameters($parameters)

stubs/ORM/QueryBuilder.stub

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class QueryBuilder
66
{
77

88
/**
9-
* @param \Doctrine\Common\Collections\ArrayCollection<mixed, mixed>|array<mixed> $parameters
9+
* @param \Doctrine\Common\Collections\ArrayCollection<array-key, mixed>|array<mixed> $parameters
1010
* @return static
1111
*/
1212
public function setParameters($parameters)

stubs/Persistence/ManagerRegistry.stub

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ interface ManagerRegistry
66
{
77

88
/**
9-
* @template T
9+
* @template T of object
1010
* @phpstan-param class-string<T> $persistentObject
1111
* @phpstan-param string $persistentManagerName
1212
* @phpstan-return ObjectRepository<T>

stubs/Persistence/ObjectManager.stub

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,22 @@ interface ObjectManager
66
{
77

88
/**
9-
* @template T
9+
* @template T of object
1010
* @phpstan-param class-string<T> $className
1111
* @phpstan-param mixed $id
1212
* @phpstan-return T|null
1313
*/
1414
public function find($className, $id);
1515

1616
/**
17-
* @template T
17+
* @template T of object
1818
* @phpstan-param T $object
1919
* @phpstan-return T
2020
*/
2121
public function merge($object);
2222

2323
/**
24-
* @template T
24+
* @template T of object
2525
* @phpstan-param class-string<T> $className
2626
* @phpstan-return ObjectRepository<T>
2727
*/

stubs/Persistence/ObjectManagerDecorator.stub

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,22 @@ class ObjectManagerDecorator
66
{
77

88
/**
9-
* @template T
9+
* @template T of object
1010
* @phpstan-param class-string<T> $className
1111
* @phpstan-param mixed $id
1212
* @phpstan-return T|null
1313
*/
1414
public function find($className, $id);
1515

1616
/**
17-
* @template T
17+
* @template T of object
1818
* @phpstan-param T $object
1919
* @phpstan-return T
2020
*/
2121
public function merge($object);
2222

2323
/**
24-
* @template T
24+
* @template T of object
2525
* @phpstan-param class-string<T> $className
2626
* @phpstan-return ObjectRepository<T>
2727
*/

stubs/Persistence/ObjectRepository.stub

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
namespace Doctrine\Persistence;
44

55
/**
6-
* @template TEntityClass
6+
* @template TEntityClass of object
77
*/
88
interface ObjectRepository
99
{

stubs/RepositoryFactory.stub

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use Doctrine\ORM\EntityManagerInterface;
88
interface RepositoryFactory
99
{
1010
/**
11-
* @template TEntityClass
11+
* @template TEntityClass of object
1212
* @phpstan-param class-string<TEntityClass> $entityName
1313
* @phpstan-return ObjectRepository<TEntityClass>
1414
*/

stubs/ServiceEntityRepository.stub

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ namespace Doctrine\Bundle\DoctrineBundle\Repository;
44
use \Doctrine\ORM\EntityRepository;
55

66
/**
7-
* @template TEntityClass
7+
* @template TEntityClass of object
88
* @template-extends EntityRepository<TEntityClass>
99
*/
10-
class ServiceEntityRepository extends EntityRepository {
10+
class ServiceEntityRepository extends EntityRepository {
1111
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
[
2+
{
3+
"message": "Call to an undefined method object::doSomethingElse().",
4+
"line": 46,
5+
"ignorable": true
6+
},
7+
{
8+
"message": "Call to an undefined method object::nonexistent().",
9+
"line": 47,
10+
"ignorable": true
11+
},
12+
{
13+
"message": "Method PHPStan\\DoctrineIntegration\\ORM\\CustomRepositoryUsage\\MyRepository::get() should return PHPStan\\DoctrineIntegration\\ORM\\CustomRepositoryUsage\\MyEntity but returns T of object.",
14+
"line": 97,
15+
"ignorable": true
16+
}
17+
]

tests/DoctrineIntegration/ORM/data/customRepositoryUsage-8-missing.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,15 @@
33
"message": "Call to an undefined method PHPStan\\DoctrineIntegration\\ORM\\CustomRepositoryUsage\\MyEntity::nonexistent().",
44
"line": 54,
55
"ignorable": true
6+
},
7+
{
8+
"message": "Call to an undefined method object::doSomethingElse().",
9+
"line": 46,
10+
"ignorable": true
11+
},
12+
{
13+
"message": "Call to an undefined method object::nonexistent().",
14+
"line": 47,
15+
"ignorable": true
616
}
717
]

tests/DoctrineIntegration/ORM/data/customRepositoryUsage-8.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,14 @@
11
[
2+
{
3+
"message": "Cannot call method doSomethingElse() on object|null.",
4+
"line": 46,
5+
"ignorable": true
6+
},
7+
{
8+
"message": "Cannot call method nonexistent() on object|null.",
9+
"line": 47,
10+
"ignorable": true
11+
},
212
{
313
"message": "Cannot call method doSomethingElse() on PHPStan\\DoctrineIntegration\\ORM\\CustomRepositoryUsage\\MyEntity|null.",
414
"line": 53,

tests/DoctrineIntegration/ORM/data/customRepositoryUsage.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public function doSomethingElse(): void
8181
}
8282

8383
/**
84-
* @template T
84+
* @template T of object
8585
* @extends EntityRepository<T>
8686
*/
8787
class MyRepository extends EntityRepository

tests/DoctrineIntegration/ORM/data/entityRepositoryDynamicReturn-0.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"ignorable": true
1111
},
1212
{
13-
"message": "Method Doctrine\\ORM\\EntityRepository<mixed>::createQueryBuilder() invoked with 0 parameters, 1-2 required.",
13+
"message": "Method Doctrine\\ORM\\EntityRepository<object>::createQueryBuilder() invoked with 0 parameters, 1-2 required.",
1414
"line": 239,
1515
"ignorable": true
1616
},

0 commit comments

Comments
 (0)