private function createFileIterator()
{
if (count($this->directories) === 0 && count($this->files) === 0) {
throw new \RuntimeException('No source directory and file set.');
}
$fileIterator = new \AppendIterator();
foreach ($this->files as $file) {
$fileIterator->append(new Iterator(new \GlobIterator($file), $this->fileFilter));
}
foreach ($this->directories as $directory) {
$fileIterator->append(new Iterator(new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($directory . '/', \RecursiveDirectoryIterator::FOLLOW_SYMLINKS)), $this->fileFilter, $directory));
}
// TODO: It's important to validate this behavior, imho there is something
// wrong in the iterator code used above.
// Strange: why is the iterator not unique and why does this loop fix it?
$files = array();
foreach ($fileIterator as $file) {
if (is_string($file)) {
$files[$file] = $file;
} else {
$pathname = realpath($file->getPathname());
$files[$pathname] = $pathname;
}
}
foreach ($files as $key => $file) {
if (!$this->fileFilter->accept($file, $file)) {
unset($files[$key]);
}
}
ksort($files);
// END
return new \ArrayIterator(array_values($files));
}