/** * Adds a new input/file filter. * * @param \PDepend\Input\Filter $filter New input/file filter instance. * @return void */ public function addFileFilter(Filter $filter) { $this->fileFilter->append($filter); }
/** * This method will create an iterator instance which contains all files * that are part of the parsing process. * * @return \Iterator */ private function createFileIterator() { if (count($this->directories) === 0 && count($this->files) === 0) { throw new \RuntimeException('No source directory and file set.'); } $fileIterator = new \AppendIterator(); $fileIterator->append(new \ArrayIterator($this->files)); 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)); }
/** * testCompositeNotInvokesNextAcceptIfPreviousAcceptReturnsTrue * * @return void */ public function testCompositeNotInvokesNextAcceptIfPreviousAcceptReturnsTrue() { $filter0 = new DummyFilter(false); $filter1 = new DummyFilter(true); $composite = new CompositeFilter(); $composite->append($filter0); $composite->append($filter1); $composite->accept(dirname(__FILE__), dirname(__FILE__)); $this->assertFalse($filter1->invoked); }