@@ -8,7 +8,7 @@ public static class EquatableWriter
88{
99 public static string Generate ( EquatableClass entityClass )
1010 {
11- if ( entityClass == null )
11+ if ( entityClass is null )
1212 throw new ArgumentNullException ( nameof ( entityClass ) ) ;
1313
1414 var codeBuilder = new IndentedStringBuilder ( ) ;
@@ -23,6 +23,19 @@ public static string Generate(EquatableClass entityClass)
2323 . AppendLine ( "{" )
2424 . IncrementIndent ( ) ;
2525
26+ // support nested types
27+ foreach ( var containingClass in entityClass . ContainingTypes )
28+ {
29+ codeBuilder
30+ . Append ( "partial " )
31+ . AppendIf ( "record " , containingClass . IsRecord )
32+ . AppendIf ( "class " , ! containingClass . IsValueType )
33+ . AppendIf ( "struct " , containingClass . IsValueType )
34+ . AppendLine ( containingClass . EntityName )
35+ . AppendLine ( "{" )
36+ . IncrementIndent ( ) ;
37+ }
38+
2639 codeBuilder
2740 . Append ( "partial " )
2841 . AppendIf ( "record " , entityClass . IsRecord )
@@ -34,7 +47,7 @@ public static string Generate(EquatableClass entityClass)
3447 {
3548 codeBuilder
3649 . Append ( " : global::System.IEquatable<" )
37- . Append ( entityClass . EntityName )
50+ . Append ( entityClass . FullyQualified )
3851 . AppendIf ( "?" , ! entityClass . IsValueType )
3952 . Append ( ">" ) ;
4053 }
@@ -50,7 +63,17 @@ public static string Generate(EquatableClass entityClass)
5063
5164 codeBuilder
5265 . DecrementIndent ( )
53- . AppendLine ( "}" ) // class
66+ . AppendLine ( "}" ) ; // class
67+
68+ // support nested types
69+ foreach ( var containingClass in entityClass . ContainingTypes )
70+ {
71+ codeBuilder
72+ . DecrementIndent ( )
73+ . AppendLine ( "}" ) ;
74+ }
75+
76+ codeBuilder
5477 . DecrementIndent ( )
5578 . AppendLine ( "}" ) ; // namespace
5679
@@ -69,7 +92,7 @@ private static void GenerateEquatable(IndentedStringBuilder codeBuilder, Equatab
6992 . Append ( "public " )
7093 . AppendIf ( "virtual " , entityClass . IsRecord && ! entityClass . IsSealed )
7194 . Append ( "bool Equals(" )
72- . Append ( entityClass . EntityName )
95+ . Append ( entityClass . FullyQualified )
7396 . AppendIf ( "?" , ! entityClass . IsValueType )
7497 . AppendLine ( " other)" )
7598 . AppendLine ( "{" )
@@ -83,7 +106,7 @@ private static void GenerateEquatable(IndentedStringBuilder codeBuilder, Equatab
83106 }
84107 else
85108 {
86- codeBuilder . Append ( "return other is not null" ) ;
109+ codeBuilder . Append ( "return !( other is null) " ) ;
87110 wrote = true ;
88111 }
89112
@@ -195,7 +218,7 @@ private static void GenerateEquatable(IndentedStringBuilder codeBuilder, Equatab
195218
196219 private static void GenerateEquatableFunctions ( IndentedStringBuilder codeBuilder , EquatableClass entityClass )
197220 {
198- if ( entityClass == null )
221+ if ( entityClass is null )
199222 return ;
200223
201224 if ( entityClass . Properties . Any ( p => p . ComparerType == ComparerTypes . Dictionary ) )
@@ -207,7 +230,7 @@ private static void GenerateEquatableFunctions(IndentedStringBuilder codeBuilder
207230 . AppendLine ( "if (global::System.Object.ReferenceEquals(left, right))" )
208231 . AppendLine ( " return true;" )
209232 . AppendLine ( )
210- . AppendLine ( "if (left == null || right == null)" )
233+ . AppendLine ( "if (left is null || right is null)" )
211234 . AppendLine ( " return false;" )
212235 . AppendLine ( )
213236 . AppendLine ( "if (left.Count != right.Count)" )
@@ -244,7 +267,7 @@ private static void GenerateEquatableFunctions(IndentedStringBuilder codeBuilder
244267 . AppendLine ( "if (global::System.Object.ReferenceEquals(left, right))" )
245268 . AppendLine ( " return true;" )
246269 . AppendLine ( )
247- . AppendLine ( "if (left == null || right == null)" )
270+ . AppendLine ( "if (left is null || right is null)" )
248271 . AppendLine ( " return false;" )
249272 . AppendLine ( )
250273 . AppendLine ( "if (left is global::System.Collections.Generic.ISet<T> leftSet)" )
@@ -269,7 +292,7 @@ private static void GenerateEquatableFunctions(IndentedStringBuilder codeBuilder
269292 . AppendLine ( "if (global::System.Object.ReferenceEquals(left, right))" )
270293 . AppendLine ( " return true;" )
271294 . AppendLine ( )
272- . AppendLine ( "if (left == null || right == null)" )
295+ . AppendLine ( "if (left is null || right is null)" )
273296 . AppendLine ( " return false;" )
274297 . AppendLine ( )
275298 . AppendLine ( "return global::System.Linq.Enumerable.SequenceEqual(left, right, global::System.Collections.Generic.EqualityComparer<T>.Default);" )
@@ -300,14 +323,14 @@ private static void GenerateEquals(IndentedStringBuilder codeBuilder, EquatableC
300323 {
301324 codeBuilder
302325 . Append ( "return obj is " )
303- . Append ( entityClass . EntityName )
326+ . Append ( entityClass . FullyQualified )
304327 . AppendLine ( " instance && Equals(instance);" ) ;
305328 }
306329 else
307330 {
308331 codeBuilder
309332 . Append ( "return Equals(obj as " )
310- . Append ( entityClass . EntityName )
333+ . Append ( entityClass . FullyQualified )
311334 . AppendLine ( ");" ) ;
312335 }
313336
@@ -324,16 +347,16 @@ private static void GenerateEquals(IndentedStringBuilder codeBuilder, EquatableC
324347 . Append ( ThisAssembly . InformationalVersion )
325348 . AppendLine ( "\" )]" )
326349 . Append ( "public static bool operator ==(" )
327- . Append ( entityClass . EntityName )
350+ . Append ( entityClass . FullyQualified )
328351 . AppendIf ( "?" , ! entityClass . IsValueType )
329352 . Append ( " left, " )
330- . Append ( entityClass . EntityName )
353+ . Append ( entityClass . FullyQualified )
331354 . AppendIf ( "?" , ! entityClass . IsValueType )
332355 . AppendLine ( " right)" )
333356 . AppendLine ( "{" )
334357 . IncrementIndent ( )
335358 . Append ( "return global::System.Collections.Generic.EqualityComparer<" )
336- . Append ( entityClass . EntityName )
359+ . Append ( entityClass . FullyQualified )
337360 . AppendIf ( "?" , ! entityClass . IsValueType )
338361 . AppendLine ( ">.Default.Equals(left, right);" )
339362 . DecrementIndent ( )
@@ -348,10 +371,10 @@ private static void GenerateEquals(IndentedStringBuilder codeBuilder, EquatableC
348371 . Append ( ThisAssembly . InformationalVersion )
349372 . AppendLine ( "\" )]" )
350373 . Append ( "public static bool operator !=(" )
351- . Append ( entityClass . EntityName )
374+ . Append ( entityClass . FullyQualified )
352375 . AppendIf ( "?" , ! entityClass . IsValueType )
353376 . Append ( " left, " )
354- . Append ( entityClass . EntityName )
377+ . Append ( entityClass . FullyQualified )
355378 . AppendIf ( "?" , ! entityClass . IsValueType )
356379 . AppendLine ( " right)" )
357380 . AppendLine ( "{" )
@@ -460,7 +483,7 @@ private static void GenerateHashCode(IndentedStringBuilder codeBuilder, Equatabl
460483
461484 private static void GenerateHashCodeFunctions ( IndentedStringBuilder codeBuilder , EquatableClass entityClass )
462485 {
463- if ( entityClass == null )
486+ if ( entityClass is null )
464487 return ;
465488
466489 if ( entityClass . Properties . Any ( p => p . ComparerType == ComparerTypes . Dictionary ) )
@@ -469,7 +492,7 @@ private static void GenerateHashCodeFunctions(IndentedStringBuilder codeBuilder,
469492 . AppendLine ( "static int DictionaryHashCode<TKey, TValue>(global::System.Collections.Generic.IDictionary<TKey, TValue>? items)" )
470493 . AppendLine ( "{" )
471494 . IncrementIndent ( )
472- . AppendLine ( "if (items == null)" )
495+ . AppendLine ( "if (items is null)" )
473496 . AppendLine ( " return 0;" )
474497 . AppendLine ( ) ;
475498
@@ -501,7 +524,7 @@ private static void GenerateHashCodeFunctions(IndentedStringBuilder codeBuilder,
501524 . AppendLine ( "static int HashSetHashCode<T>(global::System.Collections.Generic.IEnumerable<T>? items)" )
502525 . AppendLine ( "{" )
503526 . IncrementIndent ( )
504- . AppendLine ( "if (items == null)" )
527+ . AppendLine ( "if (items is null)" )
505528 . AppendLine ( " return 0;" )
506529 . AppendLine ( )
507530 . Append ( "int hashCode = " )
@@ -524,7 +547,7 @@ private static void GenerateHashCodeFunctions(IndentedStringBuilder codeBuilder,
524547 . AppendLine ( "static int SequenceHashCode<T>(global::System.Collections.Generic.IEnumerable<T>? items)" )
525548 . AppendLine ( "{" )
526549 . IncrementIndent ( )
527- . AppendLine ( "if (items == null)" )
550+ . AppendLine ( "if (items is null)" )
528551 . AppendLine ( " return 0;" )
529552 . AppendLine ( )
530553 . Append ( "int hashCode = " )
0 commit comments