@@ -398,20 +398,21 @@ public static AssemblyDefinition AssemblyDefinitionFor(ICompiledAssembly compile
398
398
return assemblyDefinition ;
399
399
}
400
400
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 )
402
402
{
403
- ModuleDefinition dotnetModule = null ;
404
- ModuleDefinition unityModule = null ;
405
- ModuleDefinition netcodeModule = null ;
406
403
407
404
foreach ( var module in assemblyDefinition . Modules )
408
405
{
409
- if ( dotnetModule == null && module . Name == DotnetModuleName )
406
+ if ( module == null )
410
407
{
411
- dotnetModule = module ;
412
408
continue ;
413
409
}
414
410
411
+ if ( unityModule != null && netcodeModule != null )
412
+ {
413
+ return ;
414
+ }
415
+
415
416
if ( unityModule == null && module . Name == UnityModuleName )
416
417
{
417
418
unityModule = module ;
@@ -424,41 +425,46 @@ public static (ModuleDefinition DotnetModule, ModuleDefinition UnityModule, Modu
424
425
continue ;
425
426
}
426
427
}
427
-
428
- if ( dotnetModule != null && unityModule != null && netcodeModule != null )
428
+ if ( unityModule != null && netcodeModule != null )
429
429
{
430
- return ( dotnetModule , unityModule , netcodeModule ) ;
430
+ return ;
431
431
}
432
432
433
433
foreach ( var assemblyNameReference in assemblyDefinition . MainModule . AssemblyReferences )
434
434
{
435
- foreach ( var module in assemblyResolver . Resolve ( assemblyNameReference ) . Modules )
435
+ if ( assemblyNameReference == null )
436
436
{
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
+ }
447
443
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 ;
453
450
}
451
+ SearchForBaseModulesRecursive ( assembly , assemblyResolver , ref unityModule , ref netcodeModule , visited ) ;
454
452
455
- if ( dotnetModule != null && unityModule != null && netcodeModule != null )
453
+ if ( unityModule != null && netcodeModule != null )
456
454
{
457
- return ( dotnetModule , unityModule , netcodeModule ) ;
455
+ return ;
458
456
}
459
457
}
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 ) ;
460
466
461
- return ( dotnetModule , unityModule , netcodeModule ) ;
467
+ return ( unityModule , netcodeModule ) ;
462
468
}
463
469
}
464
470
}
0 commit comments