internal void AddToTypesXmlCache(T member, bool preValidated) { if (member == null) { throw PSTraceSource.NewArgumentNullException("member"); } if (!preValidated && PSMemberInfoCollection <T> .IsReservedName(member.Name)) { throw new ExtendedTypeSystemException("PSObjectMembersMembersAddReservedName", null, ExtendedTypeSystem.ReservedMemberName, new object[] { member.Name }); } PSMemberInfo info = member.Copy(); if (this.mshOwner != null) { if (!preValidated) { TypeTable typeTable = this.mshOwner.GetTypeTable(); if ((typeTable != null) && (typeTable.GetMembers <T>(this.mshOwner.InternalTypeNames)[member.Name] != null)) { throw new ExtendedTypeSystemException("AlreadyPresentInTypesXml", null, ExtendedTypeSystem.MemberAlreadyPresentFromTypesXml, new object[] { member.Name }); } } info.ReplicateInstance(this.mshOwner); this.mshOwner.InstanceMembers.Add(info, preValidated); PSGetMemberBinder.SetHasInstanceMember(info.Name); PSVariableAssignmentBinder.NoteTypeHasInstanceMemberOrTypeName(PSObject.Base(this.mshOwner).GetType()); } else { this.memberSetOwner.InternalMembers.Add(info, preValidated); } }
public override T this[string name] { get { using (PSObject.memberResolution.TraceScope("Lookup")) { if (string.IsNullOrEmpty(name)) { throw PSMemberInfoIntegratingCollection <T> .tracer.NewArgumentException(nameof (name)); } PSObject particularInstance; if (this.mshOwner != null) { this.EnsureReservedMemberIsLoaded(name); PSMemberInfo instanceMember = this.mshOwner.InstanceMembers[name]; particularInstance = this.mshOwner; if (instanceMember is T obj) { PSObject.memberResolution.WriteLine("Found PSObject instance member: {0}.", (object)name); return(obj); } } else { PSMemberInfo internalMember = this.memberSetOwner.InternalMembers[name]; particularInstance = this.memberSetOwner.instance; if (internalMember is T obj) { PSObject.memberResolution.WriteLine("Found PSMemberSet member: {0}.", (object)name); internalMember.ReplicateInstance(particularInstance); return(obj); } } foreach (CollectionEntry <T> collection in this.collections) { T obj = collection.GetMember(particularInstance, name); if ((object)obj != null) { if (collection.ShouldCloneWhenReturning) { obj = (T)obj.Copy(); } if (collection.ShouldReplicateWhenReturning) { obj.ReplicateInstance(particularInstance); } return(obj); } } return(default(T)); } } }
internal static object GeneratePSExtendedMemberSet(object obj) { PSObject mshObject = PSObject.AsPSObject(obj); PSMemberInfo member = mshObject.InstanceMembers["psextended"]; if (member == null) { PSMemberSet set = new PSMemberSet("psextended", mshObject) { ShouldSerialize = false, isHidden = true, isReservedMember = true }; member = set; member.ReplicateInstance(mshObject); member.instance = mshObject; mshObject.InstanceMembers.Add(member); } return(member); }
internal void AddToTypesXmlCache(T member, bool preValidated) { if ((object)member == null) { throw PSMemberInfoIntegratingCollection <T> .tracer.NewArgumentNullException(nameof (member)); } if (!preValidated && PSMemberInfoCollection <T> .IsReservedName(member.Name)) { throw new ExtendedTypeSystemException("PSObjectMembersMembersAddReservedName", (Exception)null, "ExtendedTypeSystem", "ReservedMemberName", new object[1] { (object)member.Name }); } PSMemberInfo member1 = member.Copy(); if (this.mshOwner != null) { if (!preValidated) { TypeTable typeTable = this.mshOwner.GetTypeTable(); if (typeTable != null && (object)typeTable.GetMembers <T>(this.mshOwner.InternalTypeNames)[member.Name] != null) { throw new ExtendedTypeSystemException("AlreadyPresentInTypesXml", (Exception)null, "ExtendedTypeSystem", "MemberAlreadyPresentFromTypesXml", new object[1] { (object)member.Name }); } } member1.ReplicateInstance(this.mshOwner); this.mshOwner.InstanceMembers.Add(member1, preValidated); } else { this.memberSetOwner.InternalMembers.Add(member1, preValidated); } }