Skip to content

Commit 0625e90

Browse files
committed
ClassMetadata is generic
1 parent 5a8b4c1 commit 0625e90

File tree

10 files changed

+133
-34
lines changed

10 files changed

+133
-34
lines changed

extension.neon

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,13 @@ parameters:
99
# setting this to false might lead to performance problems
1010
# it changes the braching logic - with false, queryBuilders from all branches are analysed separately
1111
queryBuilderFastAlgorithm: true
12+
featureToggles:
13+
skipCheckGenericClasses:
14+
- Doctrine\ODM\MongoDB\Mapping\ClassMetadata
15+
- Doctrine\ORM\Mapping\ClassMetadata
16+
- Doctrine\ORM\Mapping\ClassMetadataInfo
17+
- Doctrine\Persistence\Mapping\ClassMetadata
1218
stubFiles:
13-
- stubs/ClassMetadataInfo.stub
1419
- stubs/Criteria.stub
1520
- stubs/DocumentManager.stub
1621
- stubs/DocumentRepository.stub
@@ -20,6 +25,7 @@ parameters:
2025
- stubs/EntityRepository.stub
2126
- stubs/ServiceEntityRepository.stub
2227
- stubs/MongoClassMetadataInfo.stub
28+
2329
- stubs/Persistence/ManagerRegistry.stub
2430
- stubs/Persistence/ObjectManager.stub
2531
- stubs/Persistence/ObjectManagerDecorator.stub
@@ -30,6 +36,9 @@ parameters:
3036
- stubs/Collections/Selectable.stub
3137
- stubs/ORM/QueryBuilder.stub
3238
- stubs/ORM/AbstractQuery.stub
39+
- stubs/ORM/Mapping/ClassMetadata.stub
40+
- stubs/ORM/Mapping/ClassMetadataInfo.stub
41+
- stubs/Persistence/Mapping/ClassMetadata.stub
3342
- stubs/ServiceDocumentRepository.stub
3443

3544
parametersSchema:

phpstan-baseline.neon

Lines changed: 0 additions & 12 deletions
This file was deleted.

phpstan.neon

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
includes:
22
- extension.neon
33
- rules.neon
4-
- phpstan-baseline.neon
54
- vendor/phpstan/phpstan-strict-rules/rules.neon
65
- vendor/phpstan/phpstan-phpunit/extension.neon
76
- vendor/phpstan/phpstan-phpunit/rules.neon

src/Rules/Doctrine/ORM/PropertiesExtension.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public function isAlwaysRead(PropertyReflection $property, string $propertyName)
3030

3131
/**
3232
* @param class-string $className
33+
* @return \Doctrine\ORM\Mapping\ClassMetadataInfo<object>
3334
*/
3435
private function findMetadata(string $className): ?\Doctrine\ORM\Mapping\ClassMetadataInfo
3536
{

src/Type/Doctrine/ObjectMetadataResolver.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,14 +115,14 @@ public function getRepositoryClass(string $className): string
115115

116116
$ormMetadataClass = 'Doctrine\ORM\Mapping\ClassMetadata';
117117
if ($metadata instanceof $ormMetadataClass) {
118-
/** @var \Doctrine\ORM\Mapping\ClassMetadata $ormMetadata */
118+
/** @var \Doctrine\ORM\Mapping\ClassMetadata<object> $ormMetadata */
119119
$ormMetadata = $metadata;
120120
return $ormMetadata->customRepositoryClassName ?? $this->getResolvedRepositoryClass();
121121
}
122122

123123
$odmMetadataClass = 'Doctrine\ODM\MongoDB\Mapping\ClassMetadata';
124124
if ($metadata instanceof $odmMetadataClass) {
125-
/** @var \Doctrine\ODM\MongoDB\Mapping\ClassMetadata $odmMetadata */
125+
/** @var \Doctrine\ODM\MongoDB\Mapping\ClassMetadata<object> $odmMetadata */
126126
$odmMetadata = $metadata;
127127
return $odmMetadata->customRepositoryClassName ?? $this->getResolvedRepositoryClass();
128128
}

stubs/ClassMetadataInfo.stub

Lines changed: 0 additions & 17 deletions
This file was deleted.

stubs/MongoClassMetadataInfo.stub

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,40 @@
22

33
namespace Doctrine\ODM\MongoDB\Mapping;
44

5-
class ClassMetadata
5+
use Doctrine\Persistence\Mapping\ClassMetadata as BaseClassMetadata;
6+
use ReflectionClass;
7+
8+
/**
9+
* @template-covariant T of object
10+
* @template-implements BaseClassMetadata<T>
11+
*/
12+
class ClassMetadata implements BaseClassMetadata
613
{
714

815
/** @var string|null */
916
public $customRepositoryClassName;
1017

18+
/**
19+
* @var class-string<T>
20+
*/
21+
public $name;
22+
23+
/**
24+
* @param class-string<T> $documentName
25+
*/
26+
public function __construct(string $documentName)
27+
{
28+
29+
}
30+
31+
/**
32+
* @return class-string<T>
33+
*/
34+
public function getName();
35+
36+
/**
37+
* @return ReflectionClass<T>
38+
*/
39+
public function getReflectionClass();
40+
1141
}

stubs/ORM/Mapping/ClassMetadata.stub

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace Doctrine\ORM\Mapping;
4+
5+
/**
6+
* @template-covariant T of object
7+
* @extends ClassMetadataInfo<T>
8+
*/
9+
class ClassMetadata extends ClassMetadataInfo
10+
{
11+
/**
12+
* @param class-string<T> $entityName
13+
*/
14+
public function __construct($entityName)
15+
{
16+
17+
}
18+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
namespace Doctrine\ORM\Mapping;
4+
5+
use Doctrine\Persistence\Mapping\ClassMetadata;
6+
use ReflectionClass;
7+
8+
/**
9+
* @template-covariant T of object
10+
* @implements ClassMetadata<T>
11+
*/
12+
class ClassMetadataInfo implements ClassMetadata
13+
{
14+
15+
/** @var string|null */
16+
public $customRepositoryClassName;
17+
18+
/**
19+
* @param class-string<T> $entityName
20+
*/
21+
public function __construct($entityName)
22+
{
23+
24+
}
25+
26+
/**
27+
* @param string $assocName
28+
* @return class-string
29+
*/
30+
public function getAssociationTargetClass($assocName);
31+
32+
/**
33+
* @return T
34+
*/
35+
public function newInstance()
36+
{
37+
38+
}
39+
40+
/**
41+
* @return class-string<T>
42+
*/
43+
public function getName();
44+
45+
/**
46+
* @return ReflectionClass<T>
47+
*/
48+
public function getReflectionClass();
49+
50+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace Doctrine\Persistence\Mapping;
4+
5+
use ReflectionClass;
6+
7+
/**
8+
* @template-covariant T of object
9+
*/
10+
interface ClassMetadata
11+
{
12+
/**
13+
* @return class-string<T>
14+
*/
15+
public function getName();
16+
17+
/**
18+
* @return ReflectionClass<T>
19+
*/
20+
public function getReflectionClass();
21+
}

0 commit comments

Comments
 (0)