diff --git a/libraries/src/AWS.Lambda.Powertools.Common/Aspects/UniversalWrapperAspect.cs b/libraries/src/AWS.Lambda.Powertools.Common/Aspects/UniversalWrapperAspect.cs index fedf4503..8061ef7d 100644 --- a/libraries/src/AWS.Lambda.Powertools.Common/Aspects/UniversalWrapperAspect.cs +++ b/libraries/src/AWS.Lambda.Powertools.Common/Aspects/UniversalWrapperAspect.cs @@ -83,7 +83,8 @@ public object Handle( }; var wrappers = triggers.OfType().ToArray(); - var handler = GetMethodHandler(method, returnType, wrappers); + // Target.Method is more precise for cases when decorating generic methods + var handler = GetMethodHandler(target.Method, returnType, wrappers); return handler(target, args, eventArgs); } diff --git a/libraries/tests/AWS.Lambda.Powertools.Tracing.Tests/Handlers/FunctionHandlerForGeneric.cs b/libraries/tests/AWS.Lambda.Powertools.Tracing.Tests/Handlers/FunctionHandlerForGeneric.cs new file mode 100644 index 00000000..78f9c52d --- /dev/null +++ b/libraries/tests/AWS.Lambda.Powertools.Tracing.Tests/Handlers/FunctionHandlerForGeneric.cs @@ -0,0 +1,46 @@ +using System.Globalization; +using System.Threading.Tasks; + +namespace AWS.Lambda.Powertools.Tracing.Tests.Handlers; + +public class FunctionHandlerForGeneric +{ + [Tracing(CaptureMode = TracingCaptureMode.ResponseAndError)] + public async Task Handle(string input) + { + GenericMethod(1); + GenericMethod(2); + + GenericMethod(1); + + GenericMethod(); + GenericMethod(); + + GenericMethod2(1); + GenericMethod2(2); + + GenericMethod(); + GenericMethod(); + + await Task.Delay(1); + + return input.ToUpper(CultureInfo.InvariantCulture); + } + + [Tracing] + private T GenericMethod(T x) + { + return default; + } + + [Tracing] + private T GenericMethod() + { + return default; + } + + [Tracing] + private void GenericMethod2(T x) + { + } +} \ No newline at end of file diff --git a/libraries/tests/AWS.Lambda.Powertools.Tracing.Tests/Handlers/ExceptionFunctionHandlerTests.cs b/libraries/tests/AWS.Lambda.Powertools.Tracing.Tests/Handlers/HandlerTests.cs similarity index 66% rename from libraries/tests/AWS.Lambda.Powertools.Tracing.Tests/Handlers/ExceptionFunctionHandlerTests.cs rename to libraries/tests/AWS.Lambda.Powertools.Tracing.Tests/Handlers/HandlerTests.cs index 2f336abc..066d0743 100644 --- a/libraries/tests/AWS.Lambda.Powertools.Tracing.Tests/Handlers/ExceptionFunctionHandlerTests.cs +++ b/libraries/tests/AWS.Lambda.Powertools.Tracing.Tests/Handlers/HandlerTests.cs @@ -4,7 +4,7 @@ namespace AWS.Lambda.Powertools.Tracing.Tests.Handlers; -public sealed class ExceptionFunctionHandlerTests +public sealed class HandlerTests { [Fact] public async Task Stack_Trace_Included_When_Decorator_Present() @@ -20,4 +20,17 @@ public async Task Stack_Trace_Included_When_Decorator_Present() Assert.StartsWith("at AWS.Lambda.Powertools.Tracing.Tests.Handlers.ExceptionFunctionHandler.ThisThrows()", tracedException.StackTrace?.TrimStart()); } + + [Fact] + public async Task When_Decorator_Present_In_Generic_Method_Should_Not_Throw_When_Type_Changes() + { + // Arrange + var handler = new FunctionHandlerForGeneric(); + + // Act + await handler.Handle("whatever"); + + // Assert + + } } \ No newline at end of file