Skip to content

Commit 10072ed

Browse files
authored
Groundwork to align type systems. (#8247)
1 parent 4984e54 commit 10072ed

File tree

608 files changed

+4741
-4808
lines changed

Some content is hidden

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

608 files changed

+4741
-4808
lines changed

src/HotChocolate/ApolloFederation/src/ApolloFederation/Extensions/FederationVersionExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ [new Uri(FederationVersionUrls.Federation27)] = FederationVersion.Federation27,
3131

3232
public static FederationVersion GetFederationVersion<T>(
3333
this IDescriptor<T> descriptor)
34-
where T : DefinitionBase
34+
where T : TypeSystemConfiguration
3535
{
3636
var contextData = descriptor.Extend().Context.ContextData;
3737
if (contextData.TryGetValue(FederationContextData.FederationVersion, out var value) &&

src/HotChocolate/ApolloFederation/src/ApolloFederation/FederationTypeInterceptor.cs

Lines changed: 60 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ internal sealed class FederationTypeInterceptor : TypeInterceptor
4343
private TypeRegistry _typeRegistry = default!;
4444
private ObjectType _queryType = default!;
4545
private ExtendedTypeDirectiveReference _keyDirectiveReference = default!;
46-
private SchemaTypeDefinition _schemaTypeDefinition = default!;
46+
private SchemaTypeConfiguration _schemaTypeCfg = default!;
4747
private RegisteredType _schemaType = default!;
4848
private bool _registeredTypes;
4949

@@ -63,22 +63,22 @@ internal override void InitializeContext(
6363

6464
public override void OnAfterInitialize(
6565
ITypeDiscoveryContext discoveryContext,
66-
DefinitionBase definition)
66+
TypeSystemConfiguration configuration)
6767
{
6868
if (discoveryContext.Type is ObjectType objectType &&
69-
definition is ObjectTypeDefinition objectTypeDefinition)
69+
configuration is ObjectTypeConfiguration objectTypeCfg)
7070
{
7171
ApplyMethodLevelReferenceResolvers(
7272
objectType,
73-
objectTypeDefinition);
73+
objectTypeCfg);
7474

7575
AddToUnionIfHasTypeLevelKeyDirective(
7676
objectType,
77-
objectTypeDefinition);
77+
objectTypeCfg);
7878

7979
AggregatePropertyLevelKeyDirectives(
8080
objectType,
81-
objectTypeDefinition,
81+
objectTypeCfg,
8282
discoveryContext);
8383
}
8484
}
@@ -114,40 +114,40 @@ public override IEnumerable<TypeReference> RegisterMoreTypes(
114114

115115
public override void OnBeforeCompleteName(
116116
ITypeCompletionContext completionContext,
117-
DefinitionBase definition)
117+
TypeSystemConfiguration configuration)
118118
{
119-
if (definition is SchemaTypeDefinition schemaDef)
119+
if (configuration is SchemaTypeConfiguration schemaCfg)
120120
{
121121
_schemaType = (RegisteredType)completionContext;
122-
_schemaTypeDefinition = schemaDef;
122+
_schemaTypeCfg = schemaCfg;
123123
}
124124
}
125125

126126
public override void OnAfterCompleteName(
127127
ITypeCompletionContext completionContext,
128-
DefinitionBase definition)
128+
TypeSystemConfiguration configuration)
129129
{
130130
if (_context.GetFederationVersion() == FederationVersion.Federation10
131-
|| definition is not ITypeDefinition and not DirectiveTypeDefinition)
131+
|| configuration is not ITypeConfiguration and not DirectiveTypeConfiguration)
132132
{
133133
return;
134134
}
135135

136136
// if we find a PagingInfo we will make all fields sharable.
137-
if (definition is ObjectTypeDefinition typeDef
138-
&& typeDef.Name.Equals(PageInfoType.Names.PageInfo))
137+
if (configuration is ObjectTypeConfiguration typeCfg
138+
&& typeCfg.Name.Equals(PageInfoType.Names.PageInfo))
139139
{
140-
foreach (var fieldDef in typeDef.Fields)
140+
foreach (var fieldCfg in typeCfg.Fields)
141141
{
142-
if (fieldDef.Directives.All(t => t.Value is not ShareableDirective))
142+
if (fieldCfg.Directives.All(t => t.Value is not ShareableDirective))
143143
{
144144
var typeRef = TypeReference.CreateDirective(_typeInspector.GetType(typeof(ShareableDirective)));
145-
fieldDef.Directives.Add(new DirectiveDefinition(ShareableDirective.Default, typeRef));
145+
fieldCfg.Directives.Add(new DirectiveConfiguration(ShareableDirective.Default, typeRef));
146146
}
147147
}
148148
}
149149

150-
var hasRuntimeType = (IHasRuntimeType)definition;
150+
var hasRuntimeType = (IHasRuntimeType)configuration;
151151
var type = hasRuntimeType.RuntimeType;
152152

153153
if (type != typeof(object) &&
@@ -259,8 +259,8 @@ private void RegisterImports()
259259
TypeDependencyFulfilled.Completed);
260260
_schemaType.Dependencies.Add(dependency);
261261

262-
_schemaTypeDefinition
263-
.GetLegacyDefinition()
262+
_schemaTypeCfg
263+
.GetLegacyConfiguration()
264264
.AddDirective(
265265
new LinkDirective(version.ToUrl(), federationTypes),
266266
_typeInspector);
@@ -272,8 +272,8 @@ private void RegisterImports()
272272
continue;
273273
}
274274

275-
_schemaTypeDefinition
276-
.GetLegacyDefinition()
275+
_schemaTypeCfg
276+
.GetLegacyConfiguration()
277277
.AddDirective(
278278
new LinkDirective(import.Key, import.Value),
279279
_typeInspector);
@@ -307,16 +307,16 @@ private void RegisterExportedDirectives()
307307

308308
foreach (var directive in composeDirectives)
309309
{
310-
_schemaTypeDefinition
311-
.GetLegacyDefinition()
310+
_schemaTypeCfg
311+
.GetLegacyConfiguration()
312312
.AddDirective(directive, _typeInspector);
313313
}
314314
}
315315
}
316316

317317
public override void OnAfterResolveRootType(
318318
ITypeCompletionContext completionContext,
319-
ObjectTypeDefinition definition,
319+
ObjectTypeConfiguration configuration,
320320
OperationType operationType)
321321
{
322322
if (operationType is OperationType.Query)
@@ -327,44 +327,44 @@ public override void OnAfterResolveRootType(
327327

328328
public override void OnBeforeCompleteType(
329329
ITypeCompletionContext completionContext,
330-
DefinitionBase definition)
330+
TypeSystemConfiguration configuration)
331331
{
332332
AddMemberTypesToTheEntityUnionType(
333333
completionContext,
334-
definition);
334+
configuration);
335335

336336
AddServiceTypeToQueryType(
337337
completionContext,
338-
definition);
338+
configuration);
339339
}
340340

341341
public override void OnAfterMakeExecutable(
342342
ITypeCompletionContext completionContext,
343-
DefinitionBase definition)
343+
TypeSystemConfiguration configuration)
344344
{
345345
if (completionContext.Type is ObjectType type &&
346-
definition is ObjectTypeDefinition typeDef)
346+
configuration is ObjectTypeConfiguration typeCfg)
347347
{
348-
CompleteExternalFieldSetters(type, typeDef);
349-
CompleteReferenceResolver(typeDef);
348+
CompleteExternalFieldSetters(type, typeCfg);
349+
CompleteReferenceResolver(typeCfg);
350350
}
351351
}
352352

353-
private void CompleteExternalFieldSetters(ObjectType type, ObjectTypeDefinition typeDef)
354-
=> ExternalSetterExpressionHelper.TryAddExternalSetter(type, typeDef);
353+
private void CompleteExternalFieldSetters(ObjectType type, ObjectTypeConfiguration typeCfg)
354+
=> ExternalSetterExpressionHelper.TryAddExternalSetter(type, typeCfg);
355355

356-
private void CompleteReferenceResolver(ObjectTypeDefinition typeDef)
356+
private void CompleteReferenceResolver(ObjectTypeConfiguration typeCfg)
357357
{
358-
IReadOnlyList<ReferenceResolverDefinition> resolvers;
358+
IReadOnlyList<ReferenceResolverConfiguration> resolvers;
359359
{
360-
var contextData = typeDef.GetContextData();
360+
var contextData = typeCfg.GetContextData();
361361

362362
if (!contextData.TryGetValue(EntityResolver, out var resolversObject))
363363
{
364364
return;
365365
}
366366

367-
if (resolversObject is not IReadOnlyList<ReferenceResolverDefinition> r)
367+
if (resolversObject is not IReadOnlyList<ReferenceResolverConfiguration> r)
368368
{
369369
return;
370370
}
@@ -374,7 +374,7 @@ private void CompleteReferenceResolver(ObjectTypeDefinition typeDef)
374374

375375
if (resolvers.Count == 1)
376376
{
377-
typeDef.ContextData[EntityResolver] = resolvers[0].Resolver;
377+
typeCfg.ContextData[EntityResolver] = resolvers[0].Resolver;
378378
}
379379
else
380380
{
@@ -404,38 +404,38 @@ private void CompleteReferenceResolver(ObjectTypeDefinition typeDef)
404404

405405
current = Expression.Block(new[] { variable, }, current, variable);
406406

407-
typeDef.ContextData[EntityResolver] =
407+
typeCfg.ContextData[EntityResolver] =
408408
Expression.Lambda<FieldResolverDelegate>(current, context).Compile();
409409
}
410410
}
411411

412412
private void AddServiceTypeToQueryType(
413413
ITypeCompletionContext completionContext,
414-
DefinitionBase? definition)
414+
TypeSystemConfiguration? definition)
415415
{
416416
if (!ReferenceEquals(completionContext.Type, _queryType))
417417
{
418418
return;
419419
}
420420

421-
var objectTypeDefinition = (ObjectTypeDefinition)definition!;
422-
objectTypeDefinition.Fields.Add(ServerFields.CreateServiceField(_context));
421+
var objectTypeCfg = (ObjectTypeConfiguration)definition!;
422+
objectTypeCfg.Fields.Add(ServerFields.CreateServiceField(_context));
423423
if (_entityTypes.Count > 0)
424424
{
425-
objectTypeDefinition.Fields.Add(ServerFields.CreateEntitiesField(_context));
425+
objectTypeCfg.Fields.Add(ServerFields.CreateEntitiesField(_context));
426426
}
427427
}
428428

429429
private void ApplyMethodLevelReferenceResolvers(
430430
ObjectType objectType,
431-
ObjectTypeDefinition objectTypeDefinition)
431+
ObjectTypeConfiguration objectTypeCfg)
432432
{
433433
if (objectType.RuntimeType == typeof(object))
434434
{
435435
return;
436436
}
437437

438-
var descriptor = ObjectTypeDescriptor.From(_context, objectTypeDefinition);
438+
var descriptor = ObjectTypeDescriptor.From(_context, objectTypeCfg);
439439

440440
// Static methods won't end up in the schema as fields.
441441
// The default initialization system only considers instance methods,
@@ -460,21 +460,21 @@ private void ApplyMethodLevelReferenceResolvers(
460460
}
461461

462462
// This seems to re-detect the entity resolver and save it into the context data.
463-
descriptor.CreateDefinition();
463+
descriptor.CreateConfiguration();
464464
}
465465

466466
private void AddToUnionIfHasTypeLevelKeyDirective(
467467
ObjectType objectType,
468-
ObjectTypeDefinition objectTypeDefinition)
468+
ObjectTypeConfiguration objectTypeCfg)
469469
{
470-
if (objectTypeDefinition.Directives.FirstOrDefault(d => d.Value is KeyDirective) is { } keyDirective &&
470+
if (objectTypeCfg.Directives.FirstOrDefault(d => d.Value is KeyDirective) is { } keyDirective &&
471471
((KeyDirective)keyDirective.Value).Resolvable)
472472
{
473473
_entityTypes.Add(objectType);
474474
return;
475475
}
476476

477-
if (objectTypeDefinition.Fields.Any(f => f.ContextData.TryGetValue(KeyMarker, out var resolvable) &&
477+
if (objectTypeCfg.Fields.Any(f => f.ContextData.TryGetValue(KeyMarker, out var resolvable) &&
478478
resolvable is true))
479479
{
480480
_entityTypes.Add(objectType);
@@ -483,21 +483,21 @@ private void AddToUnionIfHasTypeLevelKeyDirective(
483483

484484
private void AggregatePropertyLevelKeyDirectives(
485485
ObjectType objectType,
486-
ObjectTypeDefinition objectTypeDefinition,
486+
ObjectTypeConfiguration objectTypeCfg,
487487
ITypeDiscoveryContext discoveryContext)
488488
{
489489
// if we find key markers on our fields, we need to construct the key directive
490490
// from the annotated fields.
491491
{
492-
var foundMarkers = objectTypeDefinition.Fields.Any(f => f.ContextData.ContainsKey(KeyMarker));
492+
var foundMarkers = objectTypeCfg.Fields.Any(f => f.ContextData.ContainsKey(KeyMarker));
493493

494494
if (!foundMarkers)
495495
{
496496
return;
497497
}
498498
}
499499

500-
IReadOnlyList<ObjectFieldDefinition> fields = objectTypeDefinition.Fields;
500+
IReadOnlyList<ObjectFieldConfiguration> fields = objectTypeCfg.Fields;
501501
var fieldSet = new StringBuilder();
502502
bool? resolvable = null;
503503

@@ -525,11 +525,11 @@ private void AggregatePropertyLevelKeyDirectives(
525525
}
526526

527527
// add the key directive with the dynamically generated field set.
528-
AddKeyDirective(objectTypeDefinition, fieldSet.ToString(), resolvable ?? true);
528+
AddKeyDirective(objectTypeCfg, fieldSet.ToString(), resolvable ?? true);
529529

530530
// register dependency to the key directive so that it is completed before
531531
// we complete this type.
532-
foreach (var directiveDefinition in objectTypeDefinition.Directives)
532+
foreach (var directiveDefinition in objectTypeCfg.Directives)
533533
{
534534
discoveryContext.Dependencies.Add(
535535
new TypeDependency(
@@ -549,25 +549,25 @@ private void AggregatePropertyLevelKeyDirectives(
549549

550550
private void AddMemberTypesToTheEntityUnionType(
551551
ITypeCompletionContext completionContext,
552-
DefinitionBase? definition)
552+
TypeSystemConfiguration? definition)
553553
{
554554
if (completionContext.Type is _EntityType &&
555-
definition is UnionTypeDefinition unionTypeDefinition)
555+
definition is UnionTypeConfiguration unionTypeCfg)
556556
{
557557
foreach (var objectType in _entityTypes)
558558
{
559-
unionTypeDefinition.Types.Add(TypeReference.Create(objectType));
559+
unionTypeCfg.Types.Add(TypeReference.Create(objectType));
560560
}
561561
}
562562
}
563563

564564
private void AddKeyDirective(
565-
ObjectTypeDefinition objectTypeDefinition,
565+
ObjectTypeConfiguration objectTypeCfg,
566566
string fieldSet,
567567
bool resolvable)
568568
{
569-
objectTypeDefinition.Directives.Add(
570-
new DirectiveDefinition(
569+
objectTypeCfg.Directives.Add(
570+
new DirectiveConfiguration(
571571
new KeyDirective(fieldSet, resolvable),
572572
_keyDirectiveReference));
573573
}

src/HotChocolate/ApolloFederation/src/ApolloFederation/Resolvers/ArgumentParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ private static bool TryGetValue<T>(
3030
int i,
3131
out T? value)
3232
{
33-
type = type is NonNullType nonNullType ? nonNullType.Type : type;
33+
type = type is NonNullType nonNullType ? nonNullType.NullableType : type;
3434
switch (valueNode.Kind)
3535
{
3636
case SyntaxKind.ObjectValue:

src/HotChocolate/ApolloFederation/src/ApolloFederation/Resolvers/ExternalSetterExpressionHelper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ internal static class ExternalSetterExpressionHelper
2424
private static readonly ParameterExpression _data = Parameter(typeof(IValueNode), "data");
2525
private static readonly ParameterExpression _entity = Parameter(typeof(object), "entity");
2626

27-
public static void TryAddExternalSetter(ObjectType type, ObjectTypeDefinition typeDef)
27+
public static void TryAddExternalSetter(ObjectType type, ObjectTypeConfiguration typeDef)
2828
{
2929
List<Expression>? block = null;
3030

src/HotChocolate/ApolloFederation/src/ApolloFederation/Types/Descriptors/EntityResolverDefinition.cs renamed to src/HotChocolate/ApolloFederation/src/ApolloFederation/Types/Descriptors/EntityResolverConfiguration.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
namespace HotChocolate.ApolloFederation.Types;
44

55
/// <summary>
6-
/// The entity definition allows to specify a reference resolver.
6+
/// The entity definition allows specifying a reference resolver.
77
/// </summary>
8-
public sealed class EntityResolverDefinition : DefinitionBase
8+
public sealed class EntityResolverConfiguration : TypeSystemConfiguration
99
{
1010
/// <summary>
1111
/// The runtime type of the entity.
@@ -15,5 +15,5 @@ public sealed class EntityResolverDefinition : DefinitionBase
1515
/// <summary>
1616
/// The reference resolver definition.
1717
/// </summary>
18-
public ReferenceResolverDefinition? ResolverDefinition { get; set; }
18+
public ReferenceResolverConfiguration? Resolver { get; set; }
1919
}

0 commit comments

Comments
 (0)