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);
}
}