public static ParserTask GetTask(NodeTask node) { // string s = ""; // foreach (string key in registeredTasks.Keys) // s += key + ","; // PPather.WriteLine("Types: " + s); if (!registeredTasks.ContainsKey(node.Type)) { Logger.Log("No registered task for " + node.Type); return(null); } Logger.Log("Attempting to instantiate " + registeredTasks[node.Type]); // (In some big task files, the above line can crash Glider) ConstructorInfo ci = null; Object o = null; try { ci = registeredTasks[node.Type].GetConstructor(new[] { node.GetType() }); o = ci.Invoke(new object[] { node }); } catch (Exception e) { // an exception here is fatal, popup a dialog // to give some feedback and rethrow the error string s = "Error instantiating \"" + node.Type + "\" task\n\n" + e.GetType().FullName + "\n" + e; if (e.InnerException != null) { s += "\n\nInner exception:" + e.InnerException.GetType().FullName + "\n" + e.InnerException.Message; } Logger.Log(s); } if (null == o) { Logger.Log("Created null"); } return((ParserTask)o); }