Skip to content

Commit 5ca4d63

Browse files
authored
Fixed type nullability within DataLoader`s (#8482)
1 parent 162a68a commit 5ca4d63

12 files changed

+540
-157
lines changed

src/HotChocolate/Core/src/Types.Analyzers/FileBuilders/DataLoaderFileBuilder.cs

Lines changed: 51 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ public void WriteDataLoaderInterface(
6868
kind is DataLoaderKind.Group
6969
? ": global::GreenDonut.IDataLoader<{0}, {1}[]>"
7070
: ": global::GreenDonut.IDataLoader<{0}, {1}>",
71-
key.ToFullyQualified(),
72-
value.ToFullyQualified());
71+
key.ToFullyQualifiedWithNullRefQualifier(),
72+
value.ToFullyQualifiedWithNullRefQualifier());
7373

7474
_writer.DecreaseIndent();
7575
_writer.WriteIndentedLine("{");
@@ -97,8 +97,8 @@ public void WriteBeginDataLoaderClass(
9797
kind is DataLoaderKind.Group
9898
? ": global::GreenDonut.DataLoaderBase<{0}, {1}[]>"
9999
: ": global::GreenDonut.DataLoaderBase<{0}, {1}>",
100-
key.ToFullyQualified(),
101-
value.ToFullyQualified());
100+
key.ToFullyQualifiedWithNullRefQualifier(),
101+
value.ToFullyQualifiedWithNullRefQualifier());
102102
if (withInterface)
103103
{
104104
_writer.WriteIndentedLine(", {0}", interfaceName);
@@ -174,23 +174,20 @@ public void WriteDataLoaderConstructor(
174174
if (lookup.IsTransform)
175175
{
176176
_writer.WriteIndentedLine(
177-
".Create<{0}, {1}{2}, {3}{4}>({5}.{6}, this)",
178-
keyType.ToFullyQualified(),
179-
valueType.ToFullyQualified(),
180-
valueType.PrintNullRefQualifier(),
181-
lookup.Method.Parameters[0].Type.ToFullyQualified(),
182-
lookup.Method.Parameters[0].Type.PrintNullRefQualifier(),
183-
lookup.Method.ContainingType.ToFullyQualified(),
177+
".Create<{0}, {1}, {2}>({3}.{4}, this)",
178+
keyType.ToFullyQualifiedWithNullRefQualifier(),
179+
valueType.ToFullyQualifiedWithNullRefQualifier(),
180+
lookup.Method.Parameters[0].Type.ToFullyQualifiedWithNullRefQualifier(),
181+
lookup.Method.ContainingType.ToFullyQualifiedWithNullRefQualifier(),
184182
lookup.Method.Name);
185183
}
186184
else
187185
{
188186
_writer.WriteIndentedLine(
189-
".Create<{0}, {1}{2}>({3}.{4}, this)",
190-
keyType.ToFullyQualified(),
191-
valueType.ToFullyQualified(),
192-
valueType.PrintNullRefQualifier(),
193-
lookup.Method.ContainingType.ToFullyQualified(),
187+
".Create<{0}, {1}>({2}.{3}, this)",
188+
keyType.ToFullyQualifiedWithNullRefQualifier(),
189+
valueType.ToFullyQualifiedWithNullRefQualifier(),
190+
lookup.Method.ContainingType.ToFullyQualifiedWithNullRefQualifier(),
194191
lookup.Method.Name);
195192
}
196193

@@ -221,18 +218,18 @@ public void WriteDataLoaderLoadMethod(
221218
_writer.WriteIndentedLine(
222219
"global::{0}<{1}> keys,",
223220
WellKnownTypes.ReadOnlyList,
224-
key.ToFullyQualified());
221+
key.ToFullyQualifiedWithNullRefQualifier());
225222
_writer.WriteIndentedLine(
226-
"global::{0}<{1}<{2}{3}{4}>> results,",
223+
"global::{0}<{1}<{2}>> results,",
227224
WellKnownTypes.Memory,
228225
WellKnownTypes.Result,
229-
value.ToFullyQualified(),
230-
kind is DataLoaderKind.Group ? "[]" : string.Empty,
231-
value.IsValueType ? string.Empty : "?");
226+
kind is DataLoaderKind.Group
227+
? $"{value.ToClassNonNullableFullyQualifiedWithNullRefQualifier()}[]?"
228+
: value.ToNullableFullyQualifiedWithNullRefQualifier());
232229
_writer.WriteIndentedLine(
233230
"global::{0}<{1}{2}> context,",
234231
WellKnownTypes.DataLoaderFetchContext,
235-
value.ToFullyQualified(),
232+
value.ToFullyQualifiedWithNullRefQualifier(),
236233
kind is DataLoaderKind.Group ? "[]" : string.Empty);
237234
_writer.WriteIndentedLine(
238235
"global::{0} ct)",
@@ -256,14 +253,14 @@ public void WriteDataLoaderLoadMethod(
256253
"var {0} = {1}.GetRequiredService<{2}>();",
257254
parameter.VariableName,
258255
isScoped ? "scope.ServiceProvider" : "_services",
259-
parameter.Type.ToFullyQualified());
256+
parameter.Type.ToFullyQualifiedWithNullRefQualifier());
260257
}
261258
else if (parameter.Kind is DataLoaderParameterKind.SelectorBuilder)
262259
{
263260
_writer.WriteIndentedLine(
264261
"var {0} = context.GetState<{1}>(\"{2}\")",
265262
parameter.VariableName,
266-
parameter.Type.ToFullyQualified(),
263+
parameter.Type.ToFullyQualifiedWithNullRefQualifier(),
267264
parameter.StateKey);
268265
_writer.IncreaseIndent();
269266
_writer.WriteIndentedLine(
@@ -275,7 +272,7 @@ public void WriteDataLoaderLoadMethod(
275272
_writer.WriteIndentedLine(
276273
"var {0} = context.GetState<{1}>(\"{2}\")",
277274
parameter.VariableName,
278-
parameter.Type.ToFullyQualified(),
275+
parameter.Type.ToFullyQualifiedWithNullRefQualifier(),
279276
parameter.StateKey);
280277
_writer.IncreaseIndent();
281278
_writer.WriteIndentedLine(
@@ -287,12 +284,12 @@ public void WriteDataLoaderLoadMethod(
287284
_writer.WriteIndentedLine(
288285
"var {0} = context.GetState<{1}>(\"{2}\")",
289286
parameter.VariableName,
290-
parameter.Type.ToFullyQualified(),
287+
parameter.Type.ToFullyQualifiedWithNullRefQualifier(),
291288
parameter.StateKey);
292289
_writer.IncreaseIndent();
293290
_writer.WriteIndentedLine(
294291
"?? {0}.Empty;",
295-
parameter.Type.ToFullyQualified());
292+
parameter.Type.ToFullyQualifiedWithNullRefQualifier());
296293
_writer.DecreaseIndent();
297294
}
298295
else if (parameter.Kind is DataLoaderParameterKind.QueryContext)
@@ -302,26 +299,26 @@ public void WriteDataLoaderLoadMethod(
302299
parameter.VariableName,
303300
WellKnownTypes.SelectorBuilder,
304301
DataLoaderInfo.Selector,
305-
((INamedTypeSymbol)parameter.Type).TypeArguments[0].ToFullyQualified());
302+
((INamedTypeSymbol)parameter.Type).TypeArguments[0].ToFullyQualifiedWithNullRefQualifier());
306303
_writer.WriteIndentedLine(
307304
"var {0}_predicate = context.GetState<global::{1}>(\"{2}\")?.TryCompile<{3}>();",
308305
parameter.VariableName,
309306
WellKnownTypes.PredicateBuilder,
310307
DataLoaderInfo.Predicate,
311-
((INamedTypeSymbol)parameter.Type).TypeArguments[0].ToFullyQualified());
308+
((INamedTypeSymbol)parameter.Type).TypeArguments[0].ToFullyQualifiedWithNullRefQualifier());
312309
_writer.WriteIndentedLine(
313310
"var {0}_sortDefinition = context.GetState<global::{1}<{2}>>(\"{3}\");",
314311
parameter.VariableName,
315312
WellKnownTypes.SortDefinition,
316-
((INamedTypeSymbol)parameter.Type).TypeArguments[0].ToFullyQualified(),
313+
((INamedTypeSymbol)parameter.Type).TypeArguments[0].ToFullyQualifiedWithNullRefQualifier(),
317314
DataLoaderInfo.Sorting);
318315
_writer.WriteLine();
319316

320317
_writer.WriteIndentedLine(
321318
"var {0} = global::{1}<{2}>.Empty;",
322319
parameter.VariableName,
323320
WellKnownTypes.QueryContext,
324-
((INamedTypeSymbol)parameter.Type).TypeArguments[0].ToFullyQualified());
321+
((INamedTypeSymbol)parameter.Type).TypeArguments[0].ToFullyQualifiedWithNullRefQualifier());
325322
_writer.WriteIndentedLine(
326323
"if({0}_selector is not null || {0}_predicate is not null || {0}_sortDefinition is not null)",
327324
parameter.VariableName);
@@ -332,7 +329,7 @@ public void WriteDataLoaderLoadMethod(
332329
+ "{0}_predicate, {0}_sortDefinition);",
333330
parameter.VariableName,
334331
WellKnownTypes.QueryContext,
335-
((INamedTypeSymbol)parameter.Type).TypeArguments[0].ToFullyQualified());
332+
((INamedTypeSymbol)parameter.Type).TypeArguments[0].ToFullyQualifiedWithNullRefQualifier());
336333
_writer.DecreaseIndent();
337334
_writer.WriteIndentedLine("}");
338335
}
@@ -341,7 +338,7 @@ public void WriteDataLoaderLoadMethod(
341338
_writer.WriteIndentedLine(
342339
"var {0} = context.GetRequiredState<{1}>(\"{2}\");",
343340
parameter.VariableName,
344-
parameter.Type.ToFullyQualified(),
341+
parameter.Type.ToFullyQualifiedWithNullRefQualifier(),
345342
parameter.StateKey);
346343
}
347344
else if (parameter.Kind is DataLoaderParameterKind.ContextData)
@@ -352,28 +349,26 @@ public void WriteDataLoaderLoadMethod(
352349
var defaultValueString = ConvertDefaultValueToString(defaultValue, parameter.Type);
353350

354351
_writer.WriteIndentedLine(
355-
"var {0} = context.GetStateOrDefault<{1}{2}>(\"{3}\", {4});",
352+
"var {0} = context.GetStateOrDefault<{1}>(\"{2}\", {3});",
356353
parameter.VariableName,
357-
parameter.Type.ToFullyQualified(),
358-
parameter.Type.PrintNullRefQualifier(),
354+
parameter.Type.ToFullyQualifiedWithNullRefQualifier(),
359355
parameter.StateKey,
360356
defaultValueString);
361357
}
362358
else if (parameter.Type.IsNullableType())
363359
{
364360
_writer.WriteIndentedLine(
365-
"var {0} = context.GetState<{1}{2}>(\"{3}\");",
361+
"var {0} = context.GetState<{1}>(\"{2}\");",
366362
parameter.VariableName,
367-
parameter.Type.ToFullyQualified(),
368-
parameter.Type.PrintNullRefQualifier(),
363+
parameter.Type.ToFullyQualifiedWithNullRefQualifier(),
369364
parameter.StateKey);
370365
}
371366
else
372367
{
373368
_writer.WriteIndentedLine(
374369
"var {0} = context.GetRequiredState<{1}>(\"{2}\");",
375370
parameter.VariableName,
376-
parameter.Type.ToFullyQualified(),
371+
parameter.Type.ToFullyQualifiedWithNullRefQualifier(),
377372
parameter.StateKey);
378373
}
379374
}
@@ -395,9 +390,8 @@ public void WriteDataLoaderLoadMethod(
395390
_writer.WriteIndented("var value = ");
396391
WriteFetchCall(method, containingType, kind, parameters);
397392
_writer.WriteIndentedLine(
398-
"results.Span[i] = Result<{0}{1}>.Resolve(value);",
399-
value.ToFullyQualified(),
400-
value.IsValueType ? string.Empty : "?");
393+
"results.Span[i] = Result<{0}>.Resolve(value);",
394+
value.ToNullableFullyQualifiedWithNullRefQualifier());
401395
}
402396

403397
_writer.WriteIndentedLine("}");
@@ -407,9 +401,8 @@ public void WriteDataLoaderLoadMethod(
407401
using (_writer.IncreaseIndent())
408402
{
409403
_writer.WriteIndentedLine(
410-
"results.Span[i] = Result<{0}{1}>.Reject(ex);",
411-
value.ToFullyQualified(),
412-
value.IsValueType ? string.Empty : "?");
404+
"results.Span[i] = Result<{0}>.Reject(ex);",
405+
value.ToNullableFullyQualifiedWithNullRefQualifier());
413406
}
414407

415408
_writer.WriteIndentedLine("}");
@@ -439,14 +432,14 @@ public void WriteDataLoaderLoadMethod(
439432
_writer.WriteIndentedLine(
440433
"global::{0}<{1}> keys,",
441434
WellKnownTypes.ReadOnlyList,
442-
key.ToFullyQualified());
435+
key.ToFullyQualifiedWithNullRefQualifier());
443436
_writer.WriteIndentedLine(
444-
"global::{0}<{1}<{2}{3}{4}>> results,",
437+
"global::{0}<{1}<{2}>> results,",
445438
WellKnownTypes.Span,
446439
WellKnownTypes.Result,
447-
value.ToFullyQualified(),
448-
kind is DataLoaderKind.Group ? "[]" : string.Empty,
449-
value.IsValueType ? string.Empty : "?");
440+
kind is DataLoaderKind.Group
441+
? $"{value.ToClassNonNullableFullyQualifiedWithNullRefQualifier()}[]?"
442+
: value.ToNullableFullyQualifiedWithNullRefQualifier());
450443
_writer.WriteIndentedLine(
451444
"{0} resultMap)",
452445
ExtractMapType(method.ReturnType).ToFullyQualifiedWithNullRefQualifier());
@@ -501,10 +494,9 @@ public void WriteDataLoaderLoadMethod(
501494
using (_writer.IncreaseIndent())
502495
{
503496
_writer.WriteIndentedLine(
504-
"results[i] = global::{0}<{1}{2}>.Resolve(value);",
497+
"results[i] = global::{0}<{1}>.Resolve(value);",
505498
WellKnownTypes.Result,
506-
value.ToFullyQualified(),
507-
value.IsValueType ? string.Empty : "?");
499+
value.ToNullableFullyQualifiedWithNullRefQualifier());
508500
}
509501

510502
_writer.WriteIndentedLine("}");
@@ -514,11 +506,12 @@ public void WriteDataLoaderLoadMethod(
514506
using (_writer.IncreaseIndent())
515507
{
516508
_writer.WriteIndentedLine(
517-
"results[i] = global::{0}<{1}{2}>.Resolve(default({3}));",
509+
"results[i] = global::{0}<{1}>.Resolve(default({2}));",
518510
WellKnownTypes.Result,
519-
value.ToFullyQualified(),
520-
value.IsValueType ? string.Empty : "?",
521-
value.ToFullyQualified());
511+
value.ToNullableFullyQualifiedWithNullRefQualifier(),
512+
value.IsValueType
513+
? value.ToNullableFullyQualifiedWithNullRefQualifier()
514+
: value.ToFullyQualified());
522515
}
523516

524517
_writer.WriteIndentedLine("}");

0 commit comments

Comments
 (0)