private static Type[] GenerateEvidenceTypes(Evidence evidence, IEnumerable <Type> evidenceTypes, bool hostEvidence) { List <Type> list = new List <Type>(); List <Type> list2 = new List <Type>(); List <Type> list3 = new List <Type>(ExpensiveEvidence.Count); foreach (Type type in evidenceTypes) { EvidenceTypeDescriptor evidenceTypeDescriptor = evidence.GetEvidenceTypeDescriptor(type); if ((hostEvidence && (evidenceTypeDescriptor.HostEvidence != null)) || (!hostEvidence && (evidenceTypeDescriptor.AssemblyEvidence != null))) { list.Add(type); } else if (ExpensiveEvidence.Contains(type)) { list3.Add(type); } else { list2.Add(type); } } Type[] array = new Type[(list.Count + list2.Count) + list3.Count]; list.CopyTo(array, 0); list2.CopyTo(array, list.Count); list3.CopyTo(array, list.Count + list2.Count); return(array); }
private EvidenceBase GetHostEvidenceNoLock(Type type) { EvidenceTypeDescriptor evidenceTypeDescriptor = this.GetEvidenceTypeDescriptor(type); if (evidenceTypeDescriptor != null) { if (evidenceTypeDescriptor.HostEvidence != null) { return(evidenceTypeDescriptor.HostEvidence); } if ((this.m_target != null) && !evidenceTypeDescriptor.Generated) { using (new EvidenceUpgradeLockHolder(this)) { evidenceTypeDescriptor.Generated = true; EvidenceBase base2 = this.GenerateHostEvidence(type, evidenceTypeDescriptor.HostCanGenerate); if (base2 != null) { evidenceTypeDescriptor.HostEvidence = base2; Evidence target = (this.m_cloneOrigin != null) ? (this.m_cloneOrigin.Target as Evidence) : null; if (target == null) { return(base2); } using (new EvidenceLockHolder(target, EvidenceLockHolder.LockType.Writer)) { EvidenceTypeDescriptor descriptor2 = target.GetEvidenceTypeDescriptor(type); if ((descriptor2 != null) && (descriptor2.HostEvidence == null)) { descriptor2.HostEvidence = base2.Clone(); } } } return(base2); } } } return(null); }