Skip to content

Commit 3a57bc0

Browse files
committed
Refactor operation tag generation
1 parent 4d775de commit 3a57bc0

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

src/Microsoft.OpenApi.OData.Reader/Operation/EdmOperationOperationHandler.cs

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -132,11 +132,9 @@ protected override void SetBasicInfo(OpenApiOperation operation)
132132

133133
/// <inheritdoc/>
134134
protected override void SetTags(OpenApiOperation operation)
135-
{
136-
string tagName = null;
137-
var secondLastSegment = Path.Segments.Reverse().Skip(1).First();
138-
GenerateTagName(secondLastSegment, out tagName);
139-
OpenApiTag tag = new OpenApiTag
135+
{
136+
GenerateTagName(out string tagName);
137+
OpenApiTag tag = new()
140138
{
141139
Name = tagName,
142140
};
@@ -148,18 +146,26 @@ protected override void SetTags(OpenApiOperation operation)
148146
base.SetTags(operation);
149147
}
150148

151-
private void GenerateTagName(ODataSegment targetSegment, out string tagName)
152-
{
149+
/// <summary>
150+
/// Genrates the tag name for the operation.
151+
/// </summary>
152+
/// <param name="tagName">The generated tag name.</param>
153+
/// <param name="skip">The number of segments to skip.</param>
154+
private void GenerateTagName(out string tagName, int skip = 1)
155+
{
156+
var targetSegment = Path.Segments.Reverse().Skip(skip).First();
157+
153158
if (targetSegment is ODataNavigationPropertySegment)
154159
{
155160
tagName = EdmModelHelper.GenerateNavigationPropertyPathTagName(Path, Context);
156161
}
157-
else if (targetSegment is ODataOperationSegment || targetSegment is ODataOperationImportSegment)
158-
{ // Composable function
159-
targetSegment = Path.Segments.Reverse().Skip(2).First();
160-
GenerateTagName(targetSegment, out tagName);
162+
else if (targetSegment is ODataOperationSegment || targetSegment is ODataOperationImportSegment // Composable function
163+
|| targetSegment is ODataKeySegment) // Previous segmment could be a navigation property or a navigation source segment
164+
{
165+
skip += 1;
166+
GenerateTagName(out tagName, skip);
161167
}
162-
else // ODataKeySegment or ODataNavigationSourceSegment
168+
else // ODataNavigationSourceSegment
163169
{
164170
tagName = NavigationSource.Name + "." + NavigationSource.EntityType.Name;
165171
}

0 commit comments

Comments
 (0)