Skip to content

Commit f5d896a

Browse files
Merge branch '3.4'
* 3.4: [Yaml] Recommend using quotes instead of PARSE_KEYS_AS_STRINGS [DependencyInjection] Deprecate autowiring service auto-registration Removed useless argument $definition [DI] Generate shorter method names for class-based ids Fix comment [Config] Fix checking class existence freshness bumped Symfony version to 3.3.7 updated VERSION for 3.3.6 updated CHANGELOG for 3.3.6 Autoconfigure instances of ArgumentValueResolverInterface Deprecate Filesystem/LockHandler improve sql explain table display Bump minimal PHP version to ^5.5.9|>=7.0.8
2 parents c57fbfe + a98497b commit f5d896a

File tree

3 files changed

+30
-1
lines changed

3 files changed

+30
-1
lines changed

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[1][$this->resource]);
82+
throw $e;
83+
}
7984
} finally {
8085
self::$autoloadedClass = $autoloadedClass;
8186
if (!--self::$autoloadLevel) {

Tests/Fixtures/BadParent.php

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+
}

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 testBadParentWithTimestamp()
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 testBadParentWithNoTimestamp()
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)