@@ -398,20 +398,21 @@ public static AssemblyDefinition AssemblyDefinitionFor(ICompiledAssembly compile
398398 return assemblyDefinition ;
399399 }
400400
401- public static ( ModuleDefinition DotnetModule , ModuleDefinition UnityModule , ModuleDefinition NetcodeModule ) FindBaseModules ( AssemblyDefinition assemblyDefinition , PostProcessorAssemblyResolver assemblyResolver )
401+ private static void SearchForBaseModulesRecursive ( AssemblyDefinition assemblyDefinition , PostProcessorAssemblyResolver assemblyResolver , ref ModuleDefinition unityModule , ref ModuleDefinition netcodeModule , HashSet < string > visited )
402402 {
403- ModuleDefinition dotnetModule = null ;
404- ModuleDefinition unityModule = null ;
405- ModuleDefinition netcodeModule = null ;
406403
407404 foreach ( var module in assemblyDefinition . Modules )
408405 {
409- if ( dotnetModule == null && module . Name == DotnetModuleName )
406+ if ( module == null )
410407 {
411- dotnetModule = module ;
412408 continue ;
413409 }
414410
411+ if ( unityModule != null && netcodeModule != null )
412+ {
413+ return ;
414+ }
415+
415416 if ( unityModule == null && module . Name == UnityModuleName )
416417 {
417418 unityModule = module ;
@@ -424,41 +425,46 @@ public static (ModuleDefinition DotnetModule, ModuleDefinition UnityModule, Modu
424425 continue ;
425426 }
426427 }
427-
428- if ( dotnetModule != null && unityModule != null && netcodeModule != null )
428+ if ( unityModule != null && netcodeModule != null )
429429 {
430- return ( dotnetModule , unityModule , netcodeModule ) ;
430+ return ;
431431 }
432432
433433 foreach ( var assemblyNameReference in assemblyDefinition . MainModule . AssemblyReferences )
434434 {
435- foreach ( var module in assemblyResolver . Resolve ( assemblyNameReference ) . Modules )
435+ if ( assemblyNameReference == null )
436436 {
437- if ( dotnetModule == null && module . Name == DotnetModuleName )
438- {
439- dotnetModule = module ;
440- continue ;
441- }
442- if ( unityModule == null && module . Name == UnityModuleName )
443- {
444- unityModule = module ;
445- continue ;
446- }
437+ continue ;
438+ }
439+ if ( visited . Contains ( assemblyNameReference . Name ) )
440+ {
441+ continue ;
442+ }
447443
448- if ( netcodeModule == null && module . Name == NetcodeModuleName )
449- {
450- netcodeModule = module ;
451- continue ;
452- }
444+ visited . Add ( assemblyNameReference . Name ) ;
445+
446+ var assembly = assemblyResolver . Resolve ( assemblyNameReference ) ;
447+ if ( assembly == null )
448+ {
449+ continue ;
453450 }
451+ SearchForBaseModulesRecursive ( assembly , assemblyResolver , ref unityModule , ref netcodeModule , visited ) ;
454452
455- if ( dotnetModule != null && unityModule != null && netcodeModule != null )
453+ if ( unityModule != null && netcodeModule != null )
456454 {
457- return ( dotnetModule , unityModule , netcodeModule ) ;
455+ return ;
458456 }
459457 }
458+ }
459+
460+ public static ( ModuleDefinition UnityModule , ModuleDefinition NetcodeModule ) FindBaseModules ( AssemblyDefinition assemblyDefinition , PostProcessorAssemblyResolver assemblyResolver )
461+ {
462+ ModuleDefinition unityModule = null ;
463+ ModuleDefinition netcodeModule = null ;
464+ var visited = new HashSet < string > ( ) ;
465+ SearchForBaseModulesRecursive ( assemblyDefinition , assemblyResolver , ref unityModule , ref netcodeModule , visited ) ;
460466
461- return ( dotnetModule , unityModule , netcodeModule ) ;
467+ return ( unityModule , netcodeModule ) ;
462468 }
463469 }
464470}
0 commit comments