/// <summary> /// The constructor for creating an aggregating extractor. /// </summary> /// <param name="host">This is the host that loaded the unit for which the <paramref name="primaryExtractor"/> is /// the extractor for. /// </param> /// <param name="primaryExtractor"> /// The extractor that will be used to define the types/members of things referred to in contracts. /// </param> /// <param name="oobExtractorsAndHosts"> /// These are optional. If non-null, then it must be a finite sequence of pairs: each pair is a contract extractor /// and the host that loaded the unit for which it is a extractor. /// </param> public AggregatingContractExtractor(IMetadataHost host, IContractExtractor primaryExtractor, IEnumerable<KeyValuePair<IContractProvider, IMetadataHost>>/*?*/ oobExtractorsAndHosts) { var primaryUnit = primaryExtractor.Unit; this.unit = primaryUnit; this.primaryExtractor = primaryExtractor; this.underlyingContractProvider = new ContractProvider(primaryExtractor.ContractMethods, primaryUnit); this.host = host; if (oobExtractorsAndHosts != null) { this.oobExtractors = new List<IContractProvider>(); foreach (var oobProviderAndHost in oobExtractorsAndHosts) { var oobProvider = oobProviderAndHost.Key; var oobHost = oobProviderAndHost.Value; this.oobExtractors.Add(oobProvider); IUnit oobUnit = oobProvider.Unit; this.mapperForOobToPrimary.Add(oobProvider, new MappingMutator(host, primaryUnit, oobUnit)); this.mapperForPrimaryToOob.Add(oobProvider, new MappingMutator(oobHost, oobUnit, primaryUnit)); } } }
/// <summary> /// The constructor for creating an aggregating extractor. /// </summary> /// <param name="host">This is the host that loaded the unit for which the <paramref name="primaryExtractor"/> is /// the extractor for. /// </param> /// <param name="primaryExtractor"> /// The extractor that will be used to define the types/members of things referred to in contracts. /// </param> /// <param name="oobExtractorsAndHosts"> /// These are optional. If non-null, then it must be a finite sequence of pairs: each pair is a contract extractor /// and the host that loaded the unit for which it is a extractor. /// </param> public AggregatingContractExtractor(IMetadataHost host, IContractExtractor primaryExtractor, IEnumerable <KeyValuePair <IContractProvider, IMetadataHost> > /*?*/ oobExtractorsAndHosts) { var primaryUnit = primaryExtractor.Unit; this.unit = primaryUnit; this.primaryExtractor = primaryExtractor; this.underlyingContractProvider = new ContractProvider(primaryExtractor.ContractMethods, primaryUnit); this.host = host; if (oobExtractorsAndHosts != null && IteratorHelper.EnumerableIsNotEmpty(oobExtractorsAndHosts)) { this.oobExtractors = new List <IContractProvider>(); foreach (var oobProviderAndHost in oobExtractorsAndHosts) { var oobProvider = oobProviderAndHost.Key; var oobHost = oobProviderAndHost.Value; this.oobExtractors.Add(oobProvider); IUnit oobUnit = oobProvider.Unit; this.mapperForOobToPrimary.Add(oobProvider, new MappingMutator(host, primaryUnit, oobUnit)); this.mapperForPrimaryToOob.Add(oobProvider, new MappingMutator(oobHost, oobUnit, primaryUnit)); } } }
public AggregatingContractProvider(IContractExtractor contractExtractor) : base(contractExtractor.ContractMethods, contractExtractor.Unit) { underlyingContractExtractor = contractExtractor; }
/// <summary> /// Creates a contract provider which is aware of how abstract methods have their contracts encoded. /// </summary> /// <param name="host"> /// The host that was used to load the unit for which the <paramref name="underlyingContractProvider"/> /// is a provider for. /// </param> /// <param name="underlyingContractProvider"> /// The (non-aware) provider that was used to extract the contracts from the IL. /// </param> public CodeContractsContractExtractor(IMetadataHost host, IContractExtractor underlyingContractProvider) { this.host = host; this.underlyingContractProvider = underlyingContractProvider; this.contractProviderCache = new ContractProvider(underlyingContractProvider.ContractMethods, underlyingContractProvider.Unit); }