public override void VisitMethodDeclarationNode(MethodDeclarationNode node) { if (_snapshot == null) { return; } base.VisitMethodDeclarationNode(node); var key = GenerateTag(node, _snapshot); if (key == null) { //We can't get a proper tag from this (likely ill-formed) method, so we'll skip it for now. var name = node.GetName(_snapshot); VSServiceProvider.Current.Logger.WriteToLog("Can't form a proper tag (likely ill-formed), ignoring member '" + name == null ? "" : name + "' for now..."); return; } if (_methods.ContainsKey(key)) { //For some reason, we have two methods with the same signature. There is //nothing we can do in this case so we just throw out the second method. VSServiceProvider.Current.Logger.WriteToLog("Two methods where found to have the exact same signature, ignoring second method for now..."); return; } _methods.Add(key, node); }
public override void VisitMethodDeclarationNode(MethodDeclarationNode node) { if (_snapshot == null) return; base.VisitMethodDeclarationNode(node); var key = GenerateTag(node, _snapshot); if (key == null) { //We can't get a proper tag from this (likely ill-formed) method, so we'll skip it for now. var name = node.GetName(_snapshot); VSServiceProvider.Current.Logger.WriteToLog("Can't form a proper tag (likely ill-formed), ignoring member '" + name == null ? "" : name + "' for now..."); return; } if (_methods.ContainsKey(key)) { //For some reason, we have two methods with the same signature. There is //nothing we can do in this case so we just throw out the second method. VSServiceProvider.Current.Logger.WriteToLog("Two methods where found to have the exact same signature, ignoring second method for now..."); return; } _methods.Add(key, node); }
public static object GenerateTag(MethodDeclarationNode method, ITextSnapshot snapshot) { Contract.Requires(method != null); Contract.Requires(snapshot != null); var sb = new StringBuilder(); //Append our name var name = method.GetName(snapshot); if (name == null) { return(null); } sb.Append(name); sb.Append('!'); //Append our return type if (method.ReturnType != null) { var rn = method.ReturnType.GetName(snapshot); if (rn == null) { rn = "NONAME"; } sb.Append(rn); sb.Append('!'); } //Append parameters if (method.FormalParameterList != null) { foreach (var param in method.FormalParameterList) { //AppendParamter nameS if (param.Identifier != null && param.Identifier.Name != null) { sb.Append(param.Identifier.Name.Text); sb.Append('!'); } //Append parameter type if (param.Type != null) { var tn = param.Type.GetName(snapshot); if (tn != null) { sb.Append(tn); sb.Append('!'); } } //Append attributes? if (param.Attributes != null && param.Attributes.Count > 0) { } //Append flags if (param.Flags != default(NodeFlags)) { sb.Append(param.Flags); sb.Append('!'); } } } //var snapshotSpan = method.GetSpan().Convert(snapshot); //var methodText = snapshotSpan.GetText(); //string methodHeader; //if (methodText.Contains('{')) { // methodHeader = methodText.Substring(0, methodText.IndexOf('{')).Trim(); //} else if (methodText.Contains(';')) { // methodHeader = methodText.Substring(0, methodText.IndexOf(';')).Trim(); //} else // return null; //sb.Append(methodHeader); //sb.Append('!'); //Apend parent information var containingType = method.Parent; while (containingType != null) { var asClass = containingType.AsClass(); if (asClass != null) { sb.Append(asClass.Identifier.Name.Text); sb.Append('!'); goto EndOfLoop; } var asInterface = containingType.AsInterface(); if (asInterface != null) { sb.Append(asInterface.Identifier.Name.Text); sb.Append('!'); goto EndOfLoop; } /*Note: there is nothing we can do about the namespace, we can't seem to get namespace name info from the syntactic model. */ EndOfLoop: containingType = containingType.Parent; } //Append flags if (method.Flags != default(NodeFlags)) { sb.Append(method.Flags); sb.Append('!'); } //Append what kind of node we are sb.Append(MethodTagSuffix); return(sb.ToString()); }
public static object GenerateTag(MethodDeclarationNode method, ITextSnapshot snapshot) { Contract.Requires(method != null); Contract.Requires(snapshot != null); var sb = new StringBuilder(); //Append our name var name = method.GetName(snapshot); if (name == null) return null; sb.Append(name); sb.Append('!'); //Append our return type if (method.ReturnType != null) { var rn = method.ReturnType.GetName(snapshot); if (rn == null) rn = "NONAME"; sb.Append(rn); sb.Append('!'); } //Append parameters if (method.FormalParameterList != null) { foreach (var param in method.FormalParameterList) { //AppendParamter nameS if (param.Identifier != null && param.Identifier.Name != null) { sb.Append(param.Identifier.Name.Text); sb.Append('!'); } //Append parameter type if (param.Type != null) { var tn = param.Type.GetName(snapshot); if (tn != null) { sb.Append(tn); sb.Append('!'); } } //Append attributes? if (param.Attributes != null && param.Attributes.Count > 0) { } //Append flags if (param.Flags != default(NodeFlags)) { sb.Append(param.Flags); sb.Append('!'); } } } //var snapshotSpan = method.GetSpan().Convert(snapshot); //var methodText = snapshotSpan.GetText(); //string methodHeader; //if (methodText.Contains('{')) { // methodHeader = methodText.Substring(0, methodText.IndexOf('{')).Trim(); //} else if (methodText.Contains(';')) { // methodHeader = methodText.Substring(0, methodText.IndexOf(';')).Trim(); //} else // return null; //sb.Append(methodHeader); //sb.Append('!'); //Apend parent information var containingType = method.Parent; while (containingType != null) { var asClass = containingType.AsClass(); if (asClass != null) { sb.Append(asClass.Identifier.Name.Text); sb.Append('!'); goto EndOfLoop; } var asInterface = containingType.AsInterface(); if (asInterface != null) { sb.Append(asInterface.Identifier.Name.Text); sb.Append('!'); goto EndOfLoop; } /*Note: there is nothing we can do about the namespace, we can't seem to get namespace name info from the syntactic model. */ EndOfLoop: containingType = containingType.Parent; } //Append flags if (method.Flags != default(NodeFlags)) { sb.Append(method.Flags); sb.Append('!'); } //Append what kind of node we are sb.Append(MethodTagSuffix); return sb.ToString(); }