public CompilerErrorCollection TryCompileModule(dynamic moduleObject)
        {
            RequireSystemSigned();

            CompilerErrorCollection compilerErrors = new CompilerErrorCollection();

            Contract.Module module = ModuleManager.Session.Modules.Where(P => P.ID == moduleObject.ID).FirstOrDefault();

            if (module != null && !module.Locked)
            {
                module            = Contract.Module.FromString(module.ToString()); // Create a copy of the module
                module.References = ((ThirdParty.JsonArray)moduleObject.References).Select(r => (string)r).ToList();

                ModuleReversion moduleReversion = new ModuleReversion()
                {
                    Version = module.LatestReversion.Version + 1, Updated = DateTime.UtcNow, Classes = new List <ModuleClass>()
                };
                moduleReversion.Classes = ((ThirdParty.JsonArray)moduleObject.LatestReversion.Classes).Select(p => new ModuleClass()
                {
                    Name = ((dynamic)p).Name, Data = ((dynamic)p).Data
                }).ToList();

                module.LatestReversion = moduleReversion;
                module.CompileClasses(out compilerErrors, false);
            }
            else
            {
                compilerErrors.Add(new CompilerError("", 0, 0, "", "Module is locked."));
            }

            return(compilerErrors);
        }
        public CompilerErrorCollection UpdateModule(dynamic moduleObject)
        {
            RequireSystemSigned();

            CompilerErrorCollection compilerErrors = new CompilerErrorCollection();

            Contract.Module module = ModuleManager.Session.Modules.Where(P => P.ID == moduleObject.ID).FirstOrDefault();

            if (module == null)
            {
                module = new Contract.Module()
                {
                    ID         = moduleObject.ID,
                    References = ((ThirdParty.JsonArray)moduleObject.References).Select(r => (string)r).ToList(),
                };

                ModuleReversion moduleReversion = new ModuleReversion()
                {
                    Version = 1, Updated = DateTime.UtcNow, Classes = new List <ModuleClass>()
                };
                moduleReversion.Classes = ((ThirdParty.JsonArray)moduleObject.LatestReversion.Classes).Select(p => new ModuleClass()
                {
                    Name = ((dynamic)p).Name, Data = ((dynamic)p).Data
                }).ToList();

                module.LatestReversion = moduleReversion;
                ModuleManager.Session.AppendModuleReversion(module.ID, moduleReversion);

                ModuleManager.Session.Modules.Add(module);
                module.CompileClasses(out compilerErrors);
                module.Save();
            }
            else if (!module.Locked)
            {
                module.References = ((ThirdParty.JsonArray)moduleObject.References).Select(r => (string)r).ToList();
                ModuleReversion moduleReversion = new ModuleReversion()
                {
                    Version = module.LatestReversion.Version + 1, Updated = DateTime.UtcNow, Classes = new List <ModuleClass>()
                };
                moduleReversion.Classes = ((ThirdParty.JsonArray)moduleObject.LatestReversion.Classes).Select(p => new ModuleClass()
                {
                    Name = ((dynamic)p).Name, Data = ((dynamic)p).Data
                }).ToList();

                module.LatestReversion = moduleReversion;
                ModuleManager.Session.AppendModuleReversion(module.ID, moduleReversion);

                module.CompileClasses(out compilerErrors);
                module.Save();
            }
            else
            {
                compilerErrors.Add(new CompilerError("", 0, 0, "", "Module is locked"));
            }

            return(compilerErrors);
        }
        internal bool CompileModule(string path, out CompilerErrorCollection compilerErrorCollection)
        {
            Contract.Module module         = Contract.Module.FromString(File.ReadAllText(path));
            bool            compiledModule = module.CompileClasses(out compilerErrorCollection);

            Contract.Module oldModule = this.Modules.Where(p => p.ID == module.ID).FirstOrDefault();

            int moduleIndex = Modules.IndexOf(oldModule);

            if (moduleIndex != -1)
            {
                Modules[moduleIndex] = module;
            }
            else
            {
                Modules.Add(module);
            }

            return(compiledModule);
        }