Skip to content

Commit 30a7e0b

Browse files
committed
Replace reflection-based code
1 parent 8d700c9 commit 30a7e0b

File tree

4 files changed

+80
-47
lines changed

4 files changed

+80
-47
lines changed

src/JsonApiDotNetCore.OpenApi/ActionDescriptorExtensions.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,7 @@ public static MethodInfo GetActionMethod(this ActionDescriptor descriptor)
2020
{
2121
ArgumentGuard.NotNull(descriptor);
2222

23-
IFilterMetadata? filterMetadata = descriptor.FilterDescriptors.Select(filterDescriptor => filterDescriptor.Filter)
24-
.OfType<TFilterMetaData>().FirstOrDefault();
25-
26-
return (TFilterMetaData?)filterMetadata;
23+
return descriptor.FilterDescriptors.Select(filterDescriptor => filterDescriptor.Filter).OfType<TFilterMetaData>().FirstOrDefault();
2724
}
2825

2926
public static ControllerParameterDescriptor? GetBodyParameterDescriptor(this ActionDescriptor descriptor)

src/JsonApiDotNetCore.OpenApi/JsonApiActionDescriptorCollectionProvider.cs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
using System.Reflection;
21
using JsonApiDotNetCore.Middleware;
32
using JsonApiDotNetCore.OpenApi.JsonApiMetadata;
43
using Microsoft.AspNetCore.Mvc;
@@ -154,14 +153,7 @@ private static void UpdateBodyParameterDescriptor(ActionDescriptor endpoint, Typ
154153
}
155154

156155
requestBodyDescriptor.ParameterType = documentType;
157-
ParameterInfo replacementParameterInfo = requestBodyDescriptor.ParameterInfo.WithParameterType(documentType);
158-
159-
if (parameterName != null)
160-
{
161-
replacementParameterInfo = replacementParameterInfo.WithName(parameterName);
162-
}
163-
164-
requestBodyDescriptor.ParameterInfo = replacementParameterInfo;
156+
requestBodyDescriptor.ParameterInfo = new ParameterInfoWrapper(requestBodyDescriptor.ParameterInfo, documentType, parameterName);
165157
}
166158

167159
private static ActionDescriptor Clone(ActionDescriptor descriptor)

src/JsonApiDotNetCore.OpenApi/ParameterInfoExtensions.cs

Lines changed: 0 additions & 34 deletions
This file was deleted.
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
using System.Reflection;
2+
3+
namespace JsonApiDotNetCore.OpenApi;
4+
5+
/// <summary>
6+
/// Used for parameters in action method expansion. Changes the parameter name and type, while still using all metadata of the underlying non-expanded
7+
/// parameter.
8+
/// </summary>
9+
internal sealed class ParameterInfoWrapper : ParameterInfo
10+
{
11+
private readonly ParameterInfo _innerParameter;
12+
13+
public override ParameterAttributes Attributes => _innerParameter.Attributes;
14+
public override IEnumerable<CustomAttributeData> CustomAttributes => _innerParameter.CustomAttributes;
15+
public override object? DefaultValue => _innerParameter.DefaultValue;
16+
public override bool HasDefaultValue => _innerParameter.HasDefaultValue;
17+
public override MemberInfo Member => _innerParameter.Member;
18+
public override int MetadataToken => _innerParameter.MetadataToken;
19+
public override string? Name { get; }
20+
public override Type ParameterType { get; }
21+
public override int Position => _innerParameter.Position;
22+
public override object? RawDefaultValue => _innerParameter.RawDefaultValue;
23+
24+
public ParameterInfoWrapper(ParameterInfo innerParameter, Type overriddenParameterType, string? overriddenName)
25+
{
26+
ArgumentGuard.NotNull(innerParameter);
27+
ArgumentGuard.NotNull(overriddenParameterType);
28+
29+
_innerParameter = innerParameter;
30+
ParameterType = overriddenParameterType;
31+
Name = overriddenName;
32+
}
33+
34+
public override object[] GetCustomAttributes(bool inherit)
35+
{
36+
return _innerParameter.GetCustomAttributes(inherit);
37+
}
38+
39+
public override object[] GetCustomAttributes(Type attributeType, bool inherit)
40+
{
41+
return _innerParameter.GetCustomAttributes(attributeType, inherit);
42+
}
43+
44+
public override bool IsDefined(Type attributeType, bool inherit)
45+
{
46+
return _innerParameter.IsDefined(attributeType, inherit);
47+
}
48+
49+
public override bool Equals(object? obj)
50+
{
51+
return _innerParameter.Equals(obj);
52+
}
53+
54+
public override int GetHashCode()
55+
{
56+
return _innerParameter.GetHashCode();
57+
}
58+
59+
public override string ToString()
60+
{
61+
return _innerParameter.ToString();
62+
}
63+
64+
public override IList<CustomAttributeData> GetCustomAttributesData()
65+
{
66+
return _innerParameter.GetCustomAttributesData();
67+
}
68+
69+
public override Type[] GetOptionalCustomModifiers()
70+
{
71+
return _innerParameter.GetOptionalCustomModifiers();
72+
}
73+
74+
public override Type[] GetRequiredCustomModifiers()
75+
{
76+
return _innerParameter.GetRequiredCustomModifiers();
77+
}
78+
}

0 commit comments

Comments
 (0)