From 6f096343fe2a30d5c3743244a642bfd607beebf7 Mon Sep 17 00:00:00 2001 From: Michael Ganss Date: Fri, 22 Nov 2019 18:02:08 +0100 Subject: [PATCH] Fix problem with included schemas --- XmlSchemaClassGenerator/ModelBuilder.cs | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/XmlSchemaClassGenerator/ModelBuilder.cs b/XmlSchemaClassGenerator/ModelBuilder.cs index 46d0c27d..3e90a7d4 100644 --- a/XmlSchemaClassGenerator/ModelBuilder.cs +++ b/XmlSchemaClassGenerator/ModelBuilder.cs @@ -44,10 +44,11 @@ public ModelBuilder(GeneratorConfiguration configuration, XmlSchemaSet set) .DistinctBy(g => g.QualifiedName.ToString()) .ToDictionary(g => g.QualifiedName); - List dependencyOrder = new List(); + var dependencyOrder = new List(); + var seenSchemas = new HashSet(); foreach (var schema in set.Schemas().Cast()) { - ResolveDependencies(schema, dependencyOrder); + ResolveDependencies(schema, dependencyOrder, seenSchemas); } foreach (var schema in dependencyOrder) @@ -59,20 +60,24 @@ public ModelBuilder(GeneratorConfiguration configuration, XmlSchemaSet set) } } - private void ResolveDependencies(XmlSchema schema, List dependencyOrder) + private void ResolveDependencies(XmlSchema schema, List dependencyOrder, HashSet seenSchemas) { - if (dependencyOrder.Contains(schema)) + if (seenSchemas.Contains(schema)) return; - var imports = schema.Includes.OfType(); + seenSchemas.Add(schema); + + var imports = schema.Includes.OfType(); + if (imports.Any()) { foreach (var import in imports) { if (import.Schema != null) - ResolveDependencies(import.Schema, dependencyOrder); + ResolveDependencies(import.Schema, dependencyOrder, seenSchemas); } } + dependencyOrder.Add(schema); }