fix(codegen): Adds access modifiers to serializable fields (#633)

- [X] Adds options for SerializableField.

Example:
```cs
[SerializableField(0, getter: "protected", setter: "protected", isVritual: true)]
private int _someField;
```

Defaults: `getter: "public", setter: "public", isVirtual: false`
This commit is contained in:
Kamron Batman 2021-06-01 22:53:51 -07:00 committed by GitHub
parent 72d3966541
commit 803b4a33cb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
33 changed files with 183 additions and 164 deletions

View file

@ -21,7 +21,6 @@ using System.Text;
using System.Text.Json;
using Microsoft.CodeAnalysis;
using SerializableMigration;
using SourceGeneration;
namespace SerializationGenerator
{
@ -128,7 +127,7 @@ namespace SerializationGenerator
const string indent = " ";
source.GenerateClassField(
AccessModifier.Private,
Accessibility.Private,
InstanceModifier.Const,
"int",
"_version",
@ -154,8 +153,6 @@ namespace SerializationGenerator
continue;
}
var order = (int)serializableFieldAttr.ConstructorArguments[0].Value!;
foreach (var attr in allAttributes)
{
if (!SymbolEqualityComparer.Default.Equals(attr.AttributeClass, serializableFieldAttrAttribute))
@ -182,9 +179,22 @@ namespace SerializationGenerator
}
}
var attrCtorArgs = serializableFieldAttr.ConstructorArguments;
var order = (int)attrCtorArgs[0].Value!;
var getterAccessor = Helpers.GetAccessibility(attrCtorArgs[1].Value!.ToString());
var setterAccessor = Helpers.GetAccessibility(attrCtorArgs[2].Value!.ToString());
var virtualProperty = (bool)attrCtorArgs[3].Value!;
if (fieldOrPropertySymbol is IFieldSymbol fieldSymbol)
{
source.GenerateSerializableProperty(fieldSymbol, compilation);
source.GenerateSerializableProperty(
compilation,
fieldSymbol,
getterAccessor,
setterAccessor,
virtualProperty
);
source.AppendLine();
}
@ -206,22 +216,22 @@ namespace SerializationGenerator
{
// long ISerializable.SavePosition { get; set; } = -1;
source.GenerateAutoProperty(
AccessModifier.None,
Accessibility.NotApplicable,
"long",
"ISerializable.SavePosition",
AccessModifier.None,
AccessModifier.None,
Accessibility.NotApplicable,
Accessibility.NotApplicable,
indent,
defaultValue: "-1"
);
// BufferWriter ISerializable.SaveBuffer { get; set; }
source.GenerateAutoProperty(
AccessModifier.None,
Accessibility.NotApplicable,
"BufferWriter",
"ISerializable.SaveBuffer",
AccessModifier.None,
AccessModifier.None,
Accessibility.NotApplicable,
Accessibility.NotApplicable,
indent
);
}