private function refresh()
{
$this->refreshed = TRUE;
// prevents calling refresh() or updateFile() in tryLoad()
$files = $missing = [];
foreach ($this->classes as $class => $info) {
if (is_array($info)) {
$files[$info['file']]['time'] = $info['time'];
$files[$info['file']]['classes'][] = $info['orig'];
} else {
$missing[$class] = $info;
}
}
$this->classes = [];
foreach ($this->scanPaths as $path) {
foreach (is_file($path) ? [new SplFileInfo($path)] : $this->createFileIterator($path) as $file) {
$file = $file->getPathname();
if (isset($files[$file]) && $files[$file]['time'] == filemtime($file)) {
$classes = $files[$file]['classes'];
} else {
$classes = $this->scanPhp(file_get_contents($file));
}
$files[$file] = ['classes' => [], 'time' => filemtime($file)];
foreach ($classes as $class) {
$info =& $this->classes[strtolower($class)];
if (isset($info['file'])) {
throw new Nette\InvalidStateException("Ambiguous class {$class} resolution; defined in {$info['file']} and in {$file}.");
}
$info = ['file' => $file, 'time' => filemtime($file), 'orig' => $class];
}
}
}
$this->classes += $missing;
}