From 8642e970c59c15bde82d280fd8790c208ec66e3d Mon Sep 17 00:00:00 2001 From: Thaddeus Crews Date: Wed, 18 Dec 2024 10:23:41 -0600 Subject: [PATCH] C#: Add option to treat warnings as errors --- .github/workflows/linux_builds.yml | 2 +- modules/mono/build_scripts/build_assemblies.py | 12 +++++++++--- .../Core/Bridge/ScriptManagerBridge.types.cs | 4 +++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/.github/workflows/linux_builds.yml b/.github/workflows/linux_builds.yml index 6b786a7b584..e5c28cab34b 100644 --- a/.github/workflows/linux_builds.yml +++ b/.github/workflows/linux_builds.yml @@ -176,7 +176,7 @@ jobs: if: matrix.build-mono run: | dotnet --info - ./modules/mono/build_scripts/build_assemblies.py --godot-output-dir=./bin --godot-platform=linuxbsd + ./modules/mono/build_scripts/build_assemblies.py --godot-output-dir=./bin --godot-platform=linuxbsd --werror - name: Prepare artifact if: matrix.artifact diff --git a/modules/mono/build_scripts/build_assemblies.py b/modules/mono/build_scripts/build_assemblies.py index bdb0ce89213..862a479741e 100755 --- a/modules/mono/build_scripts/build_assemblies.py +++ b/modules/mono/build_scripts/build_assemblies.py @@ -194,7 +194,7 @@ def run_msbuild(tools: ToolsLocation, sln: str, chdir_to: str, msbuild_args: Opt return subprocess.call(args, env=msbuild_env, cwd=chdir_to) -def build_godot_api(msbuild_tool, module_dir, output_dir, push_nupkgs_local, precision, no_deprecated): +def build_godot_api(msbuild_tool, module_dir, output_dir, push_nupkgs_local, precision, no_deprecated, werror): target_filenames = [ "GodotSharp.dll", "GodotSharp.pdb", @@ -219,6 +219,8 @@ def build_godot_api(msbuild_tool, module_dir, output_dir, push_nupkgs_local, pre args += ["/p:GodotFloat64=true"] if no_deprecated: args += ["/p:GodotNoDeprecated=true"] + if werror: + args += ["/p:TreatWarningsAsErrors=true"] sln = os.path.join(module_dir, "glue/GodotSharp/GodotSharp.sln") exit_code = run_msbuild(msbuild_tool, sln=sln, chdir_to=module_dir, msbuild_args=args) @@ -339,13 +341,15 @@ def generate_sdk_package_versions(): def build_all( - msbuild_tool, module_dir, output_dir, godot_platform, dev_debug, push_nupkgs_local, precision, no_deprecated + msbuild_tool, module_dir, output_dir, godot_platform, dev_debug, push_nupkgs_local, precision, no_deprecated, werror ): # Generate SdkPackageVersions.props and VersionDocsUrl constant generate_sdk_package_versions() # Godot API - exit_code = build_godot_api(msbuild_tool, module_dir, output_dir, push_nupkgs_local, precision, no_deprecated) + exit_code = build_godot_api( + msbuild_tool, module_dir, output_dir, push_nupkgs_local, precision, no_deprecated, werror + ) if exit_code != 0: return exit_code @@ -402,6 +406,7 @@ def main(): default=False, help="Build GodotSharp without using deprecated features. This is required, if the engine was built with 'deprecated=no'.", ) + parser.add_argument("--werror", action="store_true", default=False, help="Treat compiler warnings as errors.") args = parser.parse_args() @@ -427,6 +432,7 @@ def main(): push_nupkgs_local, args.precision, args.no_deprecated, + args.werror, ) sys.exit(exit_code) diff --git a/modules/mono/glue/GodotSharp/GodotSharp/Core/Bridge/ScriptManagerBridge.types.cs b/modules/mono/glue/GodotSharp/GodotSharp/Core/Bridge/ScriptManagerBridge.types.cs index aca9595ecba..4aa887a4f2d 100644 --- a/modules/mono/glue/GodotSharp/GodotSharp/Core/Bridge/ScriptManagerBridge.types.cs +++ b/modules/mono/glue/GodotSharp/GodotSharp/Core/Bridge/ScriptManagerBridge.types.cs @@ -12,6 +12,8 @@ namespace Godot.Bridge; public static partial class ScriptManagerBridge { + [SuppressMessage("Design", "CA1001", MessageId = "Types that own disposable fields should be disposable", + Justification = "Not applicable. The class functions as a persistent singleton.")] private class ScriptTypeBiMap { public readonly ReaderWriterLockSlim ReadWriteLock = new(LockRecursionPolicy.SupportsRecursion); @@ -66,7 +68,7 @@ public static partial class ScriptManagerBridge private System.Collections.Generic.Dictionary _pathTypeMap = new(); private System.Collections.Generic.Dictionary _typePathMap = new(); - public IReadOnlyCollection Paths => _pathTypeMap.Keys; + public System.Collections.Generic.Dictionary.KeyCollection Paths => _pathTypeMap.Keys; public void Add(string scriptPath, Type scriptType) {