/// <summary> /// Parses a C# namespace block /// </summary> /// <param name="namespaceElement">the namespace element to parse</param> /// <param name="context">the parser context</param> protected override NamespaceDefinition ParseNamespaceElement(XElement namespaceElement, ParserContext context) { if (namespaceElement == null) { throw new ArgumentNullException("namespaceElement"); } if (!NamespaceElementNames.Contains(namespaceElement.Name)) { throw new ArgumentException(string.Format("Not a valid namespace element: {0}", namespaceElement.Name), "namespaceElement"); } if (context == null) { throw new ArgumentNullException("context"); } var nameElement = namespaceElement.Element(SRC.Name); if (nameElement == null) { throw new ParseException(context.FileName, namespaceElement.GetSrcLineNumber(), namespaceElement.GetSrcLinePosition(), this, "No SRC.Name element found in namespace.", null); } //parse the name and create a NamespaceDefinition for each component NamespaceDefinition topNS = null; NamespaceDefinition lastNS = null; foreach (var name in NameHelper.GetNameElementsFromName(nameElement)) { var newNS = new NamespaceDefinition { Name = name.Value, ProgrammingLanguage = ParserLanguage }; newNS.AddLocation(context.CreateLocation(name)); if (topNS == null) { topNS = newNS; } if (lastNS != null) { lastNS.AddChildStatement(newNS); } lastNS = newNS; } //add body of namespace to lastNS var blockElement = namespaceElement.Element(SRC.Block); if (blockElement != null) { foreach (var child in blockElement.Elements()) { lastNS.AddChildStatement(ParseStatement(child, context)); } } return(topNS); }
/// <summary> /// Creates a NamespaceDefinition object for the given namespace typeUseElement. This must /// be one of the typeUseElement types defined in NamespaceElementNames. /// </summary> /// <param name="namespaceElement">the namespace element</param> /// <param name="context">The parser context</param> /// <returns>a new NamespaceDefinition object</returns> public override void ParseNamespaceElement(XElement namespaceElement, ParserContext context) { if (namespaceElement == null) { throw new ArgumentNullException("namespaceElement"); } if (!NamespaceElementNames.Contains(namespaceElement.Name)) { throw new ArgumentException(string.Format("Not a valid namespace typeUseElement: {0}", namespaceElement.Name), "namespaceElement"); } var nameElement = namespaceElement.Element(SRC.Name); var namespaceName = nameElement != null ? nameElement.Value : string.Empty; var namespaceDefinition = new NamespaceDefinition { Name = namespaceName }; context.Push(namespaceDefinition); }
/// <summary> /// Parses a C# namespace block /// </summary> /// <param name="namespaceElement">the namespace element to parse</param> /// <param name="context">the parser context</param> public override void ParseNamespaceElement(XElement namespaceElement, ParserContext context) { if (namespaceElement == null) { throw new ArgumentNullException("namespaceElement"); } if (!NamespaceElementNames.Contains(namespaceElement.Name)) { throw new ArgumentException(string.Format("Not a valid namespace element: {0}", namespaceElement.Name), "namespaceElement"); } var nameElement = namespaceElement.Element(SRC.Name); string namespaceName; if (nameElement == null) { namespaceName = string.Empty; } else { NamespaceDefinition root = null; foreach (var name in NameHelper.GetNameElementsFromName(nameElement)) { var namespaceForName = new NamespaceDefinition() { Name = name.Value, ProgrammingLanguage = ParserLanguage, }; if (root == null) { root = namespaceForName; } else { namespaceForName.AddSourceLocation(context.CreateLocation(name)); } context.Push(namespaceForName, root); } } }
/// <summary> /// Creates a NamespaceDefinition object for the given namespace typeUseElement. This must /// be one of the typeUseElement types defined in NamespaceElementNames. /// </summary> /// <param name="namespaceElement">the namespace element</param> /// <param name="context">The parser context</param> /// <returns>a new NamespaceDefinition object</returns> protected override NamespaceDefinition ParseNamespaceElement(XElement namespaceElement, ParserContext context) { if (namespaceElement == null) { throw new ArgumentNullException("namespaceElement"); } if (!NamespaceElementNames.Contains(namespaceElement.Name)) { throw new ArgumentException(string.Format("Not a valid namespace element: {0}", namespaceElement.Name), "namespaceElement"); } if (context == null) { throw new ArgumentNullException("context"); } var nameElement = namespaceElement.Element(SRC.Name); var namespaceName = nameElement != null ? nameElement.Value : string.Empty; var nd = new NamespaceDefinition { Name = namespaceName, ProgrammingLanguage = ParserLanguage, }; nd.AddLocation(context.CreateLocation(namespaceElement)); //add children var blockElement = namespaceElement.Element(SRC.Block); if (blockElement != null) { foreach (var child in blockElement.Elements()) { nd.AddChildStatement(ParseStatement(child, context)); } } return(nd); }