diff --git a/conf/config.neon b/conf/config.neon index 5fddbecf860..6c44bdcaeca 100644 --- a/conf/config.neon +++ b/conf/config.neon @@ -1130,6 +1130,21 @@ services: class: Roave\BetterReflection\SourceLocator\SourceStubber\PhpStormStubsSourceStubber arguments: phpParser: @phpParserDecorator + autowired: + - Roave\BetterReflection\SourceLocator\SourceStubber\PhpStormStubsSourceStubber + + - + class: Roave\BetterReflection\SourceLocator\SourceStubber\ReflectionSourceStubber + autowired: + - Roave\BetterReflection\SourceLocator\SourceStubber\ReflectionSourceStubber + + - + class: Roave\BetterReflection\SourceLocator\SourceStubber\AggregateSourceStubber + arguments: + - @Roave\BetterReflection\SourceLocator\SourceStubber\PhpStormStubsSourceStubber + - @Roave\BetterReflection\SourceLocator\SourceStubber\ReflectionSourceStubber + autowired: + - Roave\BetterReflection\SourceLocator\SourceStubber\SourceStubber # Error formatters diff --git a/src/Reflection/BetterReflection/BetterReflectionSourceLocatorFactory.php b/src/Reflection/BetterReflection/BetterReflectionSourceLocatorFactory.php index a922a4a54e3..b47d67feb96 100644 --- a/src/Reflection/BetterReflection/BetterReflectionSourceLocatorFactory.php +++ b/src/Reflection/BetterReflection/BetterReflectionSourceLocatorFactory.php @@ -9,8 +9,10 @@ use PHPStan\Reflection\BetterReflection\SourceLocator\OptimizedSingleFileSourceLocatorRepository; use Roave\BetterReflection\Reflector\FunctionReflector; use Roave\BetterReflection\SourceLocator\Ast\Locator; -use Roave\BetterReflection\SourceLocator\SourceStubber\PhpStormStubsSourceStubber; +use Roave\BetterReflection\SourceLocator\SourceStubber\ReflectionSourceStubber; +use Roave\BetterReflection\SourceLocator\SourceStubber\SourceStubber; use Roave\BetterReflection\SourceLocator\Type\AggregateSourceLocator; +use Roave\BetterReflection\SourceLocator\Type\EvaledCodeSourceLocator; use Roave\BetterReflection\SourceLocator\Type\MemoizingSourceLocator; use Roave\BetterReflection\SourceLocator\Type\PhpInternalSourceLocator; use Roave\BetterReflection\SourceLocator\Type\SourceLocator; @@ -21,8 +23,11 @@ class BetterReflectionSourceLocatorFactory /** @var \PhpParser\Parser */ private $parser; - /** @var PhpStormStubsSourceStubber */ - private $phpStormStubsSourceStubber; + /** @var SourceStubber */ + private $sourceStubber; + + /** @var ReflectionSourceStubber */ + private $reflectionSourceStubber; /** @var \PHPStan\Reflection\BetterReflection\SourceLocator\OptimizedSingleFileSourceLocatorRepository */ private $optimizedSingleFileSourceLocatorRepository; @@ -64,7 +69,8 @@ class BetterReflectionSourceLocatorFactory */ public function __construct( \PhpParser\Parser $parser, - PhpStormStubsSourceStubber $phpStormStubsSourceStubber, + SourceStubber $sourceStubber, + ReflectionSourceStubber $reflectionSourceStubber, OptimizedSingleFileSourceLocatorRepository $optimizedSingleFileSourceLocatorRepository, OptimizedDirectorySourceLocatorRepository $optimizedDirectorySourceLocatorRepository, ComposerJsonAndInstalledJsonSourceLocatorMaker $composerJsonAndInstalledJsonSourceLocatorMaker, @@ -78,7 +84,8 @@ public function __construct( ) { $this->parser = $parser; - $this->phpStormStubsSourceStubber = $phpStormStubsSourceStubber; + $this->sourceStubber = $sourceStubber; + $this->reflectionSourceStubber = $reflectionSourceStubber; $this->optimizedSingleFileSourceLocatorRepository = $optimizedSingleFileSourceLocatorRepository; $this->optimizedDirectorySourceLocatorRepository = $optimizedDirectorySourceLocatorRepository; $this->composerJsonAndInstalledJsonSourceLocatorMaker = $composerJsonAndInstalledJsonSourceLocatorMaker; @@ -134,8 +141,9 @@ public function create(): SourceLocator $astLocator = new Locator($this->parser, function (): FunctionReflector { return $this->container->getService('betterReflectionFunctionReflector'); }); + $locators[] = new PhpInternalSourceLocator($astLocator, $this->sourceStubber); + $locators[] = new EvaledCodeSourceLocator($astLocator, $this->reflectionSourceStubber); $locators[] = new AutoloadSourceLocator($astLocator); - $locators[] = new PhpInternalSourceLocator($astLocator, $this->phpStormStubsSourceStubber); return new MemoizingSourceLocator(new AggregateSourceLocator($locators)); } diff --git a/src/Testing/TestCase.php b/src/Testing/TestCase.php index 2d2a2952ab0..427ac40a685 100644 --- a/src/Testing/TestCase.php +++ b/src/Testing/TestCase.php @@ -63,8 +63,11 @@ use Roave\BetterReflection\Reflector\ConstantReflector; use Roave\BetterReflection\Reflector\FunctionReflector; use Roave\BetterReflection\SourceLocator\Ast\Locator; +use Roave\BetterReflection\SourceLocator\SourceStubber\AggregateSourceStubber; use Roave\BetterReflection\SourceLocator\SourceStubber\PhpStormStubsSourceStubber; +use Roave\BetterReflection\SourceLocator\SourceStubber\ReflectionSourceStubber; use Roave\BetterReflection\SourceLocator\Type\AggregateSourceLocator; +use Roave\BetterReflection\SourceLocator\Type\EvaledCodeSourceLocator; use Roave\BetterReflection\SourceLocator\Type\MemoizingSourceLocator; use Roave\BetterReflection\SourceLocator\Type\PhpInternalSourceLocator; @@ -522,8 +525,14 @@ private static function getReflectors(): array $astLocator = new Locator($phpParser, static function () use (&$functionReflector): FunctionReflector { return $functionReflector; }); + $reflectionSourceStubber = new ReflectionSourceStubber(); + $sourceStubber = new AggregateSourceStubber( + new PhpStormStubsSourceStubber($phpParser), + $reflectionSourceStubber + ); + $locators[] = new PhpInternalSourceLocator($astLocator, $sourceStubber); + $locators[] = new EvaledCodeSourceLocator($astLocator, $reflectionSourceStubber); $locators[] = new AutoloadSourceLocator($astLocator); - $locators[] = new PhpInternalSourceLocator($astLocator, new PhpStormStubsSourceStubber($phpParser)); $sourceLocator = new MemoizingSourceLocator(new AggregateSourceLocator($locators)); $classReflector = new MemoizingClassReflector($sourceLocator); diff --git a/src/Testing/TestCaseSourceLocatorFactory.php b/src/Testing/TestCaseSourceLocatorFactory.php index ce81a7162fc..ba4cb896711 100644 --- a/src/Testing/TestCaseSourceLocatorFactory.php +++ b/src/Testing/TestCaseSourceLocatorFactory.php @@ -8,8 +8,10 @@ use PHPStan\Reflection\BetterReflection\SourceLocator\ComposerJsonAndInstalledJsonSourceLocatorMaker; use Roave\BetterReflection\Reflector\FunctionReflector; use Roave\BetterReflection\SourceLocator\Ast\Locator; -use Roave\BetterReflection\SourceLocator\SourceStubber\PhpStormStubsSourceStubber; +use Roave\BetterReflection\SourceLocator\SourceStubber\ReflectionSourceStubber; +use Roave\BetterReflection\SourceLocator\SourceStubber\SourceStubber; use Roave\BetterReflection\SourceLocator\Type\AggregateSourceLocator; +use Roave\BetterReflection\SourceLocator\Type\EvaledCodeSourceLocator; use Roave\BetterReflection\SourceLocator\Type\MemoizingSourceLocator; use Roave\BetterReflection\SourceLocator\Type\PhpInternalSourceLocator; use Roave\BetterReflection\SourceLocator\Type\SourceLocator; @@ -23,19 +25,23 @@ class TestCaseSourceLocatorFactory private \PhpParser\Parser $phpParser; - private PhpStormStubsSourceStubber $phpStormStubsSourceStubber; + private SourceStubber $sourceStubber; + + private ReflectionSourceStubber $reflectionSourceStubber; public function __construct( Container $container, ComposerJsonAndInstalledJsonSourceLocatorMaker $composerJsonAndInstalledJsonSourceLocatorMaker, \PhpParser\Parser $phpParser, - PhpStormStubsSourceStubber $phpStormStubsSourceStubber + SourceStubber $sourceStubber, + ReflectionSourceStubber $reflectionSourceStubber ) { $this->container = $container; $this->composerJsonAndInstalledJsonSourceLocatorMaker = $composerJsonAndInstalledJsonSourceLocatorMaker; $this->phpParser = $phpParser; - $this->phpStormStubsSourceStubber = $phpStormStubsSourceStubber; + $this->sourceStubber = $sourceStubber; + $this->reflectionSourceStubber = $reflectionSourceStubber; } public function create(): SourceLocator @@ -62,8 +68,9 @@ public function create(): SourceLocator return $this->container->getService('testCaseFunctionReflector'); }); + $locators[] = new PhpInternalSourceLocator($astLocator, $this->sourceStubber); + $locators[] = new EvaledCodeSourceLocator($astLocator, $this->reflectionSourceStubber); $locators[] = new AutoloadSourceLocator($astLocator); - $locators[] = new PhpInternalSourceLocator($astLocator, $this->phpStormStubsSourceStubber); return new MemoizingSourceLocator(new AggregateSourceLocator($locators)); }