summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2020-08-26 22:32:59 -0400
committerJesse Plamondon-Willard <Pathoschild@users.noreply.github.com>2020-08-26 22:32:59 -0400
commit54e7fb7a0bcd994f6d49348c879cb96902dbe07b (patch)
treedbfef1122cdf57a9fd9518f9889a39cc6ef8d480
parentd3c5fe0764806684cc71508abf009473b9d7bc0a (diff)
downloadSMAPI-54e7fb7a0bcd994f6d49348c879cb96902dbe07b.tar.gz
SMAPI-54e7fb7a0bcd994f6d49348c879cb96902dbe07b.tar.bz2
SMAPI-54e7fb7a0bcd994f6d49348c879cb96902dbe07b.zip
fix some broken field references not detected
-rw-r--r--docs/release-notes.md1
-rw-r--r--src/SMAPI/Framework/ModLoading/Finders/ReferenceToMissingMemberFinder.cs5
2 files changed, 3 insertions, 3 deletions
diff --git a/docs/release-notes.md b/docs/release-notes.md
index 7e928aed..21f9d213 100644
--- a/docs/release-notes.md
+++ b/docs/release-notes.md
@@ -15,6 +15,7 @@
* Fixed broken URL in update alerts for unofficial versions.
* Fixed rare error when a mod adds/removes event handlers asynchronously.
* Fixed rare issue where the console showed incorrect colors when mods wrote to it asynchronously.
+ * Fixed SMAPI not always detecting broken field references in mod code.
* Removed the experimental `RewriteInParallel` option added in SMAPI 3.6 (it was already disabled by default). Unfortunately this caused intermittent and unpredictable errors when enabled.
* For modders:
diff --git a/src/SMAPI/Framework/ModLoading/Finders/ReferenceToMissingMemberFinder.cs b/src/SMAPI/Framework/ModLoading/Finders/ReferenceToMissingMemberFinder.cs
index 9afd1de0..75575c97 100644
--- a/src/SMAPI/Framework/ModLoading/Finders/ReferenceToMissingMemberFinder.cs
+++ b/src/SMAPI/Framework/ModLoading/Finders/ReferenceToMissingMemberFinder.cs
@@ -1,5 +1,4 @@
using System.Collections.Generic;
-using System.Linq;
using Mono.Cecil;
using Mono.Cecil.Cil;
using StardewModdingAPI.Framework.ModLoading.Framework;
@@ -35,8 +34,8 @@ namespace StardewModdingAPI.Framework.ModLoading.Finders
FieldReference fieldRef = RewriteHelper.AsFieldReference(instruction);
if (fieldRef != null && this.ShouldValidate(fieldRef.DeclaringType))
{
- FieldDefinition target = fieldRef.DeclaringType.Resolve()?.Fields.FirstOrDefault(p => p.Name == fieldRef.Name);
- if (target == null)
+ FieldDefinition target = fieldRef.Resolve();
+ if (target == null || target.HasConstant)
{
this.MarkFlag(InstructionHandleResult.NotCompatible, $"reference to {fieldRef.DeclaringType.FullName}.{fieldRef.Name} (no such field)");
return false;