/// <summary> /// Returns the children of a CodeElement. /// </summary> /// <param name="element">The CodeElement parent to enumerate.</param> /// <returns>A CodeElements object containing the child elements.</returns> public static CodeElements GetMembersOf(CodeElement element) { CodeElements members = null; if (element == null) { throw new ArgumentNullException("element"); } if (CodeModelHelpers.HasChildrenKind(element.Kind)) { try { switch (element.Kind) { case vsCMElement.vsCMElementNamespace: members = ((CodeNamespace)element).Members; break; case vsCMElement.vsCMElementClass: members = ((CodeClass)element).Members; break; case vsCMElement.vsCMElementUnion: //nemerle variant type and variant options members = ((CodeClass)element).Members; break; case vsCMElement.vsCMElementEnum: members = ((CodeEnum)element).Members; break; case vsCMElement.vsCMElementInterface: members = ((CodeInterface)element).Members; break; case vsCMElement.vsCMElementStruct: members = ((CodeStruct)element).Members; break; case vsCMElement.vsCMElementDelegate: members = ((CodeDelegate)element).Members; break; case vsCMElement.vsCMElementModule: // VS has no CodeModule class, so a CodeClass is used instead // to provide the list of children. members = ((CodeClass)element).Members; break; } } catch (Exception) { throw; } } return(members); }
/// <summary> /// Returns a CodeElement's display name for use in TreeViews. /// </summary> /// <param name="element">The CodeElement whose display name is needed.</param> /// <returns>The element's display string.</returns> /// <remarks> /// For methods, this is the function prototype; /// for other elements, it is simply the Name. /// </remarks> public static string GetDisplayNameFromCMElement(CodeElement element) { string strName = null; if (element == null) { throw new ArgumentNullException("element"); } try { if (CodeModelHelpers.IsGeneric(element, out strName)) { Debug.Assert(strName != null); } else { switch (element.Kind) { case vsCMElement.vsCMElementFunction: CodeFunction codeFunction = ((CodeFunction)element); if (element is CodeDomCodeFunction) { strName = codeFunction.get_Prototype((int)vsCMPrototype.vsCMPrototypeParamTypes | (int)vsCMPrototype.vsCMPrototypeType); } else { strName = codeFunction.get_Prototype((int)vsCMPrototype.vsCMPrototypeParamTypes); } break; case vsCMElement.vsCMElementVariable: CodeDomCodeVariable codeTypeVariable = element as CodeDomCodeVariable; if (codeTypeVariable != null) { strName = codeTypeVariable.get_Prototype((int)(int)vsCMPrototype.vsCMPrototypeType); } else { strName = element.Name; } break; case vsCMElement.vsCMElementProperty: CodeDomCodeProperty codeTypeProperty = element as CodeDomCodeProperty; if (codeTypeProperty != null) { strName = codeTypeProperty.get_Prototype((int)(int)vsCMPrototype.vsCMPrototypeType); } else { strName = element.Name; } break; default: strName = element.Name; break; } } } catch { strName = element.Name; } return(strName); }