@@ -29,6 +29,7 @@ internal sealed class DataSchemaGenerator
29
29
JsonApiPropertyName . Meta
30
30
] ;
31
31
32
+ private readonly SchemaGenerationTracer _schemaGenerationTracer ;
32
33
private readonly SchemaGenerator _defaultSchemaGenerator ;
33
34
private readonly GenerationCacheSchemaGenerator _generationCacheSchemaGenerator ;
34
35
private readonly ResourceTypeSchemaGenerator _resourceTypeSchemaGenerator ;
@@ -42,12 +43,14 @@ internal sealed class DataSchemaGenerator
42
43
private readonly RelationshipTypeFactory _relationshipTypeFactory ;
43
44
private readonly ResourceDocumentationReader _resourceDocumentationReader ;
44
45
45
- public DataSchemaGenerator ( SchemaGenerator defaultSchemaGenerator , GenerationCacheSchemaGenerator generationCacheSchemaGenerator ,
46
- ResourceTypeSchemaGenerator resourceTypeSchemaGenerator , ResourceIdSchemaGenerator resourceIdSchemaGenerator ,
47
- LinksVisibilitySchemaGenerator linksVisibilitySchemaGenerator , MetaSchemaGenerator metaSchemaGenerator , JsonApiSchemaIdSelector schemaIdSelector ,
48
- IJsonApiOptions options , IResourceGraph resourceGraph , ResourceFieldValidationMetadataProvider resourceFieldValidationMetadataProvider ,
49
- RelationshipTypeFactory relationshipTypeFactory , ResourceDocumentationReader resourceDocumentationReader )
46
+ public DataSchemaGenerator ( SchemaGenerationTracer schemaGenerationTracer , SchemaGenerator defaultSchemaGenerator ,
47
+ GenerationCacheSchemaGenerator generationCacheSchemaGenerator , ResourceTypeSchemaGenerator resourceTypeSchemaGenerator ,
48
+ ResourceIdSchemaGenerator resourceIdSchemaGenerator , LinksVisibilitySchemaGenerator linksVisibilitySchemaGenerator ,
49
+ MetaSchemaGenerator metaSchemaGenerator , JsonApiSchemaIdSelector schemaIdSelector , IJsonApiOptions options , IResourceGraph resourceGraph ,
50
+ ResourceFieldValidationMetadataProvider resourceFieldValidationMetadataProvider , RelationshipTypeFactory relationshipTypeFactory ,
51
+ ResourceDocumentationReader resourceDocumentationReader )
50
52
{
53
+ ArgumentNullException . ThrowIfNull ( schemaGenerationTracer ) ;
51
54
ArgumentNullException . ThrowIfNull ( defaultSchemaGenerator ) ;
52
55
ArgumentNullException . ThrowIfNull ( generationCacheSchemaGenerator ) ;
53
56
ArgumentNullException . ThrowIfNull ( resourceTypeSchemaGenerator ) ;
@@ -61,6 +64,7 @@ public DataSchemaGenerator(SchemaGenerator defaultSchemaGenerator, GenerationCac
61
64
ArgumentNullException . ThrowIfNull ( relationshipTypeFactory ) ;
62
65
ArgumentNullException . ThrowIfNull ( resourceDocumentationReader ) ;
63
66
67
+ _schemaGenerationTracer = schemaGenerationTracer ;
64
68
_defaultSchemaGenerator = defaultSchemaGenerator ;
65
69
_generationCacheSchemaGenerator = generationCacheSchemaGenerator ;
66
70
_resourceTypeSchemaGenerator = resourceTypeSchemaGenerator ;
@@ -108,6 +112,8 @@ public OpenApiSchema GenerateSchema(Type dataSchemaType, bool forRequestSchema,
108
112
return schemaRepository . LookupByType ( dataSchemaType ) ;
109
113
}
110
114
115
+ using ISchemaGenerationTraceScope traceScope = _schemaGenerationTracer . TraceStart ( this , dataSchemaType ) ;
116
+
111
117
referenceSchemaForData = _defaultSchemaGenerator . GenerateSchema ( dataSchemaType , schemaRepository ) ;
112
118
OpenApiSchema fullSchemaForData = schemaRepository . Schemas [ referenceSchemaForData . Reference . Id ] ;
113
119
fullSchemaForData . AdditionalPropertiesAllowed = false ;
@@ -139,6 +145,7 @@ public OpenApiSchema GenerateSchema(Type dataSchemaType, bool forRequestSchema,
139
145
fullSchemaForData . Extensions [ SetSchemaTypeToObjectDocumentFilter . RequiresRootObjectTypeKey ] = new OpenApiBoolean ( true ) ;
140
146
}
141
147
148
+ traceScope . TraceSucceeded ( referenceSchemaForData . Reference . Id ) ;
142
149
return referenceSchemaForData ;
143
150
}
144
151
@@ -205,6 +212,8 @@ public OpenApiSchema GenerateSchemaForCommonData(Type commonDataSchemaType, Sche
205
212
return referenceSchema ;
206
213
}
207
214
215
+ using ISchemaGenerationTraceScope traceScope = _schemaGenerationTracer . TraceStart ( this , commonDataSchemaType ) ;
216
+
208
217
OpenApiSchema referenceSchemaForResourceType = _resourceTypeSchemaGenerator . GenerateSchema ( schemaRepository ) ;
209
218
OpenApiSchema referenceSchemaForMeta = _metaSchemaGenerator . GenerateSchema ( schemaRepository ) ;
210
219
@@ -234,6 +243,7 @@ public OpenApiSchema GenerateSchemaForCommonData(Type commonDataSchemaType, Sche
234
243
referenceSchema = schemaRepository . AddDefinition ( schemaId , fullSchema ) ;
235
244
schemaRepository . RegisterType ( commonDataSchemaType , schemaId ) ;
236
245
246
+ traceScope . TraceSucceeded ( schemaId ) ;
237
247
return referenceSchema ;
238
248
}
239
249
@@ -344,7 +354,7 @@ private void SetResourceFields(OpenApiSchema fullSchemaForData, ResourceSchemaTy
344
354
345
355
if ( schemaHasFields )
346
356
{
347
- var fieldSchemaBuilder = new ResourceFieldSchemaBuilder ( _defaultSchemaGenerator , this , _linksVisibilitySchemaGenerator ,
357
+ var fieldSchemaBuilder = new ResourceFieldSchemaBuilder ( _schemaGenerationTracer , _defaultSchemaGenerator , this , _linksVisibilitySchemaGenerator ,
348
358
_resourceFieldValidationMetadataProvider , _relationshipTypeFactory , resourceSchemaType ) ;
349
359
350
360
SetFieldSchemaMembers ( fullSchemaForData , resourceSchemaType , forRequestSchema , true , fieldSchemaBuilder , schemaRepository ) ;
@@ -434,6 +444,8 @@ private OpenApiSchema GenerateSchemaForCommonFields(Type commonFieldsSchemaType,
434
444
return referenceSchema ;
435
445
}
436
446
447
+ using ISchemaGenerationTraceScope traceScope = _schemaGenerationTracer . TraceStart ( this , commonFieldsSchemaType ) ;
448
+
437
449
OpenApiSchema referenceSchemaForResourceType = _resourceTypeSchemaGenerator . GenerateSchema ( schemaRepository ) ;
438
450
439
451
var fullSchema = new OpenApiSchema
@@ -461,6 +473,7 @@ private OpenApiSchema GenerateSchemaForCommonFields(Type commonFieldsSchemaType,
461
473
referenceSchema = schemaRepository . AddDefinition ( schemaId , fullSchema ) ;
462
474
schemaRepository . RegisterType ( commonFieldsSchemaType , schemaId ) ;
463
475
476
+ traceScope . TraceSucceeded ( schemaId ) ;
464
477
return referenceSchema ;
465
478
}
466
479
@@ -557,6 +570,8 @@ private void GenerateDataSchemasForDirectlyDerivedTypes(ResourceSchemaType resou
557
570
ResourceSchemaType resourceSchemaTypeForDerived = resourceSchemaType . ChangeResourceType ( derivedType ) ;
558
571
Type derivedSchemaType = resourceSchemaTypeForDerived . SchemaConstructedType ;
559
572
573
+ using ISchemaGenerationTraceScope traceScope = _schemaGenerationTracer . TraceStart ( this , resourceSchemaTypeForDerived . SchemaConstructedType ) ;
574
+
560
575
OpenApiSchema referenceSchemaForDerived = _defaultSchemaGenerator . GenerateSchema ( derivedSchemaType , schemaRepository ) ;
561
576
OpenApiSchema fullSchemaForDerived = schemaRepository . Schemas [ referenceSchemaForDerived . Reference . Id ] ;
562
577
fullSchemaForDerived . AdditionalPropertiesAllowed = false ;
@@ -594,6 +609,8 @@ private void GenerateDataSchemasForDirectlyDerivedTypes(ResourceSchemaType resou
594
609
}
595
610
596
611
GenerateDataSchemasForDirectlyDerivedTypes ( resourceSchemaTypeForDerived , forRequestSchema , schemaRepository ) ;
612
+
613
+ traceScope . TraceSucceeded ( referenceSchemaForDerived . Reference . Id ) ;
597
614
}
598
615
}
599
616
0 commit comments