package xapi.source.impl; import java.util.Iterator; import xapi.source.api.IsMember; import xapi.source.api.IsType; public class DeclaredMemberFilter <Member extends IsMember> implements Iterable<Member> { private final Iterable<Member> iter; private final IsType owner; private final class Itr implements Iterator<Member> { Iterator<Member> i = iter.iterator(); Member next; @Override public boolean hasNext() { if (next != null) return true; while (i.hasNext()) { next = i.next(); if (next.getEnclosingType().getQualifiedName().equals(owner.getQualifiedName())) return true; } next = null; return false; } @Override public Member next() { try { return next; } finally { next = null; } } @Override public void remove() { throw new UnsupportedOperationException(); } } public DeclaredMemberFilter(Iterable<Member> iter, IsType owner) { this.iter = iter; this.owner = owner; } @Override public Iterator<Member> iterator() { return new Itr(); } }