Ejemplo n.º 1
0
        internal static Assembly[] GetAssemblies(EditorCompilation editorCompilation)
        {
            ScriptAssembly[] allEditorScriptAssemblies = editorCompilation.GetAllEditorScriptAssemblies();
            Assembly[]       array = new Assembly[allEditorScriptAssemblies.Length];
            Dictionary <ScriptAssembly, Assembly> scriptAssemblyToAssembly = new Dictionary <ScriptAssembly, Assembly>();

            for (int i = 0; i < allEditorScriptAssemblies.Length; i++)
            {
                scriptAssemblyToAssembly.Add(allEditorScriptAssemblies[i], array[i]);
            }
            for (int j = 0; j < allEditorScriptAssemblies.Length; j++)
            {
                ScriptAssembly scriptAssembly = allEditorScriptAssemblies[j];
                string         assemblyNameWithoutExtension = AssetPath.GetAssemblyNameWithoutExtension(scriptAssembly.Filename);
                string         fullPath           = scriptAssembly.FullPath;
                string[]       files              = scriptAssembly.Files;
                string[]       defines            = scriptAssembly.Defines;
                string[]       references         = scriptAssembly.References;
                Assembly[]     assemblyReferences = (from a in scriptAssembly.ScriptAssemblyReferences
                                                     select scriptAssemblyToAssembly[a]).ToArray <Assembly>();
                AssemblyFlags assemblyFlags = AssemblyFlags.None;
                if ((scriptAssembly.Flags & UnityEditor.Scripting.ScriptCompilation.AssemblyFlags.EditorOnly) == UnityEditor.Scripting.ScriptCompilation.AssemblyFlags.EditorOnly)
                {
                    assemblyFlags |= AssemblyFlags.EditorAssembly;
                }
                array[j] = new Assembly(assemblyNameWithoutExtension, fullPath, files, defines, assemblyReferences, references, assemblyFlags);
            }
            return(array);
        }
Ejemplo n.º 2
0
        internal bool Build(EditorCompilation editorCompilation)
        {
            if (editorCompilation.IsCompilationTaskCompiling())
            {
                return(false);
            }

            if (status != AssemblyBuilderStatus.NotStarted)
            {
                throw new Exception(string.Format("Cannot start AssemblyBuilder with status {0}. Expected {1}", status, AssemblyBuilderStatus.NotStarted));
            }

            var scriptAssembly = editorCompilation.CreateScriptAssembly(this);

            compilationTask = new CompilationTask(new ScriptAssembly[] { scriptAssembly }, scriptAssembly.OutputDirectory,
                                                  EditorScriptCompilationOptions.BuildingEmpty, CompilationTaskOptions.StopOnFirstError, 1);

            compilationTask.OnCompilationStarted += (assembly, phase) =>
            {
                editorCompilation.InvokeAssemblyCompilationStarted(assemblyPath);
                OnCompilationStarted(assembly, phase);
            };

            compilationTask.OnCompilationFinished += (assembly, messages) =>
            {
                editorCompilation.InvokeAssemblyCompilationFinished(assemblyPath, messages);
                OnCompilationFinished(assembly, messages);
            };

            compilationTask.Poll();

            editorCompilation.AddAssemblyBuilder(this);

            return(true);
        }
Ejemplo n.º 3
0
        internal bool Build(EditorCompilation editorCompilation)
        {
            bool result;

            if (editorCompilation.IsCompilationTaskCompiling())
            {
                result = false;
            }
            else
            {
                if (this.status != AssemblyBuilderStatus.NotStarted)
                {
                    throw new Exception(string.Format("Cannot start AssemblyBuilder with status {0}. Expected {1}", this.status, AssemblyBuilderStatus.NotStarted));
                }
                ScriptAssembly scriptAssembly = editorCompilation.CreateScriptAssembly(this);
                this.compilationTask = new CompilationTask(new ScriptAssembly[]
                {
                    scriptAssembly
                }, scriptAssembly.OutputDirectory, EditorScriptCompilationOptions.BuildingEmpty, 1);
                this.compilationTask.OnCompilationStarted += delegate(ScriptAssembly assembly, int phase)
                {
                    editorCompilation.InvokeAssemblyCompilationStarted(this.assemblyPath);
                    this.OnCompilationStarted(assembly, phase);
                };
                this.compilationTask.OnCompilationFinished += delegate(ScriptAssembly assembly, List <UnityEditor.Scripting.Compilers.CompilerMessage> messages)
                {
                    editorCompilation.InvokeAssemblyCompilationFinished(this.assemblyPath, messages);
                    this.OnCompilationFinished(assembly, messages);
                };
                this.compilationTask.Poll();
                editorCompilation.AddAssemblyBuilder(this);
                result = true;
            }
            return(result);
        }
Ejemplo n.º 4
0
        internal static void SubscribeToEvents(EditorCompilation editorCompilation)
        {
            editorCompilation.assemblyCompilationStarted += (assemblyPath) =>
            {
                try
                {
                    if (assemblyCompilationStarted != null)
                    {
                        assemblyCompilationStarted(assemblyPath);
                    }
                }
                catch (Exception e)
                {
                    UnityEngine.Debug.LogException(e);
                }
            };

            editorCompilation.assemblyCompilationFinished += (assemblyPath, messages) =>
            {
                try
                {
                    if (assemblyCompilationFinished != null)
                    {
                        assemblyCompilationFinished(assemblyPath, messages);
                    }
                }
                catch (Exception e)
                {
                    UnityEngine.Debug.LogException(e);
                }
            };
        }
Ejemplo n.º 5
0
 internal static void SubscribeToEvents(EditorCompilation editorCompilation)
 {
     editorCompilation.assemblyCompilationStarted += delegate(string assemblyPath)
     {
         try
         {
             if (CompilationPipeline.assemblyCompilationStarted != null)
             {
                 CompilationPipeline.assemblyCompilationStarted(assemblyPath);
             }
         }
         catch (Exception exception)
         {
             Debug.LogException(exception);
         }
     };
     editorCompilation.assemblyCompilationFinished += delegate(string assemblyPath, CompilerMessage[] messages)
     {
         try
         {
             if (CompilationPipeline.assemblyCompilationFinished != null)
             {
                 CompilationPipeline.assemblyCompilationFinished(assemblyPath, messages);
             }
         }
         catch (Exception exception)
         {
             Debug.LogException(exception);
         }
     };
 }
Ejemplo n.º 6
0
 internal static string[] GetPrecompiledAssemblyNames(EditorCompilation editorCompilation)
 {
     return(editorCompilation.GetAllPrecompiledAssemblies()
            .Where(x => (x.Flags & sc.AssemblyFlags.UserAssembly) == sc.AssemblyFlags.UserAssembly)
            .Select(x => AssetPath.GetFileName(x.Path))
            .Distinct()
            .ToArray());
 }
        internal static string GetAssemblyDefinitionFilePathFromScriptPath(EditorCompilation editorCompilation, string sourceFilePath)
        {
            if (editorCompilation.TryFindCustomScriptAssemblyFromScriptPath(sourceFilePath, out var customScriptAssembly))
            {
                return(customScriptAssembly.FilePath);
            }

            return(null);
        }
        internal static string GetAssemblyDefinitionFilePathFromAssemblyReference(EditorCompilation editorCompilation, string reference)
        {
            if (editorCompilation.TryFindCustomScriptAssemblyFromAssemblyReference(reference, out var customScriptAssembly))
            {
                return(customScriptAssembly.FilePath);
            }

            return(null);
        }
Ejemplo n.º 9
0
 internal static string[] GetDefinesFromAssemblyName(EditorCompilation editorCompilation, string assemblyName)
 {
     try
     {
         var assembly = editorCompilation.GetCustomTargetAssemblyFromName(assemblyName);
         return(assembly?.Defines);
     }
     catch (ArgumentException)
     {
         return(null);
     }
 }
Ejemplo n.º 10
0
        internal static Assembly[] GetPlayerAssemblies(EditorCompilation editorCompilation, EditorScriptCompilationOptions options, string[] defines)
        {
            var group  = EditorUserBuildSettings.activeBuildTargetGroup;
            var target = EditorUserBuildSettings.activeBuildTarget;

            PrecompiledAssembly[] unityAssemblies       = InternalEditorUtility.GetUnityAssemblies(false, group, target);
            PrecompiledAssembly[] precompiledAssemblies = InternalEditorUtility.GetPrecompiledAssemblies(false, group, target);

            var scriptAssemblies = editorCompilation.GetAllScriptAssemblies(options, unityAssemblies, precompiledAssemblies, defines);

            return(ToAssemblies(scriptAssemblies));
        }
Ejemplo n.º 11
0
 internal static string GetAssemblyNameFromScriptPath(EditorCompilation editorCompilation, string sourceFilePath)
 {
     try
     {
         var targetAssembly = editorCompilation.GetTargetAssembly(sourceFilePath);
         return(targetAssembly.Name);
     }
     catch (Exception)
     {
         return(null);
     }
 }
 internal static string GetAssemblyRootNamespaceFromScriptPath(EditorCompilation editorCompilation, string projectRootNamespace, string sourceFilePath)
 {
     try
     {
         var csa = editorCompilation.FindCustomScriptAssemblyFromScriptPath(sourceFilePath);
         return(csa != null ? (csa.RootNamespace ?? projectRootNamespace) : projectRootNamespace);
     }
     catch (Exception)
     {
         return(null);
     }
 }
Ejemplo n.º 13
0
 internal static string GetAssemblyDefinitionFilePathFromAssemblyName(EditorCompilation editorCompilation, string assemblyName)
 {
     try
     {
         var customScriptAssembly = editorCompilation.FindCustomScriptAssemblyFromAssemblyName(assemblyName);
         return(customScriptAssembly.FilePath);
     }
     catch (Exception)
     {
         return(null);
     }
 }
Ejemplo n.º 14
0
 internal static string GetAssemblyDefinitionFilePathFromScriptPath(EditorCompilation editorCompilation, string sourceFilePath)
 {
     try
     {
         var customScriptAssembly = editorCompilation.FindCustomScriptAssemblyFromScriptPath(sourceFilePath);
         return(customScriptAssembly != null ? customScriptAssembly.FilePath : null);
     }
     catch (Exception)
     {
         return(null);
     }
 }
Ejemplo n.º 15
0
        internal static string GetAssemblyNameFromScriptPath(EditorCompilation editorCompilation, string sourceFilePath)
        {
            string result;

            try
            {
                result = editorCompilation.GetTargetAssembly(sourceFilePath).Name;
            }
            catch (Exception)
            {
                result = null;
            }
            return(result);
        }
 private void InvokeBuildFinished(BeeDriverResult result)
 {
     activeBeeBuild.editorCompilation.ProcessCompilationResult(activeBeeBuild.assemblies, result, false, this);
     try
     {
         buildFinished?.Invoke(assemblyPath, EditorCompilation.ConvertCompilerMessages(BeeScriptCompilation
                                                                                       .ParseAllResultsIntoCompilerMessages(result.BeeDriverMessages, result.NodeResults, EditorCompilationInterface.Instance)
                                                                                       .SelectMany(a => a).ToArray()));
     }
     catch (Exception e)
     {
         UnityEngine.Debug.LogException(e);
     }
 }
Ejemplo n.º 17
0
        internal static void SubscribeToEvents(EditorCompilation editorCompilation)
        {
            editorCompilation.compilationStarted += (context) =>
            {
                try
                {
                    compilationStarted?.Invoke(context);
                }
                catch (Exception e)
                {
                    UnityEngine.Debug.Log(e);
                }
            };

            editorCompilation.compilationFinished += (context) =>
            {
                try
                {
                    compilationFinished?.Invoke(context);
                }
                catch (Exception e)
                {
                    UnityEngine.Debug.Log(e);
                }
            };

            editorCompilation.assemblyCompilationFinished += (scriptAssembly, messages) =>
            {
                try
                {
#pragma warning disable 618
                    assemblyCompilationStarted?.Invoke(scriptAssembly.FullPath);
#pragma warning restore 618
                }
                catch (Exception e)
                {
                    UnityEngine.Debug.LogException(e);
                }

                try
                {
                    assemblyCompilationFinished?.Invoke(scriptAssembly.FullPath, messages);
                }
                catch (Exception e)
                {
                    UnityEngine.Debug.LogException(e);
                }
            };
        }
Ejemplo n.º 18
0
 private void OnCompilationFinished(ScriptAssembly assembly, List <UnityEditor.Scripting.Compilers.CompilerMessage> messages)
 {
     if (this.buildFinished != null)
     {
         CompilerMessage[] arg = EditorCompilation.ConvertCompilerMessages(messages);
         try
         {
             this.buildFinished(this.assemblyPath, arg);
         }
         catch (Exception exception)
         {
             Debug.LogException(exception);
         }
     }
 }
Ejemplo n.º 19
0
        internal static string GetAssemblyDefinitionFilePathFromAssemblyName(EditorCompilation editorCompilation, string assemblyName)
        {
            string result;

            try
            {
                CustomScriptAssembly customScriptAssembly = editorCompilation.FindCustomScriptAssemblyFromAssemblyName(assemblyName);
                result = customScriptAssembly.FilePath;
            }
            catch (Exception)
            {
                result = null;
            }
            return(result);
        }
Ejemplo n.º 20
0
        internal static string GetAssemblyDefinitionFilePathFromScriptPath(EditorCompilation editorCompilation, string sourceFilePath)
        {
            string result;

            try
            {
                CustomScriptAssembly customScriptAssembly = editorCompilation.FindCustomScriptAssemblyFromScriptPath(sourceFilePath);
                result = ((customScriptAssembly == null) ? null : customScriptAssembly.FilePath);
            }
            catch (Exception)
            {
                result = null;
            }
            return(result);
        }
Ejemplo n.º 21
0
        internal bool Build(EditorCompilation editorCompilation)
        {
            if (editorCompilation.IsCompilationTaskCompiling() ||
                editorCompilation.IsAnyAssemblyBuilderCompiling())
            {
                return(false);
            }

            if (status != AssemblyBuilderStatus.NotStarted)
            {
                throw new Exception(string.Format("Cannot start AssemblyBuilder with status {0}. Expected {1}", status, AssemblyBuilderStatus.NotStarted));
            }

            var assembly   = editorCompilation.CreateScriptAssembly(this);
            var assemblies = assembly.AllRecursiveScripAssemblyReferencesIncludingSelf().ToArray();

            // Start clean everytime
            const string beeAssemblyBuilderDirectory = "Library/BeeAssemblyBuilder";
            string       beeAssemblyBuilderDirectoryInProjectDirectory =
                string.IsNullOrEmpty(editorCompilation.projectDirectory)
                ? beeAssemblyBuilderDirectory
                : Path.Combine(editorCompilation.projectDirectory, beeAssemblyBuilderDirectory);

            if (Directory.Exists(beeAssemblyBuilderDirectoryInProjectDirectory))
            {
                Directory.Delete(beeAssemblyBuilderDirectoryInProjectDirectory, true);
            }

            var debug = compilerOptions.CodeOptimization == CodeOptimization.Debug;

            var buildRequest = UnityBeeDriver.BuildRequestFor(EditorCompilation.ScriptCompilationBuildProgram, editorCompilation, $"{(int)assembly.BuildTarget}{"AB"}", beeAssemblyBuilderDirectory);

            buildRequest.DataForBuildProgram.Add(() => BeeScriptCompilation.ScriptCompilationDataFor(editorCompilation, assemblies, debug, assembly.OutputDirectory, assembly.BuildTarget, true));
            buildRequest.Target = Constants.ScriptAssembliesTarget;

            activeBeeBuild = new BeeScriptCompilationState
            {
                assemblies        = new[] { assembly },
                ActiveBuild       = BeeDriver.BuildAsync(buildRequest),
                editorCompilation = editorCompilation,
            };

            editorCompilation.AddAssemblyBuilder(this);

            InvokeBuildStarted();
            return(true);
        }
Ejemplo n.º 22
0
        void OnCompilationFinished(ScriptAssembly assembly, List <UnityEditor.Scripting.Compilers.CompilerMessage> messages)
        {
            if (buildFinished == null)
            {
                return;
            }

            var convertedMessages = EditorCompilation.ConvertCompilerMessages(messages);

            try
            {
                buildFinished(assemblyPath, convertedMessages);
            }
            catch (Exception e)
            {
                UnityEngine.Debug.LogException(e);
            }
        }
Ejemplo n.º 23
0
        internal static Assembly[] GetAssemblies(EditorCompilation editorCompilation, EditorScriptCompilationOptions additionalOptions)
        {
            var scriptAssemblies = editorCompilation.GetAllEditorScriptAssemblies(additionalOptions);
            var assemblies       = new Assembly[scriptAssemblies.Length];

            var scriptAssemblyToAssembly = new Dictionary <ScriptAssembly, Assembly>();

            for (int i = 0; i < scriptAssemblies.Length; ++i)
            {
                scriptAssemblyToAssembly.Add(scriptAssemblies[i], assemblies[i]);
            }

            for (int i = 0; i < scriptAssemblies.Length; ++i)
            {
                var scriptAssembly = scriptAssemblies[i];

                var name        = AssetPath.GetAssemblyNameWithoutExtension(scriptAssembly.Filename);
                var outputPath  = scriptAssembly.FullPath;
                var sourceFiles = scriptAssembly.Files;
                var defines     = scriptAssembly.Defines;
                var compiledAssemblyReferences = scriptAssembly.References;
                var assemblyReferences         = scriptAssembly.ScriptAssemblyReferences.Select(a => scriptAssemblyToAssembly[a]).ToArray();

                var flags = AssemblyFlags.None;

                if ((scriptAssembly.Flags & sc.AssemblyFlags.EditorOnly) == sc.AssemblyFlags.EditorOnly)
                {
                    flags |= AssemblyFlags.EditorAssembly;
                }

                var compilerOptions = scriptAssembly.CompilerOptions;

                assemblies[i] = new Assembly(name,
                                             outputPath,
                                             sourceFiles,
                                             defines,
                                             assemblyReferences,
                                             compiledAssemblyReferences,
                                             flags,
                                             compilerOptions);
            }

            return(assemblies);
        }
Ejemplo n.º 24
0
        internal static Assembly[] GetAssemblies(EditorCompilation editorCompilation, AssembliesType assembliesType)
        {
            var options = EditorCompilationInterface.GetAdditionalEditorScriptCompilationOptions();

            switch (assembliesType)
            {
            case AssembliesType.Editor:
                return(GetEditorAssemblies(editorCompilation, options | EditorScriptCompilationOptions.BuildingIncludingTestAssemblies, null));

            case AssembliesType.Player:
                return(GetPlayerAssemblies(editorCompilation, options | EditorScriptCompilationOptions.BuildingIncludingTestAssemblies, null));

            case AssembliesType.PlayerWithoutTestAssemblies:
                return(GetPlayerAssemblies(editorCompilation, options, null));

            default:
                throw new ArgumentOutOfRangeException("assembliesType");
            }
        }
        internal static string[] GetDefinesFromAssemblyName(EditorCompilation editorCompilation, string assemblyName)
        {
            try
            {
                var assembly = editorCompilation.GetCustomTargetAssemblyFromName(assemblyName);

                var scriptAssemblySettings = new ScriptAssemblySettings()
                {
                    BuildTarget        = EditorUserBuildSettings.activeBuildTarget,
                    BuildTargetGroup   = EditorUserBuildSettings.activeBuildTargetGroup,
                    CompilationOptions = EditorScriptCompilationOptions.BuildingForEditor
                };

                return(editorCompilation.GetTargetAssemblyDefines(assembly, scriptAssemblySettings));
            }
            catch (ArgumentException)
            {
                return(null);
            }
        }
        internal static string[] GetPrecompiledAssemblyPaths(EditorCompilation editorCompilation, PrecompiledAssemblySources precompiledAssemblySources)
        {
            HashSet <string> assemblyNames = new HashSet <string>();

            sc.AssemblyFlags flags = sc.AssemblyFlags.None;
            if ((precompiledAssemblySources & PrecompiledAssemblySources.SystemAssembly) != 0)
            {
                var apiCompat = (EditorApplication.scriptingRuntimeVersion == ScriptingRuntimeVersion.Latest) ? ApiCompatibilityLevel.NET_4_6 : ApiCompatibilityLevel.NET_2_0;
                foreach (var a in MonoLibraryHelpers.GetSystemLibraryReferences(apiCompat, Scripting.ScriptCompilers.CSharpSupportedLanguage))
                {
                    assemblyNames.Add(a);
                }
            }

            if ((precompiledAssemblySources & PrecompiledAssemblySources.UnityEngine) != 0)
            {
                flags |= sc.AssemblyFlags.UnityModule;
            }

            if ((precompiledAssemblySources & PrecompiledAssemblySources.UnityEditor) != 0)
            {
                flags |= sc.AssemblyFlags.EditorOnly;
            }

            if ((precompiledAssemblySources & PrecompiledAssemblySources.UserAssembly) != 0)
            {
                flags |= sc.AssemblyFlags.UserAssembly;
            }

            var precompiledAssemblies = editorCompilation.GetAllPrecompiledAssemblies().Concat(EditorCompilationInterface.Instance.GetUnityAssemblies());

            foreach (var a in precompiledAssemblies.Where(x => (x.Flags & flags) != 0))
            {
                assemblyNames.Add(a.Path);
            }

            return(assemblyNames.ToArray());
        }
 private string[] GetDefaultDefines(EditorCompilation editorCompilation)
 {
     return(editorCompilation.GetAssemblyBuilderDefaultDefines(this));
 }
Ejemplo n.º 28
0
 internal static void RequestScriptCompilation(EditorCompilation editorCompilation)
 {
     editorCompilation.DirtyAllScripts();
 }
Ejemplo n.º 29
0
        private static Assembly[] GetEditorAssemblies(EditorCompilation editorCompilation, EditorScriptCompilationOptions additionalOptions, string[] defines)
        {
            var scriptAssemblies = editorCompilation.GetAllScriptAssemblies(EditorScriptCompilationOptions.BuildingForEditor | additionalOptions, defines);

            return(ToAssemblies(scriptAssemblies));
        }
Ejemplo n.º 30
0
        internal static string GetPrecompiledAssemblyPathFromAssemblyName(string assemblyName, EditorCompilation editorCompilation)
        {
            var precompiledAssembliesWithName = editorCompilation.GetAllPrecompiledAssemblies()
                                                .Where(x => AssetPath.GetFileName(x.Path) == assemblyName && (x.Flags & sc.AssemblyFlags.UserAssembly) == sc.AssemblyFlags.UserAssembly);

            if (precompiledAssembliesWithName.Any())
            {
                return(precompiledAssembliesWithName.Single().Path);
            }
            return(null);
        }