8000 [Config] Fix checking class existence freshness · symfony/symfony@042a293 · GitHub
[go: up one dir, main page]

Skip to content

Commit 042a293

Browse files
[Config] Fix checking class existence freshness
1 parent 468b44a commit 042a293

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed

src/Symfony/Component/Config/Resource/ClassExistenceResource.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public function isFresh($timestamp)
6565
{
6666
$loaded = class_exists($this->resource, false) || interface_exists($this->resource, false) || trait_exists($this->resource, false);
6767

68-
if (null !== $exists = &self::$existsCache[$this->resource]) {
68+
if (null !== $exists = &self::$existsCache[(int) (0 >= $timestamp)][$this->resource]) {
6969
$exists = $exists || $loaded;
7070
} elseif (!$exists = $loaded) {
7171
if (!self::$autoloadLevel++) {
@@ -76,6 +76,11 @@ public function isFresh($timestamp)
7676

7777
try {
7878
$exists = class_exists($this->resource) || interface_exists($this->resource, false) || trait_exists($this->resource, false);
79+
} catch (\ReflectionException $e) {
80+
if (0 >= $timestamp) {
81+
unset(self::$existsCache[$this->resource]);
82+
throw $e;
83+
}
7984
} finally {
8085
self::$autoloadedClass = $autoloadedClass;
8186
if (!--self::$autoloadLevel) {
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?php
2+
3+
namespace Symfony\Component\Config\Tests\Fixtures;
4+
5+
class BadParent extends MissingParent
6+
{
7+
}

src/Symfony/Component/Config/Tests/Resource/ClassExistenceResourceTest.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
use PHPUnit\Framework\TestCase;
1515
use Symfony\Component\Config\Resource\ClassExistenceResource;
1616
use Symfony\Component\Config\Tests\Fixtures\Resource\ConditionalClass;
17+
use Symfony\Component\Config\Tests\Fixtures\BadParent;
1718

1819
class ClassExistenceResourceTest extends TestCase
1920
{
@@ -74,6 +75,22 @@ public function testExistsKo()
7475
}
7576
}
7677

78+
public function testBarParentWithTimestamp()
79+
{
80+
$res = new ClassExistenceResource(BadParent::class, false);
81+
$this->assertTrue($res->isFresh(time()));
82+
}
83+
84+
/**
85+
* @expectedException \ReflectionException
86+
* @expectedExceptionMessage Class Symfony\Component\Config\Tests\Fixtures\MissingParent not found
87+
*/
88+
public function testBarParentWithNoTimestamp()
89+
{
90+
$res = new ClassExistenceResource(BadParent::class, false);
91+
$res->isFresh(0);
92+
}
93+
7794
public function testConditionalClass()
7895
{
7996
$res = new ClassExistenceResource(ConditionalClass::class, false);

0 commit comments

Comments
 (0)
0