Skip to content

Commit b15d934

Browse files
normjdscpinheiro
authored andcommitted
Address Native AOT issues for the DynamoDB Document Model high level library
1 parent e2ace61 commit b15d934

25 files changed

+493
-306
lines changed

sdk/src/Services/DynamoDBv2/Custom/Conversion/DynamoDBEntryConversion.cs

Lines changed: 70 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
using Amazon.DynamoDBv2.DataModel;
2121
using Amazon.DynamoDBv2.DocumentModel;
2222
using Amazon.Util.Internal;
23+
using System.Diagnostics.CodeAnalysis;
24+
2325

2426
#if NETSTANDARD
2527
using Amazon.Runtime.Internal.Util;
@@ -71,9 +73,6 @@ internal enum ConversionSchema
7173
/// A collection of converters capable of converting between
7274
/// .NET and DynamoDB objects.
7375
/// </summary>
74-
#if NET8_0_OR_GREATER
75-
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode(Amazon.DynamoDBv2.Custom.Internal.InternalConstants.RequiresUnreferencedCodeMessage)]
76-
#endif
7776
public class DynamoDBEntryConversion
7877
{
7978
#region Static members
@@ -252,7 +251,11 @@ public bool TryConvertToEntry(Type inputType, object value, out DynamoDBEntry en
252251
/// <typeparam name="TOutput"></typeparam>
253252
/// <param name="entry"></param>
254253
/// <returns></returns>
254+
#if NET8_0_OR_GREATER
255+
public TOutput ConvertFromEntry<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.PublicConstructors)] TOutput>(DynamoDBEntry entry)
256+
#else
255257
public TOutput ConvertFromEntry<TOutput>(DynamoDBEntry entry)
258+
#endif
256259
{
257260
TOutput output;
258261
if (TryConvertFromEntry<TOutput>(entry, out output))
@@ -269,7 +272,11 @@ public TOutput ConvertFromEntry<TOutput>(DynamoDBEntry entry)
269272
/// <param name="entry"></param>
270273
/// <returns></returns>
271274
/// <exception cref="ArgumentNullException"></exception>
275+
#if NET8_0_OR_GREATER
276+
public object ConvertFromEntry([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.PublicConstructors)] Type outputType, DynamoDBEntry entry)
277+
#else
272278
public object ConvertFromEntry(Type outputType, DynamoDBEntry entry)
279+
#endif
273280
{
274281
if (outputType == null) throw new ArgumentNullException("outputType");
275282
if (entry == null) throw new ArgumentNullException("entry");
@@ -287,7 +294,11 @@ public object ConvertFromEntry(Type outputType, DynamoDBEntry entry)
287294
/// <param name="entry"></param>
288295
/// <param name="output"></param>
289296
/// <returns>True if successfully converted, otherwise false.</returns>
297+
#if NET8_0_OR_GREATER
298+
public bool TryConvertFromEntry<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.PublicConstructors)] TOutput>(DynamoDBEntry entry, out TOutput output)
299+
#else
290300
public bool TryConvertFromEntry<TOutput>(DynamoDBEntry entry, out TOutput output)
301+
#endif
291302
{
292303
output = default(TOutput);
293304

@@ -313,7 +324,11 @@ public bool TryConvertFromEntry<TOutput>(DynamoDBEntry entry, out TOutput output
313324
/// <param name="value"></param>
314325
/// <returns></returns>
315326
/// <exception cref="ArgumentNullException"></exception>
327+
#if NET8_0_OR_GREATER
328+
public bool TryConvertFromEntry([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.PublicConstructors)] Type outputType, DynamoDBEntry entry, out object value)
329+
#else
316330
public bool TryConvertFromEntry(Type outputType, DynamoDBEntry entry, out object value)
331+
#endif
317332
{
318333
if (outputType == null) throw new ArgumentNullException("outputType");
319334
if (entry == null) throw new ArgumentNullException("entry");
@@ -322,7 +337,7 @@ public bool TryConvertFromEntry(Type outputType, DynamoDBEntry entry, out object
322337
return converter.TryFromEntry(entry, outputType, out value);
323338
}
324339

325-
#endregion
340+
#endregion
326341

327342
#region Internal members
328343

@@ -360,7 +375,12 @@ internal IEnumerable<DynamoDBEntry> ConvertToEntries<T>(IEnumerable<T> values)
360375
//foreach (var value in values)
361376
// yield return ConvertToEntry(value);
362377
}
378+
379+
#if NET8_0_OR_GREATER
380+
internal IEnumerable<object> ConvertFromEntries([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.PublicConstructors)] Type elementType, IEnumerable<DynamoDBEntry> entries)
381+
#else
363382
internal IEnumerable<object> ConvertFromEntries(Type elementType, IEnumerable<DynamoDBEntry> entries)
383+
#endif
364384
{
365385
if (entries == null) throw new ArgumentNullException("entries");
366386

@@ -377,7 +397,7 @@ internal PrimitiveList ItemsToPrimitiveList(IEnumerable items)
377397
return pl;
378398
}
379399

380-
#endregion
400+
#endregion
381401

382402
#region Private members
383403

@@ -539,7 +559,12 @@ public bool TryToEntry(object value, out DynamoDBEntry entry)
539559
entry = null;
540560
return false;
541561
}
562+
563+
#if NET8_0_OR_GREATER
564+
public object FromEntry(DynamoDBEntry entry, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.PublicConstructors)] Type targetType)
565+
#else
542566
public object FromEntry(DynamoDBEntry entry, Type targetType)
567+
#endif
543568
{
544569
if (entry == null) throw new ArgumentNullException("entry");
545570
if (targetType == null) throw new ArgumentNullException("targetType");
@@ -551,7 +576,12 @@ public object FromEntry(DynamoDBEntry entry, Type targetType)
551576
throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture,
552577
"Unable to convert [{0}] of type {1} to {2}", entry, entry.GetType().FullName, targetType.FullName));
553578
}
579+
580+
#if NET8_0_OR_GREATER
581+
public bool TryFromEntry(DynamoDBEntry entry, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.PublicConstructors)] Type targetType, out object value)
582+
#else
554583
public bool TryFromEntry(DynamoDBEntry entry, Type targetType, out object value)
584+
#endif
555585
{
556586
var p = entry as Primitive;
557587

@@ -627,17 +657,32 @@ public virtual bool TryFrom(DynamoDBBool b, Type targetType, out object result)
627657
result = null;
628658
return false;
629659
}
660+
661+
#if NET8_0_OR_GREATER
662+
public virtual bool TryFrom(Primitive p, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.PublicConstructors)] Type targetType, out object result)
663+
#else
630664
public virtual bool TryFrom(Primitive p, Type targetType, out object result)
665+
#endif
631666
{
632667
result = null;
633668
return false;
634669
}
670+
671+
#if NET8_0_OR_GREATER
672+
public virtual bool TryFrom(PrimitiveList pl, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.PublicConstructors)] Type targetType, out object result)
673+
#else
635674
public virtual bool TryFrom(PrimitiveList pl, Type targetType, out object result)
675+
#endif
636676
{
637677
result = null;
638678
return false;
639679
}
680+
681+
#if NET8_0_OR_GREATER
682+
public virtual bool TryFrom(DynamoDBList l, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.PublicConstructors)] Type targetType, out object result)
683+
#else
640684
public virtual bool TryFrom(DynamoDBList l, Type targetType, out object result)
685+
#endif
641686
{
642687
result = null;
643688
return false;
@@ -651,19 +696,6 @@ public virtual bool TryFrom(Document d, Type targetType, out object result)
651696

652697
internal abstract class Converter<T> : Converter
653698
{
654-
public override IEnumerable<Type> GetTargetTypes()
655-
{
656-
var type = typeof(T);
657-
yield return type;
658-
659-
if (type.IsValueType)
660-
{
661-
//yield return typeof(Nullable<T>);
662-
var nullableType = typeof(Nullable<>).MakeGenericType(type);
663-
yield return nullableType;
664-
}
665-
}
666-
667699
public override bool TryTo(object value, out DynamoDBBool b)
668700
{
669701
return TryTo((T)value, out b);
@@ -718,21 +750,36 @@ public override bool TryFrom(DynamoDBBool b, Type targetType, out object result)
718750
result = t;
719751
return output;
720752
}
753+
754+
#if NET8_0_OR_GREATER
755+
public override bool TryFrom(Primitive p, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.PublicConstructors)] Type targetType, out object result)
756+
#else
721757
public override bool TryFrom(Primitive p, Type targetType, out object result)
758+
#endif
722759
{
723760
T t;
724761
var output = TryFrom(p, targetType, out t);
725762
result = t;
726763
return output;
727764
}
765+
766+
#if NET8_0_OR_GREATER
767+
public override bool TryFrom(PrimitiveList pl, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.PublicConstructors)] Type targetType, out object result)
768+
#else
728769
public override bool TryFrom(PrimitiveList pl, Type targetType, out object result)
770+
#endif
729771
{
730772
T t;
731773
var output = TryFrom(pl, targetType, out t);
732774
result = t;
733775
return output;
734776
}
777+
778+
#if NET8_0_OR_GREATER
779+
public override bool TryFrom(DynamoDBList l, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.PublicConstructors)] Type targetType, out object result)
780+
#else
735781
public override bool TryFrom(DynamoDBList l, Type targetType, out object result)
782+
#endif
736783
{
737784
T t;
738785
var output = TryFrom(l, targetType, out t);
@@ -752,7 +799,12 @@ protected virtual bool TryFrom(DynamoDBBool b, Type targetType, out T result)
752799
result = default(T);
753800
return false;
754801
}
802+
803+
#if NET8_0_OR_GREATER
804+
protected virtual bool TryFrom(Primitive p, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicMethods | DynamicallyAccessedMemberTypes.PublicConstructors)] Type targetType, out T result)
805+
#else
755806
protected virtual bool TryFrom(Primitive p, Type targetType, out T result)
807+
#endif
756808
{
757809
result = default(T);
758810
return false;

0 commit comments

Comments
 (0)