@@ -164,7 +164,7 @@ private static void WriteClassMetadataGetOrAdd(ICodeWriter writer, INamedTypeSym
164164 }
165165
166166 writer . Append ( "Properties = " ) ;
167- WritePropertyMetadataArray ( writer , typeSymbol ) ;
167+ WritePropertyMetadataArray ( writer , typeSymbol , out var propertyCount ) ;
168168 writer . AppendLine ( "," ) ;
169169 writer . Append ( $ "Parent = { parentExpression ?? "null" } ") ;
170170
@@ -173,17 +173,20 @@ private static void WriteClassMetadataGetOrAdd(ICodeWriter writer, INamedTypeSym
173173 writer . AppendLine ( ) ;
174174 writer . AppendLine ( "};" ) ;
175175
176- // Set ClassMetadata reference on each property
177- writer . AppendLine ( "foreach (var prop in classMetadata.Properties)" ) ;
178- writer . AppendLine ( "{" ) ;
176+ if ( propertyCount > 0 )
177+ {
178+ // Set ClassMetadata reference on each property
179+ writer . AppendLine ( "foreach (var prop in classMetadata.Properties)" ) ;
180+ writer . AppendLine ( "{" ) ;
179181
180- writer . SetIndentLevel ( currentIndent + 2 ) ;
181- writer . AppendLine ( "prop.ClassMetadata = classMetadata;" ) ;
182- writer . Append ( "prop.ContainingTypeMetadata = classMetadata;" ) ;
182+ writer . SetIndentLevel ( currentIndent + 2 ) ;
183+ writer . AppendLine ( "prop.ClassMetadata = classMetadata;" ) ;
184+ writer . Append ( "prop.ContainingTypeMetadata = classMetadata;" ) ;
183185
184- writer . SetIndentLevel ( currentIndent + 1 ) ;
185- writer . AppendLine ( ) ;
186- writer . AppendLine ( "}" ) ;
186+ writer . SetIndentLevel ( currentIndent + 1 ) ;
187+ writer . AppendLine ( ) ;
188+ writer . AppendLine ( "}" ) ;
189+ }
187190 writer . Append ( "return classMetadata;" ) ;
188191
189192 // Back to original level
@@ -227,22 +230,25 @@ public static string GenerateClassMetadataGetOrAdd(INamedTypeSymbol typeSymbol,
227230 {
228231 writer . AppendLine ( "Parameters = global::System.Array.Empty<global::TUnit.Core.ParameterMetadata>()," ) ;
229232 }
230- writer . AppendLine ( $ "Properties = { GeneratePropertyMetadataArray ( typeSymbol , writer . IndentLevel ) } ,") ;
233+ writer . AppendLine ( $ "Properties = { GeneratePropertyMetadataArray ( typeSymbol , writer . IndentLevel , out var propertyCount ) } ,") ;
231234 writer . AppendLine ( $ "Parent = { parentExpression ?? "null" } ") ;
232235
233236 writer . Unindent ( ) ;
234237 writer . AppendLine ( "};" ) ;
235238 writer . AppendLine ( ) ;
236239
237- // Set ClassMetadata reference on each property
238- writer . AppendLine ( "foreach (var prop in classMetadata.Properties)" ) ;
239- writer . AppendLine ( "{" ) ;
240- writer . Indent ( ) ;
241- writer . AppendLine ( "prop.ClassMetadata = classMetadata;" ) ;
242- writer . AppendLine ( "prop.ContainingTypeMetadata = classMetadata;" ) ;
243- writer . Unindent ( ) ;
244- writer . AppendLine ( "}" ) ;
245- writer . AppendLine ( ) ;
240+ if ( propertyCount > 0 )
241+ {
242+ // Set ClassMetadata reference on each property
243+ writer . AppendLine ( "foreach (var prop in classMetadata.Properties)" ) ;
244+ writer . AppendLine ( "{" ) ;
245+ writer . Indent ( ) ;
246+ writer . AppendLine ( "prop.ClassMetadata = classMetadata;" ) ;
247+ writer . AppendLine ( "prop.ContainingTypeMetadata = classMetadata;" ) ;
248+ writer . Unindent ( ) ;
249+ writer . AppendLine ( "}" ) ;
250+ writer . AppendLine ( ) ;
251+ }
246252
247253 writer . AppendLine ( "return classMetadata;" ) ;
248254
@@ -561,14 +567,16 @@ private static string GenerateParameterMetadataArrayForConstructor(IMethodSymbol
561567 /// <summary>
562568 /// Writes an array of PropertyMetadata objects
563569 /// </summary>
564- private static void WritePropertyMetadataArray ( ICodeWriter writer , INamedTypeSymbol typeSymbol )
570+ private static void WritePropertyMetadataArray ( ICodeWriter writer , INamedTypeSymbol typeSymbol , out int propertyCount )
565571 {
566572 var properties = typeSymbol . GetMembers ( )
567573 . OfType < IPropertySymbol > ( )
568574 . Where ( p => p . DeclaredAccessibility == Accessibility . Public && p . Name != "EqualityContract" )
569575 . ToList ( ) ;
570576
571- if ( ! properties . Any ( ) )
577+ propertyCount = properties . Count ;
578+
579+ if ( properties . Count == 0 )
572580 {
573581 writer . Append ( "global::System.Array.Empty<global::TUnit.Core.PropertyMetadata>()" ) ;
574582 return ;
@@ -601,14 +609,16 @@ private static void WritePropertyMetadataArray(ICodeWriter writer, INamedTypeSym
601609 /// <summary>
602610 /// Generates an array of PropertyMetadata objects
603611 /// </summary>
604- private static string GeneratePropertyMetadataArray ( INamedTypeSymbol typeSymbol , int currentIndentLevel = 0 )
612+ private static string GeneratePropertyMetadataArray ( INamedTypeSymbol typeSymbol , int currentIndentLevel , out int propertyCount )
605613 {
606614 var properties = typeSymbol . GetMembers ( )
607615 . OfType < IPropertySymbol > ( )
608616 . Where ( p => p . DeclaredAccessibility == Accessibility . Public && p . Name != "EqualityContract" )
609617 . ToList ( ) ;
610618
611- if ( ! properties . Any ( ) )
619+ propertyCount = properties . Count ;
620+
621+ if ( properties . Count == 0 )
612622 {
613623 return "global::System.Array.Empty<global::TUnit.Core.PropertyMetadata>()" ;
614624 }
0 commit comments