Skip to content

Commit 8ff1ab7

Browse files
authored
[Fix] Set UnresolvedReference=true for schemas with OpenAPIReference objects (#175)
* Add UnresolvedReference properties to reference schemas * Set more UnresolvedReference parameters
1 parent e572e39 commit 8ff1ab7

24 files changed

+85
-15
lines changed

src/Microsoft.OpenApi.OData.Reader/Common/EdmModelHelper.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ internal static OpenApiSchema GetDerivedTypesReferenceSchema(IEdmStructuredType
3737

3838
OpenApiSchema baseTypeSchema = new()
3939
{
40+
UnresolvedReference = true,
4041
Reference = new OpenApiReference
4142
{
4243
Type = ReferenceType.Schema,
@@ -49,6 +50,7 @@ internal static OpenApiSchema GetDerivedTypesReferenceSchema(IEdmStructuredType
4950
{
5051
OpenApiSchema derivedTypeSchema = new()
5152
{
53+
UnresolvedReference = true,
5254
Reference = new OpenApiReference
5355
{
5456
Type = ReferenceType.Schema,

src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiEdmTypeSchemaGenerator.cs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -283,112 +283,127 @@ public static OpenApiSchema CreateSchema(this ODataContext context, IEdmPrimitiv
283283
Type = ReferenceType.Schema,
284284
Id = "Edm.Geography"
285285
};
286+
schema.UnresolvedReference = true;
286287
break;
287288
case EdmPrimitiveTypeKind.GeographyPoint:
288289
schema.Reference = new OpenApiReference
289290
{
290291
Type = ReferenceType.Schema,
291292
Id = "Edm.GeographyPoint"
292293
};
294+
schema.UnresolvedReference = true;
293295
break;
294296
case EdmPrimitiveTypeKind.GeographyLineString:
295297
schema.Reference = new OpenApiReference
296298
{
297299
Type = ReferenceType.Schema,
298300
Id = "Edm.GeographyLineString"
299301
};
302+
schema.UnresolvedReference = true;
300303
break;
301304
case EdmPrimitiveTypeKind.GeographyPolygon:
302305
schema.Reference = new OpenApiReference
303306
{
304307
Type = ReferenceType.Schema,
305308
Id = "Edm.GeographyPolygon"
306309
};
310+
schema.UnresolvedReference = true;
307311
break;
308312
case EdmPrimitiveTypeKind.GeographyCollection:
309313
schema.Reference = new OpenApiReference
310314
{
311315
Type = ReferenceType.Schema,
312316
Id = "Edm.GeographyCollection"
313317
};
318+
schema.UnresolvedReference = true;
314319
break;
315320
case EdmPrimitiveTypeKind.GeographyMultiPolygon:
316321
schema.Reference = new OpenApiReference
317322
{
318323
Type = ReferenceType.Schema,
319324
Id = "Edm.GeographyMultiPolygon"
320325
};
326+
schema.UnresolvedReference = true;
321327
break;
322328
case EdmPrimitiveTypeKind.GeographyMultiLineString:
323329
schema.Reference = new OpenApiReference
324330
{
325331
Type = ReferenceType.Schema,
326332
Id = "Edm.GeographyMultiLineString"
327333
};
334+
schema.UnresolvedReference = true;
328335
break;
329336
case EdmPrimitiveTypeKind.GeographyMultiPoint:
330337
schema.Reference = new OpenApiReference
331338
{
332339
Type = ReferenceType.Schema,
333340
Id = "Edm.GeographyMultiPoint"
334341
};
342+
schema.UnresolvedReference = true;
335343
break;
336-
337344
case EdmPrimitiveTypeKind.Geometry: // Geometry
338345
schema.Reference = new OpenApiReference
339346
{
340347
Type = ReferenceType.Schema,
341348
Id = "Edm.Geometry"
342349
};
350+
schema.UnresolvedReference = true;
343351
break;
344352
case EdmPrimitiveTypeKind.GeometryPoint:
345353
schema.Reference = new OpenApiReference
346354
{
347355
Type = ReferenceType.Schema,
348356
Id = "Edm.GeometryPoint"
349357
};
358+
schema.UnresolvedReference = true;
350359
break;
351360
case EdmPrimitiveTypeKind.GeometryLineString:
352361
schema.Reference = new OpenApiReference
353362
{
354363
Type = ReferenceType.Schema,
355364
Id = "Edm.GeometryLineString"
356365
};
366+
schema.UnresolvedReference = true;
357367
break;
358368
case EdmPrimitiveTypeKind.GeometryPolygon:
359369
schema.Reference = new OpenApiReference
360370
{
361371
Type = ReferenceType.Schema,
362372
Id = "Edm.GeometryPolygon"
363373
};
374+
schema.UnresolvedReference = true;
364375
break;
365376
case EdmPrimitiveTypeKind.GeometryCollection:
366377
schema.Reference = new OpenApiReference
367378
{
368379
Type = ReferenceType.Schema,
369380
Id = "Edm.GeometryCollection"
370381
};
382+
schema.UnresolvedReference = true;
371383
break;
372384
case EdmPrimitiveTypeKind.GeometryMultiPolygon:
373385
schema.Reference = new OpenApiReference
374386
{
375387
Type = ReferenceType.Schema,
376388
Id = "Edm.GeometryMultiPolygon"
377389
};
390+
schema.UnresolvedReference = true;
378391
break;
379392
case EdmPrimitiveTypeKind.GeometryMultiLineString:
380393
schema.Reference = new OpenApiReference
381394
{
382395
Type = ReferenceType.Schema,
383396
Id = "Edm.GeometryMultiLineString"
384397
};
398+
schema.UnresolvedReference = true;
385399
break;
386400
case EdmPrimitiveTypeKind.GeometryMultiPoint:
387401
schema.Reference = new OpenApiReference
388402
{
389403
Type = ReferenceType.Schema,
390404
Id = "Edm.GeometryMultiPoint"
391405
};
406+
schema.UnresolvedReference = true;
392407
break;
393408

394409
case EdmPrimitiveTypeKind.None:
@@ -414,6 +429,7 @@ private static OpenApiSchema CreateEnumTypeSchema(this ODataContext context, IEd
414429
{
415430
new OpenApiSchema
416431
{
432+
UnresolvedReference = true,
417433
Reference = new OpenApiReference
418434
{
419435
Type = ReferenceType.Schema,
@@ -431,6 +447,7 @@ private static OpenApiSchema CreateEnumTypeSchema(this ODataContext context, IEd
431447
Type = ReferenceType.Schema,
432448
Id = typeReference.Definition.FullTypeName()
433449
};
450+
schema.UnresolvedReference = true;
434451
}
435452

436453
return schema;
@@ -455,6 +472,7 @@ private static OpenApiSchema CreateStructuredTypeSchema(this ODataContext contex
455472
{
456473
new OpenApiSchema
457474
{
475+
UnresolvedReference = true,
458476
Reference = new OpenApiReference
459477
{
460478
Type = ReferenceType.Schema,
@@ -472,6 +490,7 @@ private static OpenApiSchema CreateStructuredTypeSchema(this ODataContext contex
472490
Type = ReferenceType.Schema,
473491
Id = typeReference.Definition.FullTypeName()
474492
};
493+
schema.UnresolvedReference = true;
475494
}
476495

477496
return schema;
@@ -492,6 +511,7 @@ private static OpenApiSchema CreateTypeDefinitionSchema(this ODataContext contex
492511
{
493512
new OpenApiSchema
494513
{
514+
UnresolvedReference = true,
495515
Reference = new OpenApiReference
496516
{
497517
Type = ReferenceType.Schema,
@@ -509,6 +529,7 @@ private static OpenApiSchema CreateTypeDefinitionSchema(this ODataContext contex
509529
Type = ReferenceType.Schema,
510530
Id = reference.Definition.FullTypeName()
511531
};
532+
schema.UnresolvedReference = true;
512533
}
513534

514535

src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiErrorSchemaGenerator.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ public static OpenApiSchema CreateErrorSchema(string rootNamespaceName)
7676
"error",
7777
new OpenApiSchema
7878
{
79+
UnresolvedReference = true,
7980
Reference = new OpenApiReference
8081
{
8182
Type = ReferenceType.Schema,
@@ -144,6 +145,7 @@ public static OpenApiSchema CreateErrorMainSchema(string rootNamespaceName)
144145
Type = "array",
145146
Items = new OpenApiSchema
146147
{
148+
UnresolvedReference = true,
147149
Reference = new OpenApiReference
148150
{
149151
Type = ReferenceType.Schema,
@@ -156,6 +158,7 @@ public static OpenApiSchema CreateErrorMainSchema(string rootNamespaceName)
156158
"innererror",
157159
new OpenApiSchema
158160
{
161+
UnresolvedReference = true,
159162
Reference = new OpenApiReference
160163
{
161164
Type = ReferenceType.Schema,

src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiParameterGenerator.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ public static OpenApiParameter CreateTop(this ODataContext context, IEdmVocabula
232232
{
233233
return new OpenApiParameter
234234
{
235+
UnresolvedReference = true,
235236
Reference = new OpenApiReference { Type = ReferenceType.Parameter, Id = "top" }
236237
};
237238
}
@@ -255,6 +256,7 @@ public static OpenApiParameter CreateSkip(this ODataContext context, IEdmVocabul
255256
{
256257
return new OpenApiParameter
257258
{
259+
UnresolvedReference = true,
258260
Reference = new OpenApiReference { Type = ReferenceType.Parameter, Id = "skip" }
259261
};
260262
}
@@ -278,6 +280,7 @@ public static OpenApiParameter CreateSearch(this ODataContext context, IEdmVocab
278280
{
279281
return new OpenApiParameter
280282
{
283+
UnresolvedReference = true,
281284
Reference = new OpenApiReference { Type = ReferenceType.Parameter, Id = "search" }
282285
};
283286
}
@@ -301,6 +304,7 @@ public static OpenApiParameter CreateCount(this ODataContext context, IEdmVocabu
301304
{
302305
return new OpenApiParameter
303306
{
307+
UnresolvedReference = true,
304308
Reference = new OpenApiReference { Type = ReferenceType.Parameter, Id = "count" }
305309
};
306310
}
@@ -324,6 +328,7 @@ public static OpenApiParameter CreateFilter(this ODataContext context, IEdmVocab
324328
{
325329
return new OpenApiParameter
326330
{
331+
UnresolvedReference = true,
327332
Reference = new OpenApiReference { Type = ReferenceType.Parameter, Id = "filter" }
328333
};
329334
}

src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiResponseGenerator.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ internal static class OpenApiResponseGenerator
2323
{ Constants.StatusCodeDefault,
2424
new OpenApiResponse
2525
{
26+
UnresolvedReference = true,
2627
Reference = new OpenApiReference
2728
{
2829
Type = ReferenceType.Response,
@@ -34,6 +35,7 @@ internal static class OpenApiResponseGenerator
3435
{ Constants.StatusCode204, new OpenApiResponse { Description = "Success"} },
3536
{ Constants.StatusCodeClass4XX, new OpenApiResponse
3637
{
38+
UnresolvedReference = true,
3739
Reference = new OpenApiReference
3840
{
3941
Type = ReferenceType.Response,
@@ -43,6 +45,7 @@ internal static class OpenApiResponseGenerator
4345
},
4446
{ Constants.StatusCodeClass5XX, new OpenApiResponse
4547
{
48+
UnresolvedReference = true,
4649
Reference = new OpenApiReference
4750
{
4851
Type = ReferenceType.Response,
@@ -222,6 +225,7 @@ private static OpenApiResponse CreateCollectionResponse(string typeName)
222225
{
223226
Schema = new OpenApiSchema
224227
{
228+
UnresolvedReference = true,
225229
Reference = new OpenApiReference
226230
{
227231
Type = ReferenceType.Schema,
@@ -238,6 +242,7 @@ private static OpenApiResponse CreateCountResponse()
238242
{
239243
OpenApiSchema schema = new()
240244
{
245+
UnresolvedReference = true,
241246
Reference = new() {
242247
Type = ReferenceType.Schema,
243248
Id = Constants.DollarCountSchemaName
@@ -273,6 +278,7 @@ private static OpenApiResponse CreateErrorResponse(this ODataContext context)
273278
{
274279
Schema = new OpenApiSchema
275280
{
281+
UnresolvedReference = true,
276282
Reference = new OpenApiReference
277283
{
278284
Type = ReferenceType.Schema,

src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiSchemaGenerator.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ private static OpenApiSchema CreateCollectionSchema(ODataContext context, IEdmSt
161161
{
162162
schema = new OpenApiSchema
163163
{
164+
UnresolvedReference = true,
164165
Reference = new OpenApiReference
165166
{
166167
Type = ReferenceType.Schema,
@@ -407,6 +408,7 @@ private static OpenApiSchema CreateStructuredTypeSchema(this ODataContext contex
407408
// 1. a JSON Reference to the Schema Object of the base type
408409
new OpenApiSchema
409410
{
411+
UnresolvedReference = true,
410412
Reference = new OpenApiReference
411413
{
412414
Type = ReferenceType.Schema,

src/Microsoft.OpenApi.OData.Reader/Generator/OpenApiSecurityRequirementGenerator.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public static IEnumerable<OpenApiSecurityRequirement> CreateSecurityRequirements
3838
[
3939
new OpenApiSecurityScheme
4040
{
41+
UnresolvedReference = true,
4142
Reference = new OpenApiReference
4243
{
4344
Type = ReferenceType.SecurityScheme,
@@ -70,6 +71,7 @@ public static IEnumerable<OpenApiSecurityRequirement> CreateSecurityRequirements
7071
[
7172
new OpenApiSecurityScheme
7273
{
74+
UnresolvedReference = true,
7375
Reference = new OpenApiReference
7476
{
7577
Type = ReferenceType.SecurityScheme,

0 commit comments

Comments
 (0)