summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2022-04-12 19:15:39 -0400
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2022-04-12 19:15:39 -0400
commit0b48c1748b354458059c7607415288de072b01e9 (patch)
treef63fd950f565d363414eb692be9024895cdea174
parent9fbed0fa1f28a9b0fe0b952a78b10e2d475adb03 (diff)
downloadSMAPI-0b48c1748b354458059c7607415288de072b01e9.tar.gz
SMAPI-0b48c1748b354458059c7607415288de072b01e9.tar.bz2
SMAPI-0b48c1748b354458059c7607415288de072b01e9.zip
enable nullable annotations in the web project & related code (#837)
-rw-r--r--build/common.targets4
-rw-r--r--src/SMAPI.Toolkit.CoreInterfaces/ISemanticVersion.cs4
-rw-r--r--src/SMAPI.Toolkit/Framework/Clients/WebApi/ModEntryModel.cs19
-rw-r--r--src/SMAPI.Toolkit/Framework/Clients/WebApi/ModEntryVersionModel.cs9
-rw-r--r--src/SMAPI.Toolkit/Framework/Clients/WebApi/ModExtendedMetadataModel.cs36
-rw-r--r--src/SMAPI.Toolkit/Framework/Clients/WebApi/ModSearchEntryModel.cs27
-rw-r--r--src/SMAPI.Toolkit/Framework/Clients/WebApi/ModSearchModel.cs10
-rw-r--r--src/SMAPI.Toolkit/Framework/Clients/WebApi/WebApiClient.cs5
-rw-r--r--src/SMAPI.Toolkit/Framework/Clients/Wiki/ChangeDescriptor.cs12
-rw-r--r--src/SMAPI.Toolkit/Framework/Clients/Wiki/WikiClient.cs159
-rw-r--r--src/SMAPI.Toolkit/Framework/Clients/Wiki/WikiCompatibilityInfo.cs33
-rw-r--r--src/SMAPI.Toolkit/Framework/Clients/Wiki/WikiCompatibilityStatus.cs2
-rw-r--r--src/SMAPI.Toolkit/Framework/Clients/Wiki/WikiModEntry.cs96
-rw-r--r--src/SMAPI.Toolkit/Framework/Clients/Wiki/WikiModList.cs23
-rw-r--r--src/SMAPI.Toolkit/SemanticVersion.cs3
-rw-r--r--src/SMAPI.Toolkit/SemanticVersionComparer.cs2
-rw-r--r--src/SMAPI.Web/BackgroundService.cs24
-rw-r--r--src/SMAPI.Web/Controllers/IndexController.cs12
-rw-r--r--src/SMAPI.Web/Controllers/JsonValidatorController.cs46
-rw-r--r--src/SMAPI.Web/Controllers/LogParserController.cs6
-rw-r--r--src/SMAPI.Web/Controllers/ModsApiController.cs70
-rw-r--r--src/SMAPI.Web/Controllers/ModsController.cs7
-rw-r--r--src/SMAPI.Web/Framework/AllowLargePostsAttribute.cs4
-rw-r--r--src/SMAPI.Web/Framework/Caching/Cached.cs11
-rw-r--r--src/SMAPI.Web/Framework/Caching/Mods/IModCacheRepository.cs5
-rw-r--r--src/SMAPI.Web/Framework/Caching/Mods/ModCacheMemoryRepository.cs5
-rw-r--r--src/SMAPI.Web/Framework/Caching/Wiki/IWikiCacheRepository.cs9
-rw-r--r--src/SMAPI.Web/Framework/Caching/Wiki/WikiCacheMemoryRepository.cs11
-rw-r--r--src/SMAPI.Web/Framework/Caching/Wiki/WikiMetadata.cs11
-rw-r--r--src/SMAPI.Web/Framework/Clients/Chucklefish/ChucklefishClient.cs12
-rw-r--r--src/SMAPI.Web/Framework/Clients/CurseForge/CurseForgeClient.cs14
-rw-r--r--src/SMAPI.Web/Framework/Clients/CurseForge/ResponseModels/ModFileModel.cs22
-rw-r--r--src/SMAPI.Web/Framework/Clients/CurseForge/ResponseModels/ModModel.cs30
-rw-r--r--src/SMAPI.Web/Framework/Clients/GenericModDownload.cs13
-rw-r--r--src/SMAPI.Web/Framework/Clients/GenericModPage.cs23
-rw-r--r--src/SMAPI.Web/Framework/Clients/GitHub/GitAsset.cs26
-rw-r--r--src/SMAPI.Web/Framework/Clients/GitHub/GitHubClient.cs30
-rw-r--r--src/SMAPI.Web/Framework/Clients/GitHub/GitLicense.cs26
-rw-r--r--src/SMAPI.Web/Framework/Clients/GitHub/GitRelease.cs36
-rw-r--r--src/SMAPI.Web/Framework/Clients/GitHub/GitRepo.cs26
-rw-r--r--src/SMAPI.Web/Framework/Clients/GitHub/IGitHubClient.cs6
-rw-r--r--src/SMAPI.Web/Framework/Clients/IModSiteClient.cs4
-rw-r--r--src/SMAPI.Web/Framework/Clients/ModDrop/ModDropClient.cs20
-rw-r--r--src/SMAPI.Web/Framework/Clients/ModDrop/ResponseModels/FileDataModel.cs42
-rw-r--r--src/SMAPI.Web/Framework/Clients/ModDrop/ResponseModels/ModDataModel.cs24
-rw-r--r--src/SMAPI.Web/Framework/Clients/ModDrop/ResponseModels/ModListModel.cs7
-rw-r--r--src/SMAPI.Web/Framework/Clients/ModDrop/ResponseModels/ModModel.cs22
-rw-r--r--src/SMAPI.Web/Framework/Clients/Nexus/NexusClient.cs63
-rw-r--r--src/SMAPI.Web/Framework/Clients/Nexus/ResponseModels/NexusMod.cs43
-rw-r--r--src/SMAPI.Web/Framework/Clients/Pastebin/IPastebinClient.cs2
-rw-r--r--src/SMAPI.Web/Framework/Clients/Pastebin/PasteInfo.cs28
-rw-r--r--src/SMAPI.Web/Framework/Clients/Pastebin/PastebinClient.cs14
-rw-r--r--src/SMAPI.Web/Framework/Compression/GzipHelper.cs9
-rw-r--r--src/SMAPI.Web/Framework/Compression/IGzipHelper.cs5
-rw-r--r--src/SMAPI.Web/Framework/ConfigModels/ApiClientsConfig.cs36
-rw-r--r--src/SMAPI.Web/Framework/ConfigModels/ModOverrideConfig.cs6
-rw-r--r--src/SMAPI.Web/Framework/ConfigModels/ModUpdateCheckConfig.cs10
-rw-r--r--src/SMAPI.Web/Framework/ConfigModels/SiteConfig.cs6
-rw-r--r--src/SMAPI.Web/Framework/ConfigModels/SmapiInfoConfig.cs8
-rw-r--r--src/SMAPI.Web/Framework/Extensions.cs8
-rw-r--r--src/SMAPI.Web/Framework/IModDownload.cs9
-rw-r--r--src/SMAPI.Web/Framework/IModPage.cs18
-rw-r--r--src/SMAPI.Web/Framework/InternalControllerFeatureProvider.cs2
-rw-r--r--src/SMAPI.Web/Framework/JobDashboardAuthorizationFilter.cs2
-rw-r--r--src/SMAPI.Web/Framework/ModInfoModel.cs33
-rw-r--r--src/SMAPI.Web/Framework/ModSiteManager.cs58
-rw-r--r--src/SMAPI.Web/Framework/RedirectRules/RedirectHostsToUrlsRule.cs10
-rw-r--r--src/SMAPI.Web/Framework/RedirectRules/RedirectMatchRule.cs6
-rw-r--r--src/SMAPI.Web/Framework/RedirectRules/RedirectPathsToUrlsRule.cs6
-rw-r--r--src/SMAPI.Web/Framework/RedirectRules/RedirectToHttpsRule.cs6
-rw-r--r--src/SMAPI.Web/Framework/Storage/IStorageProvider.cs2
-rw-r--r--src/SMAPI.Web/Framework/Storage/StorageProvider.cs52
-rw-r--r--src/SMAPI.Web/Framework/Storage/StoredFileInfo.cs41
-rw-r--r--src/SMAPI.Web/Framework/Storage/UploadResult.cs14
-rw-r--r--src/SMAPI.Web/Framework/VersionConstraint.cs6
-rw-r--r--src/SMAPI.Web/Program.cs2
-rw-r--r--src/SMAPI.Web/Startup.cs4
-rw-r--r--src/SMAPI.Web/ViewModels/IndexModel.cs13
-rw-r--r--src/SMAPI.Web/ViewModels/IndexVersionModel.cs15
-rw-r--r--src/SMAPI.Web/ViewModels/JsonValidator/JsonValidatorErrorModel.cs15
-rw-r--r--src/SMAPI.Web/ViewModels/JsonValidator/JsonValidatorModel.cs29
-rw-r--r--src/SMAPI.Web/ViewModels/JsonValidator/JsonValidatorRequestModel.cs19
-rw-r--r--src/SMAPI.Web/ViewModels/LogParserModel.cs2
-rw-r--r--src/SMAPI.Web/ViewModels/ModCompatibilityModel.cs27
-rw-r--r--src/SMAPI.Web/ViewModels/ModLinkModel.cs6
-rw-r--r--src/SMAPI.Web/ViewModels/ModListModel.cs19
-rw-r--r--src/SMAPI.Web/ViewModels/ModModel.cs65
-rw-r--r--src/SMAPI.Web/Views/Index/Index.cshtml6
-rw-r--r--src/SMAPI.Web/Views/Index/Privacy.cshtml4
-rw-r--r--src/SMAPI.Web/Views/JsonValidator/Index.cshtml12
-rw-r--r--src/SMAPI.Web/Views/LogParser/Index.cshtml2
-rw-r--r--src/SMAPI.Web/Views/Mods/Index.cshtml6
-rw-r--r--src/SMAPI.Web/Views/Shared/_Layout.cshtml4
-rw-r--r--src/SMAPI.Web/Views/_ViewStart.cshtml4
-rw-r--r--src/SMAPI.Web/appsettings.json3
-rw-r--r--src/SMAPI.sln.DotSettings1
-rw-r--r--src/SMAPI/SemanticVersion.cs3
97 files changed, 1044 insertions, 768 deletions
diff --git a/build/common.targets b/build/common.targets
index c227190a..c04546d0 100644
--- a/build/common.targets
+++ b/build/common.targets
@@ -7,8 +7,8 @@
<AssemblySearchPaths>$(AssemblySearchPaths);{GAC}</AssemblySearchPaths>
<!--enable nullable annotations, except in .NET Standard 2.0 where they aren't supported-->
- <Nullable Condition="'$(TargetFramework)' == 'net5.0'">enable</Nullable>
- <NoWarn Condition="'$(TargetFramework)' != 'net5.0'">$(NoWarn);CS8632</NoWarn>
+ <Nullable Condition="'$(TargetFramework)' != 'netstandard2.0'">enable</Nullable>
+ <NoWarn Condition="'$(TargetFramework)' == 'netstandard2.0'">$(NoWarn);CS8632</NoWarn>
<!--set platform-->
<DefineConstants Condition="$(OS) == 'Windows_NT'">$(DefineConstants);SMAPI_FOR_WINDOWS</DefineConstants>
diff --git a/src/SMAPI.Toolkit.CoreInterfaces/ISemanticVersion.cs b/src/SMAPI.Toolkit.CoreInterfaces/ISemanticVersion.cs
index 7998272f..dc226b7c 100644
--- a/src/SMAPI.Toolkit.CoreInterfaces/ISemanticVersion.cs
+++ b/src/SMAPI.Toolkit.CoreInterfaces/ISemanticVersion.cs
@@ -1,4 +1,5 @@
using System;
+using System.Diagnostics.CodeAnalysis;
namespace StardewModdingAPI
{
@@ -28,6 +29,9 @@ namespace StardewModdingAPI
** Accessors
*********/
/// <summary>Whether this is a prerelease version.</summary>
+#if NET5_0_OR_GREATER
+ [MemberNotNullWhen(true, nameof(ISemanticVersion.PrereleaseTag))]
+#endif
bool IsPrerelease();
/// <summary>Get whether this version is older than the specified version.</summary>
diff --git a/src/SMAPI.Toolkit/Framework/Clients/WebApi/ModEntryModel.cs b/src/SMAPI.Toolkit/Framework/Clients/WebApi/ModEntryModel.cs
index d5ca2034..4fc4ea54 100644
--- a/src/SMAPI.Toolkit/Framework/Clients/WebApi/ModEntryModel.cs
+++ b/src/SMAPI.Toolkit/Framework/Clients/WebApi/ModEntryModel.cs
@@ -1,5 +1,3 @@
-#nullable disable
-
using System;
namespace StardewModdingAPI.Toolkit.Framework.Clients.WebApi
@@ -11,15 +9,26 @@ namespace StardewModdingAPI.Toolkit.Framework.Clients.WebApi
** Accessors
*********/
/// <summary>The mod's unique ID (if known).</summary>
- public string ID { get; set; }
+ public string ID { get; }
/// <summary>The update version recommended by the web API based on its version update and mapping rules.</summary>
- public ModEntryVersionModel SuggestedUpdate { get; set; }
+ public ModEntryVersionModel? SuggestedUpdate { get; set; }
/// <summary>Optional extended data which isn't needed for update checks.</summary>
- public ModExtendedMetadataModel Metadata { get; set; }
+ public ModExtendedMetadataModel? Metadata { get; set; }
/// <summary>The errors that occurred while fetching update data.</summary>
public string[] Errors { get; set; } = Array.Empty<string>();
+
+
+ /*********
+ ** Public methods
+ *********/
+ /// <summary>Construct an instance.</summary>
+ /// <param name="id">The mod's unique ID (if known).</param>
+ public ModEntryModel(string id)
+ {
+ this.ID = id;
+ }
}
}
diff --git a/src/SMAPI.Toolkit/Framework/Clients/WebApi/ModEntryVersionModel.cs b/src/SMAPI.Toolkit/Framework/Clients/WebApi/ModEntryVersionModel.cs
index 9aac7fd3..a1e78986 100644
--- a/src/SMAPI.Toolkit/Framework/Clients/WebApi/ModEntryVersionModel.cs
+++ b/src/SMAPI.Toolkit/Framework/Clients/WebApi/ModEntryVersionModel.cs
@@ -1,5 +1,3 @@
-#nullable disable
-
using Newtonsoft.Json;
using StardewModdingAPI.Toolkit.Serialization.Converters;
@@ -13,19 +11,16 @@ namespace StardewModdingAPI.Toolkit.Framework.Clients.WebApi
*********/
/// <summary>The version number.</summary>
[JsonConverter(typeof(NonStandardSemanticVersionConverter))]
- public ISemanticVersion Version { get; set; }
+ public ISemanticVersion Version { get; }
/// <summary>The mod page URL.</summary>
- public string Url { get; set; }
+ public string Url { get; }
/*********
** Public methods
*********/
/// <summary>Construct an instance.</summary>
- public ModEntryVersionModel() { }
-
- /// <summary>Construct an instance.</summary>
/// <param name="version">The version number.</param>
/// <param name="url">The mod page URL.</param>
public ModEntryVersionModel(ISemanticVersion version, string url)
diff --git a/src/SMAPI.Toolkit/Framework/Clients/WebApi/ModExtendedMetadataModel.cs b/src/SMAPI.Toolkit/Framework/Clients/WebApi/ModExtendedMetadataModel.cs
index eb54ec78..272a2063 100644
--- a/src/SMAPI.Toolkit/Framework/Clients/WebApi/ModExtendedMetadataModel.cs
+++ b/src/SMAPI.Toolkit/Framework/Clients/WebApi/ModExtendedMetadataModel.cs
@@ -1,5 +1,3 @@
-#nullable disable
-
using System;
using System.Collections.Generic;
using System.Linq;
@@ -23,7 +21,7 @@ namespace StardewModdingAPI.Toolkit.Framework.Clients.WebApi
public string[] ID { get; set; } = Array.Empty<string>();
/// <summary>The mod's display name.</summary>
- public string Name { get; set; }
+ public string? Name { get; set; }
/// <summary>The mod ID on Nexus.</summary>
public int? NexusID { get; set; }
@@ -35,31 +33,31 @@ namespace StardewModdingAPI.Toolkit.Framework.Clients.WebApi
public int? CurseForgeID { get; set; }
/// <summary>The mod key in the CurseForge mod repo (used in mod page URLs).</summary>
- public string CurseForgeKey { get; set; }
+ public string? CurseForgeKey { get; set; }
/// <summary>The mod ID in the ModDrop mod repo.</summary>
public int? ModDropID { get; set; }
/// <summary>The GitHub repository in the form 'owner/repo'.</summary>
- public string GitHubRepo { get; set; }
+ public string? GitHubRepo { get; set; }
/// <summary>The URL to a non-GitHub source repo.</summary>
- public string CustomSourceUrl { get; set; }
+ public string? CustomSourceUrl { get; set; }
/// <summary>The custom mod page URL (if applicable).</summary>
- public string CustomUrl { get; set; }
+ public string? CustomUrl { get; set; }
/// <summary>The main version.</summary>
- public ModEntryVersionModel Main { get; set; }
+ public ModEntryVersionModel? Main { get; set; }
/// <summary>The latest optional version, if newer than <see cref="Main"/>.</summary>
- public ModEntryVersionModel Optional { get; set; }
+ public ModEntryVersionModel? Optional { get; set; }
/// <summary>The latest unofficial version, if newer than <see cref="Main"/> and <see cref="Optional"/>.</summary>
- public ModEntryVersionModel Unofficial { get; set; }
+ public ModEntryVersionModel? Unofficial { get; set; }
/// <summary>The latest unofficial version for the current Stardew Valley or SMAPI beta, if any.</summary>
- public ModEntryVersionModel UnofficialForBeta { get; set; }
+ public ModEntryVersionModel? UnofficialForBeta { get; set; }
/****
** Stable compatibility
@@ -69,10 +67,10 @@ namespace StardewModdingAPI.Toolkit.Framework.Clients.WebApi
public WikiCompatibilityStatus? CompatibilityStatus { get; set; }
/// <summary>The human-readable summary of the compatibility status or workaround, without HTML formatting.</summary>
- public string CompatibilitySummary { get; set; }
+ public string? CompatibilitySummary { get; set; }
/// <summary>The game or SMAPI version which broke this mod, if applicable.</summary>
- public string BrokeIn { get; set; }
+ public string? BrokeIn { get; set; }
/****
** Beta compatibility
@@ -82,22 +80,22 @@ namespace StardewModdingAPI.Toolkit.Framework.Clients.WebApi
public WikiCompatibilityStatus? BetaCompatibilityStatus { get; set; }
/// <summary>The human-readable summary of the compatibility status or workaround for the Stardew Valley beta (if any), without HTML formatting.</summary>
- public string BetaCompatibilitySummary { get; set; }
+ publi