Beispiel #1
0
        private void ResultsReceived(Object data)
        {
            var writer = new StringWriter();
            var dumper = new ObjectTextDumper(writer);

            dumper.Dump(data);

            Paragraph paragraph = new Paragraph();
            Bold      recv      = new Bold();
            var       converter = new System.Windows.Media.BrushConverter();

            recv.Foreground = (Brush)converter.ConvertFromString("#FF8ACCCF");
            recv.FontSize   = 14.0;
            recv.Inlines.Add("Event Received :" + Environment.NewLine);
            paragraph.Inlines.Add(recv);

            Span text = new Span();

            text.Foreground = (Brush)converter.ConvertFromString("#FFDFDFBF");
            text.Inlines.Add(writer.GetStringBuilder().ToString());
            paragraph.Inlines.Add(text);

            View.console.Document.Blocks.Add(paragraph);
            View.scroller.ScrollToBottom();
        }
Beispiel #2
0
        internal static bool TryFind(
            ObjectTextDumper objectTextDumper,
            object obj,
            ClassDumpData classDumpData,
            out Script script)
        {
            if (objectTextDumper == null)
            {
                throw new ArgumentNullException(nameof(objectTextDumper));
            }
            if (obj == null)
            {
                throw new ArgumentNullException(nameof(obj));
            }

            script = null;

            var lookup = new ScriptLookup(obj.GetType(), classDumpData, objectTextDumper);

            _sync.EnterReadLock();

            var found = _cache.TryGetValue(lookup, out script);

            if (!found)
            {
                found = _buildingNow.Contains(lookup);
            }

            _sync.ExitReadLock();
            return(found);
        }
Beispiel #3
0
        internal static Script Add(
            ObjectTextDumper objectTextDumper,
            Type objectType,
            ClassDumpData classDumpData,
            DumpScript _dumpScript)
        {
            if (objectTextDumper == null)
            {
                throw new ArgumentNullException(nameof(objectTextDumper));
            }
            if (objectType == null)
            {
                throw new ArgumentNullException(nameof(objectType));
            }
            if (_dumpScript == null)
            {
                throw new ArgumentNullException(nameof(_dumpScript));
            }

            var lookup = new ScriptLookup(objectType, classDumpData, objectTextDumper);
            var script = _dumpScript.GetScriptAction();

            _sync.EnterWriteLock();

            _cache[lookup] = script;
            _buildingNow.Remove(lookup);

            _sync.ExitWriteLock();

            return(script);
        }
Beispiel #4
0
            public ScriptLookup(
                Type objectType,
                ClassDumpData classDumpData,
                ObjectTextDumper objectTextDumper)
            {
                if (objectTextDumper is null)
                {
                    throw new ArgumentNullException(nameof(objectTextDumper));
                }

                ObjectType             = objectType ?? throw new ArgumentNullException(nameof(objectType));
                ClassDumpData          = classDumpData;
                PropertiesBindingFlags = objectTextDumper.PropertiesBindingFlags;
                FieldsBindingFlags     = objectTextDumper.FieldsBindingFlags;
            }
Beispiel #5
0
        internal static void BuildingScriptFor(
            ObjectTextDumper objectTextDumper,
            Type objectType,
            ClassDumpData classDumpData)
        {
            if (objectType == null)
            {
                throw new ArgumentNullException(nameof(objectType));
            }

            _sync.EnterWriteLock();

            _buildingNow.Add(new ScriptLookup(objectType, classDumpData, objectTextDumper));

            _sync.ExitWriteLock();
        }
Beispiel #6
0
        static void Main()
        {
            int anInt    = 5;
            var anObject = new MyClass
            {
                BoolProperty = true,
                IntProperty  = 3,
                GuidProperty = Guid.Empty,
            };

#if false
            // Initial fully spelled-out version:
            using (var writer = new StringWriter())
            {
                var dumper = new ObjectTextDumper(writer);

                // dump a primitive value:
                dumper.Dump(anInt);
                // dump complex value:
                dumper.Dump(anObject);
                Console.WriteLine(writer.GetStringBuilder().ToString());
            }
#elif false
            // Alternative #1. Use the DumpText() extension method:
            using (var writer = new StringWriter())
            {
                anInt.DumpText(writer);
                anObject.DumpText(writer);
                Console.WriteLine(writer.GetStringBuilder().ToString());
            }
#elif true
            // Alternative #2. Use the DumpString() extension method:
            Console.WriteLine(anInt.DumpString());
            Console.WriteLine(anObject.DumpString());
#elif false
            // Alternative #3. Override MyClass.ToString()
            Console.WriteLine(anInt.DumpString());
            Console.WriteLine(anObject.ToString());
#endif

            Console.Write("Press any key to finish...");
            Console.ReadKey(true);
        }
Beispiel #7
0
        private DumpState(
            ObjectTextDumper dumper,
            object instance,
            Type type,
            ClassDumpData classDumpData,
            DumpAttribute instanceDumpAttribute,
            DumpScript dumpScript,
            bool isTopLevelClass)
        {
            _dumper               = dumper ?? throw new ArgumentNullException(nameof(dumper));
            _isTopLevelClass      = isTopLevelClass;
            Instance              = instance ?? throw new ArgumentNullException(nameof(instance));
            InstanceType          = instance.GetType();
            CurrentType           = type ?? throw new ArgumentNullException(nameof(type));
            ClassDumpData         = classDumpData;
            InstanceDumpAttribute = instanceDumpAttribute ?? throw new ArgumentNullException(nameof(instanceDumpAttribute));
            DumpScript            = dumpScript;

            if (_isTopLevelClass)
            {
                var defaultProperty = DefaultProperty;

                if (!defaultProperty.IsNullOrWhiteSpace())
                {
                    var pi = CurrentType.GetProperty(defaultProperty);

                    Enumerator = pi != null
                                    ? (new MemberInfo[] { pi }).AsEnumerable().GetEnumerator()
                                    : (new MemberInfo[] { }).AsEnumerable().GetEnumerator();
                    return;
                }
            }

            Enumerator = CurrentType.GetProperties(_dumper.PropertiesBindingFlags | BindingFlags.DeclaredOnly)
                         .Union <MemberInfo>(
                CurrentType.GetFields(_dumper.FieldsBindingFlags | BindingFlags.DeclaredOnly))
                         .Where(mi => !mi.Name.StartsWith("<", StringComparison.Ordinal))
                         .OrderBy(p => p, ServiceResolver
                                  .Default
                                  .GetInstance <IMemberInfoComparer>()
                                  .SetMetadata(ClassDumpData.Metadata))
                         .GetEnumerator();
        }
Beispiel #8
0
        public DumpState(
            ObjectTextDumper dumper,
            object instance,
            ClassDumpData classDumpData,
            bool buildScript)
            : this(dumper, instance, instance.GetType(), classDumpData, classDumpData.DumpAttribute, null, true)
        {
            if (dumper == null)
            {
                throw new ArgumentNullException(nameof(dumper));
            }
            if (instance == null)
            {
                throw new ArgumentNullException(nameof(instance));
            }

            // let's not create script if we don't need it or are not doing anything here.
            if (buildScript && CurrentType != typeof(object))
            {
                DumpScript = new DumpScript(instance.GetType());
            }

            DecrementMaxDepth();
        }
Beispiel #9
0
        public static object DumpText(
            this object value,
            TextWriter writer,
            int indentLevel             = 0,
            Type dumpMetadata           = null,
            DumpAttribute dumpAttribute = null)
        {
            if (writer == null)
            {
                throw new ArgumentNullException(nameof(writer));
            }

            try
            {
                using (var dumper = new ObjectTextDumper(writer))
                    dumper.Dump(value, dumpMetadata, dumpAttribute, indentLevel);
            }
            catch (Exception x)
            {
                writer.WriteLine($"\n\nATTENTION:\nThe TextDumper threw an exception:\n{x.ToString()}");
            }

            return(value);
        }