public override IPermission Intersect(IPermission target) { if (target == null) { return(null); } XamlLoadPermission permission = CastPermission(target, "target"); if (permission.IsUnrestricted()) { return(this.Copy()); } if (this.IsUnrestricted()) { return(permission.Copy()); } List <XamlAccessLevel> allowedAccess = new List <XamlAccessLevel>(); foreach (XamlAccessLevel level in this.AllowedAccess) { if (permission.Includes(level)) { allowedAccess.Add(level); } else if (level.PrivateAccessToTypeName != null) { XamlAccessLevel requestedAccess = level.AssemblyOnly(); if (permission.Includes(requestedAccess)) { allowedAccess.Add(requestedAccess); } } } return(new XamlLoadPermission(allowedAccess)); }
public override IPermission Intersect(IPermission target) { if (target == null) { return(null); } XamlLoadPermission other = CastPermission(target, "target"); if (other.IsUnrestricted()) { return(this.Copy()); } if (this.IsUnrestricted()) { return(other.Copy()); } List <XamlAccessLevel> result = new List <XamlAccessLevel>(); // We could optimize this with a hash, but we don't expect people to be creating // large unions of access levels. foreach (XamlAccessLevel accessLevel in this.AllowedAccess) { // First try the full access level if (other.Includes(accessLevel)) { result.Add(accessLevel); } // Then try the assembly subset else if (accessLevel.PrivateAccessToTypeName != null) { XamlAccessLevel assemblyAccess = accessLevel.AssemblyOnly(); if (other.Includes(assemblyAccess)) { result.Add(assemblyAccess); } } } return(new XamlLoadPermission(result)); }