Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/e2e-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ jobs:
patch -b src/Generated/Foo.php < patch.patch
OUTPUT=$(../bashunit -a exit_code "1" "../../bin/phpstan analyse -vv --error-format raw")
echo "$OUTPUT"
../bashunit -a contains 'Result cache not used because the metadata do not match: projectConfig, scannedFiles' "$OUTPUT"
../bashunit -a contains 'Result cache not used because the metadata do not match: scannedFiles' "$OUTPUT"
../bashunit -a contains 'Instantiated class ResultCacheE2EGenerated\Foo not found.' "$OUTPUT"
- script: |
cd e2e/result-cache-traits
Expand Down
5 changes: 5 additions & 0 deletions conf/services.neon
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,11 @@ services:
-
class: PHPStan\Reflection\BetterReflection\SourceLocator\CachingVisitor

-
class: PHPStan\Dependency\PackageDependencyResolver
arguments:
composerAutoloaderProjectPaths: %composerAutoloaderProjectPaths%

-
class: PHPStan\Reflection\Php\PhpClassReflectionExtension
arguments:
Expand Down
3 changes: 3 additions & 0 deletions src/Analyser/Analyser.php
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ public function analyse(
$reachedInternalErrorsCountLimit = false;
$dependencies = [];
$usedTraitDependencies = [];
$packageDependencies = [];
$exportedNodes = [];
$allProcessedFiles = [];
foreach ($files as $file) {
Expand Down Expand Up @@ -101,6 +102,7 @@ public function analyse(
$collectedData = array_merge($collectedData, $fileAnalyserResult->getCollectedData());
$dependencies[$file] = $fileAnalyserResult->getDependencies();
$usedTraitDependencies[$file] = $fileAnalyserResult->getUsedTraitDependencies();
$packageDependencies[$file] = $fileAnalyserResult->getPackageDependencies();

$fileExportedNodes = $fileAnalyserResult->getExportedNodes();
if (count($fileExportedNodes) > 0) {
Expand Down Expand Up @@ -142,6 +144,7 @@ public function analyse(
collectedData: $collectedData,
dependencies: $internalErrorsCount === 0 ? $dependencies : null,
usedTraitDependencies: $internalErrorsCount === 0 ? $usedTraitDependencies : null,
packageDependencies: $internalErrorsCount === 0 ? $packageDependencies : null,
exportedNodes: $exportedNodes,
reachedInternalErrorsCountLimit: $reachedInternalErrorsCountLimit,
peakMemoryUsageBytes: memory_get_peak_usage(true),
Expand Down
10 changes: 10 additions & 0 deletions src/Analyser/AnalyserResult.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ final class AnalyserResult
* @param list<InternalError> $internalErrors
* @param array<string, array<string>>|null $dependencies
* @param array<string, array<string>>|null $usedTraitDependencies
* @param array<string, array<string>>|null $packageDependencies
* @param array<string, array<RootExportedNode>> $exportedNodes
* @param list<string> $processedFiles
*/
Expand All @@ -41,6 +42,7 @@ public function __construct(
private array $collectedData,
private ?array $dependencies,
private ?array $usedTraitDependencies,
private ?array $packageDependencies,
private array $exportedNodes,
private bool $reachedInternalErrorsCountLimit,
private int $peakMemoryUsageBytes,
Expand Down Expand Up @@ -153,6 +155,14 @@ public function getUsedTraitDependencies(): ?array
return $this->usedTraitDependencies;
}

/**
* @return array<string, array<string>>|null
*/
public function getPackageDependencies(): ?array
{
return $this->packageDependencies;
}

/**
* @return array<string, array<RootExportedNode>>
*/
Expand Down
3 changes: 3 additions & 0 deletions src/Analyser/AnalyserResultFinalizer.php
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,7 @@ public function finalize(AnalyserResult $analyserResult, bool $onlyFiles, bool $
collectedData: $analyserResult->getCollectedData(),
dependencies: $analyserResult->getDependencies(),
usedTraitDependencies: $analyserResult->getUsedTraitDependencies(),
packageDependencies: $analyserResult->getPackageDependencies(),
exportedNodes: $analyserResult->getExportedNodes(),
reachedInternalErrorsCountLimit: $analyserResult->hasReachedInternalErrorsCountLimit(),
peakMemoryUsageBytes: $analyserResult->getPeakMemoryUsageBytes(),
Expand All @@ -165,6 +166,7 @@ private function mergeFilteredPhpErrors(AnalyserResult $analyserResult): Analyse
collectedData: $analyserResult->getCollectedData(),
dependencies: $analyserResult->getDependencies(),
usedTraitDependencies: $analyserResult->getUsedTraitDependencies(),
packageDependencies: $analyserResult->getPackageDependencies(),
exportedNodes: $analyserResult->getExportedNodes(),
reachedInternalErrorsCountLimit: $analyserResult->hasReachedInternalErrorsCountLimit(),
peakMemoryUsageBytes: $analyserResult->getPeakMemoryUsageBytes(),
Expand Down Expand Up @@ -230,6 +232,7 @@ private function addUnmatchedIgnoredErrors(
collectedData: $analyserResult->getCollectedData(),
dependencies: $analyserResult->getDependencies(),
usedTraitDependencies: $analyserResult->getUsedTraitDependencies(),
packageDependencies: $analyserResult->getPackageDependencies(),
exportedNodes: $analyserResult->getExportedNodes(),
reachedInternalErrorsCountLimit: $analyserResult->hasReachedInternalErrorsCountLimit(),
peakMemoryUsageBytes: $analyserResult->getPeakMemoryUsageBytes(),
Expand Down
6 changes: 6 additions & 0 deletions src/Analyser/FileAnalyser.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
use PHPStan\Collectors\CollectedData;
use PHPStan\Collectors\Registry as CollectorRegistry;
use PHPStan\Dependency\DependencyResolver;
use PHPStan\Dependency\PackageDependencyResolver;
use PHPStan\DependencyInjection\AutowiredParameter;
use PHPStan\DependencyInjection\AutowiredService;
use PHPStan\Node\FileNode;
Expand Down Expand Up @@ -57,6 +58,7 @@ public function __construct(
#[AutowiredParameter(ref: '@defaultAnalysisParser')]
private Parser $parser,
private DependencyResolver $dependencyResolver,
private PackageDependencyResolver $packageDependencyResolver,
private IgnoreErrorExtensionProvider $ignoreErrorExtensionProvider,
private RuleErrorTransformer $ruleErrorTransformer,
private LocalIgnoresProcessor $localIgnoresProcessor,
Expand Down Expand Up @@ -92,6 +94,7 @@ public function analyseFile(

$fileDependencies = [];
$usedTraitFileDependencies = [];
$filePackageDependencies = [];
$exportedNodes = [];
$linesToIgnore = [];
$unmatchedLineIgnores = [];
Expand All @@ -111,6 +114,7 @@ public function analyseFile(
$this->ignoreErrorExtensionProvider->getExtensions(),
$this->parser,
$this->dependencyResolver,
$this->packageDependencyResolver,
$this->ruleErrorTransformer,
$processedFiles,
);
Expand All @@ -125,6 +129,7 @@ public function analyseFile(
$fileCollectedData = $nodeCallback->getFileCollectedData();
$fileDependencies = $nodeCallback->getFileDependencies();
$usedTraitFileDependencies = $nodeCallback->getUsedTraitFileDependencies();
$filePackageDependencies = $nodeCallback->getPackageDependencies();
$exportedNodes = $nodeCallback->getExportedNodes();
$linesToIgnore = $nodeCallback->getLinesToIgnore();
$unmatchedLineIgnores = $nodeCallback->getUnmatchedLineIgnores();
Expand Down Expand Up @@ -243,6 +248,7 @@ public function analyseFile(
$fileCollectedData,
array_values(array_unique($fileDependencies)),
array_values(array_unique($usedTraitFileDependencies)),
array_values(array_unique($filePackageDependencies)),
$exportedNodes,
$linesToIgnore,
$unmatchedLineIgnores,
Expand Down
19 changes: 19 additions & 0 deletions src/Analyser/FileAnalyserCallback.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
use PHPStan\Collectors\CollectedData;
use PHPStan\Collectors\Registry as CollectorRegistry;
use PHPStan\Dependency\DependencyResolver;
use PHPStan\Dependency\PackageDependencyResolver;
use PHPStan\Dependency\RootExportedNode;
use PHPStan\Node\EmitCollectedDataNode;
use PHPStan\Node\InClassNode;
Expand Down Expand Up @@ -40,6 +41,9 @@ final class FileAnalyserCallback
/** @var array<string> */
private array $usedTraitFileDependencies = [];

/** @var array<string> */
private array $filePackageDependencies = [];

/** @var list<RootExportedNode> */
private array $exportedNodes = [];

Expand Down Expand Up @@ -69,6 +73,7 @@ public function __construct(
private array $ignoreErrorExtensions,
private Parser $parser,
private DependencyResolver $dependencyResolver,
private PackageDependencyResolver $packageDependencyResolver,
private RuleErrorTransformer $ruleErrorTransformer,
private array $processedFiles,
)
Expand Down Expand Up @@ -215,6 +220,9 @@ public function __invoke(Node $node, Scope $scope): void
foreach ($dependencies->getFileDependencies($scope->getFile(), $this->analysedFiles) as $dependentFile) {
$this->fileDependencies[] = $dependentFile;
}
foreach ($dependencies->getPackageDependencies($scope->getFile(), $this->analysedFiles, $this->packageDependencyResolver) as $package) {
$this->filePackageDependencies[] = $package;
}
if ($dependencies->getExportedNode() !== null) {
$this->exportedNodes[] = $dependencies->getExportedNode();
}
Expand All @@ -234,6 +242,9 @@ public function __invoke(Node $node, Scope $scope): void
foreach ($usedTraitDependencies->getFileDependencies($scope->getFile(), $this->analysedFiles) as $dependentFile) {
$this->usedTraitFileDependencies[] = $dependentFile;
}
foreach ($usedTraitDependencies->getPackageDependencies($scope->getFile(), $this->analysedFiles, $this->packageDependencyResolver) as $package) {
$this->filePackageDependencies[] = $package;
}
}

/**
Expand Down Expand Up @@ -274,6 +285,14 @@ public function getFileDependencies(): array
return $this->fileDependencies;
}

/**
* @return array<string>
*/
public function getPackageDependencies(): array
{
return $this->filePackageDependencies;
}

/**
* @return array<string>
*/
Expand Down
10 changes: 10 additions & 0 deletions src/Analyser/FileAnalyserResult.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ final class FileAnalyserResult
* @param CollectorData $collectedData
* @param list<string> $dependencies
* @param list<string> $usedTraitDependencies
* @param list<string> $packageDependencies
* @param list<RootExportedNode> $exportedNodes
* @param LinesToIgnore $linesToIgnore
* @param LinesToIgnore $unmatchedLineIgnores
Expand All @@ -34,6 +35,7 @@ public function __construct(
private array $collectedData,
private array $dependencies,
private array $usedTraitDependencies,
private array $packageDependencies,
private array $exportedNodes,
private array $linesToIgnore,
private array $unmatchedLineIgnores,
Expand Down Expand Up @@ -98,6 +100,14 @@ public function getUsedTraitDependencies(): array
return $this->usedTraitDependencies;
}

/**
* @return list<string>
*/
public function getPackageDependencies(): array
{
return $this->packageDependencies;
}

/**
* @return list<RootExportedNode>
*/
Expand Down
10 changes: 10 additions & 0 deletions src/Analyser/ResultCache/ResultCache.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ final class ResultCache
* @param CollectorData $collectedData
* @param array<string, array<string>> $dependencies
* @param array<string, array<string>> $usedTraitDependencies
* @param array<string, array<string>> $packageDependencies
* @param array<string, array<RootExportedNode>> $exportedNodes
* @param array<string, array{string, bool, string}> $projectExtensionFiles
* @param array<string, string> $currentFileHashes
Expand All @@ -40,6 +41,7 @@ public function __construct(
private array $collectedData,
private array $dependencies,
private array $usedTraitDependencies,
private array $packageDependencies,
private array $exportedNodes,
private array $projectExtensionFiles,
private array $currentFileHashes,
Expand Down Expand Up @@ -129,6 +131,14 @@ public function getUsedTraitDependencies(): array
return $this->usedTraitDependencies;
}

/**
* @return array<string, array<string>>
*/
public function getPackageDependencies(): array
{
return $this->packageDependencies;
}

/**
* @return array<string, array<RootExportedNode>>
*/
Expand Down
Loading
Loading