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)); } } }
//----------------------------------------------------------------------------------------------------------------------------------------------------- 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; }
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); }
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); }
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"]); }
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); }
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; }
public T AddMember <T>(T member) where T : BaseTypeMember { TypeMembers.Add(member); return(member); }