/** * Returns <tt>true</tt> iff for each upper bound T, there is at least one bound from <tt>stricterUpperBounds</tt> * assignable to T. This reflects that <tt>stricterUpperBounds</tt> are at least as strict as <tt>upperBounds</tt> are. * <p> * Arguments passed to this method must be legal java bounds, i.e. bounds returned by {@link TypeVariable#getBounds()}, * {@link WildcardType#getUpperBounds()} or {@link WildcardType#getLowerBounds()}. */ protected boolean boundsMatch(Type[] upperBounds, Type[] stricterUpperBounds) { // getUppermostBounds to make sure that both arrays of bounds contain ONLY ACTUAL TYPES! otherwise, the CovariantTypes // assignability rules do not reflect our needs upperBounds = getUppermostBounds(upperBounds); stricterUpperBounds = getUppermostBounds(stricterUpperBounds); for (Type upperBound : upperBounds) { if (!CovariantTypes.isAssignableFromAtLeastOne(upperBound, stricterUpperBounds)) { return false; } } return true; }
/** * Returns <tt>true</tt> iff for each upper bound T, there is at least one bound from <tt>stricterUpperBounds</tt> * assignable to T. This reflects that <tt>stricterUpperBounds</tt> are at least as strict as <tt>upperBounds</tt> are. * <p> * Arguments passed to this method must be legal java bounds, i.e. bounds returned by {@link TypeVariable#getBounds()}, * {@link WildcardType#getUpperBounds()} or {@link WildcardType#getLowerBounds()}. */ protected boolean boundsMatch(Type[] upperBounds, Type[] stricterUpperBounds) { // getUppermostBounds to make sure that both arrays of bounds contain ONLY ACTUAL TYPES! otherwise, the CovariantTypes // assignability rules do not reflect our needs upperBounds = getUppermostBounds(upperBounds); stricterUpperBounds = getUppermostBounds(stricterUpperBounds); for (Type upperBound : upperBounds) { if (!CovariantTypes.isAssignableFromAtLeastOne(upperBound, stricterUpperBounds)) { return false; } } return true; }
/** * Returns <tt>true</tt> iff for each upper bound T, there is at least one bound from <tt>stricterUpperBounds</tt> * assignable to T. This reflects that <tt>stricterUpperBounds</tt> are at least as strict as <tt>upperBounds</tt> are. * <p> * Arguments passed to this method must be legal java bounds, i.e. bounds returned by {@link TypeVariable#getBounds()}, * {@link WildcardType#getUpperBounds()} or {@link WildcardType#getLowerBounds()}. */ protected boolean boundsMatch(Type[] upperBounds, Type[] stricterUpperBounds) { // getUppermostBounds to make sure that both arrays of bounds contain ONLY ACTUAL TYPES! otherwise, the CovariantTypes // assignability rules do not reflect our needs upperBounds = getUppermostBounds(upperBounds); stricterUpperBounds = getUppermostBounds(stricterUpperBounds); for (Type upperBound : upperBounds) { if (!CovariantTypes.isAssignableFromAtLeastOne(upperBound, stricterUpperBounds)) { return false; } } return true; }
/** * Returns <tt>true</tt> iff for each upper bound T, there is at least one bound from <tt>stricterUpperBounds</tt> * assignable to T. This reflects that <tt>stricterUpperBounds</tt> are at least as strict as <tt>upperBounds</tt> are. * <p> * Arguments passed to this method must be legal java bounds, i.e. bounds returned by {@link TypeVariable#getBounds()}, * {@link WildcardType#getUpperBounds()} or {@link WildcardType#getLowerBounds()}. */ protected boolean boundsMatch(Type[] upperBounds, Type[] stricterUpperBounds) { // getUppermostBounds to make sure that both arrays of bounds contain ONLY ACTUAL TYPES! otherwise, the CovariantTypes // assignability rules do not reflect our needs upperBounds = getUppermostBounds(upperBounds); stricterUpperBounds = getUppermostBounds(stricterUpperBounds); for (Type upperBound : upperBounds) { if (!CovariantTypes.isAssignableFromAtLeastOne(upperBound, stricterUpperBounds)) { return false; } } return true; }
/** * Returns <tt>true</tt> iff for each upper bound T, there is at least one bound from <tt>stricterUpperBounds</tt> * assignable to T. This reflects that <tt>stricterUpperBounds</tt> are at least as strict as <tt>upperBounds</tt> are. * <p> * Arguments passed to this method must be legal java bounds, i.e. bounds returned by {@link TypeVariable#getBounds()}, * {@link WildcardType#getUpperBounds()} or {@link WildcardType#getLowerBounds()}. */ protected boolean boundsMatch(Type[] upperBounds, Type[] stricterUpperBounds) { // getUppermostBounds to make sure that both arrays of bounds contain ONLY ACTUAL TYPES! otherwise, the CovariantTypes // assignability rules do not reflect our needs upperBounds = getUppermostBounds(upperBounds); stricterUpperBounds = getUppermostBounds(stricterUpperBounds); for (Type upperBound : upperBounds) { if (!CovariantTypes.isAssignableFromAtLeastOne(upperBound, stricterUpperBounds)) { return false; } } return true; }
/** * Returns <tt>true</tt> iff for each upper bound T, there is at least one bound from <tt>stricterUpperBounds</tt> * assignable to T. This reflects that <tt>stricterUpperBounds</tt> are at least as strict as <tt>upperBounds</tt> are. * <p> * Arguments passed to this method must be legal java bounds, i.e. bounds returned by {@link TypeVariable#getBounds()}, * {@link WildcardType#getUpperBounds()} or {@link WildcardType#getLowerBounds()}. */ protected boolean boundsMatch(Type[] upperBounds, Type[] stricterUpperBounds) { // getUppermostBounds to make sure that both arrays of bounds contain ONLY ACTUAL TYPES! otherwise, the CovariantTypes // assignability rules do not reflect our needs upperBounds = getUppermostBounds(upperBounds); stricterUpperBounds = getUppermostBounds(stricterUpperBounds); for (Type upperBound : upperBounds) { if (!CovariantTypes.isAssignableFromAtLeastOne(upperBound, stricterUpperBounds)) { return false; } } return true; }