package japicmp.output; import japicmp.model.*; import java.util.Iterator; import java.util.List; public class Filter { public interface FilterVisitor { void visit(Iterator<JApiClass> iterator, JApiClass jApiClass); void visit(Iterator<JApiMethod> iterator, JApiMethod jApiMethod); void visit(Iterator<JApiConstructor> iterator, JApiConstructor jApiConstructor); void visit(Iterator<JApiImplementedInterface> iterator, JApiImplementedInterface jApiImplementedInterface); void visit(Iterator<JApiField> iterator, JApiField jApiField); void visit(Iterator<JApiAnnotation> iterator, JApiAnnotation jApiAnnotation); void visit(JApiSuperclass jApiSuperclass); } public static void filter(List<JApiClass> jApiClasses, FilterVisitor visitor) { Iterator<JApiClass> itClasses = jApiClasses.iterator(); while (itClasses.hasNext()) { JApiClass jApiClass = itClasses.next(); Iterator<JApiMethod> itMethods = jApiClass.getMethods().iterator(); while (itMethods.hasNext()) { JApiMethod jApiMethod = itMethods.next(); visitor.visit(itMethods, jApiMethod); visitAnnotations(visitor, jApiMethod); } Iterator<JApiConstructor> itConstructors = jApiClass.getConstructors().iterator(); while (itConstructors.hasNext()) { JApiConstructor jApiConstructor = itConstructors.next(); visitor.visit(itConstructors, jApiConstructor); visitAnnotations(visitor, jApiConstructor); } Iterator<JApiImplementedInterface> itInterfaces = jApiClass.getInterfaces().iterator(); while (itInterfaces.hasNext()) { JApiImplementedInterface jApiImplementedInterface = itInterfaces.next(); visitor.visit(itInterfaces, jApiImplementedInterface); } JApiSuperclass superclass = jApiClass.getSuperclass(); visitor.visit(superclass); Iterator<JApiField> itFields = jApiClass.getFields().iterator(); while (itFields.hasNext()) { JApiField jApiField = itFields.next(); visitor.visit(itFields, jApiField); visitAnnotations(visitor, jApiField); } visitAnnotations(visitor, jApiClass); visitor.visit(itClasses, jApiClass); } } private static void visitAnnotations(FilterVisitor visitor, JApiHasAnnotations jApiHasAnnotations) { Iterator<JApiAnnotation> itAnnotations = jApiHasAnnotations.getAnnotations().iterator(); while (itAnnotations.hasNext()) { JApiAnnotation jApiAnnotation = itAnnotations.next(); visitor.visit(itAnnotations, jApiAnnotation); } } }