Skip to content

Commit 146ce67

Browse files
authored
Add trim support for Amazon.Lambda.Annotations (#1610)
1 parent 2993196 commit 146ce67

30 files changed

+941
-516
lines changed

Libraries/src/Amazon.Lambda.Annotations.SourceGenerator/Generator.cs

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -162,9 +162,9 @@ public void Execute(GeneratorExecutionContext context)
162162
}
163163
}
164164

165-
var serializerString = GetSerializerAttribute(context, lambdaMethodModel);
165+
var serializerInfo = GetSerializerInfoAttribute(context, lambdaMethodModel);
166166

167-
var model = LambdaFunctionModelBuilder.Build(lambdaMethodModel, configureMethodModel, context, isExecutable, serializerString, defaultRuntime);
167+
var model = LambdaFunctionModelBuilder.Build(lambdaMethodModel, configureMethodModel, context, isExecutable, serializerInfo, defaultRuntime);
168168

169169
// If there are more than one event, report them as errors
170170
if (model.LambdaMethod.Events.Count > 1)
@@ -334,9 +334,10 @@ private bool HasSerializerAttribute(GeneratorExecutionContext context, IMethodSy
334334
return methodModel.ContainingAssembly.HasAttribute(context, TypeFullNames.LambdaSerializerAttribute);
335335
}
336336

337-
private string GetSerializerAttribute(GeneratorExecutionContext context, IMethodSymbol methodModel)
337+
private LambdaSerializerInfo GetSerializerInfoAttribute(GeneratorExecutionContext context, IMethodSymbol methodModel)
338338
{
339339
var serializerString = DEFAULT_LAMBDA_SERIALIZER;
340+
string serializerJsonContext = null;
340341

341342
ISymbol symbol = null;
342343

@@ -357,19 +358,24 @@ private string GetSerializerAttribute(GeneratorExecutionContext context, IMethod
357358
// Else return the default serializer.
358359
else
359360
{
360-
return serializerString;
361+
return new LambdaSerializerInfo(serializerString, serializerJsonContext);
361362
}
362363

363364
var attribute = symbol.GetAttributes().FirstOrDefault(attr => attr.AttributeClass.Name == TypeFullNames.LambdaSerializerAttributeWithoutNamespace);
364365

365366
var serializerValue = attribute.ConstructorArguments.FirstOrDefault(kvp => kvp.Type.Name == nameof(Type)).Value;
366367

368+
if(serializerValue is INamedTypeSymbol typeSymbol && typeSymbol.Name.Contains("SourceGeneratorLambdaJsonSerializer") && typeSymbol.TypeArguments.Length == 1)
369+
{
370+
serializerJsonContext = typeSymbol.TypeArguments[0].ToString();
371+
}
372+
367373
if (serializerValue != null)
368374
{
369375
serializerString = serializerValue.ToString();
370376
}
371377

372-
return serializerString;
378+
return new LambdaSerializerInfo(serializerString, serializerJsonContext);
373379
}
374380

375381
public void Initialize(GeneratorInitializationContext context)

Libraries/src/Amazon.Lambda.Annotations.SourceGenerator/Models/LambdaFunctionModel.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ public class LambdaFunctionModel : ILambdaFunctionSerializable
3434
/// <summary>
3535
/// Gets or sets fully qualified name of the serializer used for serialization or deserialization.
3636
/// </summary>
37-
public string Serializer { get; set; } =
38-
"Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer";
37+
public LambdaSerializerInfo SerializerInfo { get; set; } =
38+
new LambdaSerializerInfo("Amazon.Lambda.Serialization.SystemTextJson.DefaultLambdaJsonSerializer", null);
3939

4040
/// <summary>
4141
/// Gets or sets if the output is an executable.

Libraries/src/Amazon.Lambda.Annotations.SourceGenerator/Models/LambdaFunctionModelBuilder.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,15 @@ namespace Amazon.Lambda.Annotations.SourceGenerator.Models
99
/// </summary>
1010
public static class LambdaFunctionModelBuilder
1111
{
12-
public static LambdaFunctionModel Build(IMethodSymbol lambdaMethodSymbol, IMethodSymbol configureMethodSymbol, GeneratorExecutionContext context, bool isExecutable, string serializer, string runtime)
12+
public static LambdaFunctionModel Build(IMethodSymbol lambdaMethodSymbol, IMethodSymbol configureMethodSymbol, GeneratorExecutionContext context, bool isExecutable, LambdaSerializerInfo serializerInfo, string runtime)
1313
{
1414
var lambdaMethod = LambdaMethodModelBuilder.Build(lambdaMethodSymbol, configureMethodSymbol, context);
1515
var generatedMethod = GeneratedMethodModelBuilder.Build(lambdaMethodSymbol, configureMethodSymbol, lambdaMethod, context);
1616
var model = new LambdaFunctionModel()
1717
{
1818
GeneratedMethod = generatedMethod,
1919
LambdaMethod = lambdaMethod,
20-
Serializer = serializer,
20+
SerializerInfo = serializerInfo,
2121
StartupType = configureMethodSymbol != null ? TypeModelBuilder.Build(configureMethodSymbol.ContainingType, context) : null,
2222
SourceGeneratorVersion = context.Compilation
2323
.ReferencedAssemblyNames.FirstOrDefault(x => string.Equals(x.Name, "Amazon.Lambda.Annotations"))
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
5+
namespace Amazon.Lambda.Annotations.SourceGenerator.Models
6+
{
7+
/// <summary>
8+
/// Information for the registered ILambdaSerializer in the Lambda project.
9+
/// </summary>
10+
public class LambdaSerializerInfo
11+
{
12+
/// <summary>
13+
/// Construct an instance of LambdaSerializerInfo
14+
/// </summary>
15+
/// <param name="serializerName"></param>
16+
/// <param name="serializerJsonContextName"></param>
17+
public LambdaSerializerInfo(string serializerName, string serializerJsonContextName)
18+
{
19+
SerializerName = serializerName;
20+
SerializerJsonContextName = serializerJsonContextName;
21+
}
22+
23+
/// <summary>
24+
/// The full name of the type registered as the ILambdaSerializer.
25+
/// </summary>
26+
public string SerializerName { get; }
27+
28+
/// <summary>
29+
/// The full name of the type used as the generic parameter of the SourceGeneratorLambdaJsonSerializer.
30+
/// </summary>
31+
public string SerializerJsonContextName { get; }
32+
}
33+
}

0 commit comments

Comments
 (0)