diff --git a/generator/plugins/dotnet/custom/OrType.cs b/generator/plugins/dotnet/custom/OrType.cs index 458f917..e80a336 100644 --- a/generator/plugins/dotnet/custom/OrType.cs +++ b/generator/plugins/dotnet/custom/OrType.cs @@ -1,6 +1,6 @@ using System; -public class OrType : IOrType +public record OrType : IOrType { public object? Value { get; } public OrType(T t) @@ -32,7 +32,7 @@ public override string ToString() } } -public class OrType : IOrType +public record OrType : IOrType { public object? Value { get; } @@ -79,7 +79,7 @@ public override string ToString() } -public class OrType : IOrType +public record OrType : IOrType { public object? Value { get; } diff --git a/generator/plugins/dotnet/dotnet_classes.py b/generator/plugins/dotnet/dotnet_classes.py index d16dd77..fce8a9e 100644 --- a/generator/plugins/dotnet/dotnet_classes.py +++ b/generator/plugins/dotnet/dotnet_classes.py @@ -219,12 +219,10 @@ def generate_property( if prop_def.type.kind == "stringLiteral": lines.append( - f'public {type_name}{optional} {name} {{ get; set; }} = "{prop_def.type.value}";' + f'public {type_name}{optional} {name} {{ get; init; }} = "{prop_def.type.value}";' ) - elif prop_def.type.kind == "base" and prop_def.type.name == "null": - lines.append(f"public {type_name}{optional} {name} {{ get; set; }} = null;") else: - lines.append(f"public {type_name}{optional} {name} {{ get; set; }}") + lines.append(f"public {type_name}{optional} {name} {{ get; init; }}") usings.append("DataMember") if converter: diff --git a/generator/plugins/dotnet/dotnet_helpers.py b/generator/plugins/dotnet/dotnet_helpers.py index 5d83351..9527142 100644 --- a/generator/plugins/dotnet/dotnet_helpers.py +++ b/generator/plugins/dotnet/dotnet_helpers.py @@ -108,19 +108,23 @@ def class_wrapper( inner: List[str], derived: Optional[str] = None, class_attributes: Optional[List[str]] = None, + is_record=True, ) -> List[str]: if hasattr(type_def, "name"): name = get_special_case_class_name(type_def.name) else: raise ValueError(f"Unknown type: {type_def}") + rec_or_cls = "record" if is_record else "class" lines = ( get_doc(type_def.documentation) + generate_extras(type_def) + (class_attributes if class_attributes else []) + [ "[DataContract]", - f"public class {name}: {derived}" if derived else f"public class {name}", + f"public {rec_or_cls} {name}: {derived}" + if derived + else f"public {rec_or_cls} {name}", "{", ] ) diff --git a/generator/plugins/dotnet/dotnet_special_classes.py b/generator/plugins/dotnet/dotnet_special_classes.py index 0300cbb..a656b6d 100644 --- a/generator/plugins/dotnet/dotnet_special_classes.py +++ b/generator/plugins/dotnet/dotnet_special_classes.py @@ -45,6 +45,7 @@ def generate_special_class( ["public LSPObject(Dictionary value):base(value){}"], "Dictionary", ["[JsonConverter(typeof(CustomObjectConverter))]"], + is_record=False, ), ) if type_def.name == "InitializedParams": @@ -58,6 +59,7 @@ def generate_special_class( ], "Dictionary", ["[JsonConverter(typeof(CustomObjectConverter))]"], + is_record=False, ), ) if type_def.name == "LSPAny": @@ -82,6 +84,7 @@ def generate_special_class( type_def, ["public LSPArray(List value):base(value){}"], "List", + is_record=False, ), )