code: public boolean report(Object obj){
  		if(obj==null){
  			return false;
  		}
  
  		boolean ret = true;
  		if(obj instanceof Iterable){
  			for(Object o : (Iterable<?>)obj){
  				ret = ret & this.reportKnownClasses(o);
  			}
  		}
  		else if(obj instanceof Iterator){
  			while(((Iterator<?>)obj).hasNext()){
  				ret = ret & this.reportKnownClasses(((Iterator<?>)obj).next());
  			}
  		}
  		else if(obj instanceof Object[]){
  			for(Object o : (Object[])obj){
  				ret = ret & this.reportKnownClasses(o);
  			}
  		}
  		else{
  			ret = ret & this.reportKnownClasses(obj);
  		}
  		return ret;
  	}
docs: Reports a message.
  
  This methods understands the message formats {@link Message5WH}, {@link IsMessageSet}, {@link HasErrorSet}, {@link HasWarningSet}, and {@link HasInfoSet}.
  It also does process iterators, iterables, and arrays of any type to process the message formats mentioned above.
  
  All objects not understood will be silently ignored.
  
  @param obj message object or object containing messages for reporting
  @return true if one or all message have been reported, false otherwise