Skip to content

Commit 10f93cd

Browse files
committed
move to AnalyserIntegrationTest and increase cache key
1 parent 44d4c03 commit 10f93cd

5 files changed

Lines changed: 8 additions & 57 deletions

File tree

src/Type/FileTypeMapper.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ private function getNameScopeMap(string $fileName): array
329329
{
330330
if (!isset($this->memoryCache[$fileName])) {
331331
$cacheKey = sprintf('ftm-%s', $fileName);
332-
$variableCacheKey = sprintf('v4-%s', ComposerHelper::getPhpDocParserVersion());
332+
$variableCacheKey = sprintf('v5-%s', ComposerHelper::getPhpDocParserVersion());
333333
$cached = $this->loadCachedPhpDocNodeMap($cacheKey, $variableCacheKey);
334334
if ($cached === null) {
335335
[$nameScopeMap, $files] = $this->createPhpDocNodeMap($fileName, null, null, [], $fileName);

tests/PHPStan/Analyser/AnalyserIntegrationTest.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1529,6 +1529,13 @@ public function testBug14439(): void
15291529
$this->assertNoErrors($errors);
15301530
}
15311531

1532+
public function testBugInfiniteLoopOnFileTypeMapper(): void
1533+
{
1534+
// endless loop crash on self referencing trait
1535+
$errors = $this->runAnalyse(__DIR__ . '/data/bug-self-referenced-trait/BaseModelUseTrait.php');
1536+
$this->assertCount(0, $errors);
1537+
}
1538+
15321539
/**
15331540
* @param string[]|null $allAnalysedFiles
15341541
* @return list<Error>

tests/PHPStan/Type/data/bug-self-referenced-trait/BaseModelUseTrait.php renamed to tests/PHPStan/Analyser/data/bug-self-referenced-trait/BaseModelUseTrait.php

File renamed without changes.

tests/PHPStan/Type/data/bug-self-referenced-trait/RecursiveTrait.php renamed to tests/PHPStan/Analyser/data/bug-self-referenced-trait/RecursiveTrait.php

File renamed without changes.

tests/PHPStan/Type/FileTypeMapperTest.php

Lines changed: 0 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,12 @@
22

33
namespace PHPStan\Type;
44

5-
use BugSelfReferencedTrait\BaseModelUseTrait;
65
use DependentPhpDocs\Foo;
76
use PHPStan\PhpDoc\Tag\ReturnTag;
87
use PHPStan\ShouldNotHappenException;
98
use PHPStan\Testing\PHPStanTestCase;
109
use RuntimeException;
11-
use function clearstatcache;
12-
use function hash;
13-
use function is_file;
1410
use function realpath;
15-
use function sprintf;
16-
use function substr;
17-
use function unlink;
1811

1912
class FileTypeMapperTest extends PHPStanTestCase
2013
{
@@ -217,53 +210,4 @@ public function testFilesWithIdenticalPhpDocsUsingDifferentAliases(): void
217210
$this->assertSame('AliasCollisionNamespace2\Foo', $doc2->getVarTags()['x']->getType()->describe(VerbosityLevel::precise()));
218211
}
219212

220-
public function testRecursiveTraitUsedInAnonymousClassDoesNotLoopIndefinitely(): void
221-
{
222-
$realpath = realpath(__DIR__ . '/data/bug-self-referenced-trait/BaseModelUseTrait.php');
223-
if ($realpath === false) {
224-
throw new ShouldNotHappenException();
225-
}
226-
227-
$container = self::getContainer();
228-
$this->clearFileTypeMapperCache($container->getParameter('tmpDir'), $realpath);
229-
self::createReflectionProvider();
230-
231-
/** @var FileTypeMapper $fileTypeMapper */
232-
$fileTypeMapper = $container->getByType(FileTypeMapper::class);
233-
234-
$resolved = $fileTypeMapper->getResolvedPhpDoc(
235-
$realpath,
236-
BaseModelUseTrait::class,
237-
null,
238-
null,
239-
'/** @method static Builder<static>|BaseModelUseTrait query() */',
240-
);
241-
242-
$this->assertArrayHasKey('query', $resolved->getMethodTags());
243-
$returnTypeDescription = $resolved->getMethodTags()['query']->getReturnType()->describe(VerbosityLevel::precise());
244-
$this->assertStringContainsString('BugSelfReferencedTrait\BaseModelUseTrait', $returnTypeDescription);
245-
$this->assertStringContainsString('BugSelfReferencedTrait\Builder<static(BugSelfReferencedTrait\BaseModelUseTrait)>', $returnTypeDescription);
246-
}
247-
248-
/**
249-
* This ensure test result consistent regardless FileTypeMapper when just rolled back to verify back
250-
*/
251-
private function clearFileTypeMapperCache(string $tmpDir, string $fileName): void
252-
{
253-
$cacheKeyHash = hash('sha256', sprintf('ftm-%s', $fileName));
254-
255-
$directory1 = substr($cacheKeyHash, 0, 2);
256-
$directory2 = substr($cacheKeyHash, 2, 2);
257-
258-
$cacheTmpRootDir = sprintf('%s/cache/PHPStan', $tmpDir);
259-
$cacheFilePath = $cacheTmpRootDir . '/' . $directory1 . '/' . $directory2 . '/' . $cacheKeyHash . '.php';
260-
261-
if (!is_file($cacheFilePath)) {
262-
return;
263-
}
264-
265-
unlink($cacheFilePath);
266-
clearstatcache();
267-
}
268-
269213
}

0 commit comments

Comments
 (0)