Skip to content

Commit bfbc401

Browse files
committed
Bleeding edge - GenericAncestorsCheck - do not allow trait
1 parent 4ffbb3b commit bfbc401

File tree

3 files changed

+35
-2
lines changed

3 files changed

+35
-2
lines changed

src/Rules/Generics/GenericAncestorsCheck.php

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,28 @@ public function check(
112112
}
113113

114114
foreach ($ancestorType->getReferencedClasses() as $referencedClass) {
115-
if ($this->reflectionProvider->hasClass($referencedClass)) {
115+
if (!$this->reflectionProvider->hasClass($referencedClass)) {
116+
$messages[] = RuleErrorBuilder::message(sprintf($invalidTypeMessage, $referencedClass))
117+
->identifier('class.notFound')
118+
->build();
119+
continue;
120+
}
121+
122+
if (!$this->absentTypeChecks) {
123+
continue;
124+
}
125+
126+
if ($referencedClass === $ancestorType->getClassName()) {
127+
continue;
128+
}
129+
130+
$classReflection = $this->reflectionProvider->getClass($referencedClass);
131+
if (!$classReflection->isTrait()) {
116132
continue;
117133
}
118134

119135
$messages[] = RuleErrorBuilder::message(sprintf($invalidTypeMessage, $referencedClass))
120-
->identifier('class.notFound')
136+
->identifier('generics.trait')
121137
->build();
122138
}
123139

tests/PHPStan/Rules/Generics/ClassAncestorsRuleTest.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,10 @@ public function testRuleExtends(): void
127127
'Call-site variance annotation of covariant Throwable in generic type ClassAncestorsExtends\FooGeneric<covariant Throwable, InvalidArgumentException> in PHPDoc tag @extends is not allowed.',
128128
246,
129129
],
130+
[
131+
'PHPDoc tag @extends has invalid type ClassAncestorsExtends\FooTrait.',
132+
259,
133+
],
130134
]);
131135
}
132136

tests/PHPStan/Rules/Generics/data/class-ancestors-extends.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,3 +247,16 @@ class FooTypeProjection extends FooGeneric
247247
{
248248

249249
}
250+
251+
trait FooTrait
252+
{
253+
254+
}
255+
256+
/**
257+
* @extends FooGeneric<FooTrait, \InvalidArgumentException>
258+
*/
259+
class TraitInExtends extends FooGeneric
260+
{
261+
262+
}

0 commit comments

Comments
 (0)