Skip to content

Commit b2adefc

Browse files
authored
Dotnet change uint to long (#295)
Closes #255
1 parent de7276d commit b2adefc

3 files changed

Lines changed: 69 additions & 43 deletions

File tree

generator/plugins/dotnet/custom/OrTypeConverter.cs

Lines changed: 42 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public class OrTypeConverter<T, U> : JsonConverter<OrType<T, U>>
3737

3838
Type[] types = new Type[] { typeof(T), typeof(U) };
3939

40-
if (reader.TokenType == JsonToken.Integer && (Validators.HasType(types, typeof(uint)) || Validators.HasType(types, typeof(int))))
40+
if (reader.TokenType == JsonToken.Integer && (Validators.HasType(types, typeof(long)) || Validators.HasType(types, typeof(int))))
4141
{
4242
return ReadIntegerToken(reader, serializer, types);
4343
}
@@ -61,15 +61,15 @@ public class OrTypeConverter<T, U> : JsonConverter<OrType<T, U>>
6161
private static OrType<T, U> ReadIntegerToken(JsonReader reader, JsonSerializer serializer, Type[] types)
6262
{
6363
long integer = serializer.Deserialize<long>(reader);
64-
if (Validators.InUIntegerRange(integer) && Validators.HasType(types, typeof(uint)))
64+
if (Validators.InUIntegerRange(integer) && Validators.HasType(types, typeof(long)))
6565
{
66-
if (typeof(T) == typeof(uint))
66+
if (typeof(T) == typeof(long))
6767
{
68-
return new OrType<T, U>((T)(object)(uint)integer);
68+
return new OrType<T, U>((T)(object)(long)integer);
6969
}
70-
if (typeof(U) == typeof(uint))
70+
if (typeof(U) == typeof(long))
7171
{
72-
return new OrType<T, U>((U)(object)(uint)integer);
72+
return new OrType<T, U>((U)(object)(long)integer);
7373
}
7474
}
7575
if (Validators.InIntegerRange(integer) && Validators.HasType(types, typeof(int)))
@@ -83,7 +83,7 @@ private static OrType<T, U> ReadIntegerToken(JsonReader reader, JsonSerializer s
8383
return new OrType<T, U>((U)(object)(int)integer);
8484
}
8585
}
86-
throw new ArgumentOutOfRangeException($"Integer out-of-range of LSP Signed Integer[{int.MinValue}:{int.MaxValue}] and out-of-range of LSP Unsigned Integer [{uint.MinValue}:{uint.MaxValue}] => {integer}");
86+
throw new ArgumentOutOfRangeException($"Integer out-of-range of LSP Signed Integer[{int.MinValue}:{int.MaxValue}] and out-of-range of LSP Unsigned Integer [{long.MinValue}:{long.MaxValue}] => {integer}");
8787
}
8888

8989
private static OrType<T, U> ReadFloatToken(JsonReader reader, JsonSerializer serializer, Type[] types)
@@ -136,9 +136,9 @@ private static OrType<T, U> ReadObjectToken(JToken token, JsonSerializer seriali
136136
try
137137
{
138138
object? value = null;
139-
if (token.Type == JTokenType.Array && type == typeof((uint, uint)))
139+
if (token.Type == JTokenType.Array && type == typeof((long, long)))
140140
{
141-
uint[]? o = token.ToObject<uint[]>(serializer);
141+
long[]? o = token.ToObject<long[]>(serializer);
142142
if (o != null)
143143
{
144144
value = (o[0], o[1]);
@@ -179,10 +179,10 @@ public override void WriteJson(JsonWriter writer, OrType<T, U>? value, JsonSeria
179179
{
180180
writer.WriteNull();
181181
}
182-
else if (value?.Value?.GetType() == typeof((uint, uint)))
182+
else if (value?.Value?.GetType() == typeof((long, long)))
183183
{
184-
ValueTuple<uint, uint> o = (ValueTuple<uint, uint>)(value.Value);
185-
serializer.Serialize(writer, new uint[] { o.Item1, o.Item2 });
184+
ValueTuple<long, long> o = (ValueTuple<long, long>)(value.Value);
185+
serializer.Serialize(writer, new long[] { o.Item1, o.Item2 });
186186
}
187187
else
188188
{
@@ -204,7 +204,7 @@ public class OrTypeConverter<T, U, V> : JsonConverter<OrType<T, U, V>>
204204

205205
Type[] types = new Type[] { typeof(T), typeof(U), typeof(V) };
206206

207-
if (reader.TokenType == JsonToken.Integer && (Validators.HasType(types, typeof(uint)) || Validators.HasType(types, typeof(int))))
207+
if (reader.TokenType == JsonToken.Integer && (Validators.HasType(types, typeof(long)) || Validators.HasType(types, typeof(int))))
208208
{
209209
return ReadIntegerToken(reader, serializer, types);
210210
}
@@ -228,19 +228,19 @@ public class OrTypeConverter<T, U, V> : JsonConverter<OrType<T, U, V>>
228228
private static OrType<T, U, V> ReadIntegerToken(JsonReader reader, JsonSerializer serializer, Type[] types)
229229
{
230230
long integer = serializer.Deserialize<long>(reader);
231-
if (Validators.InUIntegerRange(integer) && Validators.HasType(types, typeof(uint)))
231+
if (Validators.InUIntegerRange(integer) && Validators.HasType(types, typeof(long)))
232232
{
233-
if (typeof(T) == typeof(uint))
233+
if (typeof(T) == typeof(long))
234234
{
235-
return new OrType<T, U, V>((T)(object)(uint)integer);
235+
return new OrType<T, U, V>((T)(object)(long)integer);
236236
}
237-
if (typeof(U) == typeof(uint))
237+
if (typeof(U) == typeof(long))
238238
{
239-
return new OrType<T, U, V>((U)(object)(uint)integer);
239+
return new OrType<T, U, V>((U)(object)(long)integer);
240240
}
241-
if (typeof(V) == typeof(uint))
241+
if (typeof(V) == typeof(long))
242242
{
243-
return new OrType<T, U, V>((V)(object)(uint)integer);
243+
return new OrType<T, U, V>((V)(object)(long)integer);
244244
}
245245
}
246246
if (Validators.InIntegerRange(integer) && Validators.HasType(types, typeof(int)))
@@ -258,7 +258,7 @@ private static OrType<T, U, V> ReadIntegerToken(JsonReader reader, JsonSerialize
258258
return new OrType<T, U, V>((V)(object)(int)integer);
259259
}
260260
}
261-
throw new ArgumentOutOfRangeException($"Integer out-of-range of LSP Signed Integer[{int.MinValue}:{int.MaxValue}] and out-of-range of LSP Unsigned Integer [{uint.MinValue}:{uint.MaxValue}] => {integer}");
261+
throw new ArgumentOutOfRangeException($"Integer out-of-range of LSP Signed Integer[{int.MinValue}:{int.MaxValue}] and out-of-range of LSP Unsigned Integer [{long.MinValue}:{long.MaxValue}] => {integer}");
262262
}
263263

264264
private static OrType<T, U, V> ReadFloatToken(JsonReader reader, JsonSerializer serializer, Type[] types)
@@ -323,9 +323,9 @@ private static OrType<T, U, V> ReadObjectToken(JToken token, JsonSerializer seri
323323
try
324324
{
325325
object? value = null;
326-
if (token.Type == JTokenType.Array && type == typeof((uint, uint)))
326+
if (token.Type == JTokenType.Array && type == typeof((long, long)))
327327
{
328-
uint[]? o = token.ToObject<uint[]>(serializer);
328+
long[]? o = token.ToObject<long[]>(serializer);
329329
if (o != null)
330330
{
331331
value = (o[0], o[1]);
@@ -368,10 +368,10 @@ public override void WriteJson(JsonWriter writer, OrType<T, U, V>? value, JsonSe
368368
{
369369
writer.WriteNull();
370370
}
371-
else if (value?.Value?.GetType() == typeof((uint, uint)))
371+
else if (value?.Value?.GetType() == typeof((long, long)))
372372
{
373-
ValueTuple<uint, uint> o = (ValueTuple<uint, uint>)(value.Value);
374-
serializer.Serialize(writer, new uint[] { o.Item1, o.Item2 });
373+
ValueTuple<long, long> o = (ValueTuple<long, long>)(value.Value);
374+
serializer.Serialize(writer, new long[] { o.Item1, o.Item2 });
375375
}
376376
else
377377
{
@@ -393,7 +393,7 @@ public class OrTypeConverter<T, U, V, W> : JsonConverter<OrType<T, U, V, W>>
393393

394394
Type[] types = new Type[] { typeof(T), typeof(U), typeof(V), typeof(W) };
395395

396-
if (reader.TokenType == JsonToken.Integer && (Validators.HasType(types, typeof(uint)) || Validators.HasType(types, typeof(int))))
396+
if (reader.TokenType == JsonToken.Integer && (Validators.HasType(types, typeof(long)) || Validators.HasType(types, typeof(int))))
397397
{
398398
return ReadIntegerToken(reader, serializer, types);
399399
}
@@ -417,23 +417,23 @@ public class OrTypeConverter<T, U, V, W> : JsonConverter<OrType<T, U, V, W>>
417417
private static OrType<T, U, V, W> ReadIntegerToken(JsonReader reader, JsonSerializer serializer, Type[] types)
418418
{
419419
long integer = serializer.Deserialize<long>(reader);
420-
if (Validators.InUIntegerRange(integer) && Validators.HasType(types, typeof(uint)))
420+
if (Validators.InUIntegerRange(integer) && Validators.HasType(types, typeof(long)))
421421
{
422-
if (typeof(T) == typeof(uint))
422+
if (typeof(T) == typeof(long))
423423
{
424-
return new OrType<T, U, V, W>((T)(object)(uint)integer);
424+
return new OrType<T, U, V, W>((T)(object)(long)integer);
425425
}
426-
if (typeof(U) == typeof(uint))
426+
if (typeof(U) == typeof(long))
427427
{
428-
return new OrType<T, U, V, W>((U)(object)(uint)integer);
428+
return new OrType<T, U, V, W>((U)(object)(long)integer);
429429
}
430-
if (typeof(V) == typeof(uint))
430+
if (typeof(V) == typeof(long))
431431
{
432-
return new OrType<T, U, V, W>((V)(object)(uint)integer);
432+
return new OrType<T, U, V, W>((V)(object)(long)integer);
433433
}
434-
if (typeof(W) == typeof(uint))
434+
if (typeof(W) == typeof(long))
435435
{
436-
return new OrType<T, U, V, W>((W)(object)(uint)integer);
436+
return new OrType<T, U, V, W>((W)(object)(long)integer);
437437
}
438438
}
439439
if (Validators.InIntegerRange(integer) && Validators.HasType(types, typeof(int)))
@@ -455,7 +455,7 @@ private static OrType<T, U, V, W> ReadIntegerToken(JsonReader reader, JsonSerial
455455
return new OrType<T, U, V, W>((W)(object)(int)integer);
456456
}
457457
}
458-
throw new ArgumentOutOfRangeException($"Integer out-of-range of LSP Signed Integer[{int.MinValue}:{int.MaxValue}] and out-of-range of LSP Unsigned Integer [{uint.MinValue}:{uint.MaxValue}] => {integer}");
458+
throw new ArgumentOutOfRangeException($"Integer out-of-range of LSP Signed Integer[{int.MinValue}:{int.MaxValue}] and out-of-range of LSP Unsigned Integer [{long.MinValue}:{long.MaxValue}] => {integer}");
459459
}
460460

461461
private static OrType<T, U, V, W> ReadFloatToken(JsonReader reader, JsonSerializer serializer, Type[] types)
@@ -532,9 +532,9 @@ private static OrType<T, U, V, W> ReadObjectToken(JToken token, JsonSerializer s
532532
try
533533
{
534534
object? value = null;
535-
if (token.Type == JTokenType.Array && type == typeof((uint, uint)))
535+
if (token.Type == JTokenType.Array && type == typeof((long, long)))
536536
{
537-
uint[]? o = token.ToObject<uint[]>(serializer);
537+
long[]? o = token.ToObject<long[]>(serializer);
538538
if (o != null)
539539
{
540540
value = (o[0], o[1]);
@@ -582,10 +582,10 @@ public override void WriteJson(JsonWriter writer, OrType<T, U, V, W>? value, Jso
582582
{
583583
writer.WriteNull();
584584
}
585-
else if (value?.Value?.GetType() == typeof((uint, uint)))
585+
else if (value?.Value?.GetType() == typeof((long, long)))
586586
{
587-
ValueTuple<uint, uint> o = (ValueTuple<uint, uint>)(value.Value);
588-
serializer.Serialize(writer, new uint[] { o.Item1, o.Item2 });
587+
ValueTuple<long, long> o = (ValueTuple<long, long>)(value.Value);
588+
serializer.Serialize(writer, new long[] { o.Item1, o.Item2 });
589589
}
590590
else
591591
{

generator/plugins/dotnet/custom/Validators.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,24 @@ public static bool InUIntegerRange(long value)
1717
{
1818
return value >= uint.MinValue && value <= uint.MaxValue;
1919
}
20+
21+
public static long? validUInteger(long? value){
22+
if(value == null){
23+
return null;
24+
}
25+
26+
if (Validators.InUIntegerRange((long)value))
27+
{
28+
return value;
29+
}
30+
throw new ArgumentOutOfRangeException("value", value, "Value is not in the range of LSP uinteger");
31+
}
32+
33+
public static long validUInteger(long value){
34+
if (Validators.InUIntegerRange(value))
35+
{
36+
return value;
37+
}
38+
throw new ArgumentOutOfRangeException("value", value, "Value is not in the range of LSP uinteger");
39+
}
2040
}

generator/plugins/dotnet/dotnet_classes.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def lsp_to_base_types(lsp_type: model.BaseType):
6060
elif lsp_type.name in ["integer"]:
6161
return "int"
6262
elif lsp_type.name in ["uinteger"]:
63-
return "uint"
63+
return "long"
6464
elif lsp_type.name in ["boolean"]:
6565
return "bool"
6666
elif lsp_type.name in ["null"]:
@@ -250,6 +250,12 @@ def generate_property(
250250
lines.append(
251251
f'public {type_name}{optional} {name} {{ get; init; }} = "{prop_def.type.value}";'
252252
)
253+
elif prop_def.type.kind == "base" and prop_def.type.name == "uinteger":
254+
private_name = f"_{prop_def.name}" if prop_def.name == name else prop_def.name
255+
lines.append(
256+
f"public {type_name}{optional} {name} {{ get => {private_name}; set => {private_name} = Validators.validUInteger(value); }}"
257+
)
258+
lines.append(f"private {type_name}{optional} {private_name};")
253259
else:
254260
lines.append(f"public {type_name}{optional} {name} {{ get; init; }}")
255261

0 commit comments

Comments
 (0)