33
44using System ;
55using System . Collections . Generic ;
6+ using System . Collections . Immutable ;
67using System . IO ;
78using System . Linq ;
89using CodeGen . Exceptions ;
@@ -61,7 +62,7 @@ public static void ParseAndApplyRelations(string rootDir, Quantity[] quantities)
6162 RightUnit = r . LeftUnit ,
6263 } )
6364 . ToList ( ) ) ;
64-
65+
6566 // We can infer division relations from multiplication relations.
6667 relations . AddRange ( relations
6768 . Where ( r => r is { Operator : "*" , NoInferredDivision : false } )
@@ -91,7 +92,7 @@ public static void ParseAndApplyRelations(string rootDir, Quantity[] quantities)
9192 var list = string . Join ( "\n " , duplicates ) ;
9293 throw new UnitsNetCodeGenException ( $ "Duplicate inferred relations:\n { list } ") ;
9394 }
94-
95+
9596 var ambiguous = relations
9697 . GroupBy ( r => $ "{ r . LeftQuantity . Name } { r . Operator } { r . RightQuantity . Name } ")
9798 . Where ( g => g . Count ( ) > 1 )
@@ -133,12 +134,14 @@ private static List<QuantityRelation> ParseRelations(string rootDir, IReadOnlyDi
133134 try
134135 {
135136 var text = File . ReadAllText ( relationsFileName ) ;
136- var relationStrings = JsonConvert . DeserializeObject < SortedSet < string > > ( text ) ?? [ ] ;
137137
138- var parsedRelations = relationStrings . Select ( relationString => ParseRelation ( relationString , quantities ) ) . ToList ( ) ;
138+ // Explicitly sort to keep the file consistent.
139+ var relationStringsOrdered = ( JsonConvert . DeserializeObject < List < string > > ( text ) ?? [ ] ) . ToImmutableSortedSet ( StringComparer . OrdinalIgnoreCase ) ;
140+
141+ var parsedRelations = relationStringsOrdered . Select ( relationString => ParseRelation ( relationString , quantities ) ) . ToList ( ) ;
139142
140143 // File parsed successfully, save it back to disk in the sorted state.
141- File . WriteAllText ( relationsFileName , JsonConvert . SerializeObject ( relationStrings , Formatting . Indented ) ) ;
144+ File . WriteAllText ( relationsFileName , JsonConvert . SerializeObject ( relationStringsOrdered , Formatting . Indented ) ) ;
142145
143146 return parsedRelations ;
144147 }
@@ -210,4 +213,4 @@ Unit GetUnit(Quantity quantity, string? unitName)
210213 }
211214 }
212215 }
213- }
216+ }
0 commit comments