/**
   * Filters a Collection of <code>Class</code> objects. The returned collection only contains those
   * classes that have an attribute of the specified type. That is, for each Class clazz in the
   * returned collection, <code>clazz != null && Attributes.hasAttributeType (clazz, attributeClass)
   * </code> is true.
   *
   * @param classes Collection of Classes to filter. May contain <code>null</code> references, but
   *     may not itself be <code>null</code>.
   * @param attributeClass the class to filter based on.
   * @since 2.1
   */
  public static Collection getClassesWithAttributeType(Collection classes, Class attributeClass) {
    if (classes == null) {
      throw new NullPointerException("classes");
    }

    if (attributeClass == null) {
      throw new NullPointerException("attributeClass");
    }

    ArrayList result = new ArrayList();
    Iterator iter = classes.iterator();
    while (iter.hasNext()) {
      Class clazz = (Class) iter.next();
      if (clazz != null) {
        if (Attributes.hasAttributeType(clazz, attributeClass)) {
          result.add(clazz);
        }
      }
    }

    return result;
  }
  /**
   * Filters a collection of objects. The returned collection only contains those objects whose
   * class have an attribute of the specified type. That is, for each Object o in the returned
   * collection, <code>o != null && Attributes.hasAttributeType (o.getClass (), attributeClass)
   * </code> is true.
   *
   * @param objects Collection of objects to filter. May contain <code>null</code> references, but
   *     may not itself be <code>null</code>.
   * @param attributeClass the class to filter based on.
   * @since 2.1
   */
  public static Collection getObjectsWithAttributeType(Collection objects, Class attributeClass) {
    if (objects == null) {
      throw new NullPointerException("objects");
    }

    if (attributeClass == null) {
      throw new NullPointerException("attributeClass");
    }

    ArrayList result = new ArrayList();
    Iterator iter = objects.iterator();
    while (iter.hasNext()) {
      Object object = iter.next();
      if (object != null) {
        Class clazz = object.getClass();
        if (Attributes.hasAttributeType(clazz, attributeClass)) {
          result.add(object);
        }
      }
    }

    return result;
  }