10
10
namespace PHPUnit \Metadata \Api ;
11
11
12
12
use function array_flip ;
13
+ use function array_key_exists ;
13
14
use function array_unique ;
14
15
use function assert ;
15
16
use function strtolower ;
29
30
*/
30
31
final class Groups
31
32
{
33
+ /**
34
+ * @var array<string, list<string>>
35
+ */
36
+ private static array $ groupCache = [];
37
+
32
38
/**
33
39
* @psalm-param class-string $className
34
40
* @psalm-param non-empty-string $methodName
@@ -37,6 +43,12 @@ final class Groups
37
43
*/
38
44
public function groups (string $ className , string $ methodName , bool $ includeVirtual = true ): array
39
45
{
46
+ $ key = $ className . ':: ' . $ methodName . ':: ' . $ includeVirtual ;
47
+
48
+ if (array_key_exists ($ key , self ::$ groupCache )) {
49
+ return self ::$ groupCache [$ key ];
50
+ }
51
+
40
52
$ groups = [];
41
53
42
54
foreach (Registry::parser ()->forClassAndMethod ($ className , $ methodName )->isGroup () as $ group ) {
@@ -50,7 +62,7 @@ public function groups(string $className, string $methodName, bool $includeVirtu
50
62
}
51
63
52
64
if (!$ includeVirtual ) {
53
- return array_unique ($ groups );
65
+ return self :: $ groupCache [ $ key ] = array_unique ($ groups );
54
66
}
55
67
56
68
foreach (Registry::parser ()->forClassAndMethod ($ className , $ methodName ) as $ metadata ) {
@@ -85,7 +97,7 @@ public function groups(string $className, string $methodName, bool $includeVirtu
85
97
}
86
98
}
87
99
88
- return array_unique ($ groups );
100
+ return self :: $ groupCache [ $ key ] = array_unique ($ groups );
89
101
}
90
102
91
103
/**
0 commit comments