public override void ExitValueObject([NotNull] ValueObjectContext context)
        {
            base.ExitValueObject(context);
            var newObj = new Models.ModelCompositeObject
            {
                Value = ObjProps.Get(context.obj())
            };
            var orderby = ObjOrderByProps.Get(context.obj());

            newObj.OrderBy.AddRange(orderby);

            ValueProps.Put(context, newObj);
        }
        public override IModelObject Duplicate()
        {
            var obj = new ModelCompositeObject()
            {
                Inherits     = Inherits,
                InheritsFrom = InheritsFrom,
                IsResolved   = IsResolved,
                Modified     = Modified,
                Modifier     = Modifier,
                Name         = Name,
                ParentObject = ParentObject,
                Value        = new List <IModelObject>()
            };

            obj.Value.AddRange(Value.Select(p => p.Duplicate()));
            obj.OrderBy.AddRange(OrderBy);

            return(obj);
        }
        public override void ExitPair([NotNull] PairContext context)
        {
            var fullpath = path.GetPath();

            path.Pop();
            logger.Trace("Exit pair {0}", fullpath);

            Models.IModelObject pair = null;
            if (context.pairvalue()?.value() != null)
            {
                pair = ValueProps.Get(context.pairvalue().value());
            }
            if (pair == null)
            {
                var value = new List <Models.IModelObject>();
                pair = new Models.ModelCompositeObject
                {
                    Value = value
                };
            }
            pair.Name = context.ID().GetText();

            pair.Path = fullpath;

            PairProps.Put(context, pair);
            if (context.pairvalue()?.inherits() != null)
            {
                pair.Inherits     = true;
                pair.InheritsFrom = context.pairvalue().inherits().ID().GetText();
            }
            if (context.modifier != null)
            {
                pair.Modified = true;
                pair.Modifier = context.modifier.Text;
            }
            GraphElements.Add(pair.Path, new GraphElement(pair.Path, pair));

            logger.Trace("Pair: {0}{1} = {2}{3}", pair.Modifier, pair.Name, pair.GetText() ?? "unknown", context.pairvalue()?.inherits() != null ? " : " + pair.InheritsFrom : "");

            base.ExitPair(context);
        }