/// <summary> /// CTOR - from builder /// </summary> /// <param name="builder">Builder</param> public TypeMember(TypeMemberBuilder builder) : base(builder) { TypeKind = builder.TypeKind; TypeRef = builder.TypeRef; IsGeneric = builder.IsGeneric; TypeParameters = builder.TypeParameters; DelegateParameters = builder.DelegateParameters; DelegateReturnType = builder.DelegateReturnType; InterfacesTypeRefs = builder.InterfacesTypeRefs; AllInterfacesTypeRefs = builder.AllInterfacesTypeRefs; InterfaceImplementationsByInterfaceMember = builder.InterfaceImplementationsByInterfaceMember; InterfaceMembersByInterfaceImplementation = builder.InterfaceMembersByInterfaceImplementation; var members = new List <Member>(); foreach (var typeContentBuilder in builder.ContentMembers) { typeContentBuilder.Root = builder.Root; typeContentBuilder.Assembly = builder.Assembly; typeContentBuilder.Namespace = builder.Namespace; typeContentBuilder.Type = this; TypeContentMember m = null; switch (typeContentBuilder) { case FieldMemberBuilder fieldBuilder: m = new FieldMember(fieldBuilder); break; case PropertyMemberBuilder propertyBuilder: m = new PropertyMember(propertyBuilder); break; case MethodMemberBuilder methodBuilder: m = new MethodMember(methodBuilder); break; case EventMemberBuilder eventBuilder: m = new EventMember(eventBuilder); break; } members.Add(m); } if (AllMembers is List <Member> allMembers) { allMembers.AddRange(members); } }
private TypeMember ReadAndRegisterMember(Type clrType, int distance) { var builder = new TypeMemberBuilder(); var reader = new ClrTypeReader(clrType, builder, resolver: this, distance); _typeMemberByClrType.Add(clrType, builder.GetTemporaryProxy().GetRef()); if (distance == 0) { reader.ReadAll(); } else { reader.ReadNameOnly(); } var finalMember = new RealTypeMember(builder); builder.GetMemberSelfReference().Reassign(finalMember); return(finalMember); }
public static TypeMember BuildType(TypeMemberKind typeKind, string name, Action body) { var context = GetContextOrThrow(); var modifiers = context.PopStateOrThrow <MemberModifierState>(); var namespaceState = context.TryLookupState <NamespaceState>(); var containingTypeRef = context.TryLookupState <MemberRef <TypeMember> >(); var builder = new TypeMemberBuilder(); builder.Namespace = namespaceState?.Name; builder.Name = name; builder.TypeKind = typeKind; builder.DeclaringType = containingTypeRef; using (context.PushState(builder.UnderlyingType)) { body?.Invoke(); } var finalMember = new RealTypeMember(builder); builder.GetMemberSelfReference().Reassign(finalMember); return(finalMember); }