resolveAdditionalConfigFiles(); try { $this->container = $containerFactory->create(SimpleParameterProvider::provideStringParameter(Option::CONTAINER_CACHE_DIRECTORY), $additionalConfigFiles, []); } catch (Throwable $throwable) { if ($throwable->getMessage() === "File 'phar://phpstan.phar/conf/bleedingEdge.neon' is missing or is not readable.") { $symfonyStyle = new SymfonyStyle(new ArrayInput([]), new ConsoleOutput()); $symfonyStyle->error(\sprintf(self::INVALID_BLEEDING_EDGE_PATH_MESSAGE, $throwable->getMessage())); exit(-1); } throw $throwable; } } /** * @api */ public function createReflectionProvider() : ReflectionProvider { return $this->container->getByType(ReflectionProvider::class); } /** * @api */ public function createEmulativeLexer() : Lexer { return $this->container->getService('currentPhpVersionLexer'); } /** * @api */ public function createPHPStanParser() : Parser { return $this->container->getService('currentPhpVersionRichParser'); } /** * @api */ public function createNodeScopeResolver() : NodeScopeResolver { return $this->container->getByType(NodeScopeResolver::class); } /** * @api */ public function createScopeFactory() : ScopeFactory { return $this->container->getByType(ScopeFactory::class); } /** * @template TObject as Object * * @param class-string $type * @return TObject */ public function getByType(string $type) : object { return $this->container->getByType($type); } /** * @api */ public function createFileHelper() : FileHelper { return $this->container->getByType(FileHelper::class); } /** * @api */ public function createTypeNodeResolver() : TypeNodeResolver { return $this->container->getByType(TypeNodeResolver::class); } /** * @api */ public function createDynamicSourceLocatorProvider() : DynamicSourceLocatorProvider { return $this->container->getByType(DynamicSourceLocatorProvider::class); } /** * @return string[] */ private function resolveAdditionalConfigFiles() : array { $additionalConfigFiles = []; if (SimpleParameterProvider::hasParameter(Option::PHPSTAN_FOR_RECTOR_PATHS)) { $paths = SimpleParameterProvider::provideArrayParameter(Option::PHPSTAN_FOR_RECTOR_PATHS); foreach ($paths as $path) { Assert::string($path); $additionalConfigFiles[] = $path; } } $additionalConfigFiles[] = __DIR__ . '/../../../config/phpstan/static-reflection.neon'; $additionalConfigFiles[] = __DIR__ . '/../../../config/phpstan/better-infer.neon'; $additionalConfigFiles[] = __DIR__ . '/../../../config/phpstan/parser.neon'; return \array_filter($additionalConfigFiles, \Closure::fromCallable('file_exists')); } }