private static HashSet <string> GenerateNativeClassList(RuntimeClassRegistry rcr, string directory, string[] rootAssemblies, StrippingInfo strippingInfo)
{
HashSet <string> hashSet = CodeStrippingUtils.CollectNativeClassListFromRoots(directory, rootAssemblies, strippingInfo);
string[] nativeClassBlackList = CodeStrippingUtils.NativeClassBlackList;
for (int i = 0; i < nativeClassBlackList.Length; i++)
{
string text = nativeClassBlackList[i];
hashSet.Add(text);
if (strippingInfo != null)
{
strippingInfo.RegisterDependency(text, "Blacklisted");
}
}
foreach (string current in CodeStrippingUtils.NativeClassDependencyBlackList.Keys)
{
if (hashSet.Contains(current))
{
string text2 = CodeStrippingUtils.NativeClassDependencyBlackList[current];
hashSet.Add(text2);
if (strippingInfo != null)
{
strippingInfo.RegisterDependency(text2, string.Format("Blacklisted due to dependent class '{0}'", current));
}
}
}
foreach (string current2 in rcr.GetAllNativeClassesIncludingManagersAsString())
{
int num = BaseObjectTools.StringToClassID(current2);
if (num != -1 && !BaseObjectTools.IsBaseObject(num))
{
hashSet.Add(current2);
if (strippingInfo != null && !BaseObjectTools.IsDerivedFromClassID(num, CodeStrippingUtils.gameManagerClassId))
{
strippingInfo.RegisterDependency(current2, "Used in Scenes");
}
}
}
HashSet <string> hashSet2 = new HashSet <string>();
foreach (string current3 in hashSet)
{
int iD = BaseObjectTools.StringToClassID(current3);
while (!BaseObjectTools.IsBaseObject(iD))
{
hashSet2.Add(BaseObjectTools.ClassIDToString(iD));
int superClassID = BaseObjectTools.GetSuperClassID(iD);
if (strippingInfo != null)
{
strippingInfo.RegisterDependency(BaseObjectTools.ClassIDToString(superClassID), BaseObjectTools.ClassIDToString(iD));
}
iD = BaseObjectTools.GetSuperClassID(iD);
}
}
return(hashSet2);
}