Skip to content

Commit fa44d74

Browse files
authored
fix(gql_code_builder): Fixing nullables and type overrides for vars create factories (#444)
1 parent 650c517 commit fa44d74

File tree

10 files changed

+29
-23
lines changed

10 files changed

+29
-23
lines changed

codegen/end_to_end_test/lib/fragments/__generated__/fragment_with_scalar_var.var.gql.dart

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codegen/end_to_end_test/lib/fragments/__generated__/hero_with_fragments.var.gql.dart

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codegen/end_to_end_test/lib/fragments/__generated__/multiple_fragments.var.gql.dart

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codegen/end_to_end_test/lib/scalars/__generated__/review_with_date.var.gql.dart

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codegen/end_to_end_test/lib/variables/__generated__/create_review.var.gql.dart

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codegen/end_to_end_test_tristate/lib/fragments/__generated__/hero_with_fragments.var.gql.dart

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codegen/gql_build/pubspec.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ name: gql_build
22
version: 0.11.0+1
33
description: Useful builders for your GraphQL SDL and documents. Based on package:gql_code_builder and package:build
44
repository: https://github.com/gql-dart/gql
5-
environment:
5+
environment:
66
sdk: '>=3.0.0 <4.0.0'
7-
dependencies:
7+
dependencies:
88
analyzer: '>=4.6.0 <7.0.0'
99
build: ^2.1.0
1010
built_collection: ^5.0.0
@@ -18,10 +18,10 @@ dependencies:
1818
path: ^1.8.0
1919
yaml: ^3.1.0
2020
gql_tristate_value: ^1.0.0
21-
dev_dependencies:
21+
dev_dependencies:
2222
build_test: ^2.0.0
2323
gql_pedantic: ^1.0.2
24-
topics:
24+
topics:
2525
- graphql
2626
- gql
2727
- codegen

codegen/gql_code_builder/lib/src/required_vars_constructor.dart

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ Constructor builtCreateConstructor({
88
required String name,
99
required Iterable<Method> getters,
1010
required SourceNode schemaSource,
11+
Map<String, Reference> typeOverrides = const {},
1112
}) {
1213
final className = builtClassName(name);
1314

@@ -21,25 +22,29 @@ Constructor builtCreateConstructor({
2122
);
2223

2324
// Create parameters for the factory constructor
24-
final factoryParameters = filteredGetters.map(
25-
(g) => Parameter(
25+
final factoryParameters = filteredGetters.map((g) {
26+
final isNullable = (g.returns! as TypeReference).isNullable ?? false;
27+
28+
return Parameter(
2629
(b) => b
2730
..name = g.name!
2831
..named = true
29-
..required = true
32+
..required = !isNullable
3033
..type = g.returns,
31-
),
32-
);
34+
);
35+
});
3336

3437
final assignments = filteredGetters.map((g) {
3538
final typeDefinitionNode = getTypeDefinitionNode(
3639
schemaSource.document, g.returns!.symbol!.replaceFirst("G", ""));
3740
final isBuiltType = typeDefinitionNode is InputObjectTypeDefinitionNode ||
3841
typeDefinitionNode is ScalarTypeDefinitionNode;
3942

40-
// Check if the type is nullable
43+
final isTypeOverride = typeOverrides.values.contains(g.returns!);
4144
final isNullable = (g.returns! as TypeReference).isNullable ?? false;
42-
final assignment = isBuiltType
45+
46+
// If the type is a built type and not a TypeOverride, we need to call toBuilder() on it.
47+
final assignment = isBuiltType && !isTypeOverride
4348
? "${g.name} = ${g.name}${isNullable ? '?' : ''}.toBuilder()"
4449
: "${g.name} = ${g.name}";
4550

codegen/gql_code_builder/lib/var.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ Library buildVarLibrary(
5252
),
5353
),
5454
schemaSource: schemaSource,
55+
typeOverrides: typeOverrides,
5556
),
5657
],
5758
initializers: switch (useTriStateValueForNullableTypes) {

codegen/gql_code_builder/pubspec.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ name: gql_code_builder
22
version: 0.10.0
33
description: Dart code builders taking *.graphql documents and SDL to build useful classes.
44
repository: https://github.com/gql-dart/gql
5-
environment:
5+
environment:
66
sdk: '>=3.0.0 <4.0.0'
7-
dependencies:
7+
dependencies:
88
analyzer: '>=4.6.0 <7.0.0'
99
built_collection: ^5.0.0
1010
built_value: ^8.0.6
@@ -14,11 +14,11 @@ dependencies:
1414
gql_exec: ^1.0.0
1515
path: ^1.8.0
1616
gql_tristate_value: ^1.0.0
17-
dev_dependencies:
17+
dev_dependencies:
1818
build_runner: ^2.1.0
1919
gql_pedantic: ^1.0.2
2020
test: ^1.16.8
21-
topics:
21+
topics:
2222
- graphql
2323
- gql
2424
- codegen

0 commit comments

Comments
 (0)