Exemplo n.º 1
0
 public void ReportExternalXRefSpec(XRefSpec spec)
 {
     ExternalXRefSpec.AddOrUpdate(
         spec.Uid,
         spec,
         (uid, old) => old + spec);
 }
Exemplo n.º 2
0
        public XRefSpec GetXrefSpec(string uid)
        {
            if (uid == null)
            {
                throw new ArgumentNullException(nameof(uid));
            }

            if (string.IsNullOrWhiteSpace(uid))
            {
                return(null);
            }

            if (XRefSpecMap.TryGetValue(uid, out XRefSpec xref))
            {
                return(xref);
            }

            if (ExternalXRefSpec.TryGetValue(uid, out xref))
            {
                return(xref);
            }

            if (UnknownUids.ContainsKey(uid))
            {
                return(null);
            }

            if (_reader != null)
            {
                xref = _reader.Result.Find(uid);
                if (xref != null)
                {
                    return(ExternalXRefSpec.AddOrUpdate(uid, xref, (_, old) => old + xref));
                }
            }

            if (ExternalReferencePackages.Length > 0)
            {
                using (var externalReferences = new ExternalReferencePackageCollection(ExternalReferencePackages, MaxParallelism))
                {
                    xref = GetExternalReference(externalReferences, uid);
                }
                if (xref != null)
                {
                    return(ExternalXRefSpec.AddOrUpdate(uid, xref, (_, old) => old + xref));
                }
            }

            var uidList = ResolveByXRefServiceAsync(new List <string> {
                uid
            }, ExternalXRefSpec).Result;

            if (uidList.Count == 0)
            {
                return(ExternalXRefSpec[uid]);
            }

            UnknownUids.TryAdd(uid, null);
            return(null);
        }
Exemplo n.º 3
0
        public async Task ResolveExternalXRefSpecForNoneSpecsAsync()
        {
            // remove internal xref.
            var uidList =
                (from uid in XRef
                 where !ExternalXRefSpec.ContainsKey(uid) && !XRefSpecMap.ContainsKey(uid)
                 select uid)
                .Concat(
                    from spec in ExternalXRefSpec.Values
                    where spec.Href == null && !spec.IsSpec && !XRefSpecMap.ContainsKey(spec.Uid)
                    select spec.Uid)
                .ToList();

            if (uidList.Count == 0)
            {
                return;
            }
            uidList = ResolveByXRefMaps(uidList, ExternalXRefSpec);
            if (uidList.Count > 0)
            {
                uidList = ResolveByExternalReferencePackages(uidList, ExternalXRefSpec);
            }
            if (uidList.Count > 0)
            {
                uidList = await ResolveByXRefServiceAsync(uidList, ExternalXRefSpec);
            }

            Logger.LogVerbose($"{uidList.Count} uids are unresolved.");

            foreach (var uid in uidList)
            {
                UnknownUids.TryAdd(uid, null);
            }
        }
Exemplo n.º 4
0
        public void ReportExternalXRefSpec(XRefSpec spec)
        {
            if (string.IsNullOrWhiteSpace(spec.Uid))
            {
                return;
            }

            ExternalXRefSpec.AddOrUpdate(
                spec.Uid,
                spec,
                (uid, old) => old + spec);
        }
Exemplo n.º 5
0
        public XRefSpec GetXrefSpec(string uid)
        {
            if (string.IsNullOrEmpty(uid))
            {
                throw new ArgumentNullException(nameof(uid));
            }

            XRefSpec xref;

            if (XRefSpecMap.TryGetValue(uid, out xref))
            {
                return(xref);
            }

            if (ExternalXRefSpec.TryGetValue(uid, out xref))
            {
                return(xref);
            }

            if (UnknownUids.ContainsKey(uid))
            {
                return(null);
            }

            if (XRefMaps != null && XRefMaps.Count > 0)
            {
                xref = (from map in XRefMaps select new BasicXRefMapReader(map).Find(uid)).FirstOrDefault();
                if (xref != null)
                {
                    return(ExternalXRefSpec.AddOrUpdate(uid, xref, (_, old) => old + xref));
                }
            }

            if (ExternalReferencePackages.Length > 0)
            {
                using (var externalReferences = new ExternalReferencePackageCollection(ExternalReferencePackages, MaxParallelism))
                {
                    xref = GetExternalReference(externalReferences, uid);
                }
                if (xref != null)
                {
                    return(ExternalXRefSpec.AddOrUpdate(uid, xref, (_, old) => old + xref));
                }
            }

            UnknownUids.TryAdd(uid, null);
            return(null);
        }
Exemplo n.º 6
0
        public XRefSpec GetXrefSpec(string uid)
        {
            if (string.IsNullOrEmpty(uid))
            {
                throw new ArgumentNullException(nameof(uid));
            }

            if (XRefSpecMap.TryGetValue(uid, out XRefSpec xref))
            {
                return(xref);
            }

            if (ExternalXRefSpec.TryGetValue(uid, out xref))
            {
                return(xref);
            }

            if (UnknownUids.ContainsKey(uid))
            {
                return(null);
            }

            if (_reader != null)
            {
                xref = _reader.Result.Find(uid);
                if (xref != null)
                {
                    return(ExternalXRefSpec.AddOrUpdate(uid, xref, (_, old) => old + xref));
                }
            }

            if (ExternalReferencePackages.Length > 0)
            {
                using (var externalReferences = new ExternalReferencePackageCollection(ExternalReferencePackages, MaxParallelism))
                {
                    xref = GetExternalReference(externalReferences, uid);
                }
                if (xref != null)
                {
                    return(ExternalXRefSpec.AddOrUpdate(uid, xref, (_, old) => old + xref));
                }
            }

            UnknownUids.TryAdd(uid, null);
            return(null);
        }