fix: Codgens more addons (#685)

* Fixes after deserialization not executing for older versions of an object
* Codegens more addons
This commit is contained in:
Kamron Batman 2021-08-15 17:55:04 -07:00 committed by GitHub
parent 25fa9b397b
commit 4c265562bb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
255 changed files with 1514 additions and 3742 deletions

View file

@ -53,6 +53,22 @@ namespace SerializationGenerator
source.AppendLine();
}
var afterDeserialization = classSymbol
.GetMembers()
.OfType<IMethodSymbol>()
.FirstOrDefault(
m =>
m.ReturnsVoid &&
m.Parameters.Length == 0 &&
m.GetAttributes()
.Any(
attr => SymbolEqualityComparer.Default.Equals(
attr.AttributeClass,
compilation.GetTypeByMetadataName(SymbolMetadata.AFTERDESERIALIZATION_ATTRIBUTE)
)
)
);
// Version
source.AppendLine($"{indent}var version = reader.{(encodedVersion ? "ReadEncodedInt" : "ReadInt")}();");
@ -73,6 +89,10 @@ namespace SerializationGenerator
source.AppendLine($"{indent}{{");
source.AppendLine($"{indent} MigrateFrom(new V{migrationVersion}Content(reader));");
source.AppendLine($"{indent} ((Server.ISerializable)this).MarkDirty();");
if (afterDeserialization != null)
{
source.AppendLine($"{indent} Timer.DelayCall({afterDeserialization.Name});");
}
source.AppendLine($"{indent} return;");
source.AppendLine($"{indent}}}");
}
@ -84,6 +104,10 @@ namespace SerializationGenerator
source.AppendLine($"{indent}{{");
source.AppendLine($"{indent} Deserialize(reader, version);");
source.AppendLine($"{indent} ((Server.ISerializable)this).MarkDirty();");
if (afterDeserialization != null)
{
source.AppendLine($"{indent} Timer.DelayCall({afterDeserialization.Name});");
}
source.AppendLine($"{indent} return;");
source.AppendLine($"{indent}}}");
}
@ -99,22 +123,6 @@ namespace SerializationGenerator
);
}
var afterDeserialization = classSymbol
.GetMembers()
.OfType<IMethodSymbol>()
.FirstOrDefault(
m =>
m.ReturnsVoid &&
m.Parameters.Length == 0 &&
m.GetAttributes()
.Any(
attr => SymbolEqualityComparer.Default.Equals(
attr.AttributeClass,
compilation.GetTypeByMetadataName(SymbolMetadata.AFTERDESERIALIZATION_ATTRIBUTE)
)
)
);
if (afterDeserialization != null)
{
source.AppendLine();