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
// test: chained extends with two template params resolves second method
// feature: completion
// Adapted from phpactor generics/class_extend2.test (second assertion)
// expect: booMethod(
---
<?php
/**
* @template T
*/
class First {
/** @return T */
public function bar() {}
}
/**
* @template T
* @template Y
* @extends First<T>
*/
class Second extends First {
/** @return Y */
public function boo() {}
}
class Baz {
public function barMethod(): void {}
}
class Boo {
public function booMethod(): void {}
}
/** @extends Second<Baz, Boo> */
class Foo extends Second {}
$foo = new Foo();
$foo->boo()-><>