A Fast XML Reader that reads only the requested entities and uses delegates to create objects along the way
상속: IDisposable
예제 #1
0
        private static void ReadType(SparseReader reader, object parent)
        {
            Context context = (Context)parent;

            if (context.Exception)
            {
                ReadExceptionType(reader, parent);
            }
            else
            {
                context.RefineType(reader.ReadAttributeString(SchemaStrings.AttributeName));
                reader.ReadChildren(SchemaStrings.ElementType, parent);
                context.ClearType();
            }
        }
예제 #2
0
        private static void ReadStackTrace(SparseReader reader, object parent)
        {
            Context context = (Context)parent;

            context.RefineStackTrace(reader.ReadElementContentAsString());
        }
예제 #3
0
        private static void ReadTarget(SparseReader reader, object parent)
        {
            Context context = (Context)parent;

            context.RefineTarget(reader.ReadAttributeString(SchemaStrings.AttributeName));
            reader.ReadChildren(SchemaStrings.ElementTarget, parent);
            context.ClearTarget();
        }
예제 #4
0
        private void ReadNamespace(SparseReader reader, object parent)
        {
            Context context = (Context)parent;

            context.RefineNamespace(reader.ReadAttributeString(SchemaStrings.AttributeName));
            reader.ReadChildren(SchemaStrings.ElementNamespace, parent);
            context.ClearNamespace();
        }
예제 #5
0
 private static void ReadExceptions(SparseReader reader, object parent)
 {
     reader.ReadChildren(SchemaStrings.ElementExceptions, parent);
 }
예제 #6
0
        private void ReadInnerExceptionType(SparseReader reader, object parent)
        {
            Context context = (Context)parent;

            context.RefineInnerExceptionType(reader.ReadElementContentAsString());
        }
예제 #7
0
        private void ReadMessage(SparseReader reader, object parent)
        {
            Context context = (Context)parent;

            string messageId = reader.ReadAttributeString(SchemaStrings.AttributeId);
            string typename = reader.ReadAttributeString(SchemaStrings.AttributeTypeName);
            string category = reader.ReadAttributeString(SchemaStrings.AttributeCategory);
            string checkId = reader.ReadAttributeString(SchemaStrings.AttributeCheckId);
            string fixCategory = reader.ReadAttributeString(SchemaStrings.AttributeFixCategory);
            string status = reader.ReadAttributeString(SchemaStrings.AttributeStatus);

            context.RefineMessage(checkId, typename, messageId, category, fixCategory, status);

            if ("Excluded".Equals(status) || "ExcludedInSource".Equals(status))
            {
                // FxCop doesn't actually emit message details for most excluded items
                // and so we must fire here for these items, as the scan for child
                // <Issue> elements may not produce anything. FxCop seems to emit
                // issues for excluded items which are at the namespace level only.
                if (ResultRead != null)
                {
                    ResultRead(context);
                }
            }

            reader.ReadChildren(SchemaStrings.ElementMessage, parent);

            context.ClearMessage();
        }
예제 #8
0
        private static void ReadExceptionMessage(SparseReader reader, object parent)
        {
            Context context = (Context)parent;

            context.RefineExceptionMessage(reader.ReadElementContentAsString());
        }
예제 #9
0
 private static void ReadExceptions(SparseReader reader, object parent)
 {
     reader.ReadChildren(SchemaStrings.ElementExceptions, parent);
 }
예제 #10
0
        private static void ReadTargets(SparseReader reader, object parent)
        {
            Context context = (Context)parent;

            reader.ReadChildren(SchemaStrings.ElementTargets, parent);
        }
예제 #11
0
 private void ReadModules(SparseReader reader, object parent)
 {
     reader.ReadChildren(SchemaStrings.ElementModules, parent);
 }
예제 #12
0
 private static void ReadResources(SparseReader reader, object parent)
 {
     reader.ReadChildren(SchemaStrings.ElementResources, parent);
 }
예제 #13
0
        private static void ReadInnerStackTrace(SparseReader reader, object parent)
        {
            Context context = (Context)parent;

            context.RefineInnerStackTrace(reader.ReadElementContentAsString());
        }
예제 #14
0
        private static void ReadInnerExceptionMessage(SparseReader reader, object parent)
        {
            Context context = (Context)parent;

            context.RefineInnerExceptionMessage(reader.ReadElementContentAsString());
        }
예제 #15
0
 private static void ReadTypes(SparseReader reader, object parent)
 {
     reader.ReadChildren(SchemaStrings.ElementTypes, parent);
 }
예제 #16
0
        private static void ReadExceptionType(SparseReader reader, object parent)
        {
            Context context = (Context)parent;

            if (context.Exception)
            {
                context.RefineExceptionType(reader.ReadElementContentAsString());
            }
        }
예제 #17
0
        private void ReadException(SparseReader reader, object parent)
        {
            Context context = (Context)parent;

            string ruleId = reader.ReadAttributeString(SchemaStrings.AttributeKeyword);
            string kind = reader.ReadAttributeString(SchemaStrings.AttributeKind);
            string checkId = reader.ReadAttributeString(SchemaStrings.AttributeCheckId);
            string target = reader.ReadAttributeString(SchemaStrings.AttributeTarget);

            context.RefineException(true, ruleId, target);

            reader.ReadChildren(SchemaStrings.ElementException, parent);

            string exception = MakeExceptionMessage(kind, checkId, context.ExceptionType, context.ExceptionMessage, context.StackTrace, context.InnerExceptionType, context.InnerExceptionMessage, context.InnerStackTrace);
            context.RefineIssue(exception, null, null, null, null, null, null);

            if (ResultRead != null)
            {
                ResultRead(context);
            }

            context.ClearIssue();
            context.ClearException();
        }
예제 #18
0
        private static void ReadFxCopReport(SparseReader reader, object parent)
        {
            Context context = (Context)parent;

            context.RefineReport(reader.ReadAttributeString(SchemaStrings.AttributeVersion));
            reader.ReadChildren(SchemaStrings.ElementFxCopReport, parent);
            context.ClearReport();
        }
예제 #19
0
        private void ReadIssue(SparseReader reader, object parent)
        {
            Context context = (Context)parent;

            string name = reader.ReadAttributeString(SchemaStrings.AttributeName);
            string certainty = reader.ReadAttributeString(SchemaStrings.AttributeCertainty);
            string level = reader.ReadAttributeString(SchemaStrings.AttributeLevel);

            string path = reader.ReadAttributeString(SchemaStrings.AttributePath);
            string file = reader.ReadAttributeString(SchemaStrings.AttributeFile);
            int? line = reader.ReadAttributeInt(SchemaStrings.AttributeLine);

            string message = reader.ReadElementContentAsString();

            context.RefineIssue(message, name, certainty, level, path, file, line);

            if (ResultRead != null)
            {
                ResultRead(context);
            }

            context.ClearIssue();
        }
예제 #20
0
        private static void ReadMember(SparseReader reader, object parent)
        {
            Context context = (Context)parent;

            context.RefineMember(reader.ReadAttributeString(SchemaStrings.AttributeName));
            reader.ReadChildren(SchemaStrings.ElementMember, parent);
            context.ClearMember();
        }
예제 #21
0
 private void ReadModules(SparseReader reader, object parent)
 {
     reader.ReadChildren(SchemaStrings.ElementModules, parent);
 }
예제 #22
0
        private static void ReadResource(SparseReader reader, object parent)
        {
            Context context = (Context)parent;

            context.RefineResource(reader.ReadAttributeString(SchemaStrings.AttributeName));
            reader.ReadChildren(SchemaStrings.ElementResource, parent);
            context.ClearResource();
        }
예제 #23
0
        /// <summary>
        /// Creates a new <see cref="SparseReader"/> pointing to a <see cref="System.IO.Stream"/> rather
        /// than a <see cref="System.Xml.XmlReader"/>.
        /// </summary>
        /// <param name="dispatchTable">The dispatch table used to fire delegates for XML elements on
        /// this instance.</param>
        /// <param name="stream">The stream from which XML shall be retrieved. The SparseReader takes
        /// ownership of this stream and is responsible for destroying it.</param>
        /// <param name="schemaSet">The xml schema to validate the input against</param>
        /// <returns>
        /// A <see cref="SparseReader"/> wrapping the stream <paramref name="stream"/>.
        /// </returns>
        public static SparseReader CreateFromStream(SparseReaderDispatchTable dispatchTable, Stream stream, XmlSchemaSet schemaSet)
        {
            var settings = new XmlReaderSettings
            {
                DtdProcessing = DtdProcessing.Ignore,
                CloseInput = true,
                Schemas = schemaSet,
                XmlResolver = null
            };

            XmlReader xReader = null;
            try
            {
                xReader = XmlReader.Create(stream, settings);
                xReader.MoveToContent(); // If this throws, we destroy the reader in the finally block below.
                var result = new SparseReader(dispatchTable, xReader); // nothrow
                xReader = null; // Ownership transfered to SparseReader; don't destroy here
                return result;
            }
            finally
            {
                if (xReader != null)
                {
                    xReader.Dispose();
                }
            }
        }
예제 #24
0
 private static void ReadMembers(SparseReader reader, object parent)
 {
     reader.ReadChildren(SchemaStrings.ElementMembers, parent);
 }