Skip to content

Commit cfa16c6

Browse files
VincentLangletondrejmirtes
authored andcommitted
Add non regression test for 11056
1 parent fd25c27 commit cfa16c6

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

tests/PHPStan/Rules/Functions/CallToFunctionParametersRuleTest.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1742,6 +1742,12 @@ public function testNoNamedArguments(): void
17421742
]);
17431743
}
17441744

1745+
public function testBug11056(): void
1746+
{
1747+
$this->checkExplicitMixed = true;
1748+
$this->analyse([__DIR__ . '/data/bug-11056.php'], []);
1749+
}
1750+
17451751
public function testBug11506(): void
17461752
{
17471753
$this->analyse([__DIR__ . '/data/bug-11506.php'], []);
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace Bug11056;
4+
5+
interface Item {}
6+
class A implements Item {}
7+
class B implements Item {}
8+
class C implements Item {}
9+
10+
/**
11+
* @template T
12+
* @param class-string<T>|string $class
13+
* @return ($class is class-string<T> ? T : mixed)
14+
*/
15+
function createA(string $class) {
16+
return new $class();
17+
}
18+
19+
/**
20+
* @template T
21+
* @param class-string<T> $class
22+
* @return T
23+
*/
24+
function createB(string $class) {
25+
return new $class();
26+
}
27+
28+
/**
29+
* @param Item[] $values
30+
*/
31+
function receive(array $values): void { }
32+
33+
receive(
34+
array_map(
35+
createA(...),
36+
[ A::class, B::class, C::class ]
37+
)
38+
);
39+
40+
receive(
41+
array_map(
42+
createB(...),
43+
[ A::class, B::class, C::class ]
44+
)
45+
);
46+
47+
receive(
48+
array_map(
49+
static fn($val) => createA($val),
50+
[ A::class, B::class, C::class ]
51+
)
52+
);
53+
54+
receive(
55+
array_map(
56+
static fn($val) => createB($val),
57+
[ A::class, B::class, C::class ]
58+
)
59+
);

0 commit comments

Comments
 (0)