class Solargraph::Pin::DelegatedMethod

def resolve_method api_map

Returns:
  • (Pin::Method, nil) -

Parameters:
  • api_map (ApiMap) --
def resolve_method api_map
  return if @resolved_method
  resolver = @receiver_chain.define(api_map, self, []).first
  unless resolver
    Solargraph.logger.warn \
      "Delegated receiver for #{path} was resolved to nil from `#{print_chain(@receiver_chain)}'"
    return
  end
  receiver_type = resolver.return_type
  return if receiver_type.undefined?
  receiver_path, method_scope =
    if @receiver_chain.constant?
      # HACK: the `return_type` of a constant is Class<Whatever>, but looking up a method expects

      # the arguments `"Whatever"` and `scope: :class`.

      [receiver_type.to_s.sub(/^Class<(.+)>$/, '\1'), :class]
    else
      [receiver_type.to_s, :instance]
    end
  method_stack = api_map.get_method_stack(receiver_path, @receiver_method_name, scope: method_scope)
  @resolved_method = method_stack.first
end