private void BuildMap()

in src/Microsoft.OpenApi.CSharpAnnotations.DocumentGeneration/AssemblyLoader/AssemblyLoader.cs [266:328]


        private void BuildMap(
            XElement currentXElement,
            Dictionary<string, InternalSchemaGenerationInfo> crefSchemaMap,
            Dictionary<string, FieldValueInfo> crefFieldMap,
            TypeFetcher typeFetcher,
            SchemaReferenceRegistry schemaReferenceRegistry)
        {
            if (currentXElement == null)
            {
                return;
            }

            var cref = currentXElement.Attribute(KnownXmlStrings.Cref)?.Value.Trim();

            if (!string.IsNullOrWhiteSpace(cref))
            {
                var allListedTypes = new List<string>() { cref };

                if (allListedTypes.Where(i => i.StartsWith("F:")).Any())
                {
                    BuildCrefFieldValueMap(allListedTypes.FirstOrDefault(), crefFieldMap, typeFetcher);
                }
                else
                {
                    BuildCrefSchemaMap(allListedTypes, crefSchemaMap, typeFetcher, schemaReferenceRegistry);
                }
            }

            if (!currentXElement.Elements().Any())
            {
                return;
            }

            var seeNodes = currentXElement.Elements().Where(i => i.Name == KnownXmlStrings.See);

            if (seeNodes.Any())
            {
                var allListedTypes = seeNodes
                    .Select(node => node.Attribute(KnownXmlStrings.Cref)?.Value)
                    .Where(crefValue => crefValue != null).ToList();

                if (allListedTypes.Where(i => i.StartsWith("F:")).Any())
                {
                    BuildCrefFieldValueMap(allListedTypes.FirstOrDefault(), crefFieldMap, typeFetcher);
                }
                else
                {
                    BuildCrefSchemaMap(allListedTypes, crefSchemaMap, typeFetcher, schemaReferenceRegistry);
                }
            }

            var remainingNodes = currentXElement.Elements().Where(i => i.Name != KnownXmlStrings.See);

            foreach (var remainingNode in remainingNodes)
            {
                BuildMap(
                    remainingNode,
                    crefSchemaMap,
                    crefFieldMap,
                    typeFetcher,
                    schemaReferenceRegistry);
            }
        }