rector/packages/Caching/FileSystem/DependencyResolver.php

64 lines
2.4 KiB
PHP
Raw Normal View History

2020-04-01 01:55:44 +00:00
<?php
declare (strict_types=1);
2020-04-01 01:55:44 +00:00
namespace Rector\Caching\FileSystem;
use PhpParser\Node;
2021-03-21 21:31:18 +00:00
use PHPStan\Analyser\MutatingScope;
use PHPStan\Analyser\NodeScopeResolver;
2020-04-01 01:55:44 +00:00
use PHPStan\Dependency\DependencyResolver as PHPStanDependencyResolver;
use PHPStan\File\FileHelper;
use RectorPrefix20210808\Symplify\PackageBuilder\Reflection\PrivatesAccessor;
2020-04-01 01:55:44 +00:00
final class DependencyResolver
{
/**
* @var \PHPStan\Analyser\NodeScopeResolver
2020-04-01 01:55:44 +00:00
*/
private $nodeScopeResolver;
2020-04-01 01:55:44 +00:00
/**
* @var PHPStanDependencyResolver
2020-04-01 01:55:44 +00:00
*/
private $phpStanDependencyResolver;
2020-04-01 01:55:44 +00:00
/**
* @var \PHPStan\File\FileHelper
2020-04-01 01:55:44 +00:00
*/
private $fileHelper;
/**
* @var \Symplify\PackageBuilder\Reflection\PrivatesAccessor
*/
private $privatesAccessor;
public function __construct(\PHPStan\Analyser\NodeScopeResolver $nodeScopeResolver, \PHPStan\Dependency\DependencyResolver $phpStanDependencyResolver, \PHPStan\File\FileHelper $fileHelper, \RectorPrefix20210808\Symplify\PackageBuilder\Reflection\PrivatesAccessor $privatesAccessor)
{
$this->nodeScopeResolver = $nodeScopeResolver;
$this->phpStanDependencyResolver = $phpStanDependencyResolver;
$this->fileHelper = $fileHelper;
$this->privatesAccessor = $privatesAccessor;
2020-04-01 01:55:44 +00:00
}
/**
* @return string[]
*/
public function resolveDependencies(\PhpParser\Node $node, \PHPStan\Analyser\MutatingScope $mutatingScope) : array
2020-04-01 01:55:44 +00:00
{
$analysedFileAbsolutesPaths = $this->privatesAccessor->getPrivateProperty($this->nodeScopeResolver, 'analysedFiles');
$dependencyFiles = [];
2021-03-21 21:31:18 +00:00
$nodeDependencies = $this->phpStanDependencyResolver->resolveDependencies($node, $mutatingScope);
foreach ($nodeDependencies as $nodeDependency) {
$dependencyFile = $nodeDependency->getFileName();
if (!$dependencyFile) {
2020-04-01 01:55:44 +00:00
continue;
}
$dependencyFile = $this->fileHelper->normalizePath($dependencyFile);
2021-03-21 21:31:18 +00:00
if ($mutatingScope->getFile() === $dependencyFile) {
2020-04-01 01:55:44 +00:00
continue;
}
// only work with files that we've analysed
if (!\in_array($dependencyFile, $analysedFileAbsolutesPaths, \true)) {
2020-04-01 01:55:44 +00:00
continue;
}
$dependencyFiles[] = $dependencyFile;
2020-04-01 01:55:44 +00:00
}
$dependencyFiles = \array_unique($dependencyFiles, \SORT_STRING);
return \array_values($dependencyFiles);
2020-04-01 01:55:44 +00:00
}
}