コード例 #1
0
ファイル: ParserTask.cs プロジェクト: Drz0mg/TaskEngine
        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);
        }