Suporte a ferramentas de navegação de símbolo

As ferramentas Pesquisador de Objetos, Modo de Exibição de Classe, Navegador de Chamadas e Localizar Resultados de Símbolos fornecem recursos de navegação de símbolos no Visual Studio. Essas ferramentas exibem exibições de árvore hierárquica de símbolos e mostram as relações entre os símbolos na árvore. Os símbolos podem representar namespaces, objetos, classes, membros de classe e outros elementos de linguagem contidos em vários componentes. Os componentes incluem projetos do Visual Studio, componentes externos do .NET Framework e bibliotecas de tipos (.tlb). Para obter mais informações, consulte Exibindo a estrutura do código.

Bibliotecas de navegação de símbolos

Como um implementador de linguagem, você pode estender os recursos de navegação de símbolos do Visual Studio criando bibliotecas que rastreiam os símbolos em seus componentes e fornecem as listas de símbolos para o gerenciador de objetos do Visual Studio por meio de um conjunto de interfaces. Uma biblioteca é descrita pela IVsSimpleLibrary2 interface. O gerenciador de objetos do Visual Studio responde a solicitações de novos dados das ferramentas de navegação de símbolos obtendo os dados das bibliotecas e organizando-os. Posteriormente, ele preenche ou atualiza as ferramentas com os dados solicitados. Para obter uma referência ao gerenciador de objetos do Visual Studio, , IVsObjectManager2passe a ID de SVsObjectManager serviço para o GetService método.

Cada biblioteca deve se registrar com o gerenciador de objetos do Visual Studio, que coleta as informações em todas as bibliotecas. Para registrar uma biblioteca, chame o RegisterSimpleLibrary método. Dependendo de qual ferramenta inicia a solicitação, o gerenciador de objetos do Visual Studio localiza a biblioteca apropriada e solicita dados. Os dados trafegam entre as bibliotecas e o gerenciador de objetos do Visual Studio em listas de símbolos descritos pela IVsSimpleObjectList2 interface.

O gerenciador de objetos do Visual Studio é responsável por atualizar periodicamente as ferramentas de navegação de símbolos para refletir os dados mais atuais contidos nas bibliotecas.

O diagrama abaixo contém um exemplo de elementos-chave do processo de troca de solicitações/dados entre uma biblioteca e o gerenciador de objetos do Visual Studio. As interfaces no diagrama fazem parte de um aplicativo de código gerenciado.

Data flow between a library and the object manager

Para fornecer as listas de símbolos para o gerenciador de objetos do Visual Studio, você deve primeiro registrar a biblioteca com o gerenciador de objetos do Visual Studio chamando o RegisterSimpleLibrary método. Depois que a biblioteca é registrada, o gerenciador de objetos do Visual Studio solicita determinadas informações sobre os recursos da biblioteca. Por exemplo, ele solicita os sinalizadores de biblioteca e as categorias com suporte chamando os GetLibFlags2 métodos e GetSupportedCategoryFields2 . Em algum momento, quando uma das ferramentas solicita dados dessa biblioteca, o gerenciador de objetos solicita a lista de símbolos de nível superior chamando o GetList2 método. Em resposta, a biblioteca fabrica uma lista de símbolos e a expõe ao gerenciador de objetos do Visual Studio por meio da IVsSimpleObjectList2 interface. O gerenciador de objetos do Visual Studio determina quantos itens estão na lista chamando o GetItemCount método. Todas as solicitações a seguir se referem a um determinado item na lista e fornecem o número de índice do item em cada solicitação. O gerenciador de objetos do Visual Studio continua a coletar as informações sobre o tipo, a acessibilidade e outras propriedades do item chamando o GetCategoryField2 método.

Ele determina o nome do item chamando o método e solicita as informações do ícone chamando o GetTextWithOwnershipGetDisplayData método. O ícone é exibido à esquerda do nome do item e representa o tipo do item, a acessibilidade e outras propriedades.

O gerenciador de objetos do Visual Studio chama o GetExpandable3 método para determinar se um determinado item de lista é expansível e tem itens filhos. Se a interface do usuário enviar uma solicitação para expandir um elemento, o gerenciador de objetos solicitará a lista filho de símbolos chamando o GetList2 método. O processo continua com diferentes partes da árvore sendo construídas sob demanda.

Observação

Para implementar um provedor de símbolo de código nativo, use as IVsLibrary2 interfaces e IVsObjectList2 .