예제 #1
0
 private void ValidatePayloadMembers(ObjectMember payload)
 {
     if (!(payload.Value is ObjectExpression))
     {
         this.AddSyntaxError("Payload must be an object expression.", payload.Context);
     }
 }
        private SetterMethod Read(IDataReader reader, ObjectMember field, object value, Dictionary <string, object> values)
        {
            string name = field.Name;

            if (!reader.IsEmptyElement)
            {
                var serializerAttribute = field.Member.GetCustomAttribute <CustomFormatterAttribute>(false);
                var serializer          = serializerAttribute?.Formatter ?? FormatterFromReader(reader, out var type);
                int cycleId             = reader.ReadId();

                reader.ReadStartNode(name);
                object cycleValue = values[name] = serializer.Read(reader, value);
                if (CycleUtility.ValidCycleType(serializer.Type))
                {
                    CycleUtility.GetInstance(reader).AddReference(cycleId, cycleValue);
                }
                reader.ReadEndNode(name);
                // no setter method required
                return(null);
            }
            else
            {
                SetterMethod referenceReader = ReadReferencedObject(reader, field.Set);
                values[name] = null;
                reader.ReadEmptyNode(field.Name);
                return(referenceReader);
            }
        }
 public ObjectLoopContext(string name, object value, ObjectMember member, int index)
 {
     Name     = name;
     Value    = value;
     Metadata = member;
     Index    = index;
 }
        public static IPropertyNodeVisitor Create(ObjectMember member, ObjectCallerBase parentHandlerPtr, ObjectVisitorOptions options)
        {
            void MemberValueSyncHandler(object instance) => parentHandlerPtr[member.MemberName] = instance;

            var handler = SafeObjectHandleSwitcher.Switch(options.AlgorithmKind)(member.MemberType).AndSetInstance(parentHandlerPtr.GetObject(member.MemberName));
            var visitor = new InstanceVisitor(handler, member.MemberType, options);

            return(new PropertyNodeVisitor(member, visitor, options, MemberValueSyncHandler));
        }
예제 #5
0
        private async Task <List <ObjectMember> > GetObjectMembers(string id, string type)
        {
            ObjectRef obj  = ObjectRef.FromEncodedString(id);
            ClassInfo info = objTypes[type];

            MemberRef[]        members   = info.SimpleMember.Select(m => MemberRef.Make(obj, m.Name)).ToArray();
            List <MemberValue> memValues = await Connection.GetMemberValues(members);

            var values = new List <ObjectMember>();

            for (int i = 0; i < info.SimpleMember.Count; ++i)
            {
                SimpleMember m = info.SimpleMember[i];
                if (m.Type == DataType.LocationRef && !hasLocations)
                {
                    continue;
                }

                MemberValue v            = memValues[i];
                string      defaultValue = "";
                if (m.DefaultValue.HasValue && m.Dimension != Dimension.Array)
                {
                    defaultValue = m.DefaultValue.Value.JSON;
                }
                else if (m.Type == DataType.Struct)
                {
                    defaultValue = StdJson.ObjectToString(GetStructDefaultValue(m) !, indented: true, ignoreShouldSerializeMembers: false);
                    //Console.WriteLine("=> " + m.Name + ": " + defaultValue);
                }
                else if (m.Type == DataType.LocationRef && rootLocation.HasValue)
                {
                    defaultValue = DataValue.FromLocationRef(rootLocation.Value).JSON;
                }
                else
                {
                    defaultValue = DataValue.FromDataType(m.Type, 1).JSON;
                }
                var member = new ObjectMember()
                {
                    Key           = obj.ToEncodedString() + "__" + m.Name,
                    Name          = m.Name,
                    Type          = m.Type.ToString(),
                    IsScalar      = m.Dimension == Dimension.Scalar,
                    IsOption      = m.Dimension == Dimension.Optional,
                    IsArray       = m.Dimension == Dimension.Array,
                    Category      = m.Category,
                    Browseable    = m.Browseable,
                    Value         = new JRaw(v.Value.JSON),
                    ValueOriginal = new JRaw(v.Value.JSON),
                    EnumValues    = ResolveEnum(m),
                    StructMembers = ResolveStruct(m),
                    DefaultValue  = defaultValue
                };
                values.Add(member);
            }
            return(values);
        }
 public ObjectMemberViewModel(ObjectMember objectMember)
 {
     this.objectMember = objectMember;
     _value            = objectMember.Value;
     if (_value is ArrayMember arrayMember)
     {
         _value = new ArrayMemberViewModel(arrayMember);
     }
 }
        internal MemberValueContractImpl(ObjectMember member, Type declaringType)
        {
            _member             = member ?? throw new ArgumentNullException(nameof(member));
            _lazyCallingHandler = new Lazy <ObjectCallerBase>(() => SafeObjectHandleSwitcher.Switch(AlgorithmKind.Precision)(declaringType));

            DeclaringType = declaringType;
            MemberKind    = member.Kind;
            IsBasicType   = member.MemberType.IsBasicType();

            _reflectorProvider = member.MemberType.GetReflector();
            _attributes        = _reflectorProvider.GetCustomAttributes();
            IncludeAnnotations = HasValidationAnnotationDefined(_attributes);
        }
        public void GetField()
        {
            var objMember = new ObjectMember();
            var testObj   = new TestObj();

            Assert.Equal(2, objMember.GetValue(testObj, "IntFld"));
            Assert.Equal(2, objMember.GetValue(testObj, "IntFld"));               // lets check cached accessor

            Assert.Equal("BBB", objMember.GetValue(testObj, "StrFld"));
            Assert.Equal("BBB", objMember.GetValue(testObj, "StrFld"));               // lets check cached accessor

            Assert.Equal(DBNull.Value, objMember.GetValue(testObj, "ObjFld"));
        }
        public void GetProperty()
        {
            var objMember = new ObjectMember();
            var testObj   = new TestObj();

            Assert.Equal(1, objMember.GetValue(testObj, "IntProp"));
            Assert.Equal(1, objMember.GetValue(testObj, "IntProp"));               // lets check cached accessor

            Assert.Equal("AAA", objMember.GetValue(testObj, "StrProp"));
            Assert.Equal("AAA", objMember.GetValue(testObj, "StrProp"));               // lets check cached accessor

            Assert.Throws <InvalidOperationException>(() => { objMember.GetValue(testObj, "ZZZ"); });
        }
 public void Update(ObjectMember newObjectMember)
 {
     objectMember = newObjectMember;
     if (_value is ArrayMemberViewModel valueViewModel)
     {
         valueViewModel.Update((ArrayMember)objectMember.Value);
     }
     else
     {
         _value = objectMember.Value;
         RaisePropertyChanged("Value");
     }
 }
예제 #11
0
        public void should_create_member_value_and_use_actual_type_when_specified_type_is_object
            (Mode mode, Type specifiedType)
        {
            var backingValue = new ObjectMember {
                Value = new List <int>()
            };
            var value = CreateMemberValue(mode, backingValue);

            value.Instance.ShouldEqual(backingValue.Value);
            value.SpecifiedType.Type.ShouldEqual(specifiedType);
            value.ActualType.Type.ShouldBe <List <int> >();
            value.IsReadonly.ShouldEqual(false);
        }
        public static VerifiableMemberContract ConvertToVerifiableMemberContract(this ObjectMember member, Type declaringType)
        {
            if (member is null)
            {
                throw new ArgumentNullException(nameof(member));
            }
            if (declaringType is null)
            {
                throw new ArgumentNullException(nameof(declaringType));
            }
            var impl = new MemberValueContractImpl(member, declaringType);

            return(new VerifiableMemberContract(impl));
        }
예제 #13
0
 public void Do(string name, object value, ObjectMember member, int?index = null)
 {
     if (_withNumber && index.HasValue)
     {
         _action0?.Invoke(name, value, member, index.Value);
     }
     else if (_withMember)
     {
         _action1?.Invoke(name, value, member);
     }
     else
     {
         _action2?.Invoke(name, value);
     }
 }
예제 #14
0
        public void GetIndexer()
        {
            var objMember = new ObjectMember();
            var testObj   = new TestObj();

            Assert.Throws <InvalidOperationException>(() => { objMember.GetValue(testObj, "1"); });

            var testObjWithObjIdx = new TestObjWithObjIndexer();

            Assert.Equal("ColName", objMember.GetValue(testObjWithObjIdx, "ColName"));

            var testObjWithStrIdx = new TestObjWithStrIndexer();

            Assert.Equal(7, objMember.GetValue(testObjWithStrIdx, "ColName"));
        }
예제 #15
0
 public TVal Do(string name, object value, ObjectMember member, int?index = null)
 {
     if (_withNumber && index.HasValue)
     {
         return(_action0 is null ? default : _action0.Invoke(name, value, member, index.Value));
     }
     else if (_withMember)
     {
         return(_action1 is null ? default : _action1.Invoke(name, value, member));
     }
     else
     {
         return(_action2 is null ? default : _action2.Invoke(name, value));
     }
 }
        private void Write(IDataWriter writer, ObjectMember field, object value)
        {
            string name = field.Name;

            writer.WriteStartNode(name);
            if (value != null)
            {
                var type = value.GetType();
                var customFormatterAttribute = field.Member.GetCustomAttribute <CustomFormatterAttribute>(false);
                var formatter = customFormatterAttribute?.Formatter ?? FormatterFactory.Get(type);

                writer.WriteType(type);
                formatter.Write(writer, value);
            }
            writer.WriteEndNode(name);
        }
예제 #17
0
        //root

        public PropertyNodeVisitor(
            ObjectMember member,
            InstanceVisitor visitor,
            ObjectVisitorOptions options,
            Action <object> memberValueSyncHandler)
        {
            _options               = options ?? throw new ArgumentNullException(nameof(options));
            _member                = member ?? throw new ArgumentNullException(nameof(member));
            Deep                   = 0;
            Root                   = this;
            Parent                 = null;
            _visitor               = visitor ?? throw new ArgumentNullException(nameof(visitor));
            _signature             = visitor.Signature;
            _rootSignatureCached   = new() { _signature };
            _parentSignatureCached = default;
            _signatureCached       = new() { _signature };
            _childrenNodes         = new();
            MemberValueSyncHandler = memberValueSyncHandler ?? throw new ArgumentNullException(nameof(memberValueSyncHandler));
        }
예제 #18
0
        //child

        public PropertyNodeVisitor(
            ObjectMember member,
            PropertyNodeVisitor rootVisitor, PropertyNodeVisitor parentVisitor, InstanceVisitor visitor,
            ObjectVisitorOptions options,
            Action <object> memberValueSyncHandler,
            List <int> rootSignatureCacheRef, List <int> parentSignatureCacheRef,
            int deep)
        {
            _member                = member ?? throw new ArgumentNullException(nameof(member));
            Deep                   = deep;
            Root                   = rootVisitor ?? throw new ArgumentNullException(nameof(rootVisitor));
            Parent                 = parentVisitor ?? throw new ArgumentNullException(nameof(parentVisitor));
            _visitor               = visitor ?? throw new ArgumentNullException(nameof(visitor));
            _signature             = visitor.Signature;
            _rootSignatureCached   = rootSignatureCacheRef;
            _parentSignatureCached = parentSignatureCacheRef;
            _signatureCached       = new() { _signature };
            _childrenNodes         = new();
            MemberValueSyncHandler = memberValueSyncHandler ?? throw new ArgumentNullException(nameof(memberValueSyncHandler));

            _rootSignatureCached.Add(_signature);
            _parentSignatureCached.Add(_signature);
        }
예제 #19
0
        public void should_create_member_value_and_use_actual_type_when_specified_type_is_object
            (Mode mode, Type specifiedType)
        {
            var backingValue = new ObjectMember { Value = new List<int>() };
            var value = CreateMemberValue(mode, backingValue);

            value.Instance.ShouldEqual(backingValue.Value);
            value.SpecifiedType.Type.ShouldEqual(specifiedType);
            value.ActualType.Type.ShouldBe<List<int>>();
            value.IsReadonly.ShouldEqual(false);
        }
예제 #20
0
 protected virtual ObjectMember VisitObjectMember(ObjectMember node)
 {
     return(VisitSyntaxNode(node) as ObjectMember);
 }
예제 #21
0
 protected override ObjectMember VisitObjectMember(ObjectMember node)
 {
     visitedObjectMember = true;
     Assert.IsTrue(node.ToString().StartsWith("\"Property\" :"));
     return(base.VisitObjectMember(node));
 }