Creates a resource to help know if this service has changed.
public static createResourceForClass ( ReflectionClass $reflectionClass ) : Symfony\Component\DependencyInjection\Config\AutowireServiceResource | ||
$reflectionClass | ReflectionClass | |
return | Symfony\Component\DependencyInjection\Config\AutowireServiceResource |
public function isFresh($timestamp) { if (!file_exists($this->filePath)) { return false; } // has the file *not* been modified? Definitely fresh if (@filemtime($this->filePath) <= $timestamp) { return true; } try { $reflectionClass = new \ReflectionClass($this->class); } catch (\ReflectionException $e) { // the class does not exist anymore! return false; } return (array) $this === (array) AutowirePass::createResourceForClass($reflectionClass); }
/** * @dataProvider getCreateResourceTests */ public function testCreateResourceForClass($className, $isEqual) { $startingResource = AutowirePass::createResourceForClass(new \ReflectionClass(__NAMESPACE__ . '\\ClassForResource')); $newResource = AutowirePass::createResourceForClass(new \ReflectionClass(__NAMESPACE__ . '\\' . $className)); // hack so the objects don't differ by the class name $startingReflObject = new \ReflectionObject($startingResource); $reflProp = $startingReflObject->getProperty('class'); $reflProp->setAccessible(true); $reflProp->setValue($startingResource, __NAMESPACE__ . '\\' . $className); if ($isEqual) { $this->assertEquals($startingResource, $newResource); } else { $this->assertNotEquals($startingResource, $newResource); } }
public function testIsFreshSameConstructorArgs() { $oldResource = AutowirePass::createResourceForClass(new \ReflectionClass(__NAMESPACE__ . '\\Foo')); // test with a stale file *but* the resource will not be changed $this->assertTrue($oldResource->isFresh($this->getStaleFileTime()), '->isFresh() returns false if the constructor arguments have changed'); }