Skip to content

Commit 46f51e7

Browse files
committed
Fix Rector autoloading issue
1 parent 58b6023 commit 46f51e7

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

src/Reflection/BetterReflection/BetterReflectionSourceLocatorFactory.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use PHPStan\Reflection\BetterReflection\SourceLocator\OptimizedDirectorySourceLocatorRepository;
1919
use PHPStan\Reflection\BetterReflection\SourceLocator\OptimizedSingleFileSourceLocatorRepository;
2020
use PHPStan\Reflection\BetterReflection\SourceLocator\PhpVersionBlacklistSourceLocator;
21+
use PHPStan\Reflection\BetterReflection\SourceLocator\RectorAutoloadSourceLocator;
2122
use PHPStan\Reflection\BetterReflection\SourceLocator\SkipClassAliasSourceLocator;
2223
use function array_merge;
2324
use function array_unique;
@@ -108,6 +109,7 @@ public function create(): SourceLocator
108109
if (!$this->disableRuntimeReflectionProvider) {
109110
$locators[] = new ClassWhitelistSourceLocator($this->autoloadSourceLocator, $this->staticReflectionClassNamePatterns);
110111
} else {
112+
$locators[] = new RectorAutoloadSourceLocator();
111113
$locators[] = $this->autoloadSourceLocator;
112114
}
113115
$locators[] = new PhpVersionBlacklistSourceLocator(new PhpInternalSourceLocator($astLocator, $this->reflectionSourceStubber), $this->phpstormStubsSourceStubber);
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php declare(strict_types = 1);
2+
3+
namespace PHPStan\Reflection\BetterReflection\SourceLocator;
4+
5+
use PHPStan\BetterReflection\Identifier\Identifier;
6+
use PHPStan\BetterReflection\Identifier\IdentifierType;
7+
use PHPStan\BetterReflection\Reflection\Reflection;
8+
use PHPStan\BetterReflection\Reflector\Reflector;
9+
use PHPStan\BetterReflection\SourceLocator\Type\SourceLocator;
10+
use function class_exists;
11+
use function interface_exists;
12+
use function strpos;
13+
use function strtolower;
14+
use function trait_exists;
15+
16+
class RectorAutoloadSourceLocator implements SourceLocator
17+
{
18+
19+
public function locateIdentifier(Reflector $reflector, Identifier $identifier): ?Reflection
20+
{
21+
if (!$identifier->isClass()) {
22+
return null;
23+
}
24+
25+
$className = strtolower($identifier->getName());
26+
if (strpos($className, 'rectorprefix') === 0 || strpos($className, 'rector\\') === 0) {
27+
class_exists($identifier->getName()) || interface_exists($identifier->getName()) || trait_exists($identifier->getName());
28+
}
29+
30+
return null;
31+
}
32+
33+
public function locateIdentifiersByType(Reflector $reflector, IdentifierType $identifierType): array
34+
{
35+
return [];
36+
}
37+
38+
}

0 commit comments

Comments
 (0)