Skip to content

Commit c4f153c

Browse files
committed
Update snapshots
1 parent 8d540ef commit c4f153c

7 files changed

+76
-7
lines changed

src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/AddOpenApiTests.CanInterceptAddOpenApi#OpenApiXmlCommentSupport.generated.verified.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
//HintName: OpenApiXmlCommentSupport.generated.cs
1+
//HintName: OpenApiXmlCommentSupport.generated.cs
22
//------------------------------------------------------------------------------
33
// <auto-generated>
44
// This code was generated by a tool.
@@ -616,4 +616,4 @@ public static IServiceCollection AddOpenApi(this IServiceCollection services, st
616616
}
617617

618618
}
619-
}
619+
}

src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/AdditionalTextsTests.CanHandleXmlForSchemasInAdditionalTexts#OpenApiXmlCommentSupport.generated.verified.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -613,4 +613,4 @@ public static IServiceCollection AddOpenApi(this IServiceCollection services)
613613
}
614614

615615
}
616-
}
616+
}

src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/CompletenessTests.SupportsAllXmlTagsOnSchemas#OpenApiXmlCommentSupport.generated.verified.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -705,4 +705,4 @@ public static IServiceCollection AddOpenApi(this IServiceCollection services)
705705
}
706706

707707
}
708-
}
708+
}

src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/OperationTests.SupportsXmlCommentsOnOperationsFromControllers#OpenApiXmlCommentSupport.generated.verified.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -588,4 +588,4 @@ public static IServiceCollection AddOpenApi(this IServiceCollection services)
588588
}
589589

590590
}
591-
}
591+
}

src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/OperationTests.SupportsXmlCommentsOnOperationsFromMinimalApis#OpenApiXmlCommentSupport.generated.verified.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -628,4 +628,4 @@ public static IServiceCollection AddOpenApi(this IServiceCollection services)
628628
}
629629

630630
}
631-
}
631+
}

src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/SchemaTests.SupportsXmlCommentsOnSchemas#OpenApiXmlCommentSupport.generated.verified.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -614,4 +614,4 @@ public static IServiceCollection AddOpenApi(this IServiceCollection services)
614614
}
615615

616616
}
617-
}
617+
}

src/OpenApi/test/Microsoft.AspNetCore.OpenApi.SourceGenerators.Tests/snapshots/SchemaTests.XmlCommentsOnPropertiesShouldApplyToSchemaReferences#OpenApiXmlCommentSupport.generated.verified.cs

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ namespace Microsoft.AspNetCore.OpenApi.Generated
3939
using System.Threading.Tasks;
4040
using Microsoft.AspNetCore.OpenApi;
4141
using Microsoft.AspNetCore.Mvc.Controllers;
42+
using Microsoft.AspNetCore.Mvc.ModelBinding.Metadata;
4243
using Microsoft.Extensions.DependencyInjection;
4344
using Microsoft.OpenApi;
4445

@@ -143,6 +144,30 @@ public static string CreateDocumentationId(this PropertyInfo property)
143144
return sb.ToString();
144145
}
145146

147+
/// <summary>
148+
/// Generates a documentation comment ID for a property given its container type and property name.
149+
/// Example: P:Namespace.ContainingType.PropertyName
150+
/// </summary>
151+
public static string CreateDocumentationId(Type containerType, string propertyName)
152+
{
153+
if (containerType == null)
154+
{
155+
throw new ArgumentNullException(nameof(containerType));
156+
}
157+
if (string.IsNullOrEmpty(propertyName))
158+
{
159+
throw new ArgumentException("Property name cannot be null or empty.", nameof(propertyName));
160+
}
161+
162+
var sb = new StringBuilder();
163+
sb.Append("P:");
164+
sb.Append(GetTypeDocId(containerType, includeGenericArguments: false, omitGenericArity: false));
165+
sb.Append('.');
166+
sb.Append(propertyName);
167+
168+
return sb.ToString();
169+
}
170+
146171
/// <summary>
147172
/// Generates a documentation comment ID for a method (or constructor).
148173
/// For example:
@@ -407,6 +432,50 @@ public Task TransformAsync(OpenApiOperation operation, OpenApiOperationTransform
407432
}
408433
}
409434
}
435+
foreach (var parameterDescription in context.Description.ParameterDescriptions)
436+
{
437+
var metadata = parameterDescription.ModelMetadata;
438+
if (metadata.MetadataKind == ModelMetadataKind.Property
439+
&& metadata.ContainerType is { } containerType
440+
&& metadata.PropertyName is { } propertyName)
441+
{
442+
var propertyDocId = DocumentationCommentIdHelper.CreateDocumentationId(containerType, propertyName!);
443+
if (XmlCommentCache.Cache.TryGetValue(DocumentationCommentIdHelper.NormalizeDocId(propertyDocId), out var propertyComment))
444+
{
445+
var parameter = operation.Parameters?.SingleOrDefault(p => p.Name == metadata.Name);
446+
if (parameter is null)
447+
{
448+
if (operation.RequestBody is not null)
449+
{
450+
operation.RequestBody.Description = propertyComment.Value ?? propertyComment.Returns ?? propertyComment.Summary;
451+
if (propertyComment.Examples?.FirstOrDefault() is { } jsonString)
452+
{
453+
var content = operation.RequestBody.Content?.Values;
454+
var parsedExample = jsonString.Parse();
455+
if (content is null)
456+
{
457+
continue;
458+
}
459+
foreach (var mediaType in content)
460+
{
461+
mediaType.Example = parsedExample;
462+
}
463+
}
464+
}
465+
continue;
466+
}
467+
var targetOperationParameter = UnwrapOpenApiParameter(parameter);
468+
if (targetOperationParameter is not null)
469+
{
470+
targetOperationParameter.Description = propertyComment.Value ?? propertyComment.Returns ?? propertyComment.Summary;
471+
if (propertyComment.Examples?.FirstOrDefault() is { } jsonString)
472+
{
473+
targetOperationParameter.Example = jsonString.Parse();
474+
}
475+
}
476+
}
477+
}
478+
}
410479

411480
return Task.CompletedTask;
412481
}

0 commit comments

Comments
 (0)