diff --git a/src/Symfony/Component/Finder/Comparator/DateComparator.php b/src/Symfony/Component/Finder/Comparator/DateComparator.php index ceecad06ba..c712022f4f 100644 --- a/src/Symfony/Component/Finder/Comparator/DateComparator.php +++ b/src/Symfony/Component/Finder/Comparator/DateComparator.php @@ -39,13 +39,11 @@ class DateComparator extends Comparator } $operator = isset($matches[1]) ? $matches[1] : '=='; - if ('since' === $operator || 'after' === $operator) - { + if ('since' === $operator || 'after' === $operator) { $operator = '>'; } - if ('until' === $operator || 'before' === $operator) - { + if ('until' === $operator || 'before' === $operator) { $operator = '<'; } diff --git a/src/Symfony/Component/Finder/Finder.php b/src/Symfony/Component/Finder/Finder.php index 487dffa011..369b3eec81 100644 --- a/src/Symfony/Component/Finder/Finder.php +++ b/src/Symfony/Component/Finder/Finder.php @@ -338,10 +338,10 @@ class Finder implements \IteratorAggregate protected function searchInDirectory($dir) { - $flags = \FilesystemIterator::SKIP_DOTS; + $flags = \RecursiveDirectoryIterator::SKIP_DOTS; if ($this->followLinks) { - $flags |= \FilesystemIterator::FOLLOW_SYMLINKS; + $flags |= \RecursiveDirectoryIterator::FOLLOW_SYMLINKS; } $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($dir, $flags), \RecursiveIteratorIterator::SELF_FIRST); diff --git a/src/Symfony/Component/Finder/Iterator/CustomFilterIterator.php b/src/Symfony/Component/Finder/Iterator/CustomFilterIterator.php index 3eb69eac96..55759a98f7 100644 --- a/src/Symfony/Component/Finder/Iterator/CustomFilterIterator.php +++ b/src/Symfony/Component/Finder/Iterator/CustomFilterIterator.php @@ -43,7 +43,7 @@ class CustomFilterIterator extends \FilterIterator */ public function accept() { - $fileinfo = $this->getInnerIterator()->current(); + $fileinfo = $this->current(); foreach ($this->filters as $filter) { if (false === $filter($fileinfo)) { diff --git a/src/Symfony/Component/Finder/Iterator/DateRangeFilterIterator.php b/src/Symfony/Component/Finder/Iterator/DateRangeFilterIterator.php index c843d9044a..cdf66914dd 100644 --- a/src/Symfony/Component/Finder/Iterator/DateRangeFilterIterator.php +++ b/src/Symfony/Component/Finder/Iterator/DateRangeFilterIterator.php @@ -40,7 +40,7 @@ class DateRangeFilterIterator extends \FilterIterator */ public function accept() { - $fileinfo = $this->getInnerIterator()->current(); + $fileinfo = $this->current(); if (!$fileinfo->isFile()) { return true; diff --git a/src/Symfony/Component/Finder/Iterator/ExcludeDirectoryFilterIterator.php b/src/Symfony/Component/Finder/Iterator/ExcludeDirectoryFilterIterator.php index 380d15a291..a6145a78ec 100644 --- a/src/Symfony/Component/Finder/Iterator/ExcludeDirectoryFilterIterator.php +++ b/src/Symfony/Component/Finder/Iterator/ExcludeDirectoryFilterIterator.php @@ -43,14 +43,10 @@ class ExcludeDirectoryFilterIterator extends \FilterIterator */ public function accept() { - $inner = $this; - while ($inner && !$inner->getInnerIterator() instanceof \RecursiveIteratorIterator) { - $inner = $inner->getInnerIterator(); - } - - $method = $inner->current()->isDir() ? 'getSubPathname' : 'getSubPath'; + $path = $this->isDir() ? $this->getSubPathname() : $this->getSubPath(); + $path = strtr($path, '\\', '/'); foreach ($this->patterns as $pattern) { - if (preg_match($pattern, strtr($this->getInnerIterator()->$method(), '\\', '/'))) { + if (preg_match($pattern, $path)) { return false; } } diff --git a/src/Symfony/Component/Finder/Iterator/FileTypeFilterIterator.php b/src/Symfony/Component/Finder/Iterator/FileTypeFilterIterator.php index 4e865aebb3..e6b8978f0c 100644 --- a/src/Symfony/Component/Finder/Iterator/FileTypeFilterIterator.php +++ b/src/Symfony/Component/Finder/Iterator/FileTypeFilterIterator.php @@ -43,11 +43,9 @@ class FileTypeFilterIterator extends \FilterIterator */ public function accept() { - $fileinfo = $this->getInnerIterator()->current(); - - if (self::ONLY_DIRECTORIES === (self::ONLY_DIRECTORIES & $this->mode) && $fileinfo->isFile()) { + if (self::ONLY_DIRECTORIES === (self::ONLY_DIRECTORIES & $this->mode) && $this->isFile()) { return false; - } elseif (self::ONLY_FILES === (self::ONLY_FILES & $this->mode) && $fileinfo->isDir()) { + } elseif (self::ONLY_FILES === (self::ONLY_FILES & $this->mode) && $this->isDir()) { return false; } diff --git a/src/Symfony/Component/Finder/Iterator/FilenameFilterIterator.php b/src/Symfony/Component/Finder/Iterator/FilenameFilterIterator.php index 7dce7d2b3a..139cd084b5 100644 --- a/src/Symfony/Component/Finder/Iterator/FilenameFilterIterator.php +++ b/src/Symfony/Component/Finder/Iterator/FilenameFilterIterator.php @@ -52,13 +52,11 @@ class FilenameFilterIterator extends \FilterIterator */ public function accept() { - $fileinfo = $this->getInnerIterator()->current(); - // should at least match one rule if ($this->matchRegexps) { $match = false; foreach ($this->matchRegexps as $regex) { - if (preg_match($regex, $fileinfo->getFilename())) { + if (preg_match($regex, $this->getFilename())) { $match = true; break; } @@ -71,7 +69,7 @@ class FilenameFilterIterator extends \FilterIterator if ($this->noMatchRegexps) { $exclude = false; foreach ($this->noMatchRegexps as $regex) { - if (preg_match($regex, $fileinfo->getFilename())) { + if (preg_match($regex, $this->getFilename())) { $exclude = true; break; } diff --git a/src/Symfony/Component/Finder/Iterator/SizeRangeFilterIterator.php b/src/Symfony/Component/Finder/Iterator/SizeRangeFilterIterator.php index 175e7b0a37..d92a24d3d3 100644 --- a/src/Symfony/Component/Finder/Iterator/SizeRangeFilterIterator.php +++ b/src/Symfony/Component/Finder/Iterator/SizeRangeFilterIterator.php @@ -40,13 +40,11 @@ class SizeRangeFilterIterator extends \FilterIterator */ public function accept() { - $fileinfo = $this->getInnerIterator()->current(); - - if (!$fileinfo->isFile()) { + if (!$this->isFile()) { return true; } - $filesize = $fileinfo->getSize(); + $filesize = $this->getSize(); foreach ($this->comparators as $compare) { if (!$compare->test($filesize)) { return false; diff --git a/src/Symfony/Component/Finder/Iterator/SortableIterator.php b/src/Symfony/Component/Finder/Iterator/SortableIterator.php index a0a7663365..fe29a85a98 100644 --- a/src/Symfony/Component/Finder/Iterator/SortableIterator.php +++ b/src/Symfony/Component/Finder/Iterator/SortableIterator.php @@ -29,12 +29,12 @@ class SortableIterator extends \ArrayIterator */ public function __construct(\Iterator $iterator, $sort) { - if (!$sort instanceof \Closure && self::SORT_BY_NAME == $sort) { + if (self::SORT_BY_NAME === $sort) { $sort = function ($a, $b) { return strcmp($a->getRealpath(), $b->getRealpath()); }; - } elseif (!$sort instanceof \Closure && self::SORT_BY_TYPE == $sort) { + } elseif (self::SORT_BY_TYPE === $sort) { $sort = function ($a, $b) { if ($a->isDir() && $b->isFile()) { diff --git a/tests/Symfony/Tests/Component/Finder/Iterator/FileTypeFilterIteratorTest.php b/tests/Symfony/Tests/Component/Finder/Iterator/FileTypeFilterIteratorTest.php index 8b1d88b857..927f11cccc 100644 --- a/tests/Symfony/Tests/Component/Finder/Iterator/FileTypeFilterIteratorTest.php +++ b/tests/Symfony/Tests/Component/Finder/Iterator/FileTypeFilterIteratorTest.php @@ -22,7 +22,7 @@ class FileTypeFilterIteratorTest extends RealIteratorTestCase */ public function testAccept($mode, $expected) { - $inner = new Iterator(self::$files); + $inner = new InnerTypeIterator(self::$files); $iterator = new FileTypeFilterIterator($inner, $mode); @@ -37,3 +37,21 @@ class FileTypeFilterIteratorTest extends RealIteratorTestCase ); } } + +class InnerTypeIterator extends \ArrayIterator +{ + public function current() + { + return new \SplFileInfo(parent::current()); + } + + public function isFile() + { + return $this->current()->isFile(); + } + + public function isDir() + { + return $this->current()->isDir(); + } +} diff --git a/tests/Symfony/Tests/Component/Finder/Iterator/FilenameFilterIteratorTest.php b/tests/Symfony/Tests/Component/Finder/Iterator/FilenameFilterIteratorTest.php index e662fc8e1d..f30774758d 100644 --- a/tests/Symfony/Tests/Component/Finder/Iterator/FilenameFilterIteratorTest.php +++ b/tests/Symfony/Tests/Component/Finder/Iterator/FilenameFilterIteratorTest.php @@ -22,7 +22,7 @@ class FilenameFilterIteratorTest extends IteratorTestCase */ public function testAccept($matchPatterns, $noMatchPatterns, $expected) { - $inner = new Iterator(array('test.php', 'test.py', 'foo.php')); + $inner = new InnerNameIterator(array('test.php', 'test.py', 'foo.php')); $iterator = new FilenameFilterIterator($inner, $matchPatterns, $noMatchPatterns); @@ -40,4 +40,18 @@ class FilenameFilterIteratorTest extends IteratorTestCase array(array(), array('/\.php$/'), array('test.py')), ); } + +} + +class InnerNameIterator extends \ArrayIterator +{ + public function current() + { + return new \SplFileInfo(parent::current()); + } + + public function getFilename() + { + return parent::current(); + } } diff --git a/tests/Symfony/Tests/Component/Finder/Iterator/SizeRangeFilterIteratorTest.php b/tests/Symfony/Tests/Component/Finder/Iterator/SizeRangeFilterIteratorTest.php index 3b0be14b1e..d0f87e22cb 100644 --- a/tests/Symfony/Tests/Component/Finder/Iterator/SizeRangeFilterIteratorTest.php +++ b/tests/Symfony/Tests/Component/Finder/Iterator/SizeRangeFilterIteratorTest.php @@ -23,7 +23,7 @@ class SizeRangeFilterIteratorTest extends RealIteratorTestCase */ public function testAccept($size, $expected) { - $inner = new Iterator(self::$files); + $inner = new InnerSizeIterator(self::$files); $iterator = new SizeRangeFilterIterator($inner, $size); @@ -37,3 +37,26 @@ class SizeRangeFilterIteratorTest extends RealIteratorTestCase ); } } + +class InnerSizeIterator extends \ArrayIterator +{ + public function current() + { + return new \SplFileInfo(parent::current()); + } + + public function getFilename() + { + return parent::current(); + } + + public function isFile() + { + return $this->current()->isFile(); + } + + public function getSize() + { + return $this->current()->getSize(); + } +}