Skip to content

Commit c8a27e2

Browse files
committed
Fix
1 parent b02ee14 commit c8a27e2

File tree

3 files changed

+18
-6
lines changed

3 files changed

+18
-6
lines changed

src/Rules/Classes/MixinRule.php

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use PHPStan\Rules\Rule;
1313
use PHPStan\Rules\RuleErrorBuilder;
1414
use PHPStan\Type\ErrorType;
15+
use PHPStan\Type\FileTypeMapper;
1516
use PHPStan\Type\NeverType;
1617
use PHPStan\Type\VerbosityLevel;
1718

@@ -21,6 +22,9 @@
2122
class MixinRule implements Rule
2223
{
2324

25+
/** @var FileTypeMapper */
26+
private $fileTypeMapper;
27+
2428
/** @var ReflectionProvider */
2529
private $reflectionProvider;
2630

@@ -37,13 +41,15 @@ class MixinRule implements Rule
3741
private $checkClassCaseSensitivity;
3842

3943
public function __construct(
44+
FileTypeMapper $fileTypeMapper,
4045
ReflectionProvider $reflectionProvider,
4146
ClassCaseSensitivityCheck $classCaseSensitivityCheck,
4247
GenericObjectTypeCheck $genericObjectTypeCheck,
4348
MissingTypehintCheck $missingTypehintCheck,
4449
bool $checkClassCaseSensitivity
4550
)
4651
{
52+
$this->fileTypeMapper = $fileTypeMapper;
4753
$this->reflectionProvider = $reflectionProvider;
4854
$this->classCaseSensitivityCheck = $classCaseSensitivityCheck;
4955
$this->genericObjectTypeCheck = $genericObjectTypeCheck;
@@ -64,11 +70,18 @@ public function processNode(Node $node, Scope $scope): array
6470
}
6571

6672
$className = (string) $node->namespacedName;
67-
if (!$this->reflectionProvider->hasClass($className)) {
73+
$docComment = $node->getDocComment();
74+
if ($docComment === null) {
6875
return [];
6976
}
70-
$classReflection = $this->reflectionProvider->getClass($className);
71-
$mixinTags = $classReflection->getMixinTags();
77+
$resolvedPhpDoc = $this->fileTypeMapper->getResolvedPhpDoc(
78+
$scope->getFile(),
79+
$className,
80+
null,
81+
null,
82+
$docComment->getText()
83+
);
84+
$mixinTags = $resolvedPhpDoc->getMixinTags();
7285
$errors = [];
7386
foreach ($mixinTags as $mixinTag) {
7487
$type = $mixinTag->getType();

tests/PHPStan/Analyser/AnalyserIntegrationTest.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,6 @@ public function testNestedFunctionCallsDoNotCauseExcessiveFunctionNesting(): voi
6969

7070
public function testExtendingUnknownClass(): void
7171
{
72-
if (PHP_VERSION_ID >= 70400) {
73-
$this->markTestSkipped('Not supported on PHP 7.4 - results in fatal error.');
74-
}
7572
$errors = $this->runAnalyse(__DIR__ . '/data/extending-unknown-class.php');
7673
$this->assertCount(1, $errors);
7774
$this->assertNull($errors[0]->getLine());

tests/PHPStan/Rules/Classes/MixinRuleTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use PHPStan\Rules\MissingTypehintCheck;
88
use PHPStan\Rules\Rule;
99
use PHPStan\Testing\RuleTestCase;
10+
use PHPStan\Type\FileTypeMapper;
1011

1112
/**
1213
* @extends RuleTestCase<MixinRule>
@@ -19,6 +20,7 @@ protected function getRule(): Rule
1920
$reflectionProvider = $this->createReflectionProvider();
2021

2122
return new MixinRule(
23+
self::getContainer()->getByType(FileTypeMapper::class),
2224
$reflectionProvider,
2325
new ClassCaseSensitivityCheck($reflectionProvider),
2426
new GenericObjectTypeCheck(),

0 commit comments

Comments
 (0)