Exemple #1
0
            protected sealed override IEnumerator <IDiagnosticContext> GetEnumeratorCore(IDiagnosticContextFactory factory)
            {
                if (assembly == null || Ignore(assembly))
                {
                    yield break;
                }
                yield return(factory.Create(assembly));

                var assemblyTypes = new AssemblyTypes(assembly, IncludeAllTypes(assembly));

                foreach (var type in assemblyTypes)
                {
                    if (type == null || Ignore(type))
                    {
                        continue;
                    }
                    yield return(factory.Create(type));

                    var typeMembers = new TypeMembers(type, IncludeAllMembers(type));
                    foreach (var member in typeMembers)
                    {
                        if (member == null || Ignore(member))
                        {
                            continue;
                        }
                        yield return(factory.Create(member));
                    }
                }
            }
Exemple #2
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public HappilClassBody(HappilClass happilClass)
        {
            m_HappilClass   = happilClass;
            m_ReflectedType = TypeTemplate.Resolve(typeof(TBase));

            var members = TypeMembers.Of(m_ReflectedType);

            m_ImplementableMembers    = members.ImplementableMembers;
            m_ImplementableMethods    = members.ImplementableMethods.Where(m => !m.IsSpecialName).ToArray();
            m_ImplementableProperties = members.ImplementableProperties;
            m_ImplementableEvents     = members.ImplementableEvents;
        }
Exemple #3
0
    static TypeMembers getMembers(Type type)
    {
        TypeMembers tm;

        if (dict.TryGetValue(type, out tm))
        {
            return(tm);
        }
        tm            = new TypeMembers();
        tm.cons       = type.GetConstructors();
        tm.fields     = type.GetFields(GenericTypeCache.BindingFlagsField);
        tm.properties = type.GetProperties(GenericTypeCache.BindingFlagsProperty);
        tm.methods    = type.GetMethods(GenericTypeCache.BindingFlagsMethod);

        dict.Add(type, tm);
        return(tm);
    }
Exemple #4
0
        public static Iterable <MemberInfo> getCachedIndexers(Library typeSystem, TypeInfo type, int indexes)
        {
            var typeMembers = type.getUserData(typeof(TypeMembers));

            if (typeMembers == null)
            {
                typeMembers = new TypeMembers();
                type.addUserData(typeMembers);
            }
            var members = typeMembers.members[indexes];

            if (members == null)
            {
                members = getIndexers(typeSystem, type, indexes);
                typeMembers.members[indexes] = members;
            }
            return(members);
        }
Exemple #5
0
        public static Iterable <MemberInfo> getCachedMembers(Library typeSystem, TypeInfo type, String name)
        {
            var typeMembers = type.getUserData(typeof(TypeMembers));

            if (typeMembers == null)
            {
                typeMembers = new TypeMembers();
                type.addUserData(typeMembers);
            }
            var members = typeMembers.members[name];

            if (members == null)
            {
                members = getMembers(typeSystem, type, name);
                typeMembers.members[name] = members;
            }
            return(members);
        }
Exemple #6
0
    public static MethodInfo getMethod(Type type, MethodID id)
    {
        TypeMembers tmember = getMembers(type);
        var         arr     = tmember.methods;

        if (arr != null)
        {
            for (var i = -1; i < arr.Length; i++)
            {
                MethodInfo curr;
                if (i == -1)
                {
                    if (id.index >= 0 && arr.Length > id.index)
                    {
                        curr = arr[id.index];
                    }
                    else
                    {
                        continue;
                    }
                }
                else
                {
                    curr = arr[i];
                }

                if (curr.Name == id.name) // method name
                {
                    if (matchReturnType(curr.ReturnType, id.retTypeName, id.retTypeFlag) &&
                        matchParameters(curr.GetParameters(), id.paramTypeNames, id.paramFlags))
                    {
                        if (i != -1)
                        {
                            id.index = i;
                        }
                        return(curr);
                    }
                }
            }
        }
        Debug.LogError(new StringBuilder().AppendFormat("GenericTypeCache.getMethod({0}, {1}) fail", type.Name, id.name));
        return(null);
    }
Exemple #7
0
    public static PropertyInfo getProperty(Type type, PropertyID id)
    {
        TypeMembers tmember = getMembers(type);
        var         arr     = tmember.properties;

        if (arr != null)
        {
            for (var i = -1; i < arr.Length; i++)
            {
                PropertyInfo curr;
                if (i == -1)
                {
                    if (id.index >= 0 && arr.Length > id.index)
                    {
                        curr = arr[id.index];
                    }
                    else
                    {
                        continue;
                    }
                }
                else
                {
                    curr = arr[i];
                }
                if (curr.Name == id.name)
                {
                    if (matchReturnType(curr.PropertyType, id.retTypeName, curr.DeclaringType.IsGenericType) &&
                        matchParameters(curr.GetIndexParameters(), id.paramTypeNames, id.paramFlags))
                    {
                        if (i != -1)
                        {
                            id.index = i;
                        }
                        return(curr);
                    }
                }
            }
        }
        Debug.LogError(new StringBuilder().AppendFormat("GenericTypeCache.getProperty({0}, {1}) fail", type.Name, id.name));
        return(null);
    }
        public void CrossFrameworkDeserializeMembers()
        {
            if (!File.Exists(OtherTestExe))
            {
                Assert.Inconclusive($"Unable to locate {OtherTestExe} to generate the test store for {nameof(this.CrossFrameworkDeserializeMembers)}.");
            }

            this.ExecuteTest(OtherTestExe, $"!{nameof(this.CrossFrameworkSerializeMembers)}");

            TypeMembers result = null;

            using (var p = Pipeline.Create())
            {
                var store = PsiStore.Open(p, "Store2", this.testPath);
                store.OpenStream <TypeMembers>("TypeMembers").Do(x => result = x.DeepClone());
                p.Run();
            }

            Assert.AreEqual(0x7777AAA, result.IntValue);
            Assert.AreEqual(0xBB, result.ByteValue);
            Assert.AreEqual(true, result.BoolValue);
            Assert.AreEqual(0x7CDD, result.ShortValue);
            Assert.AreEqual(0x77777777EEEEEEEE, result.LongValue);
            Assert.AreEqual('G', result.CharValue);
            Assert.AreEqual("This is a test.", result.StringValue);
            Assert.AreEqual(Math.PI, result.DoubleValue);
            Assert.AreEqual(-1.234f, result.FloatValue);
            CollectionAssert.AreEqual(new[] { 0.1f, 2.3f }, result.FloatArray);
            CollectionAssert.AreEqual(new[] { "one", "two" }, result.StringList);
            CollectionAssert.AreEqual(new[] { "bbb", "ccc" }, result.StringArraySegment.ToArray());
            CollectionAssert.AreEqual(new[] { TimeSpan.Zero, TimeSpan.FromSeconds(1) }, result.Queue);
            Assert.IsTrue(result.IntComparer.Equals(1952, 1952));
            Assert.AreEqual("This is a tuple.", result.Tuple.Item2);
            Assert.AreEqual(new DateTime(2020, 1, 2), result.ValueTuple.Item1);
            CollectionAssert.AreEqual(new[] { 782, 33 }, result.ValueTuple.Item2);
            CollectionAssert.AreEqual(new[] { "three", "four" }, result.StringArray);
            Assert.IsTrue(result.EnumComparer.Equals(DayOfWeek.Friday, DayOfWeek.Friday));
            Assert.AreEqual(2, result.Dictionary.Count);
            Assert.AreEqual(1, result.Dictionary["one"]);
            Assert.AreEqual(2, result.Dictionary["two"]);
        }
Exemple #9
0
    public static FieldInfo getField(Type type, FieldID id)
    {
        TypeMembers tmember = getMembers(type);
        var         arr     = tmember.fields;

        if (arr != null)
        {
            for (var i = -1; i < arr.Length; i++)
            {
                FieldInfo curr;
                if (i == -1)
                {
                    if (id.index >= 0 && arr.Length > id.index)
                    {
                        curr = arr[id.index];
                    }
                    else
                    {
                        continue;
                    }
                }
                else
                {
                    curr = arr[i];
                }

                if (curr.Name == id.name)
                {
                    if (i != -1)
                    {
                        id.index = i;
                    }
                    return(curr);
                }
            }
        }
        Debug.LogError(new StringBuilder().AppendFormat("GenericTypeCache.getField({0}, {1}) fail", type.Name, id.name));
        return(null);
    }
Exemple #10
0
    public static ConstructorInfo getConstructor(Type type, ConstructorID id)
    {
        TypeMembers tmember = getMembers(type);
        var         arr     = tmember.cons;

        if (arr != null)
        {
            for (var i = -1; i < arr.Length; i++)
            {
                ConstructorInfo curr;
                if (i == -1)
                {
                    if (id.index >= 0 && arr.Length > id.index)
                    {
                        curr = arr[id.index];
                    }
                    else
                    {
                        continue;
                    }
                }
                else
                {
                    curr = arr[i];
                }
                if (matchParameters(curr.GetParameters(), id.paramTypeNames, id.paramFlags))
                {
                    if (i != -1)
                    {
                        id.index = i;
                    }
                    return(curr);
                }
            }
        }
        Debug.LogError(new StringBuilder().AppendFormat("GenericTypeCache.getConstructor({0}) fail", type.Name));
        return(null);
    }
    static TypeMembers getMembers(Type type)
    {
        TypeMembers tm;
        if (dict.TryGetValue(type, out tm))
        {
            return tm;
        }
        tm = new TypeMembers();
        tm.cons = type.GetConstructors();
        tm.fields = type.GetFields(GenericTypeCache.BindingFlagsField);
        tm.properties = type.GetProperties(GenericTypeCache.BindingFlagsProperty);
        tm.methods = type.GetMethods(GenericTypeCache.BindingFlagsMethod);

        dict.Add(type, tm);
        return tm;
    }
 public static Iterable<MemberInfo> getCachedIndexers(Library typeSystem, TypeInfo type, int indexes) {
     var typeMembers = type.getUserData(typeof(TypeMembers));
     if (typeMembers == null) {
         typeMembers = new TypeMembers();
         type.addUserData(typeMembers);
     }
     var members = typeMembers.members[indexes];
     if (members == null) {
         members = getIndexers(typeSystem, type, indexes);
         typeMembers.members[indexes] = members;
     }
     return members;
 }
 public static Iterable<MemberInfo> getCachedMembers(Library typeSystem, TypeInfo type, String name) {
     var typeMembers = type.getUserData(typeof(TypeMembers));
     if (typeMembers == null) {
         typeMembers = new TypeMembers();
         type.addUserData(typeMembers);
     }
     var members = typeMembers.members[name];
     if (members == null) {
         members = getMembers(typeSystem, type, name);
         typeMembers.members[name] = members;
     }
     return members;
 }
Exemple #14
0
 public T AddMember <T>(T member) where T : BaseTypeMember
 {
     TypeMembers.Add(member);
     return(member);
 }