diff --git a/src/TypeGen/TypeGen.Cli/Program.cs b/src/TypeGen/TypeGen.Cli/Program.cs index 271599eb..f8ad4b5e 100644 --- a/src/TypeGen/TypeGen.Cli/Program.cs +++ b/src/TypeGen/TypeGen.Cli/Program.cs @@ -1,5 +1,4 @@ -using System; -using System.Threading.Tasks; +using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; using TypeGen.Cli.DependencyInjection; using TypeGen.Core.Logging; diff --git a/src/TypeGen/TypeGen.Core/Extensions/TypeExtensions.cs b/src/TypeGen/TypeGen.Core/Extensions/TypeExtensions.cs index e18be5b5..ae4e77eb 100644 --- a/src/TypeGen/TypeGen.Core/Extensions/TypeExtensions.cs +++ b/src/TypeGen/TypeGen.Core/Extensions/TypeExtensions.cs @@ -23,7 +23,7 @@ public static bool HasExportAttribute(this Type type, IMetadataReader reader) { Requires.NotNull(type, nameof(type)); Requires.NotNull(reader, nameof(reader)); - + return reader.GetAttribute(type) != null || reader.GetAttribute(type) != null || reader.GetAttribute(type) != null; @@ -39,7 +39,7 @@ public static IEnumerable GetExportMarkedTypes(this IEnumerable type { Requires.NotNull(types, nameof(types)); Requires.NotNull(reader, nameof(reader)); - + return types.Where(t => t.HasExportAttribute(reader)); } @@ -53,7 +53,7 @@ public static IEnumerable WithoutTsIgnore(this IEnumerable memberInfos, { Requires.NotNull(memberInfos, nameof(memberInfos)); Requires.NotNull(reader, nameof(reader)); - + return memberInfos.Where(i => reader.GetAttribute(i) == null); } @@ -104,11 +104,18 @@ public static bool IsStatic(this MemberInfo memberInfo) public static bool IsNullable(this MemberInfo memberInfo) { Requires.NotNull(memberInfo, nameof(memberInfo)); - - var contextualMember = memberInfo.ToContextualAccessor(); - return contextualMember.Nullability == Nullability.Nullable; + try + { + var contextualMember = memberInfo.ToContextualAccessor(); + return contextualMember.Nullability == Nullability.Nullable; + } + catch + { + // If the member is not a contextual member, we cannot determine nullability + return false; + } } - + /// /// Checks if a property or field is nullable /// @@ -119,7 +126,7 @@ public static bool IsNullable(this Type type) Requires.NotNull(type, nameof(type)); return Nullable.GetUnderlyingType(type) != null; } - + /// /// Maps an enumerable to an enumerable of the elements' type names /// @@ -128,11 +135,11 @@ public static bool IsNullable(this Type type) public static IEnumerable GetTypeNames(this IEnumerable enumerable) { Requires.NotNull(enumerable, nameof(enumerable)); - + return enumerable .Select(c => c.GetType().Name); } - + /// /// Shim for Type.GetInterface /// @@ -143,7 +150,7 @@ public static Type GetInterface(this Type type, string interfaceName) { Requires.NotNull(type, nameof(type)); Requires.NotNullOrEmpty(interfaceName, nameof(interfaceName)); - + return type.GetInterfaces() .FirstOrDefault(i => i.Name == interfaceName || i.FullName == interfaceName); } @@ -164,17 +171,17 @@ public static IEnumerable GetTsExportableMembers(this Type type, IMe if (!typeInfo.IsClass && !typeInfo.IsInterface && !typeInfo.IsStruct()) return Enumerable.Empty(); - var fieldInfos = (IEnumerable) typeInfo.DeclaredFields + var fieldInfos = (IEnumerable)typeInfo.DeclaredFields .WithMembersFilter(); - - var propertyInfos = (IEnumerable) typeInfo.DeclaredProperties + + var propertyInfos = (IEnumerable)typeInfo.DeclaredProperties .WithMembersFilter(); if (withoutTsIgnore) { fieldInfos = fieldInfos.WithoutTsIgnore(metadataReader); propertyInfos = propertyInfos.WithoutTsIgnore(metadataReader); - } + } return fieldInfos.Union(propertyInfos); } diff --git a/src/TypeGen/TypeGen.Core/Generator/Services/TypeService.cs b/src/TypeGen/TypeGen.Core/Generator/Services/TypeService.cs index 265280e9..0b9577db 100644 --- a/src/TypeGen/TypeGen.Core/Generator/Services/TypeService.cs +++ b/src/TypeGen/TypeGen.Core/Generator/Services/TypeService.cs @@ -274,8 +274,11 @@ public bool TypeContainsBlacklistedType(Type type) /// Thrown when member or typeNameConverters is null private string GetTsTypeNameForMember(MemberInfo memberInfo) { - if (memberInfo.GetCustomAttribute() != null) - return "any"; + try + { + if (memberInfo.GetCustomAttribute() != null) + return "any"; + } catch { } Type type = GetMemberType(memberInfo); return GetTsTypeName(type, false); diff --git a/src/TypeGen/TypeGen.Core/Metadata/AttributeMetadataReader.cs b/src/TypeGen/TypeGen.Core/Metadata/AttributeMetadataReader.cs index 862626ba..86eedcc9 100644 --- a/src/TypeGen/TypeGen.Core/Metadata/AttributeMetadataReader.cs +++ b/src/TypeGen/TypeGen.Core/Metadata/AttributeMetadataReader.cs @@ -18,7 +18,7 @@ public TAttribute GetAttribute(MemberInfo memberInfo) where TAttribu Requires.NotNull(memberInfo, nameof(memberInfo)); return memberInfo.GetCustomAttribute(); } - + public IEnumerable GetAttributes(Type type) where TAttribute : Attribute { Requires.NotNull(type, nameof(type)); @@ -30,7 +30,7 @@ public IEnumerable GetAttributes(MemberInfo memberInfo) Requires.NotNull(memberInfo, nameof(memberInfo)); return memberInfo.GetCustomAttributes(typeof(TAttribute), false) as TAttribute[]; } - + public IEnumerable GetAttributes(Type type) { Requires.NotNull(type, nameof(type)); @@ -40,7 +40,14 @@ public IEnumerable GetAttributes(Type type) public IEnumerable GetAttributes(MemberInfo memberInfo) { Requires.NotNull(memberInfo, nameof(memberInfo)); - return memberInfo.GetCustomAttributes(false); + try + { + return memberInfo.GetCustomAttributes(false); + } + catch (Exception ex) + { + return []; + } } } } \ No newline at end of file