12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #if UNITY_2019_1_OR_NEWER
- using System;
- using System.IO;
- using System.Threading.Tasks;
- using UnityEditor;
- using UnityEditor.Compilation;
- using UnityEngine;
- namespace SingularityGroup.HotReload.Editor {
- class DefaultCompileChecker : ICompileChecker {
- const string recompileFilePath = PackageConst.LibraryCachePath + "/recompile.txt";
- public bool hasCompileErrors { get; private set; }
- bool recompile;
- public DefaultCompileChecker() {
- CompilationPipeline.assemblyCompilationFinished += DetectCompileErrors;
- CompilationPipeline.compilationFinished += OnCompilationFinished;
- var currentSessionId = EditorAnalyticsSessionInfo.id;
- Task.Run(() => {
- try {
- var compileSessionId = File.ReadAllText(recompileFilePath);
- if(compileSessionId == currentSessionId.ToString()) {
- ThreadUtility.RunOnMainThread(() => {
- recompile = true;
- _onCompilationFinished?.Invoke();
- });
- }
- File.Delete(recompileFilePath);
- } catch(DirectoryNotFoundException) {
- //dir doesn't exist -> no recompile required
- } catch(FileNotFoundException) {
- //file doesn't exist -> no recompile required
- } catch(Exception ex) {
- Log.Warning("compile checker encountered issue: {0} {1}", ex.GetType().Name, ex.Message);
- }
- });
- }
-
- void DetectCompileErrors(string _, CompilerMessage[] messages) {
- for (int i = 0; i < messages.Length; i++) {
- if (messages[i].type == CompilerMessageType.Error) {
- hasCompileErrors = true;
- return;
- }
- }
- hasCompileErrors = false;
- }
- void OnCompilationFinished(object _) {
- //Don't recompile on compile errors
- if(!hasCompileErrors) {
- Directory.CreateDirectory(Path.GetDirectoryName(recompileFilePath));
- File.WriteAllText(recompileFilePath, EditorAnalyticsSessionInfo.id.ToString());
- }
- }
- Action _onCompilationFinished;
- public event Action onCompilationFinished {
- add {
- if(recompile && value != null) {
- value();
- }
- _onCompilationFinished += value;
- }
- remove {
- _onCompilationFinished -= value;
- }
- }
- }
- }
- #endif
|