@@ -241,6 +241,24 @@ public static string ResolveScriptPath(AddressableIdsEditorSettings settings)
241241 return scriptPath ;
242242 }
243243
244+ /// <summary>
245+ /// Pure string-builder: turns <paramref name="addresses"/> into the generated C# enum member-block
246+ /// source text (opening brace, one member per address, closing brace) that <see cref="GenerateScript"/>
247+ /// inserts after the <c>public enum <Name></c> header line. Takes no <c>AssetDatabase</c>
248+ /// dependency — operates on plain address strings only, so it is directly unit-testable.
249+ /// </summary>
250+ internal static string BuildEnumSource ( IReadOnlyCollection < string > addresses )
251+ {
252+ var addressList = addresses as IReadOnlyList < string > ?? new List < string > ( addresses ) ;
253+ var stringBuilder = new StringBuilder ( ) ;
254+
255+ stringBuilder . AppendLine ( "\t {" ) ;
256+ AppendAddressEnumMembers ( stringBuilder , addressList ) ;
257+ stringBuilder . AppendLine ( "\t }" ) ;
258+
259+ return stringBuilder . ToString ( ) ;
260+ }
261+
244262 private static List < AddressableAssetEntry > GetAssetList ( )
245263 {
246264 var assetList = new List < AddressableAssetEntry > ( ) ;
@@ -278,9 +296,7 @@ private static void GenerateScript(List<AddressableAssetEntry> assetList, Addres
278296 stringBuilder . AppendLine ( "{" ) ;
279297
280298 stringBuilder . AppendLine ( $ "\t public enum { settings . ScriptFilename } ") ;
281- stringBuilder . AppendLine ( "\t {" ) ;
282- GenerateAddressEnums ( stringBuilder , assetList ) ;
283- stringBuilder . AppendLine ( "\t }" ) ;
299+ stringBuilder . Append ( BuildEnumSource ( ExtractAddresses ( assetList ) ) ) ;
284300
285301 stringBuilder . AppendLine ( "" ) ;
286302 stringBuilder . AppendLine ( "\t public enum AddressableLabel" ) ;
@@ -485,27 +501,22 @@ private static void ProcessData(IList<AddressableAssetEntry> assetList, Addressa
485501 }
486502 }
487503
488- private static void GenerateAddressEnums ( StringBuilder stringBuilder , IReadOnlyList < AddressableAssetEntry > assetList )
504+ private static void AppendAddressEnumMembers ( StringBuilder stringBuilder , IReadOnlyList < string > addresses )
489505 {
490506 var addedNames = new List < string > ( ) ;
491507
492- for ( var i = 0 ; i < assetList . Count ; i ++ )
508+ for ( var i = 0 ; i < addresses . Count ; i ++ )
493509 {
494- var name = ResolveSanitizedEnumName ( assetList [ i ] . address , addedNames , out _ ) ;
510+ var name = ResolveSanitizedEnumName ( addresses [ i ] , addedNames , out _ ) ;
495511 addedNames . Add ( name ) ;
496512
497513 stringBuilder . Append ( "\t \t " ) ;
498- stringBuilder . Append ( GetCleanName ( assetList [ i ] . address , true ) ) ;
499- stringBuilder . Append ( i + 1 == assetList . Count ? "\n " : ",\n " ) ;
514+ stringBuilder . Append ( name ) ;
515+ stringBuilder . Append ( i + 1 == addresses . Count ? "\n " : ",\n " ) ;
500516 }
501517 }
502518
503- /// <summary>
504- /// Resolves the enum-member name for a given Addressable <paramref name="address"/>, applying the
505- /// same <c>name_filetype</c> fallback that <see cref="GenerateAddressEnums"/> uses when the cleaned
506- /// name collides with one already in <paramref name="seenNames"/>. Sets <paramref name="collided"/>
507- /// to <c>true</c> when the fallback path was taken.
508- /// </summary>
519+ // Disambiguates a collision by re-cleaning the address with its file extension appended (name_filetype).
509520 private static string ResolveSanitizedEnumName ( string address , List < string > seenNames , out bool collided )
510521 {
511522 var name = GetCleanName ( address , true ) ;
@@ -566,10 +577,7 @@ private static List<string> DetectNullAssetTypes(IReadOnlyList<AddressableAssetE
566577 return nulls ;
567578 }
568579
569- /// <summary>
570- /// Returns the elements of <paramref name="left"/> that are not in <paramref name="right"/>.
571- /// Both inputs MUST be pre-sorted ordinally; output is also sorted ordinally.
572- /// </summary>
580+ // Both inputs must already be sorted ordinally; nothing here enforces it.
573581 private static List < string > SortedSetDiff ( IReadOnlyList < string > left , IReadOnlyList < string > right )
574582 {
575583 var result = new List < string > ( ) ;
0 commit comments