Skip to content

Commit 99d5d73

Browse files
Make it work with execution abstractions
1 parent 893727c commit 99d5d73

File tree

5 files changed

+114
-39
lines changed

5 files changed

+114
-39
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1+
using HotChocolate.Features;
12
using HotChocolate.Fusion.Types.Collections;
23

34
namespace HotChocolate.Fusion.Types.Completion;
45

56
internal ref struct CompositeInputObjectTypeCompletionContext(
6-
FusionDirectiveCollection directives)
7+
FusionDirectiveCollection directives,
8+
IFeatureCollection features)
79
{
810
public FusionDirectiveCollection Directives { get; } = directives;
11+
12+
public IFeatureCollection Features { get; } = features;
913
}

src/HotChocolate/Fusion-vnext/src/Fusion.Execution.Types/Completion/CompositeSchemaBuilder.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ private static void CompleteUnionType(
349349
{
350350
var directives = CompletionTools.CreateDirectiveCollection(typeDef.Directives, schemaContext);
351351
var types = CompletionTools.CreateObjectTypeCollection(typeDef.Types, schemaContext);
352-
type.Complete(new CompositeUnionTypeCompletionContext(directives, types));
352+
type.Complete(new CompositeUnionTypeCompletionContext(types, directives, FeatureCollection.Empty));
353353
}
354354

355355
private static void CompleteOutputField(
@@ -451,11 +451,11 @@ private static void CompleteInputObjectType(
451451
{
452452
foreach (var fieldDef in inputObjectTypeDef.Fields)
453453
{
454-
CompleteInputField(inputObjectType.Fields[fieldDef.Name.Value], fieldDef, schemaContext);
454+
CompleteInputField(inputObjectType, inputObjectType.Fields[fieldDef.Name.Value], fieldDef, schemaContext);
455455
}
456456

457457
var directives = CompletionTools.CreateDirectiveCollection(inputObjectTypeDef.Directives, schemaContext);
458-
inputObjectType.Complete(new CompositeInputObjectTypeCompletionContext(directives));
458+
inputObjectType.Complete(new CompositeInputObjectTypeCompletionContext(directives, FeatureCollection.Empty));
459459
}
460460

461461
private static void CompleteInputField(
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
1+
using HotChocolate.Features;
12
using HotChocolate.Fusion.Types.Collections;
23

34
namespace HotChocolate.Fusion.Types.Completion;
45

56
internal ref struct CompositeUnionTypeCompletionContext(
7+
FusionObjectTypeDefinitionCollection types,
68
FusionDirectiveCollection directives,
7-
FusionObjectTypeDefinitionCollection types)
9+
IFeatureCollection features)
810
{
911
public FusionDirectiveCollection Directives { get; } = directives;
1012

1113
public FusionObjectTypeDefinitionCollection Types { get; } = types;
14+
15+
public IFeatureCollection Features { get; } = features;
1216
}

src/HotChocolate/Fusion-vnext/src/Fusion.Execution.Types/FusionInputObjectTypeDefinition.cs

Lines changed: 46 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,75 @@
1+
using HotChocolate.Features;
12
using HotChocolate.Fusion.Types.Collections;
23
using HotChocolate.Fusion.Types.Completion;
34
using HotChocolate.Language;
45
using HotChocolate.Serialization;
56
using HotChocolate.Types;
7+
using static HotChocolate.Fusion.Types.ThrowHelper;
68

79
namespace HotChocolate.Fusion.Types;
810

9-
public sealed class FusionInputObjectTypeDefinition(
10-
string name,
11-
string? description,
12-
FusionInputFieldDefinitionCollection fields)
13-
: IInputObjectTypeDefinition
11+
public sealed class FusionInputObjectTypeDefinition : IInputObjectTypeDefinition
1412
{
15-
private FusionDirectiveCollection _directives = default!;
1613
private bool _completed;
1714

15+
public FusionInputObjectTypeDefinition(
16+
string name,
17+
string? description,
18+
FusionInputFieldDefinitionCollection fields)
19+
{
20+
Name = name;
21+
Description = description;
22+
Fields = fields;
23+
24+
// these properties are initialized
25+
// in the type complete step.
26+
Directives = null!;
27+
Features = null!;
28+
}
29+
1830
/// <inheritdoc />
1931
public TypeKind Kind => TypeKind.InputObject;
2032

2133
/// <inheritdoc />
2234
public SchemaCoordinate Coordinate => new(Name, ofDirective: false);
2335

24-
public string Name => name;
25-
26-
public string? Description => description;
36+
public string Name { get; }
2737

28-
public FusionDirectiveCollection Directives => _directives;
38+
public string? Description { get; }
2939

30-
public FusionInputFieldDefinitionCollection Fields => fields;
40+
public FusionInputFieldDefinitionCollection Fields { get; }
3141

3242
IReadOnlyFieldDefinitionCollection<IInputValueDefinition> IInputObjectTypeDefinition.Fields => Fields;
3343

34-
IReadOnlyDirectiveCollection IDirectivesProvider.Directives => Directives;
44+
public FusionDirectiveCollection Directives
45+
{
46+
get;
47+
private set
48+
{
49+
EnsureNotSealed(_completed);
50+
field = value;
51+
}
52+
}
53+
54+
IReadOnlyDirectiveCollection IDirectivesProvider.Directives
55+
=> Directives;
56+
57+
public IFeatureCollection Features
58+
{
59+
get;
60+
private set
61+
{
62+
EnsureNotSealed(_completed);
63+
field = value;
64+
}
65+
}
3566

3667
internal void Complete(CompositeInputObjectTypeCompletionContext context)
3768
{
38-
ThrowHelper.EnsureNotSealed(_completed);
69+
EnsureNotSealed(_completed);
3970

40-
_directives = context.Directives;
71+
Directives = context.Directives;
72+
Features = context.Features;
4173

4274
_completed = true;
4375
}

src/HotChocolate/Fusion-vnext/src/Fusion.Execution.Types/FusionUnionTypeDefinition.cs

Lines changed: 55 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,42 +4,78 @@
44
using HotChocolate.Language;
55
using HotChocolate.Serialization;
66
using HotChocolate.Types;
7+
using static HotChocolate.Fusion.Types.ThrowHelper;
78

89
namespace HotChocolate.Fusion.Types;
910

10-
public sealed class FusionUnionTypeDefinition(
11-
string name,
12-
string? description)
13-
: IUnionTypeDefinition
11+
public sealed class FusionUnionTypeDefinition : IUnionTypeDefinition
1412
{
15-
private FusionObjectTypeDefinitionCollection _types = default!;
16-
private FusionDirectiveCollection _directives = default!;
1713
private bool _completed;
1814

19-
public string Name { get; } = name;
15+
public FusionUnionTypeDefinition(string name, string? description)
16+
{
17+
Name = name;
18+
Description = description;
19+
20+
// these properties are initialized
21+
// in the type complete step.
22+
Types = null!;
23+
Directives = null!;
24+
Features = null!;
25+
}
2026

21-
public string? Description { get; } = description;
27+
public string Name { get; }
2228

23-
public FusionDirectiveCollection Directives => _directives;
29+
public string? Description { get; }
2430

2531
public TypeKind Kind => TypeKind.Union;
2632

2733
public SchemaCoordinate Coordinate => new(Name, ofDirective: false);
2834

29-
public FusionObjectTypeDefinitionCollection Types => _types;
35+
public FusionObjectTypeDefinitionCollection Types
36+
{
37+
get;
38+
private set
39+
{
40+
EnsureNotSealed(_completed);
41+
field = value;
42+
}
43+
}
44+
45+
IReadOnlyObjectTypeDefinitionCollection IUnionTypeDefinition.Types => Types;
46+
47+
public FusionDirectiveCollection Directives
48+
{
49+
get;
50+
private set
51+
{
52+
EnsureNotSealed(_completed);
53+
field = value;
54+
}
55+
}
3056

31-
IReadOnlyObjectTypeDefinitionCollection IUnionTypeDefinition.Types => _types;
57+
IReadOnlyDirectiveCollection IDirectivesProvider.Directives
58+
=> Directives;
3259

33-
IReadOnlyDirectiveCollection IDirectivesProvider.Directives => Directives;
3460

35-
public IFeatureCollection Features => throw new NotImplementedException();
61+
public IFeatureCollection Features
62+
{
63+
get;
64+
private set
65+
{
66+
EnsureNotSealed(_completed);
67+
field = value;
68+
}
69+
}
3670

3771
internal void Complete(CompositeUnionTypeCompletionContext context)
3872
{
39-
ThrowHelper.EnsureNotSealed(_completed);
73+
EnsureNotSealed(_completed);
74+
75+
Directives = context.Directives;
76+
Types = context.Types;
77+
Features = context.Features;
4078

41-
_directives = context.Directives;
42-
_types = context.Types;
4379
_completed = true;
4480
}
4581

@@ -55,8 +91,7 @@ public bool Equals(IType? other, TypeComparison comparison)
5591
return ReferenceEquals(this, other);
5692
}
5793

58-
return other is FusionUnionTypeDefinition otherUnion
59-
&& otherUnion.Name.Equals(Name, StringComparison.Ordinal);
94+
return other is FusionUnionTypeDefinition otherUnion && otherUnion.Name.Equals(Name, StringComparison.Ordinal);
6095
}
6196

6297
public bool IsAssignableFrom(ITypeDefinition type)
@@ -67,14 +102,14 @@ public bool IsAssignableFrom(ITypeDefinition type)
67102
return ReferenceEquals(type, this);
68103

69104
case TypeKind.Object:
70-
return _types.ContainsName(((FusionObjectTypeDefinition)type).Name);
105+
return Types.ContainsName(((FusionObjectTypeDefinition)type).Name);
71106

72107
default:
73108
return false;
74109
}
75110
}
76111

77-
/// <summary>
112+
/// <summary>
78113
/// Get the string representation of the union type definition.
79114
/// </summary>
80115
/// <returns>

0 commit comments

Comments
 (0)