Skip to content

Commit

Permalink
Fix problem with included schemas
Browse files Browse the repository at this point in the history
  • Loading branch information
Michael Ganss committed Nov 22, 2019
1 parent 0a55c81 commit 6f09634
Showing 1 changed file with 11 additions and 6 deletions.
17 changes: 11 additions & 6 deletions XmlSchemaClassGenerator/ModelBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,10 +44,11 @@ public ModelBuilder(GeneratorConfiguration configuration, XmlSchemaSet set)
.DistinctBy(g => g.QualifiedName.ToString())
.ToDictionary(g => g.QualifiedName);

List<XmlSchema> dependencyOrder = new List<XmlSchema>();
var dependencyOrder = new List<XmlSchema>();
var seenSchemas = new HashSet<XmlSchema>();
foreach (var schema in set.Schemas().Cast<XmlSchema>())
{
ResolveDependencies(schema, dependencyOrder);
ResolveDependencies(schema, dependencyOrder, seenSchemas);
}

foreach (var schema in dependencyOrder)
Expand All @@ -59,20 +60,24 @@ public ModelBuilder(GeneratorConfiguration configuration, XmlSchemaSet set)
}
}

private void ResolveDependencies(XmlSchema schema, List<XmlSchema> dependencyOrder)
private void ResolveDependencies(XmlSchema schema, List<XmlSchema> dependencyOrder, HashSet<XmlSchema> seenSchemas)
{
if (dependencyOrder.Contains(schema))
if (seenSchemas.Contains(schema))
return;

var imports = schema.Includes.OfType<XmlSchemaImport>();
seenSchemas.Add(schema);

var imports = schema.Includes.OfType<XmlSchemaExternal>();

if (imports.Any())
{
foreach (var import in imports)
{
if (import.Schema != null)
ResolveDependencies(import.Schema, dependencyOrder);
ResolveDependencies(import.Schema, dependencyOrder, seenSchemas);
}
}

dependencyOrder.Add(schema);
}

Expand Down

0 comments on commit 6f09634

Please sign in to comment.