mirror of
https://github.com/misternebula/quantum-space-buddies.git
synced 2025-02-19 03:39:50 +00:00
FindAllPublicFields_Improved: return field ref, specialize field
This commit is contained in:
parent
156ff291e3
commit
230b26c937
@ -1,4 +1,6 @@
|
||||
using Mono.Cecil;
|
||||
using Mirror.Weaver;
|
||||
using Mono.Cecil;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace MirrorWeaver;
|
||||
@ -9,8 +11,9 @@ public static class ImprovedExtensions
|
||||
/// filters ONLY public fields instead of all non-private <br/>
|
||||
/// replaces generic parameter fields with their corresponding argument
|
||||
/// </summary>
|
||||
public static IEnumerable<FieldDefinition> FindAllPublicFields_Improved(this TypeReference tr)
|
||||
public static IEnumerable<FieldReference> FindAllPublicFields_Improved(this TypeReference tr)
|
||||
{
|
||||
Console.WriteLine($"FindAllPublicFields_Improved {tr}");
|
||||
while (tr != null)
|
||||
{
|
||||
var td = tr.Resolve();
|
||||
@ -26,15 +29,24 @@ public static class ImprovedExtensions
|
||||
continue;
|
||||
}
|
||||
|
||||
if (fd.FieldType is GenericParameter gp && gp.Owner == td)
|
||||
FieldReference fr;
|
||||
if (tr is GenericInstanceType git &&
|
||||
fd.FieldType is GenericParameter gp &&
|
||||
gp.Owner == td)
|
||||
{
|
||||
fd.FieldType = ((GenericInstanceType)tr).GenericArguments[gp.Position];
|
||||
fr = fd.SpecializeField(fd.Module, git);
|
||||
Console.WriteLine($"\t\t{fd.FieldType} -> {fr.FieldType}");
|
||||
}
|
||||
else
|
||||
{
|
||||
fr = fd.Module.ImportReference(fd);
|
||||
}
|
||||
|
||||
yield return fd;
|
||||
Console.WriteLine($"\t\t{fd}");
|
||||
yield return fr;
|
||||
}
|
||||
|
||||
tr = td.BaseType;
|
||||
tr = td.BaseType?.ApplyGenericParameters(tr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user