docs: 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;
      }