package xapi.dev.scanner.impl; import java.util.Iterator; import xapi.bytecode.ClassFile; import xapi.collect.api.HasPrefixed; import xapi.dev.resource.impl.ByteCodeResource; import xapi.util.api.MatchesValue; class ClassFileIterator implements Iterable<ClassFile> { private final MatchesValue<ClassFile> matcher; private final HasPrefixed<ByteCodeResource> bytecode; private final class Itr implements Iterator<ClassFile> { private Iterator<ByteCodeResource> iter = bytecode.findPrefixed("").iterator(); private ClassFile cls; @Override public boolean hasNext() { while(iter.hasNext()) { cls = iter.next().getClassData(); if (matcher.matches(cls)) { return true; } } return false; } @Override public ClassFile next() { return cls; } @Override public void remove() { throw new UnsupportedOperationException(); } } ClassFileIterator(MatchesValue<ClassFile> matcher, HasPrefixed<ByteCodeResource> bytecode) { assert matcher != null; this.matcher = matcher; this.bytecode = bytecode; } @Override public Iterator<ClassFile> iterator() { return new Itr(); } }