Skip to content

Commit 6d61d3d

Browse files
committed
Fix one more false positive about unused private property
1 parent 35ce48c commit 6d61d3d

File tree

4 files changed

+65
-1
lines changed

4 files changed

+65
-1
lines changed

src/Reflection/ClassReflection.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -977,7 +977,7 @@ public function hasTraitUse(string $traitName): bool
977977
private function getTraitNames(): array
978978
{
979979
$class = $this->reflection;
980-
$traitNames = $class->getTraitNames();
980+
$traitNames = array_map(static fn (ReflectionClass $class) => $class->getName(), $this->collectTraits($class));
981981
while ($class->getParentClass() !== false) {
982982
$traitNames = array_values(array_unique(array_merge($traitNames, $class->getParentClass()->getTraitNames())));
983983
$class = $class->getParentClass();

tests/PHPStan/Rules/DeadCode/UnusedPrivatePropertyRuleTest.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,4 +272,11 @@ public function testBug8204(): void
272272
$this->analyse([__DIR__ . '/data/bug-8204.php'], []);
273273
}
274274

275+
public function testBug8850(): void
276+
{
277+
$this->alwaysWrittenTags = [];
278+
$this->alwaysReadTags = [];
279+
$this->analyse([__DIR__ . '/data/bug-8850.php'], []);
280+
}
281+
275282
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
<?php
2+
3+
namespace Bug8850;
4+
5+
class Security
6+
{
7+
public function getUser(): string
8+
{
9+
return 'foo';
10+
}
11+
}
12+
13+
final class UserInSessionInRoleEndpointExtension
14+
{
15+
use QueryBuilderHelperTrait;
16+
17+
/** @var Security */
18+
private $security;
19+
20+
public function __construct(
21+
Security $security
22+
) {
23+
$this->security = $security;
24+
}
25+
}
26+
27+
trait QueryBuilderHelperTrait
28+
{
29+
use OrganisationExtensionHelperTrait;
30+
}
31+
32+
trait OrganisationExtensionHelperTrait
33+
{
34+
use UserHelperTrait;
35+
36+
public function getOrganisationIds(): void
37+
{
38+
$user = $this->getUser();
39+
}
40+
}
41+
42+
trait UserHelperTrait
43+
{
44+
public function getUser(): string
45+
{
46+
$user = $this->security->getUser();
47+
48+
return 'foo';
49+
}
50+
}

tests/PHPStan/Type/ObjectTypeTest.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
use ArrayAccess;
66
use ArrayObject;
7+
use Bug8850\UserHelperTrait;
8+
use Bug8850\UserInSessionInRoleEndpointExtension;
79
use Closure;
810
use Countable;
911
use DateInterval;
@@ -432,6 +434,11 @@ public function dataIsSuperTypeOf(): array
432434
new ObjectType(DateTime::class),
433435
TrinaryLogic::createNo(),
434436
],
437+
61 => [
438+
new ObjectType(UserInSessionInRoleEndpointExtension::class),
439+
new ThisType($reflectionProvider->getClass(UserInSessionInRoleEndpointExtension::class), null, $reflectionProvider->getClass(UserHelperTrait::class)),
440+
TrinaryLogic::createMaybe(),
441+
],
435442
];
436443
}
437444

0 commit comments

Comments
 (0)