Strings used for parsing Android Studio logs.
Exemplo n.º 1
0
        /// <summary>Reads a "hints" element, consuming the element.</summary>
        /// <exception cref="XmlException">Thrown when the Android Studio file is incorrect.</exception>
        /// <param name="reader">The reader from which the hints shall be parsed.</param>
        /// <param name="strings">NameTable strings used to parse Android Studio files.</param>
        /// <returns>The set of hint values from <paramref name="reader"/>.</returns>
        public static ImmutableArray <string> ReadHints(XmlReader reader, AndroidStudioStrings strings)
        {
            Debug.Assert(Ref.Equal(reader.LocalName, strings.Hints), "ReadHints didn't have hints");

            var result = ImmutableArray.CreateBuilder <string>();

            if (!reader.IsEmptyElement)
            {
                int hintsDepth = reader.Depth;
                reader.Read(); // Consume start element
                while (reader.Depth > hintsDepth)
                {
                    if (!Ref.Equal(reader.LocalName, strings.Hint))
                    {
                        throw reader.CreateException(ConverterResources.AndroidStudioHintsElementContainedNonHint);
                    }

                    string hintContent = reader.GetAttribute(strings.Value);
                    if (hintContent == null)
                    {
                        throw reader.CreateException(ConverterResources.AndroidStudioHintElementMissingValue);
                    }

                    if (hintContent.Length != 0)
                    {
                        result.Add(hintContent);
                    }

                    reader.Skip();
                }
            }

            reader.Read(); // Consume the end / empty element
            return(result.ToImmutable());
        }
Exemplo n.º 2
0
        // These functions take ref Builder to avoid boxing Builder

        private static void ReadEntryPointElement(ref Builder b, XmlReader reader, AndroidStudioStrings strings)
        {
            while (reader.MoveToNextAttribute())
            {
                string name = reader.LocalName;
                if (Ref.Equal(name, strings.Type))
                {
                    b.EntryPointType = reader.Value;
                }
                else if (Ref.Equal(name, strings.FQName))
                {
                    b.EntryPointName = reader.Value;
                }
            }

            reader.Skip();
        }
Exemplo n.º 3
0
        private static void ReadProblemClassElement(ref Builder b, XmlReader reader, AndroidStudioStrings strings)
        {
            while (reader.MoveToNextAttribute())
            {
                string name = reader.LocalName;
                if (Ref.Equal(name, strings.Severity))
                {
                    b.Severity = reader.Value;
                }
                else if (Ref.Equal(name, strings.AttributeKey))
                {
                    b.AttributeKey = reader.Value;
                }
            }

            reader.MoveToElement();
            b.ProblemClass = reader.ReadElementContentAsString();
        }
Exemplo n.º 4
0
        public void AndroidStudioStrings_AddsToNameTable()
        {
            var nameTable = new NameTable();
            var uut       = new AndroidStudioStrings(nameTable);

            Assert.Same(nameTable.Add("problems"), uut.Problems);
            Assert.Same(nameTable.Add("problem"), uut.Problem);
            Assert.Same(nameTable.Add("file"), uut.File);
            Assert.Same(nameTable.Add("line"), uut.Line);
            Assert.Same(nameTable.Add("module"), uut.Module);
            Assert.Same(nameTable.Add("package"), uut.Package);
            Assert.Same(nameTable.Add("entry_point"), uut.EntryPoint);
            Assert.Same(nameTable.Add("problem_class"), uut.ProblemClass);
            Assert.Same(nameTable.Add("hints"), uut.Hints);
            Assert.Same(nameTable.Add("hint"), uut.Hint);
            Assert.Same(nameTable.Add("description"), uut.Description);

            Assert.Same(nameTable.Add("TYPE"), uut.Type);
            Assert.Same(nameTable.Add("FQNAME"), uut.FQName);
            Assert.Same(nameTable.Add("severity"), uut.Severity);
            Assert.Same(nameTable.Add("attribute_key"), uut.AttributeKey);
            Assert.Same(nameTable.Add("value"), uut.Value);
        }
        public void AndroidStudioStrings_AddsToNameTable()
        {
            var nameTable = new NameTable();
            var uut = new AndroidStudioStrings(nameTable);

            Assert.AreSame(nameTable.Add("problems"), uut.Problems);
            Assert.AreSame(nameTable.Add("problem"), uut.Problem);
            Assert.AreSame(nameTable.Add("file"), uut.File);
            Assert.AreSame(nameTable.Add("line"), uut.Line);
            Assert.AreSame(nameTable.Add("module"), uut.Module);
            Assert.AreSame(nameTable.Add("package"), uut.Package);
            Assert.AreSame(nameTable.Add("entry_point"), uut.EntryPoint);
            Assert.AreSame(nameTable.Add("problem_class"), uut.ProblemClass);
            Assert.AreSame(nameTable.Add("hints"), uut.Hints);
            Assert.AreSame(nameTable.Add("hint"), uut.Hint);
            Assert.AreSame(nameTable.Add("description"), uut.Description);

            Assert.AreSame(nameTable.Add("TYPE"), uut.Type);
            Assert.AreSame(nameTable.Add("FQNAME"), uut.FQName);
            Assert.AreSame(nameTable.Add("severity"), uut.Severity);
            Assert.AreSame(nameTable.Add("attribute_key"), uut.AttributeKey);
            Assert.AreSame(nameTable.Add("value"), uut.Value);
        }
Exemplo n.º 6
0
        /// <summary>Parses a "problem" node from an Android Studio log and consumes that node.</summary>
        /// <exception cref="XmlException">Thrown when the Android Studio file is incorrect.</exception>
        /// <param name="reader">The reader from which the problem shall be parsed.</param>
        /// <param name="strings">NameTable strings used to parse Android Studio files.</param>
        /// <returns>
        /// If the problem node is not empty, an instance of <see cref="AndroidStudioProblem" />;
        /// otherwise, null.
        /// </returns>
        public static AndroidStudioProblem Parse(XmlReader reader, AndroidStudioStrings strings)
        {
            if (!reader.IsStartElement(strings.Problem))
            {
                throw reader.CreateException(ConverterResources.AndroidStudioNotProblemElement);
            }

            Builder b = new Builder();

            if (!reader.IsEmptyElement)
            {
                int problemDepth = reader.Depth;
                reader.Read(); // Get to children
                while (reader.Depth > problemDepth)
                {
                    string nodeName = reader.LocalName;
                    if (Ref.Equal(nodeName, strings.File))
                    {
                        b.File = reader.ReadElementContentAsString();
                    }
                    else if (Ref.Equal(nodeName, strings.Line))
                    {
                        b.Line = Math.Max(1, reader.ReadElementContentAsInt());
                    }
                    else if (Ref.Equal(nodeName, strings.Module))
                    {
                        b.Module = reader.ReadElementContentAsString();
                    }
                    else if (Ref.Equal(nodeName, strings.Package))
                    {
                        b.Package = reader.ReadElementContentAsString();
                    }
                    else if (Ref.Equal(nodeName, strings.EntryPoint))
                    {
                        ReadEntryPointElement(ref b, reader, strings);
                    }
                    else if (Ref.Equal(nodeName, strings.ProblemClass))
                    {
                        ReadProblemClassElement(ref b, reader, strings);
                    }
                    else if (Ref.Equal(nodeName, strings.Hints))
                    {
                        b.Hints = ReadHints(reader, strings);
                    }
                    else if (Ref.Equal(nodeName, strings.Description))
                    {
                        b.Description = reader.ReadElementContentAsString();
                    }
                    else
                    {
                        reader.Skip();
                    }
                }
            }

            reader.Read(); // Consume the empty / end element

            if (b.IsEmpty)
            {
                return(null);
            }

            try
            {
                return(new AndroidStudioProblem(b));
            }
            catch (ArgumentException invalidData)
            {
                throw reader.CreateException(invalidData.Message);
            }
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="AndroidStudioConverter"/> class.
 /// </summary>
 public AndroidStudioConverter()
 {
     _nameTable = new NameTable();
     _strings   = new AndroidStudioStrings(_nameTable);
 }
Exemplo n.º 8
0
 /// <summary>
 /// Initializes a new instance of the <see cref="AndroidStudioConverter"/> class.
 /// </summary>
 public AndroidStudioConverter()
 {
     _nameTable = new NameTable();
     _strings = new AndroidStudioStrings(_nameTable);
 }
Exemplo n.º 9
0
        private static void ReadProblemClassElement(ref Builder b, XmlReader reader, AndroidStudioStrings strings)
        {
            while (reader.MoveToNextAttribute())
            {
                string name = reader.LocalName;
                if (Ref.Equal(name, strings.Severity))
                {
                    b.Severity = reader.Value;
                }
                else if (Ref.Equal(name, strings.AttributeKey))
                {
                    b.AttributeKey = reader.Value;
                }
            }

            reader.MoveToElement();
            b.ProblemClass = reader.ReadElementContentAsString();
        }
Exemplo n.º 10
0
        // These functions take ref Builder to avoid boxing Builder
        private static void ReadEntryPointElement(ref Builder b, XmlReader reader, AndroidStudioStrings strings)
        {
            while (reader.MoveToNextAttribute())
            {
                string name = reader.LocalName;
                if (Ref.Equal(name, strings.Type))
                {
                    b.EntryPointType = reader.Value;
                }
                else if (Ref.Equal(name, strings.FQName))
                {
                    b.EntryPointName = reader.Value;
                }
            }

            reader.Skip();
        }
Exemplo n.º 11
0
        /// <summary>Reads a "hints" element, consuming the element.</summary>
        /// <exception cref="XmlException">Thrown when the Android Studio file is incorrect.</exception>
        /// <param name="reader">The reader from which the hints shall be parsed.</param>
        /// <param name="strings">NameTable strings used to parse Android Studio files.</param>
        /// <returns>The set of hint values from <paramref name="reader"/>.</returns>
        public static ImmutableArray<string> ReadHints(XmlReader reader, AndroidStudioStrings strings)
        {
            Debug.Assert(Ref.Equal(reader.LocalName, strings.Hints), "ReadHints didn't have hints");

            var result = ImmutableArray.CreateBuilder<string>();
            if (!reader.IsEmptyElement)
            {
                int hintsDepth = reader.Depth;
                reader.Read(); // Consume start element
                while (reader.Depth > hintsDepth)
                {
                    if (!Ref.Equal(reader.LocalName, strings.Hint))
                    {
                        throw reader.CreateException(ConverterResources.AndroidStudioHintsElementContainedNonHint);
                    }

                    string hintContent = reader.GetAttribute(strings.Value);
                    if (hintContent == null)
                    {
                        throw reader.CreateException(ConverterResources.AndroidStudioHintElementMissingValue);
                    }

                    if (hintContent.Length != 0)
                    {
                        result.Add(hintContent);
                    }

                    reader.Skip();
                }
            }

            reader.Read(); // Consume the end / empty element
            return result.ToImmutable();
        }
Exemplo n.º 12
0
        /// <summary>Parses a "problem" node from an Android Studio log and consumes that node.</summary>
        /// <exception cref="XmlException">Thrown when the Android Studio file is incorrect.</exception>
        /// <param name="reader">The reader from which the problem shall be parsed.</param>
        /// <param name="strings">NameTable strings used to parse Android Studio files.</param>
        /// <returns>
        /// If the problem node is not empty, an instance of <see cref="AndroidStudioProblem" />;
        /// otherwise, null.
        /// </returns>
        public static AndroidStudioProblem Parse(XmlReader reader, AndroidStudioStrings strings)
        {
            if (!reader.IsStartElement(strings.Problem))
            {
                throw reader.CreateException(ConverterResources.AndroidStudioNotProblemElement);
            }

            Builder b = new Builder();
            if (!reader.IsEmptyElement)
            {
                int problemDepth = reader.Depth;
                reader.Read(); // Get to children
                while (reader.Depth > problemDepth)
                {
                    string nodeName = reader.LocalName;
                    if (Ref.Equal(nodeName, strings.File))
                    {
                        b.File = reader.ReadElementContentAsString();
                    }
                    else if (Ref.Equal(nodeName, strings.Line))
                    {
                        b.Line = Math.Max(1, reader.ReadElementContentAsInt());
                    }
                    else if (Ref.Equal(nodeName, strings.Module))
                    {
                        b.Module = reader.ReadElementContentAsString();
                    }
                    else if (Ref.Equal(nodeName, strings.Package))
                    {
                        b.Package = reader.ReadElementContentAsString();
                    }
                    else if (Ref.Equal(nodeName, strings.EntryPoint))
                    {
                        ReadEntryPointElement(ref b, reader, strings);
                    }
                    else if (Ref.Equal(nodeName, strings.ProblemClass))
                    {
                        ReadProblemClassElement(ref b, reader, strings);
                    }
                    else if (Ref.Equal(nodeName, strings.Hints))
                    {
                        b.Hints = ReadHints(reader, strings);
                    }
                    else if (Ref.Equal(nodeName, strings.Description))
                    {
                        b.Description = reader.ReadElementContentAsString();
                    }
                    else
                    {
                        reader.Skip();
                    }
                }
            }

            reader.Read(); // Consume the empty / end element

            if (b.IsEmpty)
            {
                return null;
            }

            try
            {
                return new AndroidStudioProblem(b);
            }
            catch (ArgumentException invalidData)
            {
                throw reader.CreateException(invalidData.Message);
            }
        }