Skip to content

Commit 6d637f2

Browse files
authored
Merge pull request #35 from Linq2GraphQL/more-nullable
More nullable
2 parents 3b5e9c5 + 809ee3a commit 6d637f2

49 files changed

Lines changed: 611 additions & 105 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

src/Linq2GraphQL.Generator/GraphQLSchema/RootSchema.cs

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,7 @@ private TypeInfo GetFieldTypeInfo()
170170

171171
var isList = allTypes.Any(e => e.Kind == TypeKind.List);
172172
var isNoneNull = allTypes.Any(e => e.Kind == TypeKind.NonNull);
173-
var csharpNullable = !isNoneNull && csharpType != null && csharpTypeName != "string";
174-
173+
175174
var graphTypeDefinition = isNoneNull ? baseFieldType.Name + "!" : baseFieldType.Name;
176175
if (isList)
177176
{
@@ -180,13 +179,14 @@ private TypeInfo GetFieldTypeInfo()
180179

181180
return new TypeInfo
182181
{
182+
183183
Kind = baseFieldType.Kind,
184184
IsList = isList,
185185
IsNoneNull = isNoneNull,
186186
CSharpType = csharpType,
187187
CSharpTypeName = csharpTypeName,
188188
GraphTypeDefinition = graphTypeDefinition,
189-
IsEnum = baseFieldType.Kind == TypeKind.Enum
189+
IsEnum = baseFieldType.Kind == TypeKind.Enum
190190
};
191191
}
192192

@@ -261,7 +261,7 @@ public class TypeInfo
261261
public bool IsNoneNull { get; set; }
262262
public bool IsList { get; set; }
263263

264-
264+
265265
private bool CSharpNullQuestion()
266266
{
267267
if (GeneratorSettings.Current.Nullable)
@@ -275,6 +275,21 @@ private bool CSharpNullQuestion()
275275

276276
}
277277

278+
public string CSharpTypeNameFullNeverNull
279+
{
280+
get
281+
{
282+
var result = CSharpTypeName;
283+
284+
if (IsList)
285+
{
286+
return $"List<{result}>";
287+
}
288+
289+
return result;
290+
}
291+
}
292+
278293
public string CSharpTypeNameFull
279294
{
280295
get

src/Linq2GraphQL.Generator/Properties/launchSettings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"profiles": {
33
"Linq2GraphQL.Generator": {
44
"commandName": "Project",
5-
"commandLineArgs": "https://localhost:50741/graphql/ -c=\"SampleNullableClient\" -n=\"Linq2GraphQL.TestClientNullable\" -o=\"C:\\temp\\Linq2GraphQL\\Linq2GraphQL.TestClientNullable\\Generated\" -s=true -nu=true"
5+
"commandLineArgs": "https://localhost:7184/graphql/ -c=\"SampleClient\" -n=\"Linq2GraphQL.TestClient\" -o=\"C:\\Code\\Github\\Linq2GraphQL.Client\\test\\Linq2GraphQL.TestClient\\Generated\" -s=true"
66
}
77
}
88
}

src/Linq2GraphQL.Generator/Templates/Class/ClassTemplate.cs

Lines changed: 47 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -37,104 +37,118 @@ public virtual string TransformText()
3737
this.Write(";\r\n\r\n");
3838

3939
#line 11 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
40+
if (NullableEnabled()) {
41+
42+
#line default
43+
#line hidden
44+
this.Write("#pragma warning disable CS8618\r\n");
45+
46+
#line 13 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
47+
}
48+
49+
#line default
50+
#line hidden
51+
this.Write("\r\n");
52+
53+
#line 15 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
4054
if (classType.AllFields.Any(e => e.IsMethod)) {
4155

4256
#line default
4357
#line hidden
4458
this.Write("public static class ");
4559

46-
#line 12 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
60+
#line 16 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
4761
this.Write(this.ToStringHelper.ToStringWithCulture(classType.Name));
4862

4963
#line default
5064
#line hidden
5165
this.Write("Extensions\r\n{\r\n");
5266

53-
#line 14 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
67+
#line 18 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
5468
foreach (var field in classType.AllFields.Where(e => e.IsMethod)) {
5569

5670
#line default
5771
#line hidden
5872
this.Write(" [GraphMethod(\"");
5973

60-
#line 15 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
74+
#line 19 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
6175
this.Write(this.ToStringHelper.ToStringWithCulture(field.Name));
6276

6377
#line default
6478
#line hidden
6579
this.Write("\")]\r\n public static ");
6680

67-
#line 16 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
81+
#line 20 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
6882
this.Write(this.ToStringHelper.ToStringWithCulture(GetFieldCSharpName(field)));
6983

7084
#line default
7185
#line hidden
7286
this.Write(" ");
7387

74-
#line 16 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
88+
#line 20 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
7589
this.Write(this.ToStringHelper.ToStringWithCulture(field.CSharpName));
7690

7791
#line default
7892
#line hidden
7993
this.Write("(this ");
8094

81-
#line 16 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
95+
#line 20 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
8296
this.Write(this.ToStringHelper.ToStringWithCulture(classType.Name));
8397

8498
#line default
8599
#line hidden
86100
this.Write(" ");
87101

88-
#line 16 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
102+
#line 20 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
89103
this.Write(this.ToStringHelper.ToStringWithCulture(classType.Name.ToCamelCase()));
90104

91105
#line default
92106
#line hidden
93107
this.Write(", ");
94108

95-
#line 16 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
109+
#line 20 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
96110
this.Write(this.ToStringHelper.ToStringWithCulture(field.GetArgString(true)));
97111

98112
#line default
99113
#line hidden
100114
this.Write(")\r\n {\r\n\t return ");
101115

102-
#line 18 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
116+
#line 22 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
103117
this.Write(this.ToStringHelper.ToStringWithCulture(classType.Name.ToCamelCase()));
104118

105119
#line default
106120
#line hidden
107121
this.Write(".GetMethodValue<");
108122

109-
#line 18 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
123+
#line 22 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
110124
this.Write(this.ToStringHelper.ToStringWithCulture(GetFieldCSharpName(field)));
111125

112126
#line default
113127
#line hidden
114128
this.Write(">(\"");
115129

116-
#line 18 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
130+
#line 22 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
117131
this.Write(this.ToStringHelper.ToStringWithCulture(field.Name));
118132

119133
#line default
120134
#line hidden
121135
this.Write("\", ");
122136

123-
#line 18 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
137+
#line 22 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
124138
this.Write(this.ToStringHelper.ToStringWithCulture(field.GetArgNames()));
125139

126140
#line default
127141
#line hidden
128142
this.Write(");\r\n }\r\n\r\n");
129143

130-
#line 21 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
144+
#line 25 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
131145
}
132146

133147
#line default
134148
#line hidden
135149
this.Write("}\r\n\r\n");
136150

137-
#line 24 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
151+
#line 28 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
138152

139153
}
140154

@@ -143,132 +157,132 @@ public virtual string TransformText()
143157
#line hidden
144158
this.Write("public partial class ");
145159

146-
#line 27 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
160+
#line 31 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
147161
this.Write(this.ToStringHelper.ToStringWithCulture(classType.Name));
148162

149163
#line default
150164
#line hidden
151165
this.Write(" ");
152166

153-
#line 27 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
167+
#line 31 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
154168
this.Write(this.ToStringHelper.ToStringWithCulture(classType.GetInterfacesString("GraphQLTypeBase")));
155169

156170
#line default
157171
#line hidden
158172
this.Write("\r\n{\r\n");
159173

160-
#line 29 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
174+
#line 33 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
161175
foreach (var field in classType.AllFields) {
162176

163177
#line default
164178
#line hidden
165179

166-
#line 30 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
180+
#line 34 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
167181
if (field.IsMethod) {
168182

169183
#line default
170184
#line hidden
171185
this.Write(" private LazyProperty<");
172186

173-
#line 31 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
187+
#line 35 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
174188
this.Write(this.ToStringHelper.ToStringWithCulture(GetFieldCSharpName(field)));
175189

176190
#line default
177191
#line hidden
178192
this.Write("> _");
179193

180-
#line 31 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
194+
#line 35 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
181195
this.Write(this.ToStringHelper.ToStringWithCulture(field.Name));
182196

183197
#line default
184198
#line hidden
185199
this.Write(" = new();\r\n /// <summary>\r\n /// Do not use in Query, only to retrive result" +
186200
"\r\n /// </summary>\r\n [GraphShadowProperty]\r\n public ");
187201

188-
#line 36 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
202+
#line 40 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
189203
this.Write(this.ToStringHelper.ToStringWithCulture(GetFieldCSharpName(field)));
190204

191205
#line default
192206
#line hidden
193207
this.Write(" ");
194208

195-
#line 36 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
209+
#line 40 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
196210
this.Write(this.ToStringHelper.ToStringWithCulture(field.CSharpName));
197211

198212
#line default
199213
#line hidden
200214
this.Write(" => _");
201215

202-
#line 36 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
216+
#line 40 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
203217
this.Write(this.ToStringHelper.ToStringWithCulture(field.Name));
204218

205219
#line default
206220
#line hidden
207221
this.Write(".Value(() => GetFirstMethodValue<");
208222

209-
#line 36 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
223+
#line 40 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
210224
this.Write(this.ToStringHelper.ToStringWithCulture(GetFieldCSharpName(field)));
211225

212226
#line default
213227
#line hidden
214228
this.Write(">(\"");
215229

216-
#line 36 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
230+
#line 40 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
217231
this.Write(this.ToStringHelper.ToStringWithCulture(field.Name));
218232

219233
#line default
220234
#line hidden
221235
this.Write("\"));\r\n\r\n");
222236

223-
#line 38 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
237+
#line 42 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
224238
} else {
225239

226240
#line default
227241
#line hidden
228242
this.Write(" [JsonPropertyName(\"");
229243

230-
#line 39 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
244+
#line 43 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
231245
this.Write(this.ToStringHelper.ToStringWithCulture(field.Name));
232246

233247
#line default
234248
#line hidden
235249
this.Write("\")]\r\n\tpublic ");
236250

237-
#line 40 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
251+
#line 44 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
238252
this.Write(this.ToStringHelper.ToStringWithCulture(GetFieldCSharpName(field)));
239253

240254
#line default
241255
#line hidden
242256
this.Write(" ");
243257

244-
#line 40 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
258+
#line 44 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
245259
this.Write(this.ToStringHelper.ToStringWithCulture(field.CSharpName));
246260

247261
#line default
248262
#line hidden
249263
this.Write(" { get; set; } \r\n\r\n");
250264

251-
#line 42 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
265+
#line 46 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
252266
}
253267

254268
#line default
255269
#line hidden
256270

257-
#line 43 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
271+
#line 47 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
258272
}
259273

260274
#line default
261275
#line hidden
262276

263-
#line 44 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
277+
#line 48 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
264278
if (classType.HasInterfaces) {
265279

266280
#line default
267281
#line hidden
268282
this.Write(" [JsonPropertyName(\"__typename\")]\r\n public string __TypeName { get; set; }\r" +
269283
"\n");
270284

271-
#line 47 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
285+
#line 51 "C:\Code\Github\Linq2GraphQL.Client\src\Linq2GraphQL.Generator\Templates\Class\ClassTemplate.tt"
272286
}
273287

274288
#line default

src/Linq2GraphQL.Generator/Templates/Class/ClassTemplate.tt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ using Linq2GraphQL.Client.Common;
88

99
namespace <#= namespaceName #>;
1010

11+
<# if (NullableEnabled()) { #>
12+
#pragma warning disable CS8618
13+
<# } #>
14+
1115
<# if (classType.AllFields.Any(e => e.IsMethod)) { #>
1216
public static class <#= classType.Name #>Extensions
1317
{

src/Linq2GraphQL.Generator/Templates/Class/ClassTemplate.tt.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public ClassTemplate(GraphqlType classType, string namespaceName)
1414

1515
public bool IsInput => classType.Kind == TypeKind.InputObject;
1616

17-
17+
1818
public string GetFieldCSharpName(Field field)
1919
{
2020

@@ -23,10 +23,13 @@ public string GetFieldCSharpName(Field field)
2323
return "Linq2GraphQL.Client.Common.PageInfo";
2424
}
2525
return field.FieldInfo.CSharpTypeNameFull;
26+
}
2627

2728

29+
public bool NullableEnabled()
30+
{
31+
return GeneratorSettings.Current.Nullable;
2832
}
2933

30-
3134

3235
}

0 commit comments

Comments
 (0)