code: def get_provider_fn_decorations(provider_fn, default_arg_names):
      
      if hasattr(provider_fn, _IS_WRAPPER_ATTR):
          provider_decorations = getattr(provider_fn, _PROVIDER_DECORATIONS_ATTR)
          if provider_decorations:
              expanded_provider_decorations = []
              for provider_decoration in provider_decorations:
                  # TODO(kurts): seems like default scope should be done at
                  # ProviderDecoration instantiation time.
                  if provider_decoration.in_scope_id is None:
                      provider_decoration.in_scope_id = scoping.DEFAULT_SCOPE
                  if provider_decoration.arg_name is not None:
                      expanded_provider_decorations.append(provider_decoration)
                  else:
                      expanded_provider_decorations.extend(
                          [ProviderDecoration(default_arg_name,
                                              provider_decoration.annotated_with,
                                              provider_decoration.in_scope_id)
                           for default_arg_name in default_arg_names])
              return expanded_provider_decorations
      return [ProviderDecoration(default_arg_name,
                                 annotated_with=None,
                                 in_scope_id=scoping.DEFAULT_SCOPE)
              for default_arg_name in default_arg_names]
docs: Retrieves the provider method-relevant info set by decorators.
  
      If any info wasn't set by decorators, then defaults are returned.
  
      Args:
        provider_fn: a (possibly decorated) provider function
        default_arg_names: the (possibly empty) arg names to use if none were
            specified via @provides()
      Returns:
        a sequence of ProviderDecoration