Skip to content

Commit b04280c

Browse files
authored
Merge branch refs/heads/1.12.x into 2.1.x
2 parents c5a9b8d + 408692e commit b04280c

File tree

7 files changed

+51
-3
lines changed

7 files changed

+51
-3
lines changed

.github/workflows/e2e-tests.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,14 @@ jobs:
152152
- script: |
153153
cd e2e/env-int-key
154154
env 1=1 ../../bin/phpstan analyse test.php
155+
- script: |
156+
cd e2e/result-cache-scanned
157+
../../bin/phpstan
158+
patch -b src/Generated/Foo.php < patch.patch
159+
OUTPUT=$(../bashunit -a exit_code "1" "../../bin/phpstan analyse -vv --error-format raw")
160+
echo "$OUTPUT"
161+
../bashunit -a contains 'Result cache not used because the metadata do not match: projectConfig, scannedFiles' "$OUTPUT"
162+
../bashunit -a contains 'Instantiated class ResultCacheE2EGenerated\Foo not found.' "$OUTPUT"
155163
- script: |
156164
cd e2e/trait-caching
157165
../../bin/phpstan analyze --no-progress --level 8 --error-format raw data/

conf/config.neon

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,7 @@ services:
523523
scanFileFinder: @fileFinderScan
524524
cacheFilePath: %resultCachePath%
525525
analysedPaths: %analysedPaths%
526+
analysedPathsFromConfig: %analysedPathsFromConfig%
526527
composerAutoloaderProjectPaths: %composerAutoloaderProjectPaths%
527528
usedLevel: %usedLevel%
528529
cliAutoloadFile: %cliAutoloadFile%

e2e/result-cache-scanned/patch.patch

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
--- src/Generated/Foo.php 2025-05-18 14:26:01
2+
+++ src/Generated/Foo.php 2025-05-18 14:27:01
3+
@@ -1,4 +1,4 @@
4+
<?php
5+
namespace ResultCacheE2EGenerated;
6+
7+
-final class Foo {}
8+
+final class Bar {}

e2e/result-cache-scanned/phpstan.neon

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# phpstan.neon
2+
parameters:
3+
level: 8
4+
paths:
5+
- src
6+
excludePaths:
7+
analyse:
8+
- src/Generated
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?php
2+
namespace ResultCacheE2EGenerated;
3+
4+
final class Foo {}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<?php
2+
3+
$foo = new \ResultCacheE2EGenerated\Foo();

src/Analyser/ResultCache/ResultCacheManager.php

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,15 @@
2727
use function array_filter;
2828
use function array_key_exists;
2929
use function array_keys;
30+
use function array_merge;
3031
use function array_unique;
3132
use function array_values;
3233
use function count;
3334
use function explode;
3435
use function get_loaded_extensions;
3536
use function implode;
3637
use function is_array;
38+
use function is_dir;
3739
use function is_file;
3840
use function ksort;
3941
use function microtime;
@@ -63,6 +65,7 @@ final class ResultCacheManager
6365

6466
/**
6567
* @param string[] $analysedPaths
68+
* @param string[] $analysedPathsFromConfig
6669
* @param string[] $composerAutoloaderProjectPaths
6770
* @param string[] $bootstrapFiles
6871
* @param string[] $scanFiles
@@ -78,6 +81,7 @@ public function __construct(
7881
private FileHelper $fileHelper,
7982
private string $cacheFilePath,
8083
private array $analysedPaths,
84+
private array $analysedPathsFromConfig,
8185
private array $composerAutoloaderProjectPaths,
8286
private string $usedLevel,
8387
private ?string $cliAutoloadFile,
@@ -940,11 +944,23 @@ private function getFileHash(string $path): string
940944
private function getScannedFiles(array $allAnalysedFiles): array
941945
{
942946
$scannedFiles = $this->scanFiles;
943-
foreach ($this->scanFileFinder->findFiles($this->scanDirectories)->getFiles() as $file) {
944-
$scannedFiles[] = $file;
947+
$analysedDirectories = [];
948+
foreach (array_merge($this->analysedPaths, $this->analysedPathsFromConfig) as $analysedPath) {
949+
if (is_file($analysedPath)) {
950+
continue;
951+
}
952+
953+
if (!is_dir($analysedPath)) {
954+
continue;
955+
}
956+
957+
$analysedDirectories[] = $analysedPath;
945958
}
946959

947-
$scannedFiles = array_unique($scannedFiles);
960+
$directories = array_unique(array_merge($analysedDirectories, $this->scanDirectories));
961+
foreach ($this->scanFileFinder->findFiles($directories)->getFiles() as $file) {
962+
$scannedFiles[] = $file;
963+
}
948964

949965
$hashes = [];
950966
foreach (array_diff($scannedFiles, $allAnalysedFiles) as $file) {

0 commit comments

Comments
 (0)