diff --git a/CHANGELOG.md b/CHANGELOG.md
index 712d2a62..063ec50f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
+## [1.7.11] - 2024-02-26
+
+### Changed
+
+- Updated IParseNode enum methods `DynamicallyAccessedMembersAttribute` to `PublicFields`.
+- Fixed AOT compiler warnings from ILC.
+
## [1.7.10] - 2024-02-26
### Changed
diff --git a/src/Microsoft.Kiota.Abstractions.csproj b/src/Microsoft.Kiota.Abstractions.csproj
index e423838a..b8d78f67 100644
--- a/src/Microsoft.Kiota.Abstractions.csproj
+++ b/src/Microsoft.Kiota.Abstractions.csproj
@@ -14,7 +14,7 @@
https://aka.ms/kiota/docs
true
true
- 1.7.10
+ 1.7.11
true
false
diff --git a/src/RequestInformation.cs b/src/RequestInformation.cs
index e8573f5a..56ff78e1 100644
--- a/src/RequestInformation.cs
+++ b/src/RequestInformation.cs
@@ -53,7 +53,7 @@ public RequestInformation(Method method, string urlTemplate, IDictionary(Action>? requestConfiguration) where T : class, new()
#endif
{
- if(requestConfiguration == null) return;
+ if (requestConfiguration == null) return;
var requestConfig = new RequestConfiguration();
requestConfiguration(requestConfig);
AddQueryParameters(requestConfig.QueryParameters);
@@ -69,7 +69,7 @@ public Uri URI
{
set
{
- if(value == null)
+ if (value == null)
throw new ArgumentNullException(nameof(value));
QueryParameters.Clear();
PathParameters.Clear();
@@ -77,9 +77,9 @@ public Uri URI
}
get
{
- if(_rawUri != null)
+ if (_rawUri != null)
return _rawUri;
- else if(PathParameters.TryGetValue(RawUrlKey, out var rawUrl) &&
+ else if (PathParameters.TryGetValue(RawUrlKey, out var rawUrl) &&
rawUrl is string rawUrlString)
{
URI = new Uri(rawUrlString);
@@ -87,18 +87,18 @@ public Uri URI
}
else
{
- if(UrlTemplate?.IndexOf("{+baseurl}", StringComparison.OrdinalIgnoreCase) >= 0 && !PathParameters.ContainsKey("baseurl"))
+ if (UrlTemplate?.IndexOf("{+baseurl}", StringComparison.OrdinalIgnoreCase) >= 0 && !PathParameters.ContainsKey("baseurl"))
throw new InvalidOperationException($"{nameof(PathParameters)} must contain a value for \"baseurl\" for the url to be built.");
var substitutions = new Dictionary();
- foreach(var urlTemplateParameter in PathParameters)
+ foreach (var urlTemplateParameter in PathParameters)
{
substitutions.Add(urlTemplateParameter.Key, GetSanitizedValues(urlTemplateParameter.Value));
}
- foreach(var queryStringParameter in QueryParameters)
+ foreach (var queryStringParameter in QueryParameters)
{
- if(queryStringParameter.Value != null)
+ if (queryStringParameter.Value != null)
{
substitutions.Add(queryStringParameter.Key, GetSanitizedValues(queryStringParameter.Value));
}
@@ -157,8 +157,8 @@ public Uri URI
public void AddQueryParameters(T source)
#endif
{
- if(source == null) return;
- foreach(var property in typeof(T)
+ if (source == null) return;
+ foreach (var property in typeof(T)
.GetProperties()
.Select(
x => (
@@ -179,7 +179,7 @@ public void AddQueryParameters(T source)
private static object[] ExpandArray(Array collection)
{
var passedArray = new object[collection.Length];
- for(var i = 0; i < collection.Length; i++)
+ for (var i = 0; i < collection.Length; i++)
{
passedArray[i] = GetSanitizedValue(collection.GetValue(i)!);
}
@@ -188,7 +188,7 @@ private static object[] ExpandArray(Array collection)
private static object ReplaceEnumValueByStringRepresentation(object source)
{
- if(source is Enum enumValue && GetEnumName(enumValue) is string enumValueName)
+ if (source is Enum enumValue && GetEnumName(enumValue) is string enumValueName)
{
return enumValueName;
}
@@ -203,13 +203,17 @@ private static object ReplaceEnumValueByStringRepresentation(object source)
{
var type = value.GetType();
- if(Enum.GetName(type, value) is not { } name)
+ if (Enum.GetName(type, value) is not { } name)
throw new ArgumentException($"Invalid Enum value {value} for enum of type {type}");
- if(type.GetField(name)?.GetCustomAttribute() is { } attribute)
- return attribute.Value;
+#if NET5_0_OR_GREATER
+ [UnconditionalSuppressMessage("ReflectionAnalysis", "IL2070:UnrecognizedReflectionPattern",
+ Justification = "Enumerating Enum fields is always trimming/AOT safe - https://github.com/dotnet/runtime/issues/97737")]
+#endif
+ static string? GetEnumMemberValue(Type enumType, string name) =>
+ enumType.GetField(name, BindingFlags.Static | BindingFlags.Public)?.GetCustomAttribute() is { } attribute ? attribute.Value : null;
- return name.ToFirstCharacterLowerCase();
+ return GetEnumMemberValue(type, name) ?? name.ToFirstCharacterLowerCase();
}
///
/// The Request Headers.
@@ -220,7 +224,7 @@ private static object ReplaceEnumValueByStringRepresentation(object source)
///
public void AddHeaders(RequestHeaders headers)
{
- if(headers == null) return;
+ if (headers == null) return;
Headers.AddAll(headers);
}
///
@@ -238,8 +242,8 @@ public void AddHeaders(RequestHeaders headers)
/// The option to add.
public void AddRequestOptions(IEnumerable options)
{
- if(options == null) return;
- foreach(var option in options.Where(x => x != null))
+ if (options == null) return;
+ foreach (var option in options.Where(x => x != null))
_requestOptions.AddOrReplace(option.GetType().FullName!, option);
}
///
@@ -248,8 +252,8 @@ public void AddRequestOptions(IEnumerable options)
/// Options to remove.
public void RemoveRequestOptions(params IRequestOption[] options)
{
- if(options.Length == 0) throw new ArgumentNullException(nameof(options));
- foreach(var optionName in options.Where(x => x != null).Select(x => x.GetType().FullName))
+ if (options.Length == 0) throw new ArgumentNullException(nameof(options));
+ foreach (var optionName in options.Where(x => x != null).Select(x => x.GetType().FullName))
_requestOptions.Remove(optionName!);
}
@@ -263,7 +267,7 @@ public void RemoveRequestOptions(params IRequestOption[] options)
///
public void SetResponseHandler(IResponseHandler responseHandler)
{
- if(responseHandler == null)
+ if (responseHandler == null)
throw new ArgumentNullException(nameof(responseHandler));
var responseHandlerOption = new ResponseHandlerOption
@@ -322,7 +326,7 @@ public void SetContentFromParsable(IRequestAdapter requestAdapter, string con
using var activity = _activitySource?.StartActivity(nameof(SetContentFromParsable));
using var writer = GetSerializationWriter(requestAdapter, contentType, item);
SetRequestType(item, activity);
- if(item is MultipartBody mpBody)
+ if (item is MultipartBody mpBody)
{
contentType += "; boundary=" + mpBody.Boundary;
mpBody.RequestAdapter = requestAdapter;
@@ -333,15 +337,15 @@ public void SetContentFromParsable(IRequestAdapter requestAdapter, string con
}
private static void SetRequestType(object? result, Activity? activity)
{
- if(activity == null) return;
- if(result == null) return;
+ if (activity == null) return;
+ if (result == null) return;
activity.SetTag("com.microsoft.kiota.request.type", result.GetType().FullName);
}
private static ISerializationWriter GetSerializationWriter(IRequestAdapter requestAdapter, string contentType, T item)
{
- if(string.IsNullOrEmpty(contentType)) throw new ArgumentNullException(nameof(contentType));
- if(requestAdapter == null) throw new ArgumentNullException(nameof(requestAdapter));
- if(item == null) throw new InvalidOperationException($"{nameof(item)} cannot be null");
+ if (string.IsNullOrEmpty(contentType)) throw new ArgumentNullException(nameof(contentType));
+ if (requestAdapter == null) throw new ArgumentNullException(nameof(requestAdapter));
+ if (item == null) throw new InvalidOperationException($"{nameof(item)} cannot be null");
return requestAdapter.SerializationWriterFactory.GetSerializationWriter(contentType);
}
///
@@ -372,7 +376,7 @@ public void SetContentFromScalar(IRequestAdapter requestAdapter, string conte
using var activity = _activitySource?.StartActivity(nameof(SetContentFromScalar));
using var writer = GetSerializationWriter(requestAdapter, contentType, item);
SetRequestType(item, activity);
- switch(item)
+ switch (item)
{
case string s:
writer.WriteStringValue(null, s);
diff --git a/src/serialization/IParseNode.cs b/src/serialization/IParseNode.cs
index e9628dd3..422ef532 100644
--- a/src/serialization/IParseNode.cs
+++ b/src/serialization/IParseNode.cs
@@ -101,7 +101,7 @@ public interface IParseNode
///
/// The collection of enum values.
#if NET5_0_OR_GREATER
- IEnumerable GetCollectionOfEnumValues<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]T>() where T : struct, Enum;
+ IEnumerable GetCollectionOfEnumValues<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields)] T>() where T : struct, Enum;
#else
IEnumerable GetCollectionOfEnumValues() where T : struct, Enum;
#endif
@@ -116,7 +116,7 @@ public interface IParseNode
///
/// The enum value of the node.
#if NET5_0_OR_GREATER
- T? GetEnumValue<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)]T>() where T : struct, Enum;
+ T? GetEnumValue<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicFields)] T>() where T : struct, Enum;
#else
T? GetEnumValue() where T : struct, Enum;
#endif