Exemplo n.º 1
0
        /// <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));
            }
              }
        }
Exemplo n.º 2
0
        /// <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));
                }
            }
        }
Exemplo n.º 3
0
 public AggregatingContractProvider(IContractExtractor contractExtractor)
     : base(contractExtractor.ContractMethods, contractExtractor.Unit)
 {
     underlyingContractExtractor = contractExtractor;
 }
Exemplo n.º 4
0
 /// <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);
 }
Exemplo n.º 5
0
 /// <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);
 }