Skip to content

Commit f2f79f9

Browse files
committed
[BCB] PHPStanTestCase::getBroker() returns ReflectionProvider
1 parent 7aabc84 commit f2f79f9

File tree

4 files changed

+34
-101
lines changed

4 files changed

+34
-101
lines changed

src/Broker/Broker.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class Broker implements ReflectionProvider
2525
/** @var string[] */
2626
private array $universalObjectCratesClasses;
2727

28-
private static ?\PHPStan\Broker\Broker $instance = null;
28+
private static ?Broker $instance = null;
2929

3030
/**
3131
* @param \PHPStan\Reflection\ReflectionProvider $reflectionProvider
@@ -46,9 +46,9 @@ public function __construct(
4646
$this->universalObjectCratesClasses = $universalObjectCratesClasses;
4747
}
4848

49-
public static function registerInstance(Broker $reflectionProvider): void
49+
public static function registerInstance(Broker $broker): void
5050
{
51-
self::$instance = $reflectionProvider;
51+
self::$instance = $broker;
5252
}
5353

5454
public static function getInstance(): Broker

src/Testing/PHPStanTestCase.php

+26-29
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
use PHPStan\DependencyInjection\Reflection\DirectClassReflectionExtensionRegistryProvider;
3131
use PHPStan\DependencyInjection\Type\DirectDynamicReturnTypeExtensionRegistryProvider;
3232
use PHPStan\DependencyInjection\Type\DirectOperatorTypeSpecifyingExtensionRegistryProvider;
33+
use PHPStan\DependencyInjection\Type\DynamicReturnTypeExtensionRegistryProvider;
34+
use PHPStan\DependencyInjection\Type\OperatorTypeSpecifyingExtensionRegistryProvider;
3335
use PHPStan\File\FileHelper;
3436
use PHPStan\File\SimpleRelativePathHelper;
3537
use PHPStan\Parser\CachedParser;
@@ -143,24 +145,34 @@ public function getParser(): \PHPStan\Parser\Parser
143145

144146
/**
145147
* @api
146-
* @param \PHPStan\Type\DynamicMethodReturnTypeExtension[] $dynamicMethodReturnTypeExtensions
147-
* @param \PHPStan\Type\DynamicStaticMethodReturnTypeExtension[] $dynamicStaticMethodReturnTypeExtensions
148-
* @return \PHPStan\Broker\Broker
148+
* @return \PHPStan\Reflection\ReflectionProvider
149149
*/
150-
public function createBroker(
151-
array $dynamicMethodReturnTypeExtensions = [],
152-
array $dynamicStaticMethodReturnTypeExtensions = []
153-
): Broker
150+
public function createBroker(): ReflectionProvider
154151
{
152+
return $this->createReflectionProvider();
153+
}
154+
155+
/** @api */
156+
public function createReflectionProvider(): ReflectionProvider
157+
{
158+
$setterReflectionProviderProvider = new ReflectionProvider\SetterReflectionProviderProvider();
159+
$staticReflectionProvider = $this->createStaticReflectionProvider($setterReflectionProviderProvider);
160+
$reflectionProvider = $this->createReflectionProviderByParameters(
161+
$this->createRuntimeReflectionProvider($setterReflectionProviderProvider),
162+
$staticReflectionProvider,
163+
self::$useStaticReflectionProvider
164+
);
165+
$setterReflectionProviderProvider->setReflectionProvider($reflectionProvider);
166+
155167
$dynamicReturnTypeExtensionRegistryProvider = new DirectDynamicReturnTypeExtensionRegistryProvider(
156-
array_merge(self::getContainer()->getServicesByTag(BrokerFactory::DYNAMIC_METHOD_RETURN_TYPE_EXTENSION_TAG), $dynamicMethodReturnTypeExtensions, $this->getDynamicMethodReturnTypeExtensions()),
157-
array_merge(self::getContainer()->getServicesByTag(BrokerFactory::DYNAMIC_STATIC_METHOD_RETURN_TYPE_EXTENSION_TAG), $dynamicStaticMethodReturnTypeExtensions, $this->getDynamicStaticMethodReturnTypeExtensions()),
168+
array_merge(self::getContainer()->getServicesByTag(BrokerFactory::DYNAMIC_METHOD_RETURN_TYPE_EXTENSION_TAG), $this->getDynamicMethodReturnTypeExtensions()),
169+
array_merge(self::getContainer()->getServicesByTag(BrokerFactory::DYNAMIC_STATIC_METHOD_RETURN_TYPE_EXTENSION_TAG), $this->getDynamicStaticMethodReturnTypeExtensions()),
158170
array_merge(self::getContainer()->getServicesByTag(BrokerFactory::DYNAMIC_FUNCTION_RETURN_TYPE_EXTENSION_TAG), $this->getDynamicFunctionReturnTypeExtensions())
159171
);
160172
$operatorTypeSpecifyingExtensionRegistryProvider = new DirectOperatorTypeSpecifyingExtensionRegistryProvider(
161173
$this->getOperatorTypeSpecifyingExtensions()
162174
);
163-
$reflectionProvider = $this->createReflectionProvider();
175+
164176
$broker = new Broker(
165177
$reflectionProvider,
166178
$dynamicReturnTypeExtensionRegistryProvider,
@@ -172,21 +184,6 @@ public function createBroker(
172184
$operatorTypeSpecifyingExtensionRegistryProvider->setBroker($broker);
173185
$this->getClassReflectionExtensionRegistryProvider()->setBroker($broker);
174186

175-
return $broker;
176-
}
177-
178-
/** @api */
179-
public function createReflectionProvider(): ReflectionProvider
180-
{
181-
$setterReflectionProviderProvider = new ReflectionProvider\SetterReflectionProviderProvider();
182-
$staticReflectionProvider = $this->createStaticReflectionProvider($setterReflectionProviderProvider);
183-
$reflectionProvider = $this->createReflectionProviderByParameters(
184-
$this->createRuntimeReflectionProvider($setterReflectionProviderProvider),
185-
$staticReflectionProvider,
186-
self::$useStaticReflectionProvider
187-
);
188-
$setterReflectionProviderProvider->setReflectionProvider($reflectionProvider);
189-
190187
return $reflectionProvider;
191188
}
192189

@@ -563,15 +560,15 @@ public function getClassReflectionExtensionRegistryProvider(): DirectClassReflec
563560
return $this->classReflectionExtensionRegistryProvider;
564561
}
565562

566-
public function createScopeFactory(Broker $broker, TypeSpecifier $typeSpecifier): ScopeFactory
563+
public function createScopeFactory(ReflectionProvider $reflectionProvider, TypeSpecifier $typeSpecifier): ScopeFactory
567564
{
568565
$container = self::getContainer();
569566

570567
return new DirectScopeFactory(
571568
MutatingScope::class,
572-
$broker,
573-
$broker->getDynamicReturnTypeExtensionRegistryProvider(),
574-
$broker->getOperatorTypeSpecifyingExtensionRegistryProvider(),
569+
$reflectionProvider,
570+
$container->getByType(DynamicReturnTypeExtensionRegistryProvider::class),
571+
$container->getByType(OperatorTypeSpecifyingExtensionRegistryProvider::class),
575572
new \PhpParser\PrettyPrinter\Standard(),
576573
$typeSpecifier,
577574
new PropertyReflectionFinder(),

src/Testing/TypeInferenceTestCase.php

+5-13
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
use PHPStan\Analyser\Scope;
1111
use PHPStan\Analyser\ScopeContext;
1212
use PHPStan\Broker\AnonymousClassNameHelper;
13-
use PHPStan\Broker\Broker;
1413
use PHPStan\Cache\Cache;
1514
use PHPStan\DependencyInjection\Type\DynamicThrowTypeExtensionProvider;
1615
use PHPStan\File\FileHelper;
@@ -22,8 +21,6 @@
2221
use PHPStan\PhpDoc\StubPhpDocProvider;
2322
use PHPStan\Reflection\ReflectionProvider\DirectReflectionProviderProvider;
2423
use PHPStan\TrinaryLogic;
25-
use PHPStan\Type\DynamicMethodReturnTypeExtension;
26-
use PHPStan\Type\DynamicStaticMethodReturnTypeExtension;
2724
use PHPStan\Type\FileTypeMapper;
2825
use PHPStan\Type\VerbosityLevel;
2926

@@ -34,17 +31,13 @@ abstract class TypeInferenceTestCase extends \PHPStan\Testing\PHPStanTestCase
3431
/**
3532
* @param string $file
3633
* @param callable(\PhpParser\Node, \PHPStan\Analyser\Scope): void $callback
37-
* @param DynamicMethodReturnTypeExtension[] $dynamicMethodReturnTypeExtensions
38-
* @param DynamicStaticMethodReturnTypeExtension[] $dynamicStaticMethodReturnTypeExtensions
3934
* @param \PHPStan\Type\MethodTypeSpecifyingExtension[] $methodTypeSpecifyingExtensions
4035
* @param \PHPStan\Type\StaticMethodTypeSpecifyingExtension[] $staticMethodTypeSpecifyingExtensions
4136
* @param string[] $dynamicConstantNames
4237
*/
4338
public function processFile(
4439
string $file,
4540
callable $callback,
46-
array $dynamicMethodReturnTypeExtensions = [],
47-
array $dynamicStaticMethodReturnTypeExtensions = [],
4841
array $methodTypeSpecifyingExtensions = [],
4942
array $staticMethodTypeSpecifyingExtensions = [],
5043
array $dynamicConstantNames = []
@@ -54,15 +47,14 @@ public function processFile(
5447
$phpDocNodeResolver = self::getContainer()->getByType(PhpDocNodeResolver::class);
5548

5649
$printer = new \PhpParser\PrettyPrinter\Standard();
57-
$broker = $this->createBroker($dynamicMethodReturnTypeExtensions, $dynamicStaticMethodReturnTypeExtensions);
58-
Broker::registerInstance($broker);
59-
$typeSpecifier = $this->createTypeSpecifier($printer, $broker, $methodTypeSpecifyingExtensions, $staticMethodTypeSpecifyingExtensions);
50+
$reflectionProvider = $this->createReflectionProvider();
51+
$typeSpecifier = $this->createTypeSpecifier($printer, $reflectionProvider, $methodTypeSpecifyingExtensions, $staticMethodTypeSpecifyingExtensions);
6052
$currentWorkingDirectory = $this->getCurrentWorkingDirectory();
6153
$fileHelper = new FileHelper($currentWorkingDirectory);
62-
$fileTypeMapper = new FileTypeMapper(new DirectReflectionProviderProvider($broker), $this->getParser(), $phpDocStringResolver, $phpDocNodeResolver, $this->createMock(Cache::class), new AnonymousClassNameHelper($fileHelper, new SimpleRelativePathHelper($currentWorkingDirectory)));
54+
$fileTypeMapper = new FileTypeMapper(new DirectReflectionProviderProvider($reflectionProvider), $this->getParser(), $phpDocStringResolver, $phpDocNodeResolver, $this->createMock(Cache::class), new AnonymousClassNameHelper($fileHelper, new SimpleRelativePathHelper($currentWorkingDirectory)));
6355
$phpDocInheritanceResolver = new PhpDocInheritanceResolver($fileTypeMapper);
6456
$resolver = new NodeScopeResolver(
65-
$broker,
57+
$reflectionProvider,
6658
self::getReflectors()[0],
6759
$this->getClassReflectionExtensionRegistryProvider(),
6860
$this->getParser(),
@@ -83,7 +75,7 @@ public function processFile(
8375
return $fileHelper->normalizePath($file);
8476
}, array_merge([$file], $this->getAdditionalAnalysedFiles())));
8577

86-
$scopeFactory = $this->createScopeFactory($broker, $typeSpecifier);
78+
$scopeFactory = $this->createScopeFactory($reflectionProvider, $typeSpecifier);
8779
if (count($dynamicConstantNames) > 0) {
8880
$reflectionProperty = new \ReflectionProperty(DirectScopeFactory::class, 'dynamicConstantNames');
8981
$reflectionProperty->setAccessible(true);

0 commit comments

Comments
 (0)