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
38
39
40
// test: child re-templates parent template via @template-extends
// feature: completion
// Adapted from phpactor generics/class_template_extends1.test
// expect: bazMethod(
---
<?php
class Baz {
public function bazMethod(): void {}
}
class Boo {
public function booMethod(): void {}
}
/**
* @template T
*/
class First {
/** @return T */
public function bar() {}
}
/**
* @template T
* @template Y
* @template-extends First<T>
*/
class Second extends First {
/** @return Y */
public function boo() {}
}
/**
* @template-extends Second<Baz, Boo>
*/
class Foo extends Second {}
$foo = new Foo();
$foo->bar()-><>