public DirectoryIterator(
final File rootDirectory,
final FilenameFilter directoryNameFilter,
final FilenameFilter fileNameFilter
) {
super(new Producer() {
private final List stateStack = DirectoryIterator.newArrayList(new State(rootDirectory));
public Object produce() {
while (!this.stateStack.isEmpty()) {
State state = (State) this.stateStack.get(this.stateStack.size() - 1);
if (state.directories.hasNext()) {