File tree 3 files changed +36
-2
lines changed
3 files changed +36
-2
lines changed Original file line number Diff line number Diff line change @@ -199,7 +199,6 @@ public function getParentClass(): ?ClassReflection
199
199
$ extendedType = TemplateTypeHelper::resolveTemplateTypes (
200
200
$ extendedType ,
201
201
$ this ->getPossiblyIncompleteActiveTemplateTypeMap (),
202
- true ,
203
202
);
204
203
}
205
204
@@ -1266,7 +1265,7 @@ public function typeMapFromList(array $types): TemplateTypeMap
1266
1265
$ map = [];
1267
1266
$ i = 0 ;
1268
1267
foreach ($ resolvedPhpDoc ->getTemplateTags () as $ tag ) {
1269
- $ map [$ tag ->getName ()] = $ types [$ i ] ?? new ErrorType ();
1268
+ $ map [$ tag ->getName ()] = $ types [$ i ] ?? $ tag -> getBound ();
1270
1269
$ i ++;
1271
1270
}
1272
1271
Original file line number Diff line number Diff line change @@ -29,3 +29,12 @@ class OtherGenericClass{}
29
29
abstract class BaseModel{}
30
30
31
31
class Model extends BaseModel{}
32
+
33
+ /**
34
+ * @template T of Model
35
+ * @extends GenericClass<T>
36
+ */
37
+ class ChildGenericGenericClass extends GenericClass
38
+ {
39
+
40
+ }
Original file line number Diff line number Diff line change 4
4
5
5
use ArrayAccess ;
6
6
use ArrayObject ;
7
+ use Bug4008 \BaseModel ;
8
+ use Bug4008 \ChildGenericGenericClass ;
9
+ use Bug4008 \GenericClass ;
10
+ use Bug4008 \Model ;
7
11
use Bug8850 \UserInSessionInRoleEndpointExtension ;
8
12
use Bug9006 \TestInterface ;
9
13
use Closure ;
@@ -665,4 +669,26 @@ public function testGetEnumCases(
665
669
}
666
670
}
667
671
672
+ public function testClassReflectionWithTemplateBound (): void
673
+ {
674
+ $ type = new ObjectType (GenericClass::class);
675
+ $ classReflection = $ type ->getClassReflection ();
676
+ $ this ->assertNotNull ($ classReflection );
677
+ $ tModlel = $ classReflection ->getActiveTemplateTypeMap ()->getType ('TModlel ' );
678
+ $ this ->assertNotNull ($ tModlel );
679
+ $ this ->assertSame (BaseModel::class, $ tModlel ->describe (VerbosityLevel::precise ()));
680
+ }
681
+
682
+ public function testClassReflectionParentWithTemplateBound (): void
683
+ {
684
+ $ type = new ObjectType (ChildGenericGenericClass::class);
685
+ $ classReflection = $ type ->getClassReflection ();
686
+ $ this ->assertNotNull ($ classReflection );
687
+ $ ancestor = $ classReflection ->getAncestorWithClassName (GenericClass::class);
688
+ $ this ->assertNotNull ($ ancestor );
689
+ $ tModlel = $ ancestor ->getActiveTemplateTypeMap ()->getType ('TModlel ' );
690
+ $ this ->assertNotNull ($ tModlel );
691
+ $ this ->assertSame (Model::class, $ tModlel ->describe (VerbosityLevel::precise ()));
692
+ }
693
+
668
694
}
You can’t perform that action at this time.
0 commit comments