~ruther/NosSmooth

ff35a829b527c05db354c40875439a454d3239b8 — František Boháček 3 years ago 9ac147d
fix: check for null after popping the string enumerator level
M Core/NosSmooth.PacketSerializersGenerator/AttributeGenerators/PacketConditionalIndexAttributeGenerator.cs => Core/NosSmooth.PacketSerializersGenerator/AttributeGenerators/PacketConditionalIndexAttributeGenerator.cs +5 -0
@@ 288,6 288,11 @@ public class PacketConditionalIndexAttributeGenerator : IParameterGenerator
            generator.PopLevel();
        }

        if (!packetInfo.Parameters.IsLast)
        {
            generator.ValidateNotLast(parameter.Name);
        }

        // end is last token if body
        if (parameter.IsOptional())
        {

M Core/NosSmooth.PacketSerializersGenerator/AttributeGenerators/PacketContextListAttributeGenerator.cs => Core/NosSmooth.PacketSerializersGenerator/AttributeGenerators/PacketContextListAttributeGenerator.cs +5 -0
@@ 125,6 125,11 @@ public class PacketContextListAttributeGenerator : IParameterGenerator

        generator.AssignLocalVariable(parameter);

        if (!packetInfo.Parameters.IsLast)
        {
            generator.ValidateNotLast(parameter.Name);
        }

        // end is last token if body
        if (parameter.IsOptional())
        {

M Core/NosSmooth.PacketSerializersGenerator/AttributeGenerators/PacketGreedyIndexAttributeGenerator.cs => Core/NosSmooth.PacketSerializersGenerator/AttributeGenerators/PacketGreedyIndexAttributeGenerator.cs +5 -0
@@ 97,6 97,11 @@ public class PacketGreedyIndexAttributeGenerator : IParameterGenerator
            generator.PopLevel();
        }

        if (!packetInfo.Parameters.IsLast)
        {
            generator.ValidateNotLast(parameter.Name);
        }

        // end is last token if body
        if (parameter.IsOptional())
        {

M Core/NosSmooth.PacketSerializersGenerator/AttributeGenerators/PacketIndexAttributeGenerator.cs => Core/NosSmooth.PacketSerializersGenerator/AttributeGenerators/PacketIndexAttributeGenerator.cs +5 -0
@@ 138,6 138,11 @@ public class PacketIndexAttributeGenerator : IParameterGenerator
            generator.PopLevel();
        }

        if (!packetInfo.Parameters.IsLast)
        {
            generator.ValidateNotLast(parameter.Name);
        }

        // end is last token if body
        if (parameter.IsOptional())
        {

M Core/NosSmooth.PacketSerializersGenerator/AttributeGenerators/PacketListIndexAttributeGenerator.cs => Core/NosSmooth.PacketSerializersGenerator/AttributeGenerators/PacketListIndexAttributeGenerator.cs +5 -0
@@ 129,6 129,11 @@ public class PacketListIndexAttributeGenerator : IParameterGenerator

        generator.AssignLocalVariable(parameter, false);

        if (!packetInfo.Parameters.IsLast)
        {
            generator.ValidateNotLast(parameter.Name);
        }

        // end is last token if body
        if (parameter.IsOptional())
        {

M Core/NosSmooth.PacketSerializersGenerator/ConverterDeserializationGenerator.cs => Core/NosSmooth.PacketSerializersGenerator/ConverterDeserializationGenerator.cs +14 -0
@@ 164,4 164,18 @@ if ({nullableVariableName} is null) {{
        _textWriter.Indent--;
        _textWriter.WriteLine("}");
    }

    /// <summary>
    /// Validates that the string enumerator is currently not at the last token.
    /// </summary>
    /// <param name="parameterName">The parameter that is being converted.</param>
    public void ValidateNotLast(string parameterName)
    {
        _textWriter.WriteLine($"if ({_stringEnumeratorVariable}.IsOnLastToken() ?? false)");
        _textWriter.WriteLine("{");
        _textWriter.Indent++;
        _textWriter.WriteLine($"return new PacketEndNotExpectedError(this, \"{parameterName}\");");
        _textWriter.Indent--;
        _textWriter.WriteLine("}");
    }
}
\ No newline at end of file

M Core/NosSmooth.PacketSerializersGenerator/PacketConverterGenerator.cs => Core/NosSmooth.PacketSerializersGenerator/PacketConverterGenerator.cs +0 -5
@@ 120,11 120,6 @@ private IResultError? CheckDeserializationResult<T>(Result<T> result, string pro
        return new PacketParameterSerializerError(this, property, result);
    }}

    if (!last && (stringEnumerator.IsOnLastToken() ?? false))
    {{
        return new PacketEndNotExpectedError(this, property);
    }}

    return null;
}}
}}"