Há uma funcionalidade nova no Visual Studio 2010 Beta 1 (baixe ele aqui, tem somente 1.3 GB) chamada hierarquia de chamadas ("Call Hierarchy" no original em inglês). Essa nova funcionalidade permite analisar as chamadas feitas para um método, e a partir dele, e é extremamente útil. Era algo que no Visual Studio 2008 só era possível fazer com Resharper.

Vejam como é simples. Fiz o código a seguir:

class Program
{
    static void Main(string[] args)
    {
        var repositorio = new RepositorioCliente();
        var clientes = repositorio.ObterTodos();
        var quantidadeDeClientes = repositorio.QuantidadeDeClientes();
        Console.WriteLine("{0} clientes encontrados:", clientes.Count());
        foreach (var cliente in clientes)
        {
            Console.WriteLine("Cliente: {0}", cliente.Nome);
        }
        Console.ReadLine();
    }
}

class RepositorioCliente
{

    public int QuantidadeDeClientes()
    {
        return ObterTodos().Count();
    }

    public IEnumerable<Cliente> ObterTodos()
    {
        return new List<Cliente>()
        {
            new Cliente{Nome = "Giovanni"},
            new Cliente{Nome = "Leandro"},
            new Cliente{Nome = "Victor"}
        };
    }
}

class Cliente
{
    public string Nome { get; set; }
} 

 

(O repositório é só um exemplo, e o método QuantidadeDeClientes() é redundante de propósito.)

Imaginem que quero saber quem chamada o método ObterTodos() da classe RepositorioCliente. É simples, basta clicar com o botão direito sobre o método e selecionar "View Call Hierarchy":

Chamando o call hierarchy direto no método

Não preciso fazer isso somente sobre o método, posso também clicar sobre uma chamada do método, assim:

Chamando o call hierarchy a partir de uma chamada existente

Ao clicar, o resultado aparece na janela de Call Hierarchy. Aqui estou mostrando ela já expandida, vejam:

Janela de call hierarchy

Vejam que ela mostra onde são feitas chamadas para o método (Calls To ‘ObterTodos’), e chamadas feitas a partir do método (Class From ‘ObterTodos’). Podemos notar que as chamadas feitas para o método são feitas a partir do método Main(), e a partir do método QuantidadeDeClientes(). Podemos também notar que ele chama o construtor da classe Cliente e da classe List, e a propridade Nome do Cliente. Clicando duas vezes vamos às declarações destes métodos.

Se você quiser, pode ver exatamente onde a chamada é feita, vejam que à direita da janela de Call Hierarchy aparecem os "Call Sites", ou locais onde a chamadas são feitas, exibindo a linha de código do arquivo onde ela ocorre, assim como o conteúdo da linha:

Call sites no call hierarchy

Clicando sobre o Call Site, você vai à linha de código de chamada. Se houver mais de um Call site, ele é exibido.

Além disso, você pode ir encadeando as chamadas de hierarquia, simplesmente expando o treeview de chamada:

Chamadas encadeadas no call hierarchy

Vou usar muito esse negócio… o que vocês acham? Vale a pena? Vão usar?

Giovanni Bassi

Arquiteto e desenvolvedor, agilista, escalador, provocador. É fundador e CSA da Lambda3. Programa porque gosta. Acredita que pessoas autogerenciadas funcionam melhor e por acreditar que heterarquia é mais eficiente que hierarquia. Foi reconhecido Microsoft MVP há mais de dez anos, dos mais de vinte que atua no mercado. Já palestrou sobre .NET, Rust, microsserviços, JavaScript, TypeScript, Ruby, Node.js, Frontend e Backend, Agile, etc, no Brasil, e no exterior. Liderou grupos de usuários em assuntos como arquitetura de software, Docker, e .NET.