rector/packages/node-type-resolver/src/DependencyInjection/PHPStanServicesFactory.php

107 lines
2.7 KiB
PHP
Raw Normal View History

2019-10-13 05:59:52 +00:00
<?php
declare(strict_types=1);
namespace Rector\NodeTypeResolver\DependencyInjection;
use PHPStan\Analyser\NodeScopeResolver;
use PHPStan\Analyser\ScopeFactory;
use PHPStan\Analyser\TypeSpecifier;
2020-04-01 01:55:44 +00:00
use PHPStan\Dependency\DependencyResolver;
2019-12-08 21:00:38 +00:00
use PHPStan\DependencyInjection\Container;
use PHPStan\DependencyInjection\ContainerFactory;
2020-01-06 12:22:18 +00:00
use PHPStan\DependencyInjection\Type\OperatorTypeSpecifyingExtensionRegistryProvider;
2020-04-01 01:55:44 +00:00
use PHPStan\File\FileHelper;
use PHPStan\PhpDoc\TypeNodeResolver;
use PHPStan\Reflection\ReflectionProvider;
use Rector\Core\Configuration\Option;
use Symplify\PackageBuilder\Parameter\ParameterProvider;
/**
* Factory so Symfony app can use services from PHPStan container
* @see packages/NodeTypeResolver/config/config.yaml:17
*/
final class PHPStanServicesFactory
{
/**
* @var Container
*/
private $container;
public function __construct(ParameterProvider $parameterProvider)
{
$containerFactory = new ContainerFactory(getcwd());
$additionalConfigFiles = [];
$additionalConfigFiles[] = $parameterProvider->provideStringParameter(Option::PHPSTAN_FOR_RECTOR_PATH);
$existingAdditionalConfigFiles = array_filter($additionalConfigFiles, 'file_exists');
$this->container = $containerFactory->create(sys_get_temp_dir(), $existingAdditionalConfigFiles, []);
}
2020-03-28 23:06:05 +00:00
/**
* @api
*/
public function createReflectionProvider(): ReflectionProvider
{
return $this->container->getByType(ReflectionProvider::class);
}
2020-03-28 23:06:05 +00:00
/**
* @api
*/
public function createNodeScopeResolver(): NodeScopeResolver
{
return $this->container->getByType(NodeScopeResolver::class);
}
2020-03-28 23:06:05 +00:00
/**
* @api
*/
public function createTypeSpecifier(): TypeSpecifier
{
return $this->container->getByType(TypeSpecifier::class);
}
2020-03-28 23:06:05 +00:00
/**
* @api
*/
public function createScopeFactory(): ScopeFactory
{
return $this->container->getByType(ScopeFactory::class);
}
2020-01-06 08:43:51 +00:00
2020-04-01 01:55:44 +00:00
/**
* @api
*/
public function createDependencyResolver(): DependencyResolver
{
return $this->container->getByType(DependencyResolver::class);
2020-04-01 01:55:44 +00:00
}
/**
* @api
*/
public function createFileHelper(): FileHelper
{
return $this->container->getByType(FileHelper::class);
2020-04-01 01:55:44 +00:00
}
2020-03-28 23:06:05 +00:00
/**
* @api
*/
2020-01-06 12:22:18 +00:00
public function createOperatorTypeSpecifyingExtensionRegistryProvider(): OperatorTypeSpecifyingExtensionRegistryProvider
{
return $this->container->getByType(OperatorTypeSpecifyingExtensionRegistryProvider::class);
2020-01-06 08:43:51 +00:00
}
2020-03-28 23:06:05 +00:00
/**
* @api
*/
public function createTypeNodeResolver(): TypeNodeResolver
{
return $this->container->getByType(TypeNodeResolver::class);
}
}