/// <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);
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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);
                }
            }
        }