2018-08-06 10:31:17 +00:00
|
|
|
<?php declare(strict_types=1);
|
|
|
|
|
|
|
|
namespace Rector\NodeTypeResolver\DependencyInjection;
|
|
|
|
|
|
|
|
use Nette\DI\Container;
|
|
|
|
use PHPStan\Analyser\NodeScopeResolver;
|
|
|
|
use PHPStan\Analyser\ScopeFactory;
|
|
|
|
use PHPStan\Analyser\TypeSpecifier;
|
|
|
|
use PHPStan\Broker\Broker;
|
|
|
|
use PHPStan\DependencyInjection\ContainerFactory;
|
2019-10-12 13:37:17 +00:00
|
|
|
use PHPStan\Reflection\SignatureMap\SignatureMapProvider;
|
2018-08-06 10:31:17 +00:00
|
|
|
|
|
|
|
final class PHPStanServicesFactory
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @var Container
|
|
|
|
*/
|
|
|
|
private $container;
|
|
|
|
|
|
|
|
public function __construct()
|
|
|
|
{
|
2019-07-28 13:46:37 +00:00
|
|
|
$containerFactory = new ContainerFactory(getcwd());
|
|
|
|
$additionalConfigFiles = [];
|
|
|
|
|
|
|
|
// possible path collision for Docker
|
|
|
|
$phpstanPhpunitExtensionConfig = getcwd() . '/vendor/phpstan/phpstan-phpunit/extension.neon';
|
2019-08-05 16:14:49 +00:00
|
|
|
if (file_exists($phpstanPhpunitExtensionConfig) && class_exists('PHPUnit\\Framework\\TestCase')) {
|
2019-07-28 13:46:37 +00:00
|
|
|
$additionalConfigFiles[] = $phpstanPhpunitExtensionConfig;
|
|
|
|
}
|
|
|
|
|
2019-08-18 12:15:39 +00:00
|
|
|
$additionalConfigFiles[] = __DIR__ . '/../../config/phpstan/type-extensions.neon';
|
|
|
|
|
2019-07-28 13:46:37 +00:00
|
|
|
$this->container = $containerFactory->create(sys_get_temp_dir(), $additionalConfigFiles, []);
|
2018-08-06 10:31:17 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
public function createBroker(): Broker
|
|
|
|
{
|
|
|
|
return $this->container->getByType(Broker::class);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function createNodeScopeResolver(): NodeScopeResolver
|
|
|
|
{
|
|
|
|
return $this->container->getByType(NodeScopeResolver::class);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function createTypeSpecifier(): TypeSpecifier
|
|
|
|
{
|
|
|
|
return $this->container->getByType(TypeSpecifier::class);
|
|
|
|
}
|
|
|
|
|
2019-10-12 13:37:17 +00:00
|
|
|
public function createSignatureMapProvider(): SignatureMapProvider
|
|
|
|
{
|
|
|
|
return $this->container->getByType(SignatureMapProvider::class);
|
|
|
|
}
|
|
|
|
|
2018-08-06 10:31:17 +00:00
|
|
|
public function createScopeFactory(): ScopeFactory
|
|
|
|
{
|
|
|
|
return $this->container->getByType(ScopeFactory::class);
|
|
|
|
}
|
|
|
|
}
|