[fix] fix the bug in `MissingMetadataChecker` where it did not check for missing fields.

main
walon 2024-11-05 18:48:04 +08:00
parent f19ba3eb30
commit 7d287a2293
1 changed files with 14 additions and 9 deletions

View File

@ -61,31 +61,36 @@ namespace HybridCLR.Editor.HotUpdate
} }
} }
foreach (IMethodDefOrRef methodRef in mod.GetMemberRefs()) foreach (IMethodDefOrRef memberRef in mod.GetMemberRefs())
{ {
if (methodRef.DeclaringType.DefinitionAssembly == null) if (memberRef.DeclaringType.DefinitionAssembly == null)
{ {
continue; continue;
} }
string defAssName = methodRef.DeclaringType.DefinitionAssembly.Name; string defAssName = memberRef.DeclaringType.DefinitionAssembly.Name;
if (!_aotAssNames.Contains(defAssName)) if (!_aotAssNames.Contains(defAssName))
{ {
continue; continue;
} }
if (methodRef.IsField) if (memberRef.IsField)
{ {
IField field = (IField)memberRef;
if (field.ResolveFieldDef() == null)
{
UnityEngine.Debug.LogError($"Missing Field: {memberRef.FullName}");
anyMissing = true;
} }
else if (methodRef.IsMethod) }
else if (memberRef.IsMethod)
{ {
TypeSig declaringTypeSig = methodRef.DeclaringType.ToTypeSig(); TypeSig declaringTypeSig = memberRef.DeclaringType.ToTypeSig();
if (methodRef.ResolveMethodDef() == null) if (memberRef.ResolveMethodDef() == null)
{ {
if (declaringTypeSig.ElementType == ElementType.Array || declaringTypeSig.ElementType == ElementType.SZArray) if (declaringTypeSig.ElementType == ElementType.Array || declaringTypeSig.ElementType == ElementType.SZArray)
{ {
continue; continue;
} }
UnityEngine.Debug.LogError($"Missing Method: {methodRef.FullName}"); UnityEngine.Debug.LogError($"Missing Method: {memberRef.FullName}");
anyMissing = true; anyMissing = true;
} }
} }