blob: a06c65fa1563786644f8e46864b2f950a8c5526b [file] [log] [blame]
package com.intellij.dupLocator.iterators;
import com.intellij.dupLocator.util.NodeFilter;
import com.intellij.psi.PsiElement;
/**
* Iterator over important nodes
*/
public class FilteringNodeIterator extends NodeIterator {
private final NodeIterator delegate;
private final NodeFilter filter;
private void advanceToNext() {
while (delegate.hasNext() && filter.accepts(delegate.current())) {
delegate.advance();
}
}
private void rewindToPrevious() {
while (filter.accepts(delegate.current())) {
delegate.rewind();
}
}
public FilteringNodeIterator(NodeIterator iterator, NodeFilter filter) {
delegate = iterator;
this.filter = filter;
advanceToNext();
}
public boolean hasNext() {
return delegate.hasNext() && !filter.accepts(delegate.current());
}
public void rewind(int number) {
while(number > 0) {
delegate.rewind();
rewindToPrevious();
--number;
}
}
public PsiElement current() {
return delegate.current();
}
public void advance() {
delegate.advance();
advanceToNext();
}
public void rewind() {
delegate.rewind();
rewindToPrevious();
}
public void reset() {
delegate.reset();
advanceToNext();
}
}