@@ -119,7 +119,7 @@ private void CreateSubstitutes()
119119 var cls = ( ClassModel ) prop . OwningType ;
120120 var schema = substitute . Element . GetSchema ( ) ;
121121 var source = CodeUtilities . CreateUri ( schema . SourceUri ) ;
122- var props = CreatePropertiesForElements ( source , cls , prop . XmlParticle , new [ ] { prop . Particle } , substitute , order ) ;
122+ var props = CreatePropertiesForElements ( source , cls , prop . Particle , new [ ] { prop . Particle } , substitute , order ) ;
123123
124124 cls . Properties . AddRange ( props ) ;
125125
@@ -379,8 +379,9 @@ private TypeModel CreateTypeModel(Uri source, XmlSchemaGroup group, NamespaceMod
379379 Types [ key ] = interfaceModel ;
380380 }
381381
382- var particle = group . Particle ;
383- var items = GetElements ( particle ) ;
382+ var xmlParticle = group . Particle ;
383+ var particle = new Particle ( xmlParticle , group . Parent ) ;
384+ var items = GetElements ( xmlParticle ) ;
384385 var properties = CreatePropertiesForElements ( source , interfaceModel , particle , items . Where ( i => ! ( i . XmlParticle is XmlSchemaGroupRef ) ) ) ;
385386 interfaceModel . Properties . AddRange ( properties ) ;
386387 var interfaces = items . Select ( i => i . XmlParticle ) . OfType < XmlSchemaGroupRef > ( )
@@ -462,20 +463,20 @@ private TypeModel CreateTypeModel(Uri source, XmlSchemaComplexType complexType,
462463 if ( baseModel is ClassModel baseClassModel ) { baseClassModel . DerivedTypes . Add ( classModel ) ; }
463464 }
464465
465- XmlSchemaParticle particle = null ;
466+ XmlSchemaParticle xmlParticle = null ;
466467 if ( classModel . BaseClass != null )
467468 {
468469 if ( complexType . ContentModel . Content is XmlSchemaComplexContentExtension complexContent )
469470 {
470- particle = complexContent . Particle ;
471+ xmlParticle = complexContent . Particle ;
471472 }
472473
473474 // If it's a restriction, do not duplicate elements on the derived class, they're already in the base class.
474475 // See https://msdn.microsoft.com/en-us/library/f3z3wh0y.aspx
475476 }
476- else particle = complexType . Particle ?? complexType . ContentTypeParticle ;
477+ else xmlParticle = complexType . Particle ?? complexType . ContentTypeParticle ;
477478
478- var items = GetElements ( particle , complexType ) . ToList ( ) ;
479+ var items = GetElements ( xmlParticle , complexType ) . ToList ( ) ;
479480
480481 if ( _configuration . GenerateInterfaces )
481482 {
@@ -485,6 +486,7 @@ private TypeModel CreateTypeModel(Uri source, XmlSchemaComplexType complexType,
485486 classModel . AddInterfaces ( interfaces ) ;
486487 }
487488
489+ var particle = new Particle ( xmlParticle , xmlParticle ? . Parent ) ;
488490 var properties = CreatePropertiesForElements ( source , classModel , particle , items ) ;
489491 classModel . Properties . AddRange ( properties ) ;
490492
@@ -763,10 +765,11 @@ private IEnumerable<PropertyModel> CreatePropertiesForAttributes(Uri source, Typ
763765 return properties ;
764766 }
765767
766- private IEnumerable < PropertyModel > CreatePropertiesForElements ( Uri source , TypeModel typeModel , XmlSchemaParticle particle , IEnumerable < Particle > items ,
768+ private IEnumerable < PropertyModel > CreatePropertiesForElements ( Uri source , TypeModel typeModel , Particle particle , IEnumerable < Particle > items ,
767769 Substitute substitute = null , int order = 0 )
768770 {
769771 var properties = new List < PropertyModel > ( ) ;
772+ var xmlParticle = particle . XmlParticle ;
770773
771774 foreach ( var item in items )
772775 {
@@ -784,7 +787,7 @@ private IEnumerable<PropertyModel> CreatePropertiesForElements(Uri source, TypeM
784787 if ( elementQualifiedName . IsEmpty )
785788 {
786789 // inner type, have to generate a type name
787- var typeModelName = particle is XmlSchemaGroupRef groupRef ? groupRef . RefName : typeModel . XmlSchemaName ;
790+ var typeModelName = xmlParticle is XmlSchemaGroupRef groupRef ? groupRef . RefName : typeModel . XmlSchemaName ;
788791 var typeName = _configuration . NamingProvider . PropertyNameFromElement ( typeModelName . Name , element . QualifiedName . Name ) ;
789792 elementQualifiedName = new XmlQualifiedName ( typeName , typeModel . XmlSchemaName . Namespace ) ;
790793 // try to avoid name clashes
@@ -861,7 +864,7 @@ private IEnumerable<PropertyModel> CreatePropertiesForElements(Uri source, TypeM
861864 }
862865
863866 var groupItems = GetElements ( group . Particle ) ;
864- var groupProperties = CreatePropertiesForElements ( source , typeModel , item . XmlParticle , groupItems , order : order ) . ToList ( ) ;
867+ var groupProperties = CreatePropertiesForElements ( source , typeModel , item , groupItems , order : order ) . ToList ( ) ;
865868 if ( _configuration . EmitOrder )
866869 {
867870 order += groupProperties . Count ;
0 commit comments