Turn on the AOT analyzer. (#92)

* Turn on the AOT analyzer.

* Address feedback

* Add missing types.

* Fix build and react to conflicts.

* Fix failing test.

* Address feedback.
This commit is contained in:
Eirik Tsarpalis 2025-03-18 18:48:28 +02:00 • committed by GitHub
commit e7fa6194f6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 522 additions and 68 deletions

View file

@ -1,8 +1,12 @@
namespace McpDotNet.Protocol.Messages;
using McpDotNet.Utils.Json;
using System.Text.Json.Serialization;
namespace McpDotNet.Protocol.Messages;
/// <summary>
/// Base interface for all JSON-RPC messages in the MCP protocol.
/// </summary>
[JsonConverter(typeof(JsonRpcMessageConverter))]
public interface IJsonRpcMessage
{
/// <summary>

View file

@ -77,7 +77,7 @@ public sealed class HttpListenerSseServerTransport : TransportBase, IServerTrans
try
{
var json = JsonSerializer.Serialize(message, _jsonOptions);
var json = JsonSerializer.Serialize(message, _jsonOptions.GetTypeInfo<IJsonRpcMessage>());
_logger.TransportSendingMessage(EndpointName, id, json);
await _httpServerProvider.SendEvent(json, "message").ConfigureAwait(false);
@ -125,7 +125,7 @@ public sealed class HttpListenerSseServerTransport : TransportBase, IServerTrans
try
{
var message = JsonSerializer.Deserialize<IJsonRpcMessage>(request, _jsonOptions);
var message = JsonSerializer.Deserialize(request, _jsonOptions.GetTypeInfo<IJsonRpcMessage>());
if (message != null)
{
// Fire-and-forget the message to the message channel

View file

@ -110,7 +110,7 @@ public sealed class SseClientTransport : TransportBase, IClientTransport
throw new InvalidOperationException("Transport not connected");
using var content = new StringContent(
JsonSerializer.Serialize(message, _jsonOptions),
JsonSerializer.Serialize(message, _jsonOptions.GetTypeInfo<IJsonRpcMessage>()),
Encoding.UTF8,
"application/json"
);
@ -143,7 +143,7 @@ public sealed class SseClientTransport : TransportBase, IClientTransport
}
else
{
JsonRpcResponse initializeResponse = JsonSerializer.Deserialize<JsonRpcResponse>(responseContent, _jsonOptions) ??
JsonRpcResponse initializeResponse = JsonSerializer.Deserialize(responseContent, _jsonOptions.GetTypeInfo<JsonRpcResponse>()) ??
throw new McpTransportException("Failed to initialize client");
_logger.TransportReceivedMessageParsed(EndpointName, messageId);
@ -277,7 +277,7 @@ public sealed class SseClientTransport : TransportBase, IClientTransport
try
{
var message = JsonSerializer.Deserialize<IJsonRpcMessage>(data, _jsonOptions);
var message = JsonSerializer.Deserialize(data, _jsonOptions.GetTypeInfo<IJsonRpcMessage>());
if (message == null)
{
_logger.TransportMessageParseUnexpectedType(EndpointName, data);

View file

@ -134,7 +134,7 @@ public sealed class StdioClientTransport : TransportBase, IClientTransport
try
{
var json = JsonSerializer.Serialize(message, _jsonOptions);
var json = JsonSerializer.Serialize(message, _jsonOptions.GetTypeInfo<IJsonRpcMessage>());
_logger.TransportSendingMessage(EndpointName, id, json);
// Write the message followed by a newline
@ -206,7 +206,7 @@ public sealed class StdioClientTransport : TransportBase, IClientTransport
try
{
line=line.Trim();//Fixes an error when the service prefixes nonprintable characters
var message = JsonSerializer.Deserialize<IJsonRpcMessage>(line, _jsonOptions);
var message = JsonSerializer.Deserialize(line, _jsonOptions.GetTypeInfo<IJsonRpcMessage>());
if (message != null)
{
string messageId = "(no id)";

View file

@ -117,7 +117,7 @@ public sealed class StdioServerTransport : TransportBase, IServerTransport
try
{
var json = JsonSerializer.Serialize(message, _jsonOptions);
var json = JsonSerializer.Serialize(message, _jsonOptions.GetTypeInfo<IJsonRpcMessage>());
_logger.TransportSendingMessage(EndpointName, id, json);
await _stdout.WriteLineAsync(json.AsMemory(), cancellationToken).ConfigureAwait(false);
@ -166,7 +166,7 @@ public sealed class StdioServerTransport : TransportBase, IServerTransport
try
{
var message = JsonSerializer.Deserialize<IJsonRpcMessage>(line, _jsonOptions);
var message = JsonSerializer.Deserialize(line, _jsonOptions.GetTypeInfo<IJsonRpcMessage>());
if (message != null)
{
string messageId = "(no id)";