/// <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 from the given Java package element. /// This will create a NamespaceDefinition for each component of the name, e.g. com.java.foo.bar, and link them as children of each other. /// This will not add any child statements to the bottom namespace. /// </summary> /// <param name="packageElement">The SRC.Package element to parse.</param> /// <param name="context">The parser context to use.</param> /// <returns>A NamespaceDefinition corresponding to <paramref name="packageElement"/>.</returns> protected override NamespaceDefinition ParseNamespaceElement(XElement packageElement, ParserContext context) { if (packageElement == null) { throw new ArgumentNullException("packageElement"); } if (packageElement.Name != SRC.Package) { throw new ArgumentException("must be a SRC.Package", "packageElement"); } if (context == null) { throw new ArgumentNullException("context"); } var nameElement = packageElement.Element(SRC.Name); if (nameElement == null) { throw new ParseException(context.FileName, packageElement.GetSrcLineNumber(), packageElement.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; } return(topNS); }
/// <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); } } }