Example #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="YamlSequenceNode"/> class.
        /// </summary>
        /// <param name="events">The events.</param>
        /// <param name="state">The state.</param>
        internal YamlSequenceNode(EventReader events, DocumentLoadingState state)
        {
            SequenceStart sequence = events.Expect <SequenceStart>();

            Load(sequence, state);
            Style = sequence.Style;

            bool hasUnresolvedAliases = false;

            while (!events.Accept <SequenceEnd>())
            {
                YamlNode child = ParseNode(events, state);
                children.Add(child);
                hasUnresolvedAliases |= child is YamlAliasNode;
            }

            if (hasUnresolvedAliases)
            {
                state.AddNodeWithUnresolvedAliases(this);
            }
#if DEBUG
            else
            {
                foreach (var child in children)
                {
                    if (child is YamlAliasNode)
                    {
                        throw new InvalidOperationException("Error in alias resolution.");
                    }
                }
            }
#endif

            events.Expect <SequenceEnd>();
        }
Example #2
0
        YamlSequence(SequenceStart sequenceStart, SequenceEnd sequenceEnd, List <YamlElement> contents, YamlNodeTracker tracker)
        {
            Tracker = tracker;

            this._sequenceStart = sequenceStart;

            if (Tracker != null)
            {
                Tracker.OnSequenceStartChanged(this, null, sequenceStart);
            }

            this._sequenceEnd = sequenceEnd;

            if (Tracker == null)
            {
                _contents = contents;
            }
            else
            {
                _contents = new List <YamlElement>();
                foreach (var item in contents)
                {
                    Add(item);
                }
            }
        }
Example #3
0
        private object DeserializeList(EventReader reader, Type type, DeserializationContext context)
        {
            SequenceStart sequence = reader.Expect <SequenceStart>();

            type = GetType(sequence.Tag, type, context.Options.Mappings);

            // Choose a default list type in case there was no specific type specified.
            if (type == typeof(object))
            {
                type = typeof(ArrayList);
            }

            object result;

            Type iCollection = ReflectionUtility.GetImplementedGenericInterface(type, typeof(ICollection <>));

            if (iCollection != null)                // Generic list
            {
                Type[] iCollectionArguments = iCollection.GetGenericArguments();
                Debug.Assert(iCollectionArguments.Length == 1, "ICollection<> must have one generic argument.");
                var itemType = iCollectionArguments[0];

                //result = type.IsArray ? typeof(List<>).MakeGenericType(iCollectionArguments) : Activator.CreateInstance(type);
                //MethodInfo addAdapter = addAdapterGeneric.MakeGenericMethod(iCollectionArguments);
                //Action<object, object> addAdapterDelegate = (Action<object, object>)Delegate.CreateDelegate(typeof(Action<object, object>), addAdapter);
                if (type.IsArray)
                {
                    var tempListType = typeof(List <>).MakeGenericType(iCollectionArguments);
                    var tempList     = Activator.CreateInstance(tempListType);
                    DeserializeGenericListInternal(reader, tempList, itemType, context);
                    result = tempListType.GetMethod("ToArray", Type.EmptyTypes).Invoke(tempList, null);
                }
                else
                {
                    result = Activator.CreateInstance(type);
                    DeserializeGenericListInternal(reader, result, itemType, context);
                }
            }
            else               // Non-generic list
            {
                result = Activator.CreateInstance(type);
                var list = result as IList;
                if (list != null)
                {
                    while (!reader.Accept <SequenceEnd>())
                    {
                        list.Add(DeserializeValue(reader, typeof(object), context));
                    }
                }
                reader.Expect <SequenceEnd>();
            }

            AddAnchoredObject(sequence, result, context.Anchors);

            return(result);
        }
Example #4
0
        private object DeserializeList(EventReader reader, Type type, DeserializationContext context)
        {
            SequenceStart sequence = reader.Expect <SequenceStart>();

            type = GetType(sequence.Tag, type, context.Options.Mappings);

            // Choose a default list type in case there was no specific type specified.
            if (type == typeof(object))
            {
                type = typeof(ArrayList);
            }

            object result = Activator.CreateInstance(type);

            Type iCollection = GetImplementedGenericInterface(type, typeof(ICollection <>));

            if (iCollection != null)
            {
                Type[] iCollectionArguments = iCollection.GetGenericArguments();
                Debug.Assert(iCollectionArguments.Length == 1, "ICollection<> must have one generic argument.");

                MethodInfo addAdapter = addAdapterGeneric.MakeGenericMethod(iCollectionArguments);
                Action <object, object> addAdapterDelegate = (Action <object, object>)Delegate.CreateDelegate(typeof(Action <object, object>), addAdapter);
                DeserializeGenericListInternal(reader, iCollectionArguments[0], result, addAdapterDelegate, context);
            }
            else
            {
                IList list = result as IList;
                if (list != null)
                {
                    while (!reader.Accept <SequenceEnd>())
                    {
                        list.Add(DeserializeValue(reader, typeof(object), context));
                    }
                }
                reader.Expect <SequenceEnd>();
            }

            AddAnchoredObject(sequence, result, context.Anchors);

            return(result);
        }
Example #5
0
        internal YamlSequenceNode(EventReader events, DocumentLoadingState state)
        {
            this.children = new List <YamlNode>();
            SequenceStart yamlEvent = events.Expect <SequenceStart>();

            base.Load(yamlEvent, state);
            bool flag = false;

            while (!events.Accept <SequenceEnd>())
            {
                YamlNode item = ParseNode(events, state);
                this.children.Add(item);
                flag |= item is YamlAliasNode;
            }
            if (flag)
            {
                state.AddNodeWithUnresolvedAliases(this);
            }
            events.Expect <SequenceEnd>();
        }
Example #6
0
        private void Load(IParser parser, DocumentLoadingState state)
        {
            SequenceStart sequenceStart = parser.Expect <SequenceStart>();

            Load(sequenceStart, state);
            Style = sequenceStart.Style;
            bool flag = false;

            while (!parser.Accept <SequenceEnd>())
            {
                YamlNode yamlNode = YamlNode.ParseNode(parser, state);
                children.Add(yamlNode);
                flag |= (yamlNode is YamlAliasNode);
            }
            if (flag)
            {
                state.AddNodeWithUnresolvedAliases(this);
            }
            parser.Expect <SequenceEnd>();
        }
Example #7
0
        YamlSequence(SequenceStart sequenceStart, SequenceEnd sequenceEnd, List <YamlElement> contents, YamlNodeTracker tracker)
        {
            if (tracker == null)
            {
                _contents = contents;
            }
            else
            {
                _contents = new List <YamlElement>();

                Tracker = tracker;

                foreach (var item in contents)
                {
                    Add(item);
                }
            }

            SequenceStart = sequenceStart;

            this._sequenceEnd = sequenceEnd;
        }
Example #8
0
 void IParsingEventVisitor.Visit(SequenceStart e)
 {
     clonedEvent = new SequenceStart(null, e.Tag, e.IsImplicit, e.Style, e.Start, e.End);
 }
Example #9
0
 void IParsingEventVisitor.Visit(SequenceStart e)
 {
     clonedEvent = new SequenceStart(AnchorName.Empty, e.Tag, e.IsImplicit, e.Style, e.Start, e.End);
 }
Example #10
0
 public void Visit(SequenceStart e)
 {
     AddBranch(new Sequence());
 }
 public void Visit(SequenceStart e)
 {
     _emitter.Emit(e);
     AddBranch(new Sequence());
 }
Example #12
0
 /// <summary>
 /// Gets the default tag for a <see cref="SequenceStart"/> event.
 /// </summary>
 /// <param name="nodeEvent">The node event.</param>
 /// <returns>The default tag for a seq.</returns>
 protected abstract string GetDefaultTag(SequenceStart nodeEvent);
Example #13
0
 protected override string GetDefaultTag(SequenceStart nodeEvent)
 {
     return(SeqShortTag);
 }
Example #14
0
 protected virtual void OnSequenceStart(ICommand cmd)
 {
     SequenceStart?.Invoke(cmd);
 }
Example #15
0
 public YamlSequence()
 {
     _sequenceStart = new SequenceStart();
     _sequenceEnd   = new SequenceEnd();
     _contents      = new List <YamlElement>();
 }
 void IParsingEventVisitor.Visit(SequenceStart e)
 {
     clonedEvent = new SequenceStart(null, e.Tag, e.IsImplicit, e.Style, e.Start, e.End);
 }