fix(codegen): Removes unused json fields (#691)

This commit is contained in:
Kamron Batman 2021-08-17 09:51:08 -07:00 committed by GitHub
parent 28335ece88
commit 9b047d9d3f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
462 changed files with 511 additions and 945 deletions

View file

@ -358,7 +358,7 @@ namespace SerializationGenerator
{
Version = version,
Type = classSymbol.ToDisplayString(),
Properties = serializableProperties
Properties = serializableProperties.Length > 0 ? serializableProperties : null
};
WriteMigration(migrationPath, newMigration, jsonSerializerOptions);

View file

@ -13,6 +13,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
*************************************************************************/
using System.Collections.Immutable;
using System.Linq;
using System.Text;
using Microsoft.CodeAnalysis;
@ -32,14 +33,16 @@ namespace SerializationGenerator
source.AppendLine($"{indent}ref struct V{migration.Version}Content");
source.AppendLine($"{indent}{{");
foreach (var serializableProperty in migration.Properties)
var properties = migration.Properties ?? ImmutableArray<SerializableProperty>.Empty;
foreach (var serializableProperty in properties)
{
source.AppendLine($"{indent} internal readonly {serializableProperty.Type} {serializableProperty.Name};");
}
var innerIndent = $"{indent} ";
var usesSaveFlags = migration.Properties.Any(p => p.UsesSaveFlag == true);
var usesSaveFlags = properties.Any(p => p.UsesSaveFlag == true);
if (usesSaveFlags)
{
@ -53,7 +56,7 @@ namespace SerializationGenerator
int index = 0;
source.GenerateEnumValue(innerIndent, true, "None", index++);
foreach (var property in migration.Properties)
foreach (var property in properties)
{
if (property.UsesSaveFlag == true)
{
@ -72,10 +75,10 @@ namespace SerializationGenerator
source.AppendLine($"{innerIndent}var saveFlags = reader.ReadEnum<V{migration.Version}SaveFlag>();");
}
if (migration.Properties.Length > 0)
if (properties.Length > 0)
{
source.AppendLine();
foreach (var property in migration.Properties)
foreach (var property in properties)
{
if (property.UsesSaveFlag == true)
{

View file

@ -52,11 +52,14 @@ namespace SerializableMigration
null
);
var length = serializableArrayType.RuleArguments.Length;
var length = serializableArrayType.RuleArguments?.Length?? 0;
ruleArguments = new string[length + 2];
ruleArguments[0] = arrayTypeSymbol.ElementType.ToDisplayString();
ruleArguments[1] = serializableArrayType.Rule;
Array.Copy(serializableArrayType.RuleArguments, 0, ruleArguments, 2, length);
if (length > 0)
{
Array.Copy(serializableArrayType.RuleArguments!, 0, ruleArguments, 2, length);
}
return true;
}
@ -70,7 +73,7 @@ namespace SerializableMigration
throw new ArgumentException($"Invalid rule applied to property {ruleName}. Expecting {expectedRule}, but received {ruleName}.");
}
var ruleArguments = property.RuleArguments;
var arrayElementRule = SerializableMigrationRulesEngine.Rules[ruleArguments[1]];
var arrayElementRule = SerializableMigrationRulesEngine.Rules[ruleArguments![1]];
var arrayElementRuleArguments = new string[ruleArguments.Length - 2];
Array.Copy(ruleArguments, 2, arrayElementRuleArguments, 0, ruleArguments.Length - 2);
@ -102,7 +105,7 @@ namespace SerializableMigration
}
var ruleArguments = property.RuleArguments;
var arrayElementRule = SerializableMigrationRulesEngine.Rules[ruleArguments[1]];
var arrayElementRule = SerializableMigrationRulesEngine.Rules[ruleArguments![1]];
var arrayElementRuleArguments = new string[ruleArguments.Length - 2];
Array.Copy(ruleArguments, 2, arrayElementRuleArguments, 0, ruleArguments.Length - 2);

View file

@ -62,7 +62,7 @@ namespace SerializableMigration
extraOptions += "@Tidy";
}
var length = serializableSetType.RuleArguments.Length;
var length = serializableSetType.RuleArguments?.Length ?? 0;
ruleArguments = new string[length + 3];
ruleArguments[0] = extraOptions;
ruleArguments[1] = setTypeSymbol.ToDisplayString();
@ -82,7 +82,7 @@ namespace SerializableMigration
}
var ruleArguments = property.RuleArguments;
var hasExtraOptions = ruleArguments[0] == "" || ruleArguments[0].StartsWith("@", StringComparison.Ordinal);
var hasExtraOptions = ruleArguments![0] == "" || ruleArguments[0].StartsWith("@", StringComparison.Ordinal);
var argumentsOffset = hasExtraOptions ? 1 : 0;
var setElementRule = SerializableMigrationRulesEngine.Rules[ruleArguments[1 + argumentsOffset]];
@ -125,7 +125,7 @@ namespace SerializableMigration
}
var ruleArguments = property.RuleArguments;
var hasExtraOptions = ruleArguments[0] == "" || ruleArguments[0].StartsWith("@", StringComparison.Ordinal);
var hasExtraOptions = ruleArguments![0] == "" || ruleArguments[0].StartsWith("@", StringComparison.Ordinal);
var shouldTidy = hasExtraOptions && ruleArguments[0].Contains("@Tidy");
var argumentsOffset = hasExtraOptions ? 1 : 0;

View file

@ -67,18 +67,28 @@ namespace SerializableMigration
null
);
var keyArgumentsLength = keySerializedProperty.RuleArguments?.Length ?? 0;
var valueArgumentsLength = valueSerializedProperty.RuleArguments?.Length ?? 0;
var index = 0;
// Key
ruleArguments = new string[5 + keySerializedProperty.RuleArguments.Length + valueSerializedProperty.RuleArguments.Length];
ruleArguments[0] = typeArguments[0].ToDisplayString();
ruleArguments[1] = keySerializedProperty.Rule;
ruleArguments[2] = keySerializedProperty.RuleArguments.Length.ToString();
Array.Copy(keySerializedProperty.RuleArguments, 0, ruleArguments, 2, keySerializedProperty.RuleArguments.Length);
ruleArguments = new string[5 + keyArgumentsLength + valueArgumentsLength];
ruleArguments[index++] = typeArguments[0].ToDisplayString();
ruleArguments[index++] = keySerializedProperty.Rule;
ruleArguments[index++] = keyArgumentsLength.ToString();
if (keyArgumentsLength > 0)
{
Array.Copy(keySerializedProperty.RuleArguments!, 0, ruleArguments, index, keyArgumentsLength);
}
// Value
var valueIndex = 3 + keySerializedProperty.RuleArguments.Length;
ruleArguments[valueIndex++] = typeArguments[1].ToDisplayString();
ruleArguments[valueIndex++] = valueSerializedProperty.Rule;
Array.Copy(valueSerializedProperty.RuleArguments, 0, ruleArguments, valueIndex, valueSerializedProperty.RuleArguments.Length);
ruleArguments[index++] = typeArguments[1].ToDisplayString();
ruleArguments[index++] = valueSerializedProperty.Rule;
if (valueArgumentsLength > 0)
{
Array.Copy(valueSerializedProperty.RuleArguments!, 0, ruleArguments, index, valueArgumentsLength);
}
return true;
}
@ -93,7 +103,7 @@ namespace SerializableMigration
}
var ruleArguments = property.RuleArguments;
var keyType = ruleArguments[0];
var keyType = ruleArguments![0];
var keyRule = SerializableMigrationRulesEngine.Rules[ruleArguments[1]];
var keyRuleArguments = new string[int.Parse(ruleArguments[2])];
Array.Copy(ruleArguments, 3, keyRuleArguments, 0, keyRuleArguments.Length);
@ -149,7 +159,7 @@ namespace SerializableMigration
}
var ruleArguments = property.RuleArguments;
var keyType = ruleArguments[0];
var keyType = ruleArguments![0];
var keyRule = SerializableMigrationRulesEngine.Rules[ruleArguments[1]];
var keyRuleArguments = new string[int.Parse(ruleArguments[2])];
Array.Copy(ruleArguments, 3, keyRuleArguments, 0, keyRuleArguments.Length);

View file

@ -62,12 +62,16 @@ namespace SerializableMigration
extraOptions += "@Tidy";
}
var length = serializableListType.RuleArguments.Length;
var length = serializableListType.RuleArguments?.Length ?? 0;
ruleArguments = new string[length + 3];
ruleArguments[0] = extraOptions;
ruleArguments[1] = listTypeSymbol.ToDisplayString();
ruleArguments[2] = serializableListType.Rule;
Array.Copy(serializableListType.RuleArguments, 0, ruleArguments, 3, length);
if (length > 0)
{
Array.Copy(serializableListType.RuleArguments!, 0, ruleArguments, 3, length);
}
return true;
}
@ -82,7 +86,7 @@ namespace SerializableMigration
}
var ruleArguments = property.RuleArguments;
var hasExtraOptions = ruleArguments[0] == "" || ruleArguments[0].StartsWith("@", StringComparison.Ordinal);
var hasExtraOptions = ruleArguments![0] == "" || ruleArguments[0].StartsWith("@", StringComparison.Ordinal);
var argumentsOffset = hasExtraOptions ? 1 : 0;
var listElementRule = SerializableMigrationRulesEngine.Rules[ruleArguments[argumentsOffset + 1]];
@ -126,7 +130,7 @@ namespace SerializableMigration
}
var ruleArguments = property.RuleArguments;
var hasExtraOptions = ruleArguments[0] == "" || ruleArguments[0].StartsWith("@", StringComparison.Ordinal);
var hasExtraOptions = ruleArguments![0] == "" || ruleArguments[0].StartsWith("@", StringComparison.Ordinal);
var shouldTidy = hasExtraOptions && ruleArguments[0].Contains("@Tidy");
var argumentsOffset = hasExtraOptions ? 1 : 0;

View file

@ -90,7 +90,7 @@ namespace SerializableMigration
}
var propertyName = property.Name;
var argument = property.RuleArguments.Length >= 1 ? property.RuleArguments[0] : null;
var argument = property.RuleArguments?.Length >= 1 ? property.RuleArguments[0] : null;
const string ipAddress = SymbolMetadata.IPADDRESS_CLASS;
const string timeSpan = SymbolMetadata.TIMESPAN_STRUCT;
@ -133,7 +133,7 @@ namespace SerializableMigration
}
var propertyName = property.Name;
var argument = property.RuleArguments.Length >= 1 ? property.RuleArguments[0] : null;
var argument = property.RuleArguments?.Length >= 1 ? property.RuleArguments[0] : null;
var writeMethod = property.Type switch
{

View file

@ -59,7 +59,7 @@ namespace SerializableMigration
}
var propertyName = property.Name;
source.AppendLine($"{indent}{propertyName} = reader.Read{property.RuleArguments[0]}();");
source.AppendLine($"{indent}{propertyName} = reader.Read{property.RuleArguments?[0] ?? ""}();");
}
public void GenerateSerializationMethod(StringBuilder source, string indent, SerializableProperty property)

View file

@ -62,7 +62,7 @@ namespace SerializableMigration
}
var propertyName = property.Name;
var argument = property.RuleArguments.Length >= 1 &&
var argument = property.RuleArguments?.Length >= 1 &&
property.RuleArguments[0] == "DeserializationRequiresParent" ? ", this" : "";
source.AppendLine($"{indent}{propertyName} = new {property.Type}(reader{argument});");

View file

@ -60,7 +60,7 @@ namespace SerializableMigration
var propertyName = property.Name;
var ruleArguments = property.RuleArguments;
var driftTimer = ruleArguments[0].Contains("@TimerDrift");
var driftTimer = ruleArguments![0].Contains("@TimerDrift");
var readTimer = driftTimer ? "reader.ReadDeltaTime()" : "reader.ReadDateTime()";
source.AppendLine($"{indent}var {propertyName}Delay = {readTimer} - Core.Now;");
@ -77,7 +77,7 @@ namespace SerializableMigration
var propertyName = property.Name;
var ruleArguments = property.RuleArguments;
var driftTimer = ruleArguments[0].Contains("@TimerDrift");
var driftTimer = ruleArguments![0].Contains("@TimerDrift");
var writerMethod = driftTimer ? "WriteDeltaTime" : "Write";
source.AppendLine($"{indent}writer.{writerMethod}({propertyName}.Next);");

View file

@ -27,6 +27,6 @@ namespace SerializableMigration
public string Type { get; init; }
[JsonPropertyName("properties")]
public ImmutableArray<SerializableProperty> Properties { get; init; }
public ImmutableArray<SerializableProperty>? Properties { get; init; }
}
}

View file

@ -121,7 +121,7 @@ namespace SerializableMigration
Order = order,
UsesSaveFlag = serializablePropertyFlagGetter != null ? true : null,
Rule = rule.RuleName,
RuleArguments = ruleArguments
RuleArguments = ruleArguments.Length > 0 ? ruleArguments : null
};
}
}

View file

@ -32,7 +32,7 @@ namespace SerializableMigration
public string Rule { get; init; }
[JsonPropertyName("ruleArguments")]
public string[] RuleArguments { get; init; }
public string[]? RuleArguments { get; init; }
[JsonIgnore]
public int Order { get; init; }