private bool CompileCodeSync(string[] sources) { StatusManager.Add("PluginCompiler", 2, new Status("", "Compiling...", StandardColors.Orange)); Profiler.Start("PluginCompiler_CompileCode"); CompilerParams.ReferencedAssemblies.Clear(); CompilerParams.ReferencedAssemblies.AddRange(m_DefaultReferencedAssemblies.ToArray()); var settings = SettingsManager.GetSettings <CompilerSettings>(); if (settings != null && settings.CompilerReferences != null && settings.CompilerReferences.Length > 0) { CompilerParams.ReferencedAssemblies.AddRange(settings.CompilerReferences); } var results = CodeProvider.CompileAssemblyFromSource(CompilerParams, sources); Profiler.Stop("PluginCompiler_CompileCode"); m_IsCompiling = false; // This might happen if scripts are modified before compilation is finished if (m_ShouldRecompile) { m_ShouldRecompile = false; CompileCode(m_TempSources); return(false); } if (results.Errors.HasErrors) { foreach (CompilerError error in results.Errors) { Logger.Log(LogType.Error, string.Format("({0}): {1}", error.ErrorNumber, error.ErrorText), string.Format("at {0} {1} : {2}", error.FileName, error.Line, error.Column)); } ScriptsRecompiled?.Invoke(); Logger.Log(LogType.Error, "Scripts have compilation errors."); StatusManager.Add("PluginCompiler", 8, new Status("", "Compilation Failed", StandardColors.Red)); return(false); } else { ScriptsRecompiled?.Invoke(); Logger.Log(LogType.Log, "Scripts successfully compiled."); StatusManager.Add("PluginCompiler", 10, new Status("", "Compilation Complete", default(Color))); return(true); } }
public void Refresh() { Profiler.Start("AssetManager_Refresh"); BeginAssetEditing(); var paths = Paths.GetAllFilePaths(); var assetsOnDisk = paths.Select(path => new Asset(path)); // Detect renamed assets if application was closed, and assets were renamed via file system foreach (var pair in AssetGuidManager.Paths.ToList()) { var path = pair.Value; if (!File.Exists(path)) { var guid = pair.Key; var hash = AssetGuidManager.GetHash(guid); var assetOnDiskWithSameHashButNotKnownPath = assetsOnDisk.FirstOrDefault( a => a.Hash == hash && !AssetGuidManager.ContainsValue(a.Path)); // If this asset on disk is found, update old guid to new path, since best prediction is that it was renamed if (assetOnDiskWithSameHashButNotKnownPath != null) { AssetGuidManager.AddNewGuid(guid, assetOnDiskWithSameHashButNotKnownPath.Path, hash); Logger.Log(LogType.Log, "Asset '" + assetOnDiskWithSameHashButNotKnownPath.Name + "' was recognized as renamed asset"); } } } // Detect Rename for assets in memory (while keeping existing asset references) foreach (var assetInMemory in Assets.ToList()) { if (!File.Exists(assetInMemory.Path)) { // if known path does not exist on disk anymore but some other asset with same hash exists on disk, it must have been renamed var assetWithSameHashAndNotInDbYet = assetsOnDisk.FirstOrDefault(asset => asset.Hash == assetInMemory.Hash && !GuidPathTable.ContainsValue(asset.Path)); if (assetWithSameHashAndNotInDbYet != null) { RenameAssetInternal(assetInMemory.Path, assetWithSameHashAndNotInDbYet.Path); Logger.Log(LogType.Log, "Asset '" + assetInMemory.Name + "' was renamed to '" + assetWithSameHashAndNotInDbYet.Name + "'"); } else { DeleteAssetInternal(assetInMemory); Logger.Log(LogType.Log, "Asset was deleted: '" + assetInMemory.Name + "'"); } } } // Add new assets and detect modifications foreach (var assetOnDisk in assetsOnDisk) { var isHashKnown = GuidHashTable.ContainsValue(assetOnDisk.Hash); var isPathKnown = GuidPathTable.ContainsValue(assetOnDisk.Path); // We know the path, but hash has changed, must have been modified if (!isHashKnown && isPathKnown) { UpdateAssetInternal(GetAsset(assetOnDisk.Path)); Logger.Log(LogType.Log, "Asset was modified: '" + assetOnDisk.Name + "'"); } // New file added else if (!isPathKnown) { AddAssetInternal(assetOnDisk); } } EndAssetEditing(); Profiler.Stop("AssetManager_Refresh"); StatusManager.Add("AssetManager", 10, new Status(null, "Asset Refresh Finished", StandardColors.Default)); // Logger.Log(LogType.Log, "Asset refresh finished"); RefreshFinished?.Invoke(); }
public void StatusManager_DefaultStatus_IsPriorityOf_10() { StatusManager.Add("a", 11, statusA); Assert.AreEqual(defaultStatus, StatusManager.Status, "Default status should have been returned"); }