From 86641d01dfc87e6e8b0304c3a8ec4118fbf7be0b Mon Sep 17 00:00:00 2001 From: Justin Swanson Date: Thu, 9 Apr 2020 13:14:05 -0500 Subject: [PATCH] Wabbajack.Lib Compilation steps nullable enabled --- .editorconfig | 8 ++- Wabbajack.BuildServer/Controllers/Jobs.cs | 2 +- .../CompilationSteps/ACompilationStep.cs | 3 +- .../CompilationSteps/DeconstructBSAs.cs | 3 +- Wabbajack.Lib/CompilationSteps/DirectMatch.cs | 3 +- Wabbajack.Lib/CompilationSteps/DropAll.cs | 3 +- .../{IStackStep.cs => ICompilationStep.cs} | 3 +- .../CompilationSteps/IgnoreDisabledMods.cs | 3 +- .../CompilationSteps/IgnoreEndsWith.cs | 11 ++-- .../CompilationSteps/IgnoreGameFiles.cs | 3 +- .../IgnoreGameFilesIfGameFolderFilesExist.cs | 3 +- .../CompilationSteps/IgnorePathContains.cs | 9 +-- Wabbajack.Lib/CompilationSteps/IgnoreRegex.cs | 9 +-- .../CompilationSteps/IgnoreStartsWith.cs | 9 +-- .../IgnoreWabbajackInstallCruft.cs | 3 +- Wabbajack.Lib/CompilationSteps/IncludeAll.cs | 3 +- .../CompilationSteps/IncludeAllConfigs.cs | 3 +- .../CompilationSteps/IncludeDummyESPs.cs | 3 +- .../CompilationSteps/IncludeLOOTFiles.cs | 3 +- .../CompilationSteps/IncludeModIniData.cs | 3 +- .../CompilationSteps/IncludeOtherProfiles.cs | 3 +- .../CompilationSteps/IncludePatches.cs | 12 ++-- .../CompilationSteps/IncludePropertyFiles.cs | 3 +- .../CompilationSteps/IncludeRegex.cs | 9 +-- .../IncludeSteamWorkshopItems.cs | 5 +- .../IncludeStubbedConfigfiles.cs | 5 +- .../CompilationSteps/IncludeTaggedMods.cs | 9 +-- .../CompilationSteps/IncludeThisProfile.cs | 3 +- .../IncludeVortexDeployment.cs | 3 +- .../CompilationSteps/PatchStockESMs.cs | 3 +- Wabbajack.Lib/zEditIntegration.cs | 62 +++++++++---------- 31 files changed, 108 insertions(+), 99 deletions(-) rename Wabbajack.Lib/CompilationSteps/{IStackStep.cs => ICompilationStep.cs} (77%) diff --git a/.editorconfig b/.editorconfig index 5b46bd60..24eda6c4 100644 --- a/.editorconfig +++ b/.editorconfig @@ -184,4 +184,10 @@ dotnet_diagnostic.CS8609.severity = error dotnet_diagnostic.CS8714.severity = error # CS8605: Unboxing a possibly null value. -dotnet_diagnostic.CS8605.severity = error \ No newline at end of file +dotnet_diagnostic.CS8605.severity = error + +# CS8613: Nullability of reference types in return type doesn't match implicitly implemented member. +dotnet_diagnostic.CS8613.severity = error + +# CS8632: The annotation for nullable reference types should only be used in code within a '#nullable' annotations context. +dotnet_diagnostic.CS8632.severity = error \ No newline at end of file diff --git a/Wabbajack.BuildServer/Controllers/Jobs.cs b/Wabbajack.BuildServer/Controllers/Jobs.cs index 210bf318..875ad9c3 100644 --- a/Wabbajack.BuildServer/Controllers/Jobs.cs +++ b/Wabbajack.BuildServer/Controllers/Jobs.cs @@ -22,7 +22,7 @@ namespace Wabbajack.BuildServer.Controllers public async Task EnqueueJob(string JobName) { var jobtype = AJobPayload.NameToType[JobName]; - var job = new Job{Priority = Job.JobPriority.High, Payload = (AJobPayload)jobtype.GetConstructor(new Type[0]).Invoke(new object?[0])}; + var job = new Job{Priority = Job.JobPriority.High, Payload = (AJobPayload)jobtype.GetConstructor(new Type[0]).Invoke(new object[0])}; await SQL.EnqueueJob(job); return job.Id; } diff --git a/Wabbajack.Lib/CompilationSteps/ACompilationStep.cs b/Wabbajack.Lib/CompilationSteps/ACompilationStep.cs index 9dc0e547..4427334f 100644 --- a/Wabbajack.Lib/CompilationSteps/ACompilationStep.cs +++ b/Wabbajack.Lib/CompilationSteps/ACompilationStep.cs @@ -1,4 +1,5 @@ using System.Threading.Tasks; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -11,7 +12,7 @@ namespace Wabbajack.Lib.CompilationSteps _compiler = compiler; } - public abstract ValueTask Run(RawSourceFile source); + public abstract ValueTask Run(RawSourceFile source); public abstract IState GetState(); } } diff --git a/Wabbajack.Lib/CompilationSteps/DeconstructBSAs.cs b/Wabbajack.Lib/CompilationSteps/DeconstructBSAs.cs index 19d00fcb..d8ea17f5 100644 --- a/Wabbajack.Lib/CompilationSteps/DeconstructBSAs.cs +++ b/Wabbajack.Lib/CompilationSteps/DeconstructBSAs.cs @@ -8,6 +8,7 @@ using Newtonsoft.Json; using Wabbajack.Common; using Wabbajack.Common.StatusFeed.Errors; using Wabbajack.VirtualFileSystem; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -51,7 +52,7 @@ namespace Wabbajack.Lib.CompilationSteps return new State(); } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { if (!Consts.SupportedBSAs.Contains(source.Path.Extension)) return null; diff --git a/Wabbajack.Lib/CompilationSteps/DirectMatch.cs b/Wabbajack.Lib/CompilationSteps/DirectMatch.cs index 807184f4..6f883117 100644 --- a/Wabbajack.Lib/CompilationSteps/DirectMatch.cs +++ b/Wabbajack.Lib/CompilationSteps/DirectMatch.cs @@ -2,6 +2,7 @@ using System.Threading.Tasks; using Alphaleonis.Win32.Filesystem; using Newtonsoft.Json; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -11,7 +12,7 @@ namespace Wabbajack.Lib.CompilationSteps { } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { if (!_compiler.IndexedFiles.TryGetValue(source.Hash, out var found)) return null; var result = source.EvolveTo(); diff --git a/Wabbajack.Lib/CompilationSteps/DropAll.cs b/Wabbajack.Lib/CompilationSteps/DropAll.cs index 2d5c65a1..0c3a6fc4 100644 --- a/Wabbajack.Lib/CompilationSteps/DropAll.cs +++ b/Wabbajack.Lib/CompilationSteps/DropAll.cs @@ -1,6 +1,7 @@ using System.Threading.Tasks; using Newtonsoft.Json; using Wabbajack.Common; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -10,7 +11,7 @@ namespace Wabbajack.Lib.CompilationSteps { } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { var result = source.EvolveTo(); result.Reason = "No Match in Stack"; diff --git a/Wabbajack.Lib/CompilationSteps/IStackStep.cs b/Wabbajack.Lib/CompilationSteps/ICompilationStep.cs similarity index 77% rename from Wabbajack.Lib/CompilationSteps/IStackStep.cs rename to Wabbajack.Lib/CompilationSteps/ICompilationStep.cs index 1c427edc..68b8b73b 100644 --- a/Wabbajack.Lib/CompilationSteps/IStackStep.cs +++ b/Wabbajack.Lib/CompilationSteps/ICompilationStep.cs @@ -1,10 +1,11 @@ using System.Threading.Tasks; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { public interface ICompilationStep { - ValueTask Run(RawSourceFile source); + ValueTask Run(RawSourceFile source); IState GetState(); } diff --git a/Wabbajack.Lib/CompilationSteps/IgnoreDisabledMods.cs b/Wabbajack.Lib/CompilationSteps/IgnoreDisabledMods.cs index e066fc66..f9b9f1bc 100644 --- a/Wabbajack.Lib/CompilationSteps/IgnoreDisabledMods.cs +++ b/Wabbajack.Lib/CompilationSteps/IgnoreDisabledMods.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using Alphaleonis.Win32.Filesystem; using Newtonsoft.Json; using Wabbajack.Common; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -25,7 +26,7 @@ namespace Wabbajack.Lib.CompilationSteps .ToList(); } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { if (!source.AbsolutePath.InFolder(_mo2Compiler.MO2ModsFolder)) return null; if (_allEnabledMods.Any(mod => source.AbsolutePath.InFolder(mod))) diff --git a/Wabbajack.Lib/CompilationSteps/IgnoreEndsWith.cs b/Wabbajack.Lib/CompilationSteps/IgnoreEndsWith.cs index adec2b87..53b44621 100644 --- a/Wabbajack.Lib/CompilationSteps/IgnoreEndsWith.cs +++ b/Wabbajack.Lib/CompilationSteps/IgnoreEndsWith.cs @@ -1,5 +1,6 @@ using System.Threading.Tasks; using Newtonsoft.Json; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -14,7 +15,7 @@ namespace Wabbajack.Lib.CompilationSteps _reason = $"Ignored because path ends with {postfix}"; } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { if (!((string)source.Path).EndsWith(_postfix)) return null; var result = source.EvolveTo(); @@ -30,17 +31,13 @@ namespace Wabbajack.Lib.CompilationSteps [JsonObject("IgnoreEndsWith")] public class State : IState { + public string Postfix { get; set; } + public State(string postfix) { Postfix = postfix; } - public State() - { - } - - public string Postfix { get; set; } - public ICompilationStep CreateStep(ACompiler compiler) { return new IgnoreEndsWith(compiler, Postfix); diff --git a/Wabbajack.Lib/CompilationSteps/IgnoreGameFiles.cs b/Wabbajack.Lib/CompilationSteps/IgnoreGameFiles.cs index 30889a77..9b95d35d 100644 --- a/Wabbajack.Lib/CompilationSteps/IgnoreGameFiles.cs +++ b/Wabbajack.Lib/CompilationSteps/IgnoreGameFiles.cs @@ -1,6 +1,7 @@ using System.Threading.Tasks; using Newtonsoft.Json; using Wabbajack.Common; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -13,7 +14,7 @@ namespace Wabbajack.Lib.CompilationSteps _startDir = Consts.GameFolderFilesDir + "\\"; } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { if (!((string)source.Path).StartsWith(_startDir)) return null; var i = source.EvolveTo(); diff --git a/Wabbajack.Lib/CompilationSteps/IgnoreGameFilesIfGameFolderFilesExist.cs b/Wabbajack.Lib/CompilationSteps/IgnoreGameFilesIfGameFolderFilesExist.cs index 420a17a2..59026899 100644 --- a/Wabbajack.Lib/CompilationSteps/IgnoreGameFilesIfGameFolderFilesExist.cs +++ b/Wabbajack.Lib/CompilationSteps/IgnoreGameFilesIfGameFolderFilesExist.cs @@ -1,6 +1,7 @@ using System.Threading.Tasks; using Alphaleonis.Win32.Filesystem; using Wabbajack.Common; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -15,7 +16,7 @@ namespace Wabbajack.Lib.CompilationSteps _gameFolder = compiler.GamePath; } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { if (_gameFolderFilesExists) { diff --git a/Wabbajack.Lib/CompilationSteps/IgnorePathContains.cs b/Wabbajack.Lib/CompilationSteps/IgnorePathContains.cs index 25094e16..1a8c627b 100644 --- a/Wabbajack.Lib/CompilationSteps/IgnorePathContains.cs +++ b/Wabbajack.Lib/CompilationSteps/IgnorePathContains.cs @@ -1,5 +1,6 @@ using System.Threading.Tasks; using Newtonsoft.Json; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -14,7 +15,7 @@ namespace Wabbajack.Lib.CompilationSteps _reason = $"Ignored because path contains {_pattern}"; } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { if (!((string)source.Path).Contains(_pattern)) return null; var result = source.EvolveTo(); @@ -30,17 +31,13 @@ namespace Wabbajack.Lib.CompilationSteps [JsonObject("IgnorePathContains")] public class State : IState { - public State() - { - } + public string Pattern { get; set; } public State(string pattern) { Pattern = pattern; } - public string Pattern { get; set; } - public ICompilationStep CreateStep(ACompiler compiler) { return new IgnorePathContains(compiler, Pattern); diff --git a/Wabbajack.Lib/CompilationSteps/IgnoreRegex.cs b/Wabbajack.Lib/CompilationSteps/IgnoreRegex.cs index 7c004d2a..abf48183 100644 --- a/Wabbajack.Lib/CompilationSteps/IgnoreRegex.cs +++ b/Wabbajack.Lib/CompilationSteps/IgnoreRegex.cs @@ -1,6 +1,7 @@ using System.Text.RegularExpressions; using System.Threading.Tasks; using Newtonsoft.Json; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -17,7 +18,7 @@ namespace Wabbajack.Lib.CompilationSteps _regex = new Regex(pattern); } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { if (!_regex.IsMatch((string)source.Path)) return null; var result = source.EvolveTo(); @@ -33,17 +34,13 @@ namespace Wabbajack.Lib.CompilationSteps [JsonObject("IgnorePattern")] public class State : IState { - public State() - { - } + public string Pattern { get; set; } public State(string pattern) { Pattern = pattern; } - public string Pattern { get; set; } - public ICompilationStep CreateStep(ACompiler compiler) { return new IgnoreRegex(compiler, Pattern); diff --git a/Wabbajack.Lib/CompilationSteps/IgnoreStartsWith.cs b/Wabbajack.Lib/CompilationSteps/IgnoreStartsWith.cs index ce345a53..087ea169 100644 --- a/Wabbajack.Lib/CompilationSteps/IgnoreStartsWith.cs +++ b/Wabbajack.Lib/CompilationSteps/IgnoreStartsWith.cs @@ -1,5 +1,6 @@ using System.Threading.Tasks; using Newtonsoft.Json; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -14,7 +15,7 @@ namespace Wabbajack.Lib.CompilationSteps _reason = string.Format("Ignored because path starts with {0}", _prefix); } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { if (!((string)source.Path).StartsWith(_prefix)) { @@ -35,17 +36,13 @@ namespace Wabbajack.Lib.CompilationSteps [JsonObject("IgnoreStartsWith")] public class State : IState { - public State() - { - } + public string Prefix { get; set; } public State(string prefix) { Prefix = prefix; } - public string Prefix { get; set; } - public ICompilationStep CreateStep(ACompiler compiler) { return new IgnoreStartsWith(compiler, Prefix); diff --git a/Wabbajack.Lib/CompilationSteps/IgnoreWabbajackInstallCruft.cs b/Wabbajack.Lib/CompilationSteps/IgnoreWabbajackInstallCruft.cs index ae46fa03..c1f36243 100644 --- a/Wabbajack.Lib/CompilationSteps/IgnoreWabbajackInstallCruft.cs +++ b/Wabbajack.Lib/CompilationSteps/IgnoreWabbajackInstallCruft.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Threading.Tasks; using Newtonsoft.Json; using Wabbajack.Common; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -19,7 +20,7 @@ namespace Wabbajack.Lib.CompilationSteps }; } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { if (!_cruftFiles.Any(f => source.Path.StartsWith(f))) return null; var result = source.EvolveTo(); diff --git a/Wabbajack.Lib/CompilationSteps/IncludeAll.cs b/Wabbajack.Lib/CompilationSteps/IncludeAll.cs index 9f836158..6f229c45 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludeAll.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludeAll.cs @@ -1,6 +1,7 @@ using System.Threading.Tasks; using Alphaleonis.Win32.Filesystem; using Newtonsoft.Json; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -10,7 +11,7 @@ namespace Wabbajack.Lib.CompilationSteps { } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { var inline = source.EvolveTo(); inline.SourceDataID = await _compiler.IncludeFile(await source.AbsolutePath.ReadAllBytesAsync()); diff --git a/Wabbajack.Lib/CompilationSteps/IncludeAllConfigs.cs b/Wabbajack.Lib/CompilationSteps/IncludeAllConfigs.cs index 10ae1e26..eb73f724 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludeAllConfigs.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludeAllConfigs.cs @@ -2,6 +2,7 @@ using Alphaleonis.Win32.Filesystem; using Newtonsoft.Json; using Wabbajack.Common; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -11,7 +12,7 @@ namespace Wabbajack.Lib.CompilationSteps { } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { if (!Consts.ConfigFileExtensions.Contains(source.Path.Extension)) return null; var result = source.EvolveTo(); diff --git a/Wabbajack.Lib/CompilationSteps/IncludeDummyESPs.cs b/Wabbajack.Lib/CompilationSteps/IncludeDummyESPs.cs index 5dd9f1a7..127d7555 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludeDummyESPs.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludeDummyESPs.cs @@ -2,6 +2,7 @@ using Alphaleonis.Win32.Filesystem; using Newtonsoft.Json; using Wabbajack.Common; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -11,7 +12,7 @@ namespace Wabbajack.Lib.CompilationSteps { } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { if (source.AbsolutePath.Extension != Consts.ESP && source.AbsolutePath.Extension != Consts.ESM) return null; diff --git a/Wabbajack.Lib/CompilationSteps/IncludeLOOTFiles.cs b/Wabbajack.Lib/CompilationSteps/IncludeLOOTFiles.cs index 7bc05446..a34e0a3f 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludeLOOTFiles.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludeLOOTFiles.cs @@ -2,6 +2,7 @@ using Alphaleonis.Win32.Filesystem; using Newtonsoft.Json; using Wabbajack.Common; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -14,7 +15,7 @@ namespace Wabbajack.Lib.CompilationSteps _prefix = Consts.LOOTFolderFilesDir + "\\"; } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { if (!source.Path.StartsWith(_prefix)) return null; var result = source.EvolveTo(); diff --git a/Wabbajack.Lib/CompilationSteps/IncludeModIniData.cs b/Wabbajack.Lib/CompilationSteps/IncludeModIniData.cs index c5d3614a..70bc66b8 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludeModIniData.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludeModIniData.cs @@ -2,6 +2,7 @@ using Alphaleonis.Win32.Filesystem; using Newtonsoft.Json; using Wabbajack.Common; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -11,7 +12,7 @@ namespace Wabbajack.Lib.CompilationSteps { } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { if (!source.Path.StartsWith("mods\\") || source.Path.FileName != Consts.MetaIni) return null; var e = source.EvolveTo(); diff --git a/Wabbajack.Lib/CompilationSteps/IncludeOtherProfiles.cs b/Wabbajack.Lib/CompilationSteps/IncludeOtherProfiles.cs index c643b2eb..a6190347 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludeOtherProfiles.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludeOtherProfiles.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using Alphaleonis.Win32.Filesystem; using Newtonsoft.Json; using Wabbajack.Common; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -23,7 +24,7 @@ namespace Wabbajack.Lib.CompilationSteps .ToList(); } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { if (!source.AbsolutePath.InFolder(_modProfilesFolder)) return null; if (_profiles.Any(profile => source.AbsolutePath.InFolder(profile))) return null; diff --git a/Wabbajack.Lib/CompilationSteps/IncludePatches.cs b/Wabbajack.Lib/CompilationSteps/IncludePatches.cs index e99fcf9a..228cc7e3 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludePatches.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludePatches.cs @@ -6,17 +6,18 @@ using Alphaleonis.Win32.Filesystem; using Newtonsoft.Json; using Wabbajack.Common; using Wabbajack.VirtualFileSystem; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { public class IncludePatches : ACompilationStep { private readonly Dictionary> _indexed; - private VirtualFile _bsa; + private VirtualFile? _bsa; private Dictionary _indexedByName; private MO2Compiler _mo2Compiler; - public IncludePatches(ACompiler compiler, VirtualFile constructingFromBSA = null) : base(compiler) + public IncludePatches(ACompiler compiler, VirtualFile? constructingFromBSA = null) : base(compiler) { _bsa = constructingFromBSA; _mo2Compiler = (MO2Compiler)compiler; @@ -30,9 +31,8 @@ namespace Wabbajack.Lib.CompilationSteps .ToDictionary(f => f.FullPath.FileName); } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { - var name = source.File.Name.FileName; RelativePath nameWithoutExt = name; if (name.Extension == Consts.MOHIDDEN) @@ -41,7 +41,7 @@ namespace Wabbajack.Lib.CompilationSteps if (!_indexed.TryGetValue(name, out var choices)) _indexed.TryGetValue(nameWithoutExt, out choices); - dynamic modIni = null; + dynamic? modIni = null; if (source.AbsolutePath.InFolder(_mo2Compiler.MO2ModsFolder)) { if (_bsa == null) @@ -55,7 +55,7 @@ namespace Wabbajack.Lib.CompilationSteps var installationFile = (RelativePath)modIni?.General?.installationFile; - VirtualFile found = null; + VirtualFile? found = null; // Find based on exact file name + ext if (choices != null) diff --git a/Wabbajack.Lib/CompilationSteps/IncludePropertyFiles.cs b/Wabbajack.Lib/CompilationSteps/IncludePropertyFiles.cs index 3ccd5e54..eb877762 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludePropertyFiles.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludePropertyFiles.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using Alphaleonis.Win32.Filesystem; using Newtonsoft.Json; using Wabbajack.Common; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -14,7 +15,7 @@ namespace Wabbajack.Lib.CompilationSteps { } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { var files = new HashSet { diff --git a/Wabbajack.Lib/CompilationSteps/IncludeRegex.cs b/Wabbajack.Lib/CompilationSteps/IncludeRegex.cs index a7482285..e5fbda99 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludeRegex.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludeRegex.cs @@ -2,6 +2,7 @@ using System.Threading.Tasks; using Alphaleonis.Win32.Filesystem; using Newtonsoft.Json; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -16,7 +17,7 @@ namespace Wabbajack.Lib.CompilationSteps _regex = new Regex(pattern); } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { if (!_regex.IsMatch((string)source.Path)) return null; @@ -33,17 +34,13 @@ namespace Wabbajack.Lib.CompilationSteps [JsonObject("IncludeRegex")] public class State : IState { - public State() - { - } + public string Pattern { get; set; } public State(string pattern) { Pattern = pattern; } - public string Pattern { get; set; } - public ICompilationStep CreateStep(ACompiler compiler) { return new IncludeRegex(compiler, Pattern); diff --git a/Wabbajack.Lib/CompilationSteps/IncludeSteamWorkshopItems.cs b/Wabbajack.Lib/CompilationSteps/IncludeSteamWorkshopItems.cs index ad6b3200..68cd72bd 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludeSteamWorkshopItems.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludeSteamWorkshopItems.cs @@ -5,6 +5,7 @@ using System.Threading.Tasks; using Alphaleonis.Win32.Filesystem; using Wabbajack.Common; using Wabbajack.Common.StoreHandlers; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -18,7 +19,7 @@ namespace Wabbajack.Lib.CompilationSteps _game = steamGame; } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { if (!_regex.IsMatch((string)source.Path)) return null; @@ -31,7 +32,7 @@ namespace Wabbajack.Lib.CompilationSteps if (id == 0) return null; - SteamWorkshopItem item = null; + SteamWorkshopItem? item = null; _game.WorkshopItems.Where(i => i.ItemID == id).Do(i => item = i); if (item == null) return null; diff --git a/Wabbajack.Lib/CompilationSteps/IncludeStubbedConfigfiles.cs b/Wabbajack.Lib/CompilationSteps/IncludeStubbedConfigfiles.cs index 32e41955..b1c1abff 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludeStubbedConfigfiles.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludeStubbedConfigfiles.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using Alphaleonis.Win32.Filesystem; using Newtonsoft.Json; using Wabbajack.Common; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -15,7 +16,7 @@ namespace Wabbajack.Lib.CompilationSteps _mo2Compiler = (MO2Compiler) compiler; } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { return Consts.ConfigFileExtensions.Contains(source.Path.Extension) ? await RemapFile(source) : null; } @@ -25,7 +26,7 @@ namespace Wabbajack.Lib.CompilationSteps return new State(); } - private async Task RemapFile(RawSourceFile source) + private async Task RemapFile(RawSourceFile source) { var data = await source.AbsolutePath.ReadAllTextAsync(); var originalData = data; diff --git a/Wabbajack.Lib/CompilationSteps/IncludeTaggedMods.cs b/Wabbajack.Lib/CompilationSteps/IncludeTaggedMods.cs index d88deece..2409568a 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludeTaggedMods.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludeTaggedMods.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using Alphaleonis.Win32.Filesystem; using Newtonsoft.Json; using Wabbajack.Common; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -26,7 +27,7 @@ namespace Wabbajack.Lib.CompilationSteps }).Select(kv => $"mods\\{kv.Key}\\"); } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { if (!source.Path.StartsWith(Consts.MO2ModFolderName)) return null; foreach (var modpath in _includeDirectly) @@ -48,17 +49,13 @@ namespace Wabbajack.Lib.CompilationSteps [JsonObject("IncludeTaggedMods")] public class State : IState { - public State() - { - } + public string Tag { get; set; } public State(string tag) { Tag = tag; } - public string Tag { get; set; } - public ICompilationStep CreateStep(ACompiler compiler) { return new IncludeTaggedMods(compiler, Tag); diff --git a/Wabbajack.Lib/CompilationSteps/IncludeThisProfile.cs b/Wabbajack.Lib/CompilationSteps/IncludeThisProfile.cs index 2200c2fb..d01cf628 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludeThisProfile.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludeThisProfile.cs @@ -5,6 +5,7 @@ using System.Threading.Tasks; using Alphaleonis.Win32.Filesystem; using Newtonsoft.Json; using Wabbajack.Common; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -19,7 +20,7 @@ namespace Wabbajack.Lib.CompilationSteps _correctProfiles = _mo2Compiler.SelectedProfiles.Select(p => _mo2Compiler.MO2ProfileDir.Parent.Combine(p)).ToList(); } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { if (!_correctProfiles.Any(p => source.AbsolutePath.InFolder(p))) return null; diff --git a/Wabbajack.Lib/CompilationSteps/IncludeVortexDeployment.cs b/Wabbajack.Lib/CompilationSteps/IncludeVortexDeployment.cs index e9a54343..303afbfa 100644 --- a/Wabbajack.Lib/CompilationSteps/IncludeVortexDeployment.cs +++ b/Wabbajack.Lib/CompilationSteps/IncludeVortexDeployment.cs @@ -3,6 +3,7 @@ using System.IO; using System.Linq; using System.Threading.Tasks; using Wabbajack.Common; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -12,7 +13,7 @@ namespace Wabbajack.Lib.CompilationSteps { } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { // * TODO I don't know what this does /* diff --git a/Wabbajack.Lib/CompilationSteps/PatchStockESMs.cs b/Wabbajack.Lib/CompilationSteps/PatchStockESMs.cs index e71dfc0c..fabc3072 100644 --- a/Wabbajack.Lib/CompilationSteps/PatchStockESMs.cs +++ b/Wabbajack.Lib/CompilationSteps/PatchStockESMs.cs @@ -4,6 +4,7 @@ using Newtonsoft.Json; using Wabbajack.Common; using File = Alphaleonis.Win32.Filesystem.File; using Path = Alphaleonis.Win32.Filesystem.Path; +#nullable enable namespace Wabbajack.Lib.CompilationSteps { @@ -16,7 +17,7 @@ namespace Wabbajack.Lib.CompilationSteps _mo2Compiler = (MO2Compiler) compiler; } - public override async ValueTask Run(RawSourceFile source) + public override async ValueTask Run(RawSourceFile source) { var filename = source.Path.FileName; var gameFile = _mo2Compiler.GamePath.Combine((RelativePath)"Data", filename); diff --git a/Wabbajack.Lib/zEditIntegration.cs b/Wabbajack.Lib/zEditIntegration.cs index 3b4dbb72..5590ddf8 100644 --- a/Wabbajack.Lib/zEditIntegration.cs +++ b/Wabbajack.Lib/zEditIntegration.cs @@ -9,40 +9,23 @@ using Directory = Alphaleonis.Win32.Filesystem.Directory; using File = Alphaleonis.Win32.Filesystem.File; using Path = Alphaleonis.Win32.Filesystem.Path; using System.Threading.Tasks; -#nullable disable +#nullable enable namespace Wabbajack.Lib { public class zEditIntegration { - private static MO2Compiler _mo2Compiler; - - public static AbsolutePath FindzEditPath(ACompiler compiler) - { - _mo2Compiler = (MO2Compiler) compiler; - var executables = _mo2Compiler.MO2Ini.customExecutables; - if (executables.size == null) return default; - - foreach (var idx in Enumerable.Range(1, int.Parse(executables.size))) - { - var path = (string)executables[$"{idx}\\binary"]; - if (path == null) continue; - - if (path.EndsWith("zEdit.exe")) - return (AbsolutePath)path; - } - - return default; - } - public class IncludeZEditPatches : ACompilationStep { - private readonly Dictionary _mergesIndexed; + private readonly Dictionary _mergesIndexed = new Dictionary(); private bool _disabled = true; - public IncludeZEditPatches(ACompiler compiler) : base(compiler) + private MO2Compiler _mo2Compiler; + + public IncludeZEditPatches(MO2Compiler compiler) : base(compiler) { + _mo2Compiler = compiler; var zEditPath = FindzEditPath(compiler); var havezEdit = zEditPath != default; @@ -127,7 +110,24 @@ namespace Wabbajack.Lib _disabled = false; } - public override async ValueTask Run(RawSourceFile source) + public static AbsolutePath FindzEditPath(MO2Compiler compiler) + { + var executables = compiler.MO2Ini.customExecutables; + if (executables.size == null) return default; + + foreach (var idx in Enumerable.Range(1, int.Parse(executables.size))) + { + var path = (string)executables[$"{idx}\\binary"]; + if (path == null) continue; + + if (path.EndsWith("zEdit.exe")) + return (AbsolutePath)path; + } + + return default; + } + + public override async ValueTask Run(RawSourceFile source) { if (_disabled) return null; if (!_mergesIndexed.TryGetValue(source.AbsolutePath, out var merge)) @@ -210,14 +210,14 @@ namespace Wabbajack.Lib { public ICompilationStep CreateStep(ACompiler compiler) { - return new IncludeZEditPatches(compiler); + return new IncludeZEditPatches((MO2Compiler)compiler); } } } public class zEditSettings { - public string modManager; + public string modManager = string.Empty; public AbsolutePath managerPath; public AbsolutePath modsPath; public AbsolutePath mergePath; @@ -225,16 +225,16 @@ namespace Wabbajack.Lib public class zEditMerge { - public string name; - public string filename; - public List plugins; + public string name = string.Empty; + public string filename = string.Empty; + public List plugins = new List(); } public class zEditMergePlugin { - public string filename; - public string dataFolder; + public string? filename; + public string? dataFolder; } public static void VerifyMerges(MO2Compiler compiler)