public static void GenerateDependencies(string strippedAssemblyDir, string icallsListFile, RuntimeClassRegistry rcr, bool doStripping, out HashSet <UnityType> nativeClasses, out HashSet <string> nativeModules, IIl2CppPlatformProvider platformProvider) { StrippingInfo strippingInfo = (platformProvider != null) ? StrippingInfo.GetBuildReportData(platformProvider.buildReport) : null; string[] userAssemblies = CodeStrippingUtils.GetUserAssemblies(strippedAssemblyDir); nativeClasses = ((!doStripping) ? null : CodeStrippingUtils.GenerateNativeClassList(rcr, strippedAssemblyDir, userAssemblies, strippingInfo)); if (nativeClasses != null) { CodeStrippingUtils.ExcludeModuleManagers(ref nativeClasses); } nativeModules = CodeStrippingUtils.GetNativeModulesToRegister(nativeClasses, strippingInfo); if (nativeClasses != null && icallsListFile != null) { HashSet <string> modulesFromICalls = CodeStrippingUtils.GetModulesFromICalls(icallsListFile); foreach (string current in modulesFromICalls) { if (!nativeModules.Contains(current)) { if (strippingInfo != null) { strippingInfo.RegisterDependency(StrippingInfo.ModuleName(current), "Required by Scripts"); } } UnityType[] moduleTypes = ModuleMetadata.GetModuleTypes(current); UnityType[] array = moduleTypes; for (int i = 0; i < array.Length; i++) { UnityType unityType = array[i]; if (unityType.IsDerivedFrom(CodeStrippingUtils.GameManagerTypeInfo)) { nativeClasses.Add(unityType); } } } nativeModules.UnionWith(modulesFromICalls); } CodeStrippingUtils.ApplyManualStrippingOverrides(nativeClasses, nativeModules, strippingInfo); bool flag = true; if (platformProvider != null) { while (flag) { flag = false; foreach (string current2 in nativeModules.ToList <string>()) { string[] moduleDependencies = ModuleMetadata.GetModuleDependencies(current2); if (moduleDependencies != null) { string[] array2 = moduleDependencies; for (int j = 0; j < array2.Length; j++) { string text = array2[j]; if (!nativeModules.Contains(text)) { nativeModules.Add(text); flag = true; } if (strippingInfo != null) { string str = StrippingInfo.ModuleName(current2); strippingInfo.RegisterDependency(StrippingInfo.ModuleName(text), "Required by " + str); strippingInfo.SetIcon("Required by " + str, string.Format("package/com.unity.modules.{0}", current2.ToLower())); } } } } } } AssemblyReferenceChecker assemblyReferenceChecker = new AssemblyReferenceChecker(); assemblyReferenceChecker.CollectReferencesFromRoots(strippedAssemblyDir, userAssemblies, true, 0f, true); if (strippingInfo != null) { foreach (string current3 in nativeModules) { strippingInfo.AddModule(current3, true); } strippingInfo.AddModule("Core", true); } if (nativeClasses != null && strippingInfo != null) { CodeStrippingUtils.InjectCustomDependencies(platformProvider.target, strippingInfo, nativeClasses, nativeModules); } }