1
0
mirror of https://github.com/Siccity/xNode.git synced 2026-02-12 18:18:45 +08:00

Fixed #175 - Adjusted skipped DLLs check

This commit is contained in:
Thor Brigsted 2019-08-05 00:26:10 +02:00
parent d45f396ebf
commit f38ff44261

View File

@ -8,6 +8,7 @@ namespace XNode {
public static class NodeDataCache { public static class NodeDataCache {
private static PortDataCache portDataCache; private static PortDataCache portDataCache;
private static bool Initialized { get { return portDataCache != null; } } private static bool Initialized { get { return portDataCache != null; } }
private static readonly HashSet<string> skippedDlls = new HashSet<string>() { "UnityEditor", "mscorlib", "System", "System.Xml", "System.Core" };
/// <summary> Update static ports to reflect class fields. </summary> /// <summary> Update static ports to reflect class fields. </summary>
public static void UpdatePorts(Node node, Dictionary<string, NodePort> ports) { public static void UpdatePorts(Node node, Dictionary<string, NodePort> ports) {
@ -62,29 +63,32 @@ namespace XNode {
} }
} }
/// <summary> Cache node types </summary>
private static void BuildCache() { private static void BuildCache() {
portDataCache = new PortDataCache(); portDataCache = new PortDataCache();
System.Type baseType = typeof(Node); System.Type baseType = typeof(Node);
List<System.Type> nodeTypes = new List<System.Type>(); List<System.Type> nodeTypes = new List<System.Type>();
System.Reflection.Assembly[] assemblies = System.AppDomain.CurrentDomain.GetAssemblies(); System.Reflection.Assembly[] assemblies = System.AppDomain.CurrentDomain.GetAssemblies();
Assembly selfAssembly = Assembly.GetAssembly(baseType);
if (selfAssembly.FullName.StartsWith("Assembly-CSharp") && !selfAssembly.FullName.Contains("-firstpass")) { // Loop through assemblies and add node types to list
// If xNode is not used as a DLL, check only CSharp (fast) foreach (Assembly assembly in assemblies) {
nodeTypes.AddRange(selfAssembly.GetTypes().Where(t => !t.IsAbstract && baseType.IsAssignableFrom(t))); // Skip certain dlls to improve performance
} else { string assemblyName = assembly.GetName().Name;
// Else, check all relevant DDLs (slower) int index = assemblyName.IndexOf('.');
// ignore all unity related assemblies if (index != -1) assemblyName = assemblyName.Substring(0, index);
// never ignore current executing assembly switch (assemblyName) {
Assembly executingAssembly = Assembly.GetExecutingAssembly(); // The following assemblies, and sub-assemblies (eg. UnityEngine.UI) are skipped
foreach (Assembly assembly in assemblies) { case "UnityEditor":
if(assembly != executingAssembly) { case "UnityEngine":
if (assembly.FullName.StartsWith("Unity")) continue; case "System":
// unity created assemblies always have version 0.0.0 case "mscorlib":
if (!assembly.FullName.Contains("Version=0.0.0")) continue; continue;
} default:
nodeTypes.AddRange(assembly.GetTypes().Where(t => !t.IsAbstract && baseType.IsAssignableFrom(t)).ToArray()); nodeTypes.AddRange(assembly.GetTypes().Where(t => !t.IsAbstract && baseType.IsAssignableFrom(t)).ToArray());
break;
} }
} }
for (int i = 0; i < nodeTypes.Count; i++) { for (int i = 0; i < nodeTypes.Count; i++) {
CachePorts(nodeTypes[i]); CachePorts(nodeTypes[i]);
} }