2019-10-13 05:59:52 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
declare(strict_types=1);
|
2018-08-06 10:31:17 +00:00
|
|
|
|
|
|
|
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;
|
2018-08-06 10:31:17 +00:00
|
|
|
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;
|
2020-01-14 14:25:42 +00:00
|
|
|
use PHPStan\PhpDoc\TypeNodeResolver;
|
2020-01-13 13:34:18 +00:00
|
|
|
use PHPStan\Reflection\ReflectionProvider;
|
2020-12-24 16:31:24 +00:00
|
|
|
use Rector\Core\Configuration\Option;
|
|
|
|
use Symplify\PackageBuilder\Parameter\ParameterProvider;
|
2018-08-06 10:31:17 +00:00
|
|
|
|
2020-01-14 14:25:42 +00:00
|
|
|
/**
|
|
|
|
* Factory so Symfony app can use services from PHPStan container
|
|
|
|
* @see packages/NodeTypeResolver/config/config.yaml:17
|
|
|
|
*/
|
2018-08-06 10:31:17 +00:00
|
|
|
final class PHPStanServicesFactory
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @var Container
|
|
|
|
*/
|
|
|
|
private $container;
|
|
|
|
|
2020-12-24 16:31:24 +00:00
|
|
|
public function __construct(ParameterProvider $parameterProvider)
|
2018-08-06 10:31:17 +00:00
|
|
|
{
|
2020-12-24 16:31:24 +00:00
|
|
|
$containerFactory = new ContainerFactory(getcwd());
|
2019-10-19 17:53:56 +00:00
|
|
|
|
2019-07-28 13:46:37 +00:00
|
|
|
$additionalConfigFiles = [];
|
2020-12-24 16:31:24 +00:00
|
|
|
$additionalConfigFiles[] = $parameterProvider->provideStringParameter(Option::PHPSTAN_FOR_RECTOR_PATH);
|
2020-01-03 20:35:16 +00:00
|
|
|
|
2020-12-24 16:31:24 +00:00
|
|
|
$existingAdditionalConfigFiles = array_filter($additionalConfigFiles, 'file_exists');
|
2021-02-08 01:04:48 +00:00
|
|
|
|
2020-12-24 16:31:24 +00:00
|
|
|
$this->container = $containerFactory->create(sys_get_temp_dir(), $existingAdditionalConfigFiles, []);
|
2018-08-06 10:31:17 +00:00
|
|
|
}
|
|
|
|
|
2020-03-28 23:06:05 +00:00
|
|
|
/**
|
|
|
|
* @api
|
|
|
|
*/
|
2020-01-13 13:34:18 +00:00
|
|
|
public function createReflectionProvider(): ReflectionProvider
|
2018-08-06 10:31:17 +00:00
|
|
|
{
|
2020-04-25 17:34:28 +00:00
|
|
|
return $this->container->getByType(ReflectionProvider::class);
|
2018-08-06 10:31:17 +00:00
|
|
|
}
|
|
|
|
|
2020-03-28 23:06:05 +00:00
|
|
|
/**
|
|
|
|
* @api
|
|
|
|
*/
|
2018-08-06 10:31:17 +00:00
|
|
|
public function createNodeScopeResolver(): NodeScopeResolver
|
|
|
|
{
|
2020-04-25 17:34:28 +00:00
|
|
|
return $this->container->getByType(NodeScopeResolver::class);
|
2018-08-06 10:31:17 +00:00
|
|
|
}
|
|
|
|
|
2020-03-28 23:06:05 +00:00
|
|
|
/**
|
|
|
|
* @api
|
|
|
|
*/
|
2018-08-06 10:31:17 +00:00
|
|
|
public function createTypeSpecifier(): TypeSpecifier
|
|
|
|
{
|
2020-04-25 17:34:28 +00:00
|
|
|
return $this->container->getByType(TypeSpecifier::class);
|
2018-08-06 10:31:17 +00:00
|
|
|
}
|
|
|
|
|
2020-03-28 23:06:05 +00:00
|
|
|
/**
|
|
|
|
* @api
|
|
|
|
*/
|
2018-08-06 10:31:17 +00:00
|
|
|
public function createScopeFactory(): ScopeFactory
|
|
|
|
{
|
2020-04-25 17:34:28 +00:00
|
|
|
return $this->container->getByType(ScopeFactory::class);
|
2018-08-06 10:31:17 +00:00
|
|
|
}
|
2020-01-06 08:43:51 +00:00
|
|
|
|
2020-04-01 01:55:44 +00:00
|
|
|
/**
|
|
|
|
* @api
|
|
|
|
*/
|
|
|
|
public function createDependencyResolver(): DependencyResolver
|
|
|
|
{
|
2020-04-25 17:34:28 +00:00
|
|
|
return $this->container->getByType(DependencyResolver::class);
|
2020-04-01 01:55:44 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @api
|
|
|
|
*/
|
|
|
|
public function createFileHelper(): FileHelper
|
|
|
|
{
|
2020-04-25 17:34:28 +00:00
|
|
|
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
|
|
|
|
{
|
2020-04-25 17:34:28 +00:00
|
|
|
return $this->container->getByType(OperatorTypeSpecifyingExtensionRegistryProvider::class);
|
2020-01-06 08:43:51 +00:00
|
|
|
}
|
2020-01-14 14:25:42 +00:00
|
|
|
|
2020-03-28 23:06:05 +00:00
|
|
|
/**
|
|
|
|
* @api
|
|
|
|
*/
|
2020-01-14 14:25:42 +00:00
|
|
|
public function createTypeNodeResolver(): TypeNodeResolver
|
|
|
|
{
|
2020-04-25 17:34:28 +00:00
|
|
|
return $this->container->getByType(TypeNodeResolver::class);
|
2020-01-14 14:25:42 +00:00
|
|
|
}
|
2018-08-06 10:31:17 +00:00
|
|
|
}
|