1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// test: three-level generic factory chain resolves return type through inheritance
// feature: completion
// Adapted from phpactor generics/gh-2295-test.test
// expect: childMethod(
---
<?php
abstract class Model {}
/**
* @template TModel of Model
*/
class Factory {
/** @return TModel */
public function create(): object {}
}
/**
* @template TModel of Schedule
* @extends Factory<TModel>
*/
class ScheduleFactory extends Factory {
/** @param TModel $schedule */
public function __construct(Schedule $schedule) {}
}
class Schedule extends Model {}
/** @extends ScheduleFactory<ChildSchedule> */
class ChildScheduleFactory extends ScheduleFactory {}
class ChildSchedule extends Schedule {
public function childMethod(): void {}
}
$s = (new ChildScheduleFactory())->create();
$s-><>