Example #1
0
        private Relation(PropertyInfo member)
        {
            _member = member;

            var undertype = member.PropertyType.GetInterfaces()
                            .FirstOrDefault(x => x.IsGenericType && x.GetGenericTypeDefinition() == typeof(IEnumerable <>))
                            ?.GetGenericArguments()
                            .FirstOrDefault();

            if (undertype != null)
            {
                SlotType     = undertype;
                IsCollection = true;

                _setter = CreateSetter(member, undertype);
            }
            else
            {
                SlotType     = member.PropertyType;
                IsCollection = false;

                var accessor = TypeAccessor.Get(member.DeclaringType);
                _setter = (self, value) => accessor[self, member] = value.SingleOrDefault();
            }
        }
Example #2
0
        public void GetWithNonPublic()
        {
            TypeClassifiedMembers classifiedMembers = TypeClassifiedMembers.GetForPublicValueTypeTestObject();

            ImmediateType immediateType = TypeAccessor.Get <PublicValueTypeTestClass>(true);

            CheckPublicAndNonPublicInstanceMembers(immediateType);

            immediateType = TypeAccessor.Get(typeof(PublicValueTypeTestClass), true);
            CheckPublicAndNonPublicInstanceMembers(immediateType);

            #region Local functions

            void CheckPublicAndNonPublicInstanceMembers(ImmediateType type)
            {
                Assert.IsNotNull(type);
                Assert.AreEqual(typeof(PublicValueTypeTestClass), type.Type);
                // Public & Non Public instance members
                CollectionAssert.AreEquivalent(
                    classifiedMembers.AllFields,
                    immediateType.Fields.Select(field => field.FieldInfo));
                CollectionAssert.AreEquivalent(
                    classifiedMembers.PublicInstanceProperties.Concat(classifiedMembers.NonPublicInstanceProperties).Concat(classifiedMembers.StaticProperties),
                    immediateType.Properties.Select(property => property.PropertyInfo));
            }

            #endregion
        }
Example #3
0
        public void GetWithFlags()
        {
            TypeClassifiedMembers classifiedMembers = TypeClassifiedMembers.GetForPublicValueTypeTestObject();

            const BindingFlags flags         = BindingFlags.Public | BindingFlags.Static;
            ImmediateType      immediateType = TypeAccessor.Get <PublicValueTypeTestClass>(flags);

            CheckStaticInstanceMembers(immediateType);

            immediateType = TypeAccessor.Get(typeof(PublicValueTypeTestClass), flags);
            CheckStaticInstanceMembers(immediateType);

            #region Local functions

            void CheckStaticInstanceMembers(ImmediateType type)
            {
                Assert.IsNotNull(type);
                Assert.AreEqual(typeof(PublicValueTypeTestClass), type.Type);
                // Static members
                CollectionAssert.AreEqual(
                    classifiedMembers.StaticFields.Concat(classifiedMembers.ConstFields),
                    immediateType.Fields.Select(field => field.FieldInfo));
                CollectionAssert.AreEquivalent(
                    classifiedMembers.StaticProperties,
                    immediateType.Properties.Select(property => property.PropertyInfo));
            }

            #endregion
        }
Example #4
0
 public void Get_NullType()
 {
     // ReSharper disable AssignNullToNotNullAttribute
     // ReSharper disable ReturnValueOfPureMethodIsNotUsed
     Assert.Throws <ArgumentNullException>(() => TypeAccessor.Get(null));
     Assert.Throws <ArgumentNullException>(() => TypeAccessor.Get(null, false));
     Assert.Throws <ArgumentNullException>(() => TypeAccessor.Get(null, true));
     Assert.Throws <ArgumentNullException>(() => TypeAccessor.Get(null, BindingFlags.Public | BindingFlags.Instance));
     // ReSharper disable ReturnValueOfPureMethodIsNotUsed
     // ReSharper restore AssignNullToNotNullAttribute
 }
Example #5
0
        public void GetCached()
        {
            ImmediateType immediateType1 = TypeAccessor.Get(typeof(PublicValueTypeTestClass));

            Assert.IsNotNull(immediateType1);

            ImmediateType immediateType2 = TypeAccessor.Get <PublicValueTypeTestClass>();

            Assert.IsNotNull(immediateType2);

            Assert.AreSame(immediateType1, immediateType2);
        }
Example #6
0
        public static object GetValue(MemberInfo member, object owner)
        {
            var accessor = TypeAccessor.Get(member.DeclaringType);

            switch (member)
            {
            case FieldInfo fi:
                return(accessor[owner, fi]);

            case PropertyInfo pi:
                return(accessor[owner, pi]);

            default:
                throw PtixedException.InvalidExpression(member);
            }
        }
 public void Setup()
 {
     this.settingsAccessor = TypeAccessor.Get <AnalysisSettings>(includeNonPublicMembers: true);
 }
Example #8
0
 public void Setup()
 {
     this.outputDirectory  = PathHelper.GetTempDir();
     this.settingsAccessor = TypeAccessor.Get <AnalysisSettings>(includeNonPublicMembers: true);
 }