From d53c15b12c9e7e0046bb2286a5c14c3e5db2dbc1 Mon Sep 17 00:00:00 2001 From: Ignacio Etcheverry Date: Tue, 21 Jan 2020 20:07:26 +0100 Subject: [PATCH] Make script class parser errors to not abort the build As our script class parser is error prone, we should not impede the build from continuing because of a parsing error. This should be reverted in the future once we switch to Roslyn. --- .../editor/GodotTools/GodotTools/CsProjOperations.cs | 7 ++++++- .../GodotTools/Internals/ScriptClassParser.cs | 11 ++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/modules/mono/editor/GodotTools/GodotTools/CsProjOperations.cs b/modules/mono/editor/GodotTools/GodotTools/CsProjOperations.cs index 174509dc5b7..9abfda4538a 100644 --- a/modules/mono/editor/GodotTools/GodotTools/CsProjOperations.cs +++ b/modules/mono/editor/GodotTools/GodotTools/CsProjOperations.cs @@ -81,7 +81,12 @@ namespace GodotTools } } - ScriptClassParser.ParseFileOrThrow(projectIncludeFile, out var classes); + Error parseError = ScriptClassParser.ParseFile(projectIncludeFile, out var classes, out string errorStr); + if (parseError != Error.Ok) + { + GD.PushError($"Failed to determine namespace and class for script: {projectIncludeFile}. Parse error: {errorStr ?? parseError.ToString()}"); + continue; + } string searchName = System.IO.Path.GetFileNameWithoutExtension(projectIncludeFile); diff --git a/modules/mono/editor/GodotTools/GodotTools/Internals/ScriptClassParser.cs b/modules/mono/editor/GodotTools/GodotTools/Internals/ScriptClassParser.cs index 11afa8773ed..7fb087467f4 100644 --- a/modules/mono/editor/GodotTools/GodotTools/Internals/ScriptClassParser.cs +++ b/modules/mono/editor/GodotTools/GodotTools/Internals/ScriptClassParser.cs @@ -27,12 +27,15 @@ namespace GodotTools.Internals [MethodImpl(MethodImplOptions.InternalCall)] private static extern Error internal_ParseFile(string filePath, Array classes, out string errorStr); - public static void ParseFileOrThrow(string filePath, out IEnumerable classes) + public static Error ParseFile(string filePath, out IEnumerable classes, out string errorStr) { var classesArray = new Array(); - var error = internal_ParseFile(filePath, classesArray, out string errorStr); + var error = internal_ParseFile(filePath, classesArray, out errorStr); if (error != Error.Ok) - throw new Exception($"Failed to determine namespace and class for script: {filePath}. Parse error: {errorStr ?? error.ToString()}"); + { + classes = null; + return error; + } var classesList = new List(); @@ -47,6 +50,8 @@ namespace GodotTools.Internals } classes = classesList; + + return Error.Ok; } } }