//
// Copyright (c) 2010-2018 Antmicro
//
// This file is licensed under the MIT License.
// Full license text is available in 'licenses/MIT.txt'.
//

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;

namespace Antmicro.Renode.PlatformDescription.Syntax
{
    public class ObjectValue : Value, IInitable
    {
        public ObjectValue(StringWithPosition typeName, IEnumerable<Attribute> attributes)
        {
            TypeName = typeName;
            Attributes = attributes;
        }

        public override string ToString()
        {
            return string.Format("[ObjectValue: TypeName={0}]", TypeName);
        }

        public override IEnumerable<object> Visit()
        {
            return (Attributes ?? Enumerable.Empty<Attribute>()).Cast<object>().Concat(new[] { TypeName });
        }

        public StringWithPosition TypeName { get; private set; }
        public IEnumerable<Attribute> Attributes { get; private set; }
        public ConstructorInfo Constructor { get; set; }
        public Type ObjectValueType { get; set; }
        public object Object { get; set; }
    }
}
