code: @Override
  	public Class<?> getCommonPropertyType(ELContext context, Object base) {
  		Class<?> result = null;
  		for (ELResolver resolver : resolvers) {
  			Class<?> type = resolver.getCommonPropertyType(context, base);
  			if (type != null) {
  				if (result == null || type.isAssignableFrom(result)) {
  					result = type;
  				} else if (!result.isAssignableFrom(type)) {
  					result = Object.class;
  				}
  			}
  		}
  		return result;
  	}
docs: Returns the most general type that this resolver accepts for the property argument, given a
  base object. One use for this method is to assist tools in auto-completion. The result is
  obtained by querying all component resolvers. The Class returned is the most specific class
  that is a common superclass of all the classes returned by each component resolver's
  getCommonPropertyType method. If null is returned by a resolver, it is skipped.
  
  @param context
  The context of this evaluation.
  @param base
  The base object to return the most general property type for, or null to enumerate
  the set of top-level variables that this resolver can evaluate.
  @return null if this ELResolver does not know how to handle the given base object; otherwise
  Object.class if any type of property is accepted; otherwise the most general property
  type accepted for the given base.