public static Process ( TypeDefinition td, TypeReference mirrorBaseType ) : void | ||
td | TypeDefinition | The synclist class |
mirrorBaseType | TypeReference | the base SyncObject td inherits from |
return | void |
public static void Process(TypeDefinition td, TypeReference mirrorBaseType)
{
GenericArgumentResolver resolver = new GenericArgumentResolver(1);
if (resolver.GetGenericFromBaseClass(td, 0, mirrorBaseType, out TypeReference itemType))
{
SyncObjectProcessor.GenerateSerialization(td, itemType, mirrorBaseType, "SerializeItem", "DeserializeItem");
}
else
{
Weaver.Error($"Could not find generic arguments for {mirrorBaseType.Name} in {td}", td);
}
}
}
private static bool CheckSyncList(TypeDefinition td) { if (!td.IsClass) { return(false); } var didWork = false; // are ANY parent classes SyncListStruct var parent = td.BaseType; while (parent != null) { if (parent.FullName.StartsWith(SyncListType.FullName, StringComparison.Ordinal)) { SyncListProcessor.Process(td); didWork = true; break; } if (parent.FullName.StartsWith(SyncSetType.FullName, StringComparison.Ordinal)) { SyncListProcessor.Process(td); didWork = true; break; } if (parent.FullName.StartsWith(SyncDictionaryType.FullName, StringComparison.Ordinal)) { SyncDictionaryProcessor.Process(td); didWork = true; break; } try { parent = parent.Resolve().BaseType; } catch (AssemblyResolutionException) { // this can happen for pluins. //Console.WriteLine("AssemblyResolutionException: "+ ex.ToString()); break; } } // check for embedded types foreach (var embedded in td.NestedTypes) { didWork |= CheckSyncList(embedded); } return(didWork); }