2016-09-22 3 views
1

J'ai un objet CodeFunction de l'espace de noms EnvDTE. Je veux en avoir la définition. par exemple:Comment puis-je obtenir la définition d'une fonction à partir de CodeFunction?

private void MenuItemCallback(object sender, EventArgs e) 
{ 
    MessageBox.Show("Try"); 
} 

Je voudrais obtenir la première ligne sous forme de chaîne.

Ce que j'ai essayé jusqu'à présent,

1) Essayez de faire une chaîne en obtenant Type de CodeFunction (type de retour) et les paramètres puis dans une boucle les ajouter à une chaîne. Cependant, les noms des types de paramètres deviennent comme "System.UInt32" etc., ce que je ne veux pas. Également un problème avec ceci, il ne peut pas prendre ref Guid pguidCmdGroup aussi complètement. J'ai peur de sauter l'arbitre à ce sujet.

2) J'ai essayé d'utiliser les fonctions de CodeFunction mais tout ce que j'ai pu obtenir était un nom simple. 3) J'ai essayé d'écrire depuis le point de départ et le point de fin de la fonction CodeFunction mais je n'ai pas trouvé le moyen de transformer deux TextPoint en chaîne et j'ai réalisé que le point final n'est pas la fin de la définition. ce que je ne veux pas.

Comment puis-je obtenir simplement private void MenuItemCallback(object sender, EventArgs e) ou MenuItemCallback(object sender, EventArgs e)?

Merci pour votre aide.

+0

Je ne serais pas surpris si ce n'est pas possible. Pendant la compilation, le code 'string' est traduit en langage machine. –

+0

Peut-être mais il existe des extensions qui peuvent éditer/rechercher/etc. sur l'éditeur ou sur le document actif, n'y a-t-il pas un moyen d'obtenir la définition de la méthode? – mtilhan

Répondre

0

Vous devez utiliser GetStartPoint() et GetEndPoint():
Lire la source complète de la fonction, puis coupé le code avant la première accolade ouverte.

// Retrieve the source code for the function. 
TextPoint start = codeFunction.GetStartPoint(vsCMPart.vsCMPartHeader); 
TextPoint finish = codeFunction.GetEndPoint(); 

string fullSource = start.CreateEditPoint().GetText(finish); 

// Find the first open curly brace 
int openCurlyBracePos = fullSource.IndexOf('{'); 

string declaration = String.Empty; 
if (openCurlyBracePos > -1) { 
    declaration = fullSource.Substring(0, openCurlyBracePos).Trim(); 
}