From c31c5e5efa6f25a792058ea35784a000535f0d91 Mon Sep 17 00:00:00 2001 From: Boring3 <16686147+Nyrest@users.noreply.github.com> Date: Wed, 14 Aug 2024 21:37:22 +0800 Subject: [PATCH 1/7] Add FastNew_PublicFastNew option --- .../FastCreateInstanceGenerator.cs | 2 +- .../FastNewDelegateGenerator.cs | 2 +- .../FastNewVisibilityGenerator.cs | 32 +++++++++++++++++++ .../FastTryCreateInstanceGenerator.cs | 2 +- .../CodeGenerators/TypeNewGenerator.cs | 2 +- .../FastGenericNew.SourceGenerator.props | 1 + .../GeneratorOptions.cs | 3 ++ .../GeneratorOptions.ctor.g.cs | 1 + src/FastGenericNew/FastGenericNew.csproj | 1 + .../FastNew.CreateInstance.g.cs | 2 +- .../FastNew.TryCreateInstance.g.cs | 2 +- .../FastNewDelegate.g.cs | 2 +- .../FastNewVisibility.g.cs | 20 ++++++++++++ .../ThrowHelper.g.cs | 1 - .../TypeNew.CreateInstance.g.cs | 2 +- .../_GenerationInfo.g.cs | 2 ++ 16 files changed, 68 insertions(+), 9 deletions(-) create mode 100644 src/FastGenericNew.SourceGenerator/CodeGenerators/FastNewVisibilityGenerator.cs create mode 100644 src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/FastNewVisibility.g.cs diff --git a/src/FastGenericNew.SourceGenerator/CodeGenerators/FastCreateInstanceGenerator.cs b/src/FastGenericNew.SourceGenerator/CodeGenerators/FastCreateInstanceGenerator.cs index 48315b3..b902565 100644 --- a/src/FastGenericNew.SourceGenerator/CodeGenerators/FastCreateInstanceGenerator.cs +++ b/src/FastGenericNew.SourceGenerator/CodeGenerators/FastCreateInstanceGenerator.cs @@ -13,7 +13,7 @@ public override CodeGenerationResult Generate(in GeneratorOptions options) builder.WriteFileHeader(); builder.StartNamespace(); builder.Indent(1); - builder.AppendKeyword("public static partial class"); + builder.AppendKeyword("static partial class"); builder.Append(ClassName); builder.StartBlock(1); diff --git a/src/FastGenericNew.SourceGenerator/CodeGenerators/FastNewDelegateGenerator.cs b/src/FastGenericNew.SourceGenerator/CodeGenerators/FastNewDelegateGenerator.cs index cdcc900..cfc148b 100644 --- a/src/FastGenericNew.SourceGenerator/CodeGenerators/FastNewDelegateGenerator.cs +++ b/src/FastGenericNew.SourceGenerator/CodeGenerators/FastNewDelegateGenerator.cs @@ -17,7 +17,7 @@ public override CodeGenerationResult Generate(in GeneratorOptions options) builder.WriteFileHeader(); builder.StartNamespace(); builder.Indent(1); - builder.AppendKeyword("public static partial class"); + builder.AppendKeyword("static partial class"); builder.Append(ClassName); builder.StartBlock(1); diff --git a/src/FastGenericNew.SourceGenerator/CodeGenerators/FastNewVisibilityGenerator.cs b/src/FastGenericNew.SourceGenerator/CodeGenerators/FastNewVisibilityGenerator.cs new file mode 100644 index 0000000..232f70d --- /dev/null +++ b/src/FastGenericNew.SourceGenerator/CodeGenerators/FastNewVisibilityGenerator.cs @@ -0,0 +1,32 @@ +namespace FastGenericNew.SourceGenerator.CodeGenerators; + +public class FastNewVisibilityGenerator : CodeGenerator +{ + public override string Filename => "FastNewVisibility.g.cs"; + + internal const string ClassName = "FastNew"; + + internal const string DelegateName = "FastNewDelegate"; + + public override CodeGenerationResult Generate(in GeneratorOptions options) + { + CodeBuilder builder = new(1024, in options); + builder.WriteFileHeader(); + builder.StartNamespace(); + builder.Indent(1); + + builder.AppendKeyword(options.PublicFastNew ? "public" : "internal"); + + builder.AppendKeyword("static partial class"); + builder.Append(ClassName); + builder.StartBlock(1); + builder.EndBlock(1); + builder.EndNamespace(); + + return builder.BuildAndDispose(this); + } + + public override bool ShouldUpdate(in GeneratorOptions oldValue, in GeneratorOptions newValue) => + base.ShouldUpdate(oldValue, newValue) + || oldValue.PublicFastNew != newValue.PublicFastNew; +} \ No newline at end of file diff --git a/src/FastGenericNew.SourceGenerator/CodeGenerators/FastTryCreateInstanceGenerator.cs b/src/FastGenericNew.SourceGenerator/CodeGenerators/FastTryCreateInstanceGenerator.cs index a6e50ff..2f710e5 100644 --- a/src/FastGenericNew.SourceGenerator/CodeGenerators/FastTryCreateInstanceGenerator.cs +++ b/src/FastGenericNew.SourceGenerator/CodeGenerators/FastTryCreateInstanceGenerator.cs @@ -13,7 +13,7 @@ public override CodeGenerationResult Generate(in GeneratorOptions options) builder.WriteFileHeader(); builder.StartNamespace(); builder.Indent(1); - builder.AppendKeyword("public static partial class"); + builder.AppendKeyword("static partial class"); builder.Append(ClassName); builder.StartBlock(1); diff --git a/src/FastGenericNew.SourceGenerator/CodeGenerators/TypeNewGenerator.cs b/src/FastGenericNew.SourceGenerator/CodeGenerators/TypeNewGenerator.cs index ed68e6c..42174c0 100644 --- a/src/FastGenericNew.SourceGenerator/CodeGenerators/TypeNewGenerator.cs +++ b/src/FastGenericNew.SourceGenerator/CodeGenerators/TypeNewGenerator.cs @@ -12,7 +12,7 @@ public override CodeGenerationResult Generate(in GeneratorOptions options) builder.WriteFileHeader(); builder.StartNamespace(); - builder.AppendKeyword("public static partial class"); + builder.AppendKeyword("static partial class"); builder.Append(ClassName); builder.StartBlock(1); diff --git a/src/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.props b/src/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.props index 68acade..6b9db9c 100644 --- a/src/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.props +++ b/src/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.props @@ -16,5 +16,6 @@ + \ No newline at end of file diff --git a/src/FastGenericNew.SourceGenerator/GeneratorOptions.cs b/src/FastGenericNew.SourceGenerator/GeneratorOptions.cs index 5b48d5d..65b3090 100644 --- a/src/FastGenericNew.SourceGenerator/GeneratorOptions.cs +++ b/src/FastGenericNew.SourceGenerator/GeneratorOptions.cs @@ -44,6 +44,9 @@ public readonly partial record struct GeneratorOptions [GeneratorOption(false, PresentPreProcessor = true)] public bool AllowUnsafeImplementation { get; } + [GeneratorOption(false)] + public bool PublicFastNew { get; } + // ctor will be generated by InternalGenerator //public GeneratorOptions(AnalyzerConfigOptionsProvider? provider) diff --git a/src/FastGenericNew.SourceGenerator/_generated/FastGenericNew.SourceGenerator.InternalGenerator/FastGenericNew.SourceGenerator.InternalGenerator.Generator/GeneratorOptions.ctor.g.cs b/src/FastGenericNew.SourceGenerator/_generated/FastGenericNew.SourceGenerator.InternalGenerator/FastGenericNew.SourceGenerator.InternalGenerator.Generator/GeneratorOptions.ctor.g.cs index 6c906ae..3de4407 100644 --- a/src/FastGenericNew.SourceGenerator/_generated/FastGenericNew.SourceGenerator.InternalGenerator/FastGenericNew.SourceGenerator.InternalGenerator.Generator/GeneratorOptions.ctor.g.cs +++ b/src/FastGenericNew.SourceGenerator/_generated/FastGenericNew.SourceGenerator.InternalGenerator/FastGenericNew.SourceGenerator.InternalGenerator.Generator/GeneratorOptions.ctor.g.cs @@ -21,5 +21,6 @@ public GeneratorOptions(AnalyzerConfigOptionsProvider? provider) MultiThreadedGeneration = options.GetOrDefault(nameof(MultiThreadedGeneration), true); OutputGenerationInfo = options.GetOrDefault(nameof(OutputGenerationInfo), false); AllowUnsafeImplementation = options.GetOrDefault(nameof(AllowUnsafeImplementation), false); + PublicFastNew = options.GetOrDefault(nameof(PublicFastNew), false); } } \ No newline at end of file diff --git a/src/FastGenericNew/FastGenericNew.csproj b/src/FastGenericNew/FastGenericNew.csproj index 68619c0..d900379 100644 --- a/src/FastGenericNew/FastGenericNew.csproj +++ b/src/FastGenericNew/FastGenericNew.csproj @@ -26,6 +26,7 @@ true true true + true diff --git a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/FastNew.CreateInstance.g.cs b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/FastNew.CreateInstance.g.cs index c4c3076..f431ac7 100644 --- a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/FastNew.CreateInstance.g.cs +++ b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/FastNew.CreateInstance.g.cs @@ -15,7 +15,7 @@ namespace @FastGenericNew { - public static partial class FastNew { + static partial class FastNew { /// /// Create an instance of diff --git a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/FastNew.TryCreateInstance.g.cs b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/FastNew.TryCreateInstance.g.cs index 430a2c3..76a9f53 100644 --- a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/FastNew.TryCreateInstance.g.cs +++ b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/FastNew.TryCreateInstance.g.cs @@ -15,7 +15,7 @@ namespace @FastGenericNew { - public static partial class FastNew { + static partial class FastNew { [MethodImpl(MethodImplOptions.AggressiveInlining)] public static bool TryCreateInstance< diff --git a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/FastNewDelegate.g.cs b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/FastNewDelegate.g.cs index 7e52d00..c477237 100644 --- a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/FastNewDelegate.g.cs +++ b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/FastNewDelegate.g.cs @@ -15,7 +15,7 @@ namespace @FastGenericNew { - public static partial class FastNew { + static partial class FastNew { public delegate T FastNewDelegate< #if NET5_0_OR_GREATER [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors | DynamicallyAccessedMemberTypes.NonPublicConstructors)] diff --git a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/FastNewVisibility.g.cs b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/FastNewVisibility.g.cs new file mode 100644 index 0000000..7e3158a --- /dev/null +++ b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/FastNewVisibility.g.cs @@ -0,0 +1,20 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by FastGenericNew.SourceGenerator +// Please do not modify this file directly +// +//------------------------------------------------------------------------------ +#nullable enable +using System; +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using System.Diagnostics.CodeAnalysis; +using System.Reflection; +using System.Reflection.Emit; +using System.ComponentModel; + +namespace @FastGenericNew +{ + public static partial class FastNew { + } +} diff --git a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/ThrowHelper.g.cs b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/ThrowHelper.g.cs index c0a4b1e..c7e1f76 100644 --- a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/ThrowHelper.g.cs +++ b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/ThrowHelper.g.cs @@ -4,7 +4,6 @@ // Please do not modify this file directly // //------------------------------------------------------------------------------ -#define FastNewPX_AllowUnsafeImplementation #nullable enable using System; using System.Collections.Generic; diff --git a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/TypeNew.CreateInstance.g.cs b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/TypeNew.CreateInstance.g.cs index ea1b6ad..0379d63 100644 --- a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/TypeNew.CreateInstance.g.cs +++ b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/TypeNew.CreateInstance.g.cs @@ -15,7 +15,7 @@ namespace @FastGenericNew { -public static partial class FastNew { +static partial class FastNew { public static Func GetCreateInstance< #if NET5_0_OR_GREATER [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor | DynamicallyAccessedMemberTypes.NonPublicConstructors)] diff --git a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/_GenerationInfo.g.cs b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/_GenerationInfo.g.cs index 86d418b..2e69e2c 100644 --- a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/_GenerationInfo.g.cs +++ b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/_GenerationInfo.g.cs @@ -21,6 +21,7 @@ MultiThreadedGeneration = True OutputGenerationInfo = True (default: False) AllowUnsafeImplementation = False + PublicFastNew = True (default: False) MSBuild Properties: @@ -39,5 +40,6 @@ True True False + True */ \ No newline at end of file From a4f7dbe50beb311b7eb16fda90ab4f8bc391cad3 Mon Sep 17 00:00:00 2001 From: Boring3 <16686147+Nyrest@users.noreply.github.com> Date: Wed, 14 Aug 2024 21:57:21 +0800 Subject: [PATCH 2/7] Remove unused field --- .../CodeGenerators/FastNewVisibilityGenerator.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/FastGenericNew.SourceGenerator/CodeGenerators/FastNewVisibilityGenerator.cs b/src/FastGenericNew.SourceGenerator/CodeGenerators/FastNewVisibilityGenerator.cs index 232f70d..98ed4dc 100644 --- a/src/FastGenericNew.SourceGenerator/CodeGenerators/FastNewVisibilityGenerator.cs +++ b/src/FastGenericNew.SourceGenerator/CodeGenerators/FastNewVisibilityGenerator.cs @@ -6,8 +6,6 @@ public class FastNewVisibilityGenerator : CodeGenerator Date: Wed, 14 Aug 2024 22:06:15 +0800 Subject: [PATCH 3/7] Bump version to 3.3.0 --- src/FastGenericNew.Shared.props | 6 +++--- .../ThrowHelper.g.cs | 1 + .../_GenerationInfo.g.cs | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/FastGenericNew.Shared.props b/src/FastGenericNew.Shared.props index baf696d..9c74b00 100644 --- a/src/FastGenericNew.Shared.props +++ b/src/FastGenericNew.Shared.props @@ -1,7 +1,7 @@ - 3.2.0-preview1 - 3.2.0 + 3.3.0 + 3.3.0 @@ -32,7 +32,7 @@ C# 10 Parameterless struct constructors Support (Both invokes or not) https://github.com/Nyrest/FastGenericNew git https://github.com/Nyrest/FastGenericNew - Performance, Fast, Generic, New, Expression, Optimization, CreateInstance, Activator, $(PackageTagsPostfix) + Performance, Fast, Generic, New, Expression, Optimization, CreateInstance, Activator, DynamicMethod, $(PackageTagsPostfix) README.md Logo.png true diff --git a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/ThrowHelper.g.cs b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/ThrowHelper.g.cs index c7e1f76..c0a4b1e 100644 --- a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/ThrowHelper.g.cs +++ b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/ThrowHelper.g.cs @@ -4,6 +4,7 @@ // Please do not modify this file directly // //------------------------------------------------------------------------------ +#define FastNewPX_AllowUnsafeImplementation #nullable enable using System; using System.Collections.Generic; diff --git a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/_GenerationInfo.g.cs b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/_GenerationInfo.g.cs index 2e69e2c..13e5c39 100644 --- a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/_GenerationInfo.g.cs +++ b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/_GenerationInfo.g.cs @@ -2,7 +2,7 @@ Environment: - Version = 3.2.0.0 + Version = 3.3.0.0 KeyValues: From e4d859d18190ee0ca3306bd36bb05668d32a1235 Mon Sep 17 00:00:00 2001 From: Boring3 <16686147+Nyrest@users.noreply.github.com> Date: Wed, 14 Aug 2024 22:46:36 +0800 Subject: [PATCH 4/7] Rename ThrowHelper to avoid potential conflicts --- .../FastCreateInstanceGenerator.cs | 7 +- .../CodeGenerators/ThrowHelperGenerator.cs | 6 +- src/FastGenericNew/FastGenericNew.csproj | 1 - .../ClrAllocator.g.cs | 2 +- .../FastNew.CreateInstance.g.cs | 6 +- .../FastNew{T}.g.cs | 76 +++++++++---------- .../ThrowHelper.g.cs | 7 +- 7 files changed, 51 insertions(+), 54 deletions(-) diff --git a/src/FastGenericNew.SourceGenerator/CodeGenerators/FastCreateInstanceGenerator.cs b/src/FastGenericNew.SourceGenerator/CodeGenerators/FastCreateInstanceGenerator.cs index b902565..c6d9f28 100644 --- a/src/FastGenericNew.SourceGenerator/CodeGenerators/FastCreateInstanceGenerator.cs +++ b/src/FastGenericNew.SourceGenerator/CodeGenerators/FastCreateInstanceGenerator.cs @@ -16,12 +16,11 @@ public override CodeGenerationResult Generate(in GeneratorOptions options) builder.AppendKeyword("static partial class"); builder.Append(ClassName); builder.StartBlock(1); - builder.AppendLine($@" /// /// Create an instance of /// Returns () if is a (struct) - /// This CAN call the Parameterless Constructor of the (struct) + /// This CAN call the Parameterless Constructor for (struct) /// /// The type to create. /// A new instance of @@ -39,7 +38,7 @@ public static T CreateInstance< return {options.GlobalNSDot()}{FastNewCoreGenerator.ClassName}.{FastNewCoreGenerator.CompiledDelegateName}(); #else return typeof(T).IsValueType - ? System.Activator.CreateInstance() // This will be optimized by JIT + ? System.Activator.CreateInstance() // Value Types will be optimized by JIT in CoreCLR #if {ClrAllocatorGenerator.ppEnabled} : ({options.GlobalNSDot()}{ClrAllocatorGenerator.ClassName}.IsSupported @@ -54,7 +53,7 @@ public static T CreateInstance< /// /// Create an instance of
/// Returns () if is a (struct)
- /// This WILL NOT call the Parameterless Constructor of the (struct) + /// This WILL NOT call the Parameterless Constructor for (struct) ///
/// The type to create. /// A new instance of diff --git a/src/FastGenericNew.SourceGenerator/CodeGenerators/ThrowHelperGenerator.cs b/src/FastGenericNew.SourceGenerator/CodeGenerators/ThrowHelperGenerator.cs index db23eed..c96cf4d 100644 --- a/src/FastGenericNew.SourceGenerator/CodeGenerators/ThrowHelperGenerator.cs +++ b/src/FastGenericNew.SourceGenerator/CodeGenerators/ThrowHelperGenerator.cs @@ -4,7 +4,7 @@ public class ThrowHelperGenerator : CodeGenerator { public override string Filename => "ThrowHelper.g.cs"; - internal const string ClassName = "ThrowHelper"; + internal const string ClassName = "FastNewThrowHelper"; internal const string SmartThrowName = "SmartThrowImpl"; @@ -15,7 +15,7 @@ public override CodeGenerationResult Generate(in GeneratorOptions options) builder.StartNamespace(); builder.AppendLine(@$" [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] - internal static partial class ThrowHelper + internal static partial class {ClassName} {{ [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.NoInlining | global::System.Runtime.CompilerServices.MethodImplOptions.NoOptimization)] #if NET5_0_OR_GREATER @@ -23,7 +23,7 @@ internal static partial class ThrowHelper #endif "); builder.AppendLine(@$" - public static global::System.Reflection.MethodInfo GetSmartThrow() => typeof({options.GlobalNSDot()}ThrowHelper).GetMethod(""SmartThrowImpl"", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static)!.MakeGenericMethod(typeof(T)); + public static global::System.Reflection.MethodInfo GetSmartThrow() => typeof({options.GlobalNSDot()}{ClassName}).GetMethod(""SmartThrowImpl"", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static)!.MakeGenericMethod(typeof(T)); [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.NoInlining | global::System.Runtime.CompilerServices.MethodImplOptions.NoOptimization)] public static T SmartThrowImpl() diff --git a/src/FastGenericNew/FastGenericNew.csproj b/src/FastGenericNew/FastGenericNew.csproj index d900379..44ee1b9 100644 --- a/src/FastGenericNew/FastGenericNew.csproj +++ b/src/FastGenericNew/FastGenericNew.csproj @@ -32,7 +32,6 @@ FastGenericNew - Pre-Compiled FastGenericNew Generated True README.md diff --git a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/ClrAllocator.g.cs b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/ClrAllocator.g.cs index b72a29c..90e5298 100644 --- a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/ClrAllocator.g.cs +++ b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/ClrAllocator.g.cs @@ -54,7 +54,7 @@ public static void CtorNoopStub(object _) { } [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.NoInlining | global::System.Runtime.CompilerServices.MethodImplOptions.NoOptimization)] public static object ThrowNotSupported(void* _) => throw new global::System.NotSupportedException(); [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.NoInlining | global::System.Runtime.CompilerServices.MethodImplOptions.NoOptimization)] - public static object SmartThrow(void* _) => (object)global::@FastGenericNew.ThrowHelper.SmartThrowImpl()!; + public static object SmartThrow(void* _) => (object)global::@FastGenericNew.FastNewThrowHelper.SmartThrowImpl()!; } [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] diff --git a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/FastNew.CreateInstance.g.cs b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/FastNew.CreateInstance.g.cs index f431ac7..64fadbc 100644 --- a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/FastNew.CreateInstance.g.cs +++ b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/FastNew.CreateInstance.g.cs @@ -20,7 +20,7 @@ static partial class FastNew { /// /// Create an instance of /// Returns () if is a (struct) - /// This CAN call the Parameterless Constructor of the (struct) + /// This CAN call the Parameterless Constructor for (struct) /// /// The type to create. /// A new instance of @@ -38,7 +38,7 @@ public static T CreateInstance< return global::@FastGenericNew.FastNew.CompiledDelegate(); #else return typeof(T).IsValueType - ? System.Activator.CreateInstance() // This will be optimized by JIT + ? System.Activator.CreateInstance() // Value Types will be optimized by JIT in CoreCLR #if NET6_0_OR_GREATER && FastNewPX_AllowUnsafeImplementation : (global::@FastGenericNew.ClrAllocator.IsSupported @@ -53,7 +53,7 @@ public static T CreateInstance< /// /// Create an instance of
/// Returns () if is a (struct)
- /// This WILL NOT call the Parameterless Constructor of the (struct) + /// This WILL NOT call the Parameterless Constructor for (struct) ///
/// The type to create. /// A new instance of diff --git a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/FastNew{T}.g.cs b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/FastNew{T}.g.cs index 319d3dc..707c4c8 100644 --- a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/FastNew{T}.g.cs +++ b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/FastNew{T}.g.cs @@ -39,7 +39,7 @@ static partial class FastNew< : (global::System.Linq.Expressions.Expression)global::System.Linq.Expressions.Expression.New(typeof(T))) : ((global::@FastGenericNew.FastNew.CachedConstructor != null && !typeof(T).IsAbstract) ? (global::System.Linq.Expressions.Expression)global::System.Linq.Expressions.Expression.New(global::@FastGenericNew.FastNew.CachedConstructor) - : (global::System.Linq.Expressions.Expression)global::System.Linq.Expressions.Expression.Call(global::@FastGenericNew.ThrowHelper.GetSmartThrow())) + : (global::System.Linq.Expressions.Expression)global::System.Linq.Expressions.Expression.Call(global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow())) , Array.Empty()).Compile(); public static readonly bool IsValid = typeof(T).IsValueType || (global::@FastGenericNew.FastNew.CachedConstructor != null && !typeof(T).IsAbstract); @@ -84,7 +84,7 @@ static FastNew() } else { - il.Emit(OpCodes.Call, global::@FastGenericNew.ThrowHelper.GetSmartThrow()); + il.Emit(OpCodes.Call, global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()); } il.Emit(OpCodes.Ret); CompiledDelegate = (Func)dm.CreateDelegate(typeof(Func), global::@FastGenericNew._FastNewDynMetClosure.Instance); @@ -116,7 +116,7 @@ static FastNew() var p0 = System.Linq.Expressions.Expression.Parameter(typeof(TArg0)); CompiledDelegate = (System.Linq.Expressions.Expression.Lambda>(IsValid ? (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.New(CachedConstructor!, p0) - : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.ThrowHelper.GetSmartThrow()) + : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()) , new System.Linq.Expressions.ParameterExpression[] { p0 })).Compile(); #else var dm = new DynamicMethod("", typeof(T), new Type[] { typeof(global::@FastGenericNew._FastNewDynMetClosure), typeof(TArg0) }, restrictedSkipVisibility: true); @@ -128,7 +128,7 @@ static FastNew() } else { - il.Emit(OpCodes.Call, global::@FastGenericNew.ThrowHelper.GetSmartThrow()); + il.Emit(OpCodes.Call, global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()); } il.Emit(OpCodes.Ret); CompiledDelegate = (Func)dm.CreateDelegate(typeof(Func), global::@FastGenericNew._FastNewDynMetClosure.Instance); @@ -162,7 +162,7 @@ static FastNew() var p1 = System.Linq.Expressions.Expression.Parameter(typeof(TArg1)); CompiledDelegate = (System.Linq.Expressions.Expression.Lambda>(IsValid ? (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.New(CachedConstructor!, p0, p1) - : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.ThrowHelper.GetSmartThrow()) + : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()) , new System.Linq.Expressions.ParameterExpression[] { p0, p1 })).Compile(); #else var dm = new DynamicMethod("", typeof(T), new Type[] { typeof(global::@FastGenericNew._FastNewDynMetClosure), typeof(TArg0), typeof(TArg1) }, restrictedSkipVisibility: true); @@ -175,7 +175,7 @@ static FastNew() } else { - il.Emit(OpCodes.Call, global::@FastGenericNew.ThrowHelper.GetSmartThrow()); + il.Emit(OpCodes.Call, global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()); } il.Emit(OpCodes.Ret); CompiledDelegate = (Func)dm.CreateDelegate(typeof(Func), global::@FastGenericNew._FastNewDynMetClosure.Instance); @@ -211,7 +211,7 @@ static FastNew() var p2 = System.Linq.Expressions.Expression.Parameter(typeof(TArg2)); CompiledDelegate = (System.Linq.Expressions.Expression.Lambda>(IsValid ? (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.New(CachedConstructor!, p0, p1, p2) - : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.ThrowHelper.GetSmartThrow()) + : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()) , new System.Linq.Expressions.ParameterExpression[] { p0, p1, p2 })).Compile(); #else var dm = new DynamicMethod("", typeof(T), new Type[] { typeof(global::@FastGenericNew._FastNewDynMetClosure), typeof(TArg0), typeof(TArg1), typeof(TArg2) }, restrictedSkipVisibility: true); @@ -225,7 +225,7 @@ static FastNew() } else { - il.Emit(OpCodes.Call, global::@FastGenericNew.ThrowHelper.GetSmartThrow()); + il.Emit(OpCodes.Call, global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()); } il.Emit(OpCodes.Ret); CompiledDelegate = (Func)dm.CreateDelegate(typeof(Func), global::@FastGenericNew._FastNewDynMetClosure.Instance); @@ -263,7 +263,7 @@ static FastNew() var p3 = System.Linq.Expressions.Expression.Parameter(typeof(TArg3)); CompiledDelegate = (System.Linq.Expressions.Expression.Lambda>(IsValid ? (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.New(CachedConstructor!, p0, p1, p2, p3) - : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.ThrowHelper.GetSmartThrow()) + : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()) , new System.Linq.Expressions.ParameterExpression[] { p0, p1, p2, p3 })).Compile(); #else var dm = new DynamicMethod("", typeof(T), new Type[] { typeof(global::@FastGenericNew._FastNewDynMetClosure), typeof(TArg0), typeof(TArg1), typeof(TArg2), typeof(TArg3) }, restrictedSkipVisibility: true); @@ -278,7 +278,7 @@ static FastNew() } else { - il.Emit(OpCodes.Call, global::@FastGenericNew.ThrowHelper.GetSmartThrow()); + il.Emit(OpCodes.Call, global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()); } il.Emit(OpCodes.Ret); CompiledDelegate = (Func)dm.CreateDelegate(typeof(Func), global::@FastGenericNew._FastNewDynMetClosure.Instance); @@ -318,7 +318,7 @@ static FastNew() var p4 = System.Linq.Expressions.Expression.Parameter(typeof(TArg4)); CompiledDelegate = (System.Linq.Expressions.Expression.Lambda>(IsValid ? (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.New(CachedConstructor!, p0, p1, p2, p3, p4) - : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.ThrowHelper.GetSmartThrow()) + : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()) , new System.Linq.Expressions.ParameterExpression[] { p0, p1, p2, p3, p4 })).Compile(); #else var dm = new DynamicMethod("", typeof(T), new Type[] { typeof(global::@FastGenericNew._FastNewDynMetClosure), typeof(TArg0), typeof(TArg1), typeof(TArg2), typeof(TArg3), typeof(TArg4) }, restrictedSkipVisibility: true); @@ -334,7 +334,7 @@ static FastNew() } else { - il.Emit(OpCodes.Call, global::@FastGenericNew.ThrowHelper.GetSmartThrow()); + il.Emit(OpCodes.Call, global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()); } il.Emit(OpCodes.Ret); CompiledDelegate = (Func)dm.CreateDelegate(typeof(Func), global::@FastGenericNew._FastNewDynMetClosure.Instance); @@ -376,7 +376,7 @@ static FastNew() var p5 = System.Linq.Expressions.Expression.Parameter(typeof(TArg5)); CompiledDelegate = (System.Linq.Expressions.Expression.Lambda>(IsValid ? (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.New(CachedConstructor!, p0, p1, p2, p3, p4, p5) - : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.ThrowHelper.GetSmartThrow()) + : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()) , new System.Linq.Expressions.ParameterExpression[] { p0, p1, p2, p3, p4, p5 })).Compile(); #else var dm = new DynamicMethod("", typeof(T), new Type[] { typeof(global::@FastGenericNew._FastNewDynMetClosure), typeof(TArg0), typeof(TArg1), typeof(TArg2), typeof(TArg3), typeof(TArg4), typeof(TArg5) }, restrictedSkipVisibility: true); @@ -393,7 +393,7 @@ static FastNew() } else { - il.Emit(OpCodes.Call, global::@FastGenericNew.ThrowHelper.GetSmartThrow()); + il.Emit(OpCodes.Call, global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()); } il.Emit(OpCodes.Ret); CompiledDelegate = (Func)dm.CreateDelegate(typeof(Func), global::@FastGenericNew._FastNewDynMetClosure.Instance); @@ -437,7 +437,7 @@ static FastNew() var p6 = System.Linq.Expressions.Expression.Parameter(typeof(TArg6)); CompiledDelegate = (System.Linq.Expressions.Expression.Lambda>(IsValid ? (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.New(CachedConstructor!, p0, p1, p2, p3, p4, p5, p6) - : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.ThrowHelper.GetSmartThrow()) + : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()) , new System.Linq.Expressions.ParameterExpression[] { p0, p1, p2, p3, p4, p5, p6 })).Compile(); #else var dm = new DynamicMethod("", typeof(T), new Type[] { typeof(global::@FastGenericNew._FastNewDynMetClosure), typeof(TArg0), typeof(TArg1), typeof(TArg2), typeof(TArg3), typeof(TArg4), typeof(TArg5), typeof(TArg6) }, restrictedSkipVisibility: true); @@ -455,7 +455,7 @@ static FastNew() } else { - il.Emit(OpCodes.Call, global::@FastGenericNew.ThrowHelper.GetSmartThrow()); + il.Emit(OpCodes.Call, global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()); } il.Emit(OpCodes.Ret); CompiledDelegate = (Func)dm.CreateDelegate(typeof(Func), global::@FastGenericNew._FastNewDynMetClosure.Instance); @@ -501,7 +501,7 @@ static FastNew() var p7 = System.Linq.Expressions.Expression.Parameter(typeof(TArg7)); CompiledDelegate = (System.Linq.Expressions.Expression.Lambda>(IsValid ? (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.New(CachedConstructor!, p0, p1, p2, p3, p4, p5, p6, p7) - : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.ThrowHelper.GetSmartThrow()) + : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()) , new System.Linq.Expressions.ParameterExpression[] { p0, p1, p2, p3, p4, p5, p6, p7 })).Compile(); #else var dm = new DynamicMethod("", typeof(T), new Type[] { typeof(global::@FastGenericNew._FastNewDynMetClosure), typeof(TArg0), typeof(TArg1), typeof(TArg2), typeof(TArg3), typeof(TArg4), typeof(TArg5), typeof(TArg6), typeof(TArg7) }, restrictedSkipVisibility: true); @@ -520,7 +520,7 @@ static FastNew() } else { - il.Emit(OpCodes.Call, global::@FastGenericNew.ThrowHelper.GetSmartThrow()); + il.Emit(OpCodes.Call, global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()); } il.Emit(OpCodes.Ret); CompiledDelegate = (Func)dm.CreateDelegate(typeof(Func), global::@FastGenericNew._FastNewDynMetClosure.Instance); @@ -568,7 +568,7 @@ static FastNew() var p8 = System.Linq.Expressions.Expression.Parameter(typeof(TArg8)); CompiledDelegate = (System.Linq.Expressions.Expression.Lambda>(IsValid ? (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.New(CachedConstructor!, p0, p1, p2, p3, p4, p5, p6, p7, p8) - : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.ThrowHelper.GetSmartThrow()) + : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()) , new System.Linq.Expressions.ParameterExpression[] { p0, p1, p2, p3, p4, p5, p6, p7, p8 })).Compile(); #else var dm = new DynamicMethod("", typeof(T), new Type[] { typeof(global::@FastGenericNew._FastNewDynMetClosure), typeof(TArg0), typeof(TArg1), typeof(TArg2), typeof(TArg3), typeof(TArg4), typeof(TArg5), typeof(TArg6), typeof(TArg7), typeof(TArg8) }, restrictedSkipVisibility: true); @@ -588,7 +588,7 @@ static FastNew() } else { - il.Emit(OpCodes.Call, global::@FastGenericNew.ThrowHelper.GetSmartThrow()); + il.Emit(OpCodes.Call, global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()); } il.Emit(OpCodes.Ret); CompiledDelegate = (Func)dm.CreateDelegate(typeof(Func), global::@FastGenericNew._FastNewDynMetClosure.Instance); @@ -638,7 +638,7 @@ static FastNew() var p9 = System.Linq.Expressions.Expression.Parameter(typeof(TArg9)); CompiledDelegate = (System.Linq.Expressions.Expression.Lambda>(IsValid ? (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.New(CachedConstructor!, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9) - : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.ThrowHelper.GetSmartThrow()) + : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()) , new System.Linq.Expressions.ParameterExpression[] { p0, p1, p2, p3, p4, p5, p6, p7, p8, p9 })).Compile(); #else var dm = new DynamicMethod("", typeof(T), new Type[] { typeof(global::@FastGenericNew._FastNewDynMetClosure), typeof(TArg0), typeof(TArg1), typeof(TArg2), typeof(TArg3), typeof(TArg4), typeof(TArg5), typeof(TArg6), typeof(TArg7), typeof(TArg8), typeof(TArg9) }, restrictedSkipVisibility: true); @@ -659,7 +659,7 @@ static FastNew() } else { - il.Emit(OpCodes.Call, global::@FastGenericNew.ThrowHelper.GetSmartThrow()); + il.Emit(OpCodes.Call, global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()); } il.Emit(OpCodes.Ret); CompiledDelegate = (Func)dm.CreateDelegate(typeof(Func), global::@FastGenericNew._FastNewDynMetClosure.Instance); @@ -711,7 +711,7 @@ static FastNew() var p10 = System.Linq.Expressions.Expression.Parameter(typeof(TArg10)); CompiledDelegate = (System.Linq.Expressions.Expression.Lambda>(IsValid ? (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.New(CachedConstructor!, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) - : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.ThrowHelper.GetSmartThrow()) + : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()) , new System.Linq.Expressions.ParameterExpression[] { p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10 })).Compile(); #else var dm = new DynamicMethod("", typeof(T), new Type[] { typeof(global::@FastGenericNew._FastNewDynMetClosure), typeof(TArg0), typeof(TArg1), typeof(TArg2), typeof(TArg3), typeof(TArg4), typeof(TArg5), typeof(TArg6), typeof(TArg7), typeof(TArg8), typeof(TArg9), typeof(TArg10) }, restrictedSkipVisibility: true); @@ -733,7 +733,7 @@ static FastNew() } else { - il.Emit(OpCodes.Call, global::@FastGenericNew.ThrowHelper.GetSmartThrow()); + il.Emit(OpCodes.Call, global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()); } il.Emit(OpCodes.Ret); CompiledDelegate = (Func)dm.CreateDelegate(typeof(Func), global::@FastGenericNew._FastNewDynMetClosure.Instance); @@ -787,7 +787,7 @@ static FastNew() var p11 = System.Linq.Expressions.Expression.Parameter(typeof(TArg11)); CompiledDelegate = (System.Linq.Expressions.Expression.Lambda>(IsValid ? (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.New(CachedConstructor!, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) - : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.ThrowHelper.GetSmartThrow()) + : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()) , new System.Linq.Expressions.ParameterExpression[] { p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11 })).Compile(); #else var dm = new DynamicMethod("", typeof(T), new Type[] { typeof(global::@FastGenericNew._FastNewDynMetClosure), typeof(TArg0), typeof(TArg1), typeof(TArg2), typeof(TArg3), typeof(TArg4), typeof(TArg5), typeof(TArg6), typeof(TArg7), typeof(TArg8), typeof(TArg9), typeof(TArg10), typeof(TArg11) }, restrictedSkipVisibility: true); @@ -810,7 +810,7 @@ static FastNew() } else { - il.Emit(OpCodes.Call, global::@FastGenericNew.ThrowHelper.GetSmartThrow()); + il.Emit(OpCodes.Call, global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()); } il.Emit(OpCodes.Ret); CompiledDelegate = (Func)dm.CreateDelegate(typeof(Func), global::@FastGenericNew._FastNewDynMetClosure.Instance); @@ -866,7 +866,7 @@ static FastNew() var p12 = System.Linq.Expressions.Expression.Parameter(typeof(TArg12)); CompiledDelegate = (System.Linq.Expressions.Expression.Lambda>(IsValid ? (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.New(CachedConstructor!, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) - : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.ThrowHelper.GetSmartThrow()) + : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()) , new System.Linq.Expressions.ParameterExpression[] { p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12 })).Compile(); #else var dm = new DynamicMethod("", typeof(T), new Type[] { typeof(global::@FastGenericNew._FastNewDynMetClosure), typeof(TArg0), typeof(TArg1), typeof(TArg2), typeof(TArg3), typeof(TArg4), typeof(TArg5), typeof(TArg6), typeof(TArg7), typeof(TArg8), typeof(TArg9), typeof(TArg10), typeof(TArg11), typeof(TArg12) }, restrictedSkipVisibility: true); @@ -890,7 +890,7 @@ static FastNew() } else { - il.Emit(OpCodes.Call, global::@FastGenericNew.ThrowHelper.GetSmartThrow()); + il.Emit(OpCodes.Call, global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()); } il.Emit(OpCodes.Ret); CompiledDelegate = (Func)dm.CreateDelegate(typeof(Func), global::@FastGenericNew._FastNewDynMetClosure.Instance); @@ -948,7 +948,7 @@ static FastNew() var p13 = System.Linq.Expressions.Expression.Parameter(typeof(TArg13)); CompiledDelegate = (System.Linq.Expressions.Expression.Lambda>(IsValid ? (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.New(CachedConstructor!, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) - : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.ThrowHelper.GetSmartThrow()) + : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()) , new System.Linq.Expressions.ParameterExpression[] { p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13 })).Compile(); #else var dm = new DynamicMethod("", typeof(T), new Type[] { typeof(global::@FastGenericNew._FastNewDynMetClosure), typeof(TArg0), typeof(TArg1), typeof(TArg2), typeof(TArg3), typeof(TArg4), typeof(TArg5), typeof(TArg6), typeof(TArg7), typeof(TArg8), typeof(TArg9), typeof(TArg10), typeof(TArg11), typeof(TArg12), typeof(TArg13) }, restrictedSkipVisibility: true); @@ -973,7 +973,7 @@ static FastNew() } else { - il.Emit(OpCodes.Call, global::@FastGenericNew.ThrowHelper.GetSmartThrow()); + il.Emit(OpCodes.Call, global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()); } il.Emit(OpCodes.Ret); CompiledDelegate = (Func)dm.CreateDelegate(typeof(Func), global::@FastGenericNew._FastNewDynMetClosure.Instance); @@ -1033,7 +1033,7 @@ static FastNew() var p14 = System.Linq.Expressions.Expression.Parameter(typeof(TArg14)); CompiledDelegate = (System.Linq.Expressions.Expression.Lambda>(IsValid ? (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.New(CachedConstructor!, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14) - : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.ThrowHelper.GetSmartThrow()) + : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()) , new System.Linq.Expressions.ParameterExpression[] { p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14 })).Compile(); #else var dm = new DynamicMethod("", typeof(T), new Type[] { typeof(global::@FastGenericNew._FastNewDynMetClosure), typeof(TArg0), typeof(TArg1), typeof(TArg2), typeof(TArg3), typeof(TArg4), typeof(TArg5), typeof(TArg6), typeof(TArg7), typeof(TArg8), typeof(TArg9), typeof(TArg10), typeof(TArg11), typeof(TArg12), typeof(TArg13), typeof(TArg14) }, restrictedSkipVisibility: true); @@ -1059,7 +1059,7 @@ static FastNew() } else { - il.Emit(OpCodes.Call, global::@FastGenericNew.ThrowHelper.GetSmartThrow()); + il.Emit(OpCodes.Call, global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()); } il.Emit(OpCodes.Ret); CompiledDelegate = (Func)dm.CreateDelegate(typeof(Func), global::@FastGenericNew._FastNewDynMetClosure.Instance); @@ -1121,7 +1121,7 @@ static FastNew() var p15 = System.Linq.Expressions.Expression.Parameter(typeof(TArg15)); CompiledDelegate = (System.Linq.Expressions.Expression.Lambda>(IsValid ? (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.New(CachedConstructor!, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) - : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.ThrowHelper.GetSmartThrow()) + : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()) , new System.Linq.Expressions.ParameterExpression[] { p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15 })).Compile(); #else var dm = new DynamicMethod("", typeof(T), new Type[] { typeof(global::@FastGenericNew._FastNewDynMetClosure), typeof(TArg0), typeof(TArg1), typeof(TArg2), typeof(TArg3), typeof(TArg4), typeof(TArg5), typeof(TArg6), typeof(TArg7), typeof(TArg8), typeof(TArg9), typeof(TArg10), typeof(TArg11), typeof(TArg12), typeof(TArg13), typeof(TArg14), typeof(TArg15) }, restrictedSkipVisibility: true); @@ -1148,7 +1148,7 @@ static FastNew() } else { - il.Emit(OpCodes.Call, global::@FastGenericNew.ThrowHelper.GetSmartThrow()); + il.Emit(OpCodes.Call, global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()); } il.Emit(OpCodes.Ret); CompiledDelegate = (Func)dm.CreateDelegate(typeof(Func), global::@FastGenericNew._FastNewDynMetClosure.Instance); @@ -1212,7 +1212,7 @@ static FastNew() var p16 = System.Linq.Expressions.Expression.Parameter(typeof(TArg16)); CompiledDelegate = (System.Linq.Expressions.Expression.Lambda>(IsValid ? (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.New(CachedConstructor!, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16) - : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.ThrowHelper.GetSmartThrow()) + : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()) , new System.Linq.Expressions.ParameterExpression[] { p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16 })).Compile(); #else var dm = new DynamicMethod("", typeof(T), new Type[] { typeof(global::@FastGenericNew._FastNewDynMetClosure), typeof(TArg0), typeof(TArg1), typeof(TArg2), typeof(TArg3), typeof(TArg4), typeof(TArg5), typeof(TArg6), typeof(TArg7), typeof(TArg8), typeof(TArg9), typeof(TArg10), typeof(TArg11), typeof(TArg12), typeof(TArg13), typeof(TArg14), typeof(TArg15), typeof(TArg16) }, restrictedSkipVisibility: true); @@ -1240,7 +1240,7 @@ static FastNew() } else { - il.Emit(OpCodes.Call, global::@FastGenericNew.ThrowHelper.GetSmartThrow()); + il.Emit(OpCodes.Call, global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()); } il.Emit(OpCodes.Ret); CompiledDelegate = (global::@FastGenericNew.FastNew.FastNewDelegate)dm.CreateDelegate(typeof(global::@FastGenericNew.FastNew.FastNewDelegate), global::@FastGenericNew._FastNewDynMetClosure.Instance); @@ -1306,7 +1306,7 @@ static FastNew() var p17 = System.Linq.Expressions.Expression.Parameter(typeof(TArg17)); CompiledDelegate = (System.Linq.Expressions.Expression.Lambda>(IsValid ? (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.New(CachedConstructor!, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17) - : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.ThrowHelper.GetSmartThrow()) + : (System.Linq.Expressions.Expression)System.Linq.Expressions.Expression.Call(global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()) , new System.Linq.Expressions.ParameterExpression[] { p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17 })).Compile(); #else var dm = new DynamicMethod("", typeof(T), new Type[] { typeof(global::@FastGenericNew._FastNewDynMetClosure), typeof(TArg0), typeof(TArg1), typeof(TArg2), typeof(TArg3), typeof(TArg4), typeof(TArg5), typeof(TArg6), typeof(TArg7), typeof(TArg8), typeof(TArg9), typeof(TArg10), typeof(TArg11), typeof(TArg12), typeof(TArg13), typeof(TArg14), typeof(TArg15), typeof(TArg16), typeof(TArg17) }, restrictedSkipVisibility: true); @@ -1335,7 +1335,7 @@ static FastNew() } else { - il.Emit(OpCodes.Call, global::@FastGenericNew.ThrowHelper.GetSmartThrow()); + il.Emit(OpCodes.Call, global::@FastGenericNew.FastNewThrowHelper.GetSmartThrow()); } il.Emit(OpCodes.Ret); CompiledDelegate = (global::@FastGenericNew.FastNew.FastNewDelegate)dm.CreateDelegate(typeof(global::@FastGenericNew.FastNew.FastNewDelegate), global::@FastGenericNew._FastNewDynMetClosure.Instance); diff --git a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/ThrowHelper.g.cs b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/ThrowHelper.g.cs index c0a4b1e..ffba759 100644 --- a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/ThrowHelper.g.cs +++ b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/ThrowHelper.g.cs @@ -4,7 +4,6 @@ // Please do not modify this file directly // //------------------------------------------------------------------------------ -#define FastNewPX_AllowUnsafeImplementation #nullable enable using System; using System.Collections.Generic; @@ -18,15 +17,15 @@ namespace @FastGenericNew { [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)] - internal static partial class ThrowHelper + internal static partial class FastNewThrowHelper { [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.NoInlining | global::System.Runtime.CompilerServices.MethodImplOptions.NoOptimization)] #if NET5_0_OR_GREATER - [global::System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute("SmartThrowImpl``1()", typeof(global::@FastGenericNew.ThrowHelper))] + [global::System.Diagnostics.CodeAnalysis.DynamicDependencyAttribute("SmartThrowImpl``1()", typeof(global::@FastGenericNew.FastNewThrowHelper))] #endif - public static global::System.Reflection.MethodInfo GetSmartThrow() => typeof(global::@FastGenericNew.ThrowHelper).GetMethod("SmartThrowImpl", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static)!.MakeGenericMethod(typeof(T)); + public static global::System.Reflection.MethodInfo GetSmartThrow() => typeof(global::@FastGenericNew.FastNewThrowHelper).GetMethod("SmartThrowImpl", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static)!.MakeGenericMethod(typeof(T)); [global::System.Runtime.CompilerServices.MethodImpl(global::System.Runtime.CompilerServices.MethodImplOptions.NoInlining | global::System.Runtime.CompilerServices.MethodImplOptions.NoOptimization)] public static T SmartThrowImpl() From 42548fd1d2f8ec0b83efaf50a5b182a84e4ae8c9 Mon Sep 17 00:00:00 2001 From: Boring3 <16686147+Nyrest@users.noreply.github.com> Date: Wed, 14 Aug 2024 23:19:45 +0800 Subject: [PATCH 5/7] Wider test coverage --- .github/workflows/publish.yml | 2 + .github/workflows/tests.yml | 2 + FastGenericNew.sln | 4 +- .../FastGenericNew.Tests.csproj | 4 +- src/FastGenericNew.Tests/TestData.cs | 8 ++ .../Units/ClrAllocatorTests/ExceptionsTest.cs | 6 +- .../Units/ClrAllocatorTests/ReferenceTypes.cs | 3 + .../Units/ClrAllocatorTests/ValueType.cs | 1 + .../Units/GetFastNewTests/ExceptionsTest.cs | 74 +++++++++++++++++++ .../Units/GetFastNewTests/ValueType.cs | 13 ++++ 10 files changed, 113 insertions(+), 4 deletions(-) create mode 100644 src/FastGenericNew.Tests/Units/GetFastNewTests/ExceptionsTest.cs create mode 100644 src/FastGenericNew.Tests/Units/GetFastNewTests/ValueType.cs diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 25fd687..8e38e8b 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -27,6 +27,8 @@ jobs: 5.0.x 6.0.x 7.0.x + 8.0.x + 9.0.x include-prerelease: true - name: Restore dependencies run: dotnet restore diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index fe8de6f..b247c77 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -30,6 +30,8 @@ jobs: 5.0.x 6.0.x 7.0.x + 8.0.x + 9.0.x include-prerelease: true - name: Restore dependencies run: dotnet restore diff --git a/FastGenericNew.sln b/FastGenericNew.sln index 95c847e..43c6dd1 100644 --- a/FastGenericNew.sln +++ b/FastGenericNew.sln @@ -14,14 +14,16 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Root", "Root", "{F142034C-8 Benchmark_ReferenceType.png = Benchmark_ReferenceType.png Benchmark_ValueType.png = Benchmark_ValueType.png FastGenericNew.Shared.props = FastGenericNew.Shared.props + .github\workflows\publish.yml = .github\workflows\publish.yml README.md = README.md + .github\workflows\tests.yml = .github\workflows\tests.yml EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FastGenericNew.Tests", "src\FastGenericNew.Tests\FastGenericNew.Tests.csproj", "{7A750C15-4CF3-4F5B-BFA8-AFBB98827770}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FastGenericNew.Benchmarks", "src\FastGenericNew.Benchmarks\FastGenericNew.Benchmarks.csproj", "{24108B29-8FAD-4080-90B4-0A6A19CE06BE}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FastGenericNew.SourceGenerator.InternalGenerator", "src\FastGenericNew.SourceGenerator.InternalGenerator\FastGenericNew.SourceGenerator.InternalGenerator.csproj", "{33032C07-28EF-4AD6-BE00-32303BB9DA7B}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FastGenericNew.SourceGenerator.InternalGenerator", "src\FastGenericNew.SourceGenerator.InternalGenerator\FastGenericNew.SourceGenerator.InternalGenerator.csproj", "{33032C07-28EF-4AD6-BE00-32303BB9DA7B}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/src/FastGenericNew.Tests/FastGenericNew.Tests.csproj b/src/FastGenericNew.Tests/FastGenericNew.Tests.csproj index c4867f1..1ffcb1a 100644 --- a/src/FastGenericNew.Tests/FastGenericNew.Tests.csproj +++ b/src/FastGenericNew.Tests/FastGenericNew.Tests.csproj @@ -1,7 +1,7 @@ - + - net6.0;net8.0 + net6.0;net8.0;net9.0 $(TargetFrameworks);net48 10 enable diff --git a/src/FastGenericNew.Tests/TestData.cs b/src/FastGenericNew.Tests/TestData.cs index 3196e31..10fc9ce 100644 --- a/src/FastGenericNew.Tests/TestData.cs +++ b/src/FastGenericNew.Tests/TestData.cs @@ -1,6 +1,9 @@ using System; using System.Collections.Generic; +using System.Data.SqlTypes; +using System.Diagnostics.CodeAnalysis; using System.Linq; +using System.Numerics; using System.Text; using System.Threading.Tasks; @@ -35,6 +38,11 @@ public static class TestData typeof(nint), typeof(nuint), +#if NET8_0_OR_GREATER + typeof(Int128), + typeof(UInt128), +#endif + #endregion typeof(DateTime), diff --git a/src/FastGenericNew.Tests/Units/ClrAllocatorTests/ExceptionsTest.cs b/src/FastGenericNew.Tests/Units/ClrAllocatorTests/ExceptionsTest.cs index 71ee87b..f85ca51 100644 --- a/src/FastGenericNew.Tests/Units/ClrAllocatorTests/ExceptionsTest.cs +++ b/src/FastGenericNew.Tests/Units/ClrAllocatorTests/ExceptionsTest.cs @@ -6,12 +6,13 @@ public class ExceptionsTest [Test()] public void ExceptionInterface() { + if (!ClrAllocator.IsSupported) Assert.Ignore("Unsupported"); try { ClrAllocator.CreateInstance(); Assert.Fail("The expected exception is not thrown."); } - catch (MissingMethodException e) + catch (Exception e) { Assert.IsTrue(e.Message.StartsWith("Cannot create an instance of an interface")); } @@ -20,6 +21,7 @@ public void ExceptionInterface() [Test()] public void ExceptionAbstract() { + if (!ClrAllocator.IsSupported) Assert.Ignore("Unsupported"); try { ClrAllocator.CreateInstance(); @@ -34,6 +36,7 @@ public void ExceptionAbstract() [Test()] public void ExceptionPLString() { + if (!ClrAllocator.IsSupported) Assert.Ignore("Unsupported"); try { ClrAllocator.CreateInstance(); @@ -49,6 +52,7 @@ public void ExceptionPLString() [Test()] public void ExceptionNotFoundNoParameter() { + if (!ClrAllocator.IsSupported) Assert.Ignore("Unsupported"); try { ClrAllocator.CreateInstance(); diff --git a/src/FastGenericNew.Tests/Units/ClrAllocatorTests/ReferenceTypes.cs b/src/FastGenericNew.Tests/Units/ClrAllocatorTests/ReferenceTypes.cs index e6ad16f..aeb2180 100644 --- a/src/FastGenericNew.Tests/Units/ClrAllocatorTests/ReferenceTypes.cs +++ b/src/FastGenericNew.Tests/Units/ClrAllocatorTests/ReferenceTypes.cs @@ -8,6 +8,7 @@ public class ReferenceTypes [Test] public void Object() { + if (!ClrAllocator.IsSupported) Assert.Ignore("Unsupported"); var expected = Activator.CreateInstance(); var actual = ClrAllocator.CreateInstance(); Assert.IsTrue(expected.GetType() == actual.GetType()); @@ -17,6 +18,7 @@ public void Object() [Parallelizable(ParallelScope.All)] public void CommonTypes() { + if (!ClrAllocator.IsSupported) Assert.Ignore("Unsupported"); var expected = Activator.CreateInstance(); var actual = ClrAllocator.CreateInstance(); Assert.AreEqual(expected, actual); @@ -26,6 +28,7 @@ public void CommonTypes() [Parallelizable(ParallelScope.All)] public void ParallelNew() { + if (!ClrAllocator.IsSupported) Assert.Ignore("Unsupported"); const int count = 512; T[] array = new T[count]; Parallel.For(0, count, new ParallelOptions() { MaxDegreeOfParallelism = count }, i => diff --git a/src/FastGenericNew.Tests/Units/ClrAllocatorTests/ValueType.cs b/src/FastGenericNew.Tests/Units/ClrAllocatorTests/ValueType.cs index 92caaed..ea30135 100644 --- a/src/FastGenericNew.Tests/Units/ClrAllocatorTests/ValueType.cs +++ b/src/FastGenericNew.Tests/Units/ClrAllocatorTests/ValueType.cs @@ -7,6 +7,7 @@ public class ValueTypes [Parallelizable(ParallelScope.All)] public void CommonTypes() { + if (!ClrAllocator.IsSupported) Assert.Ignore("Unsupported"); var expected = Activator.CreateInstance(); var actual = FastNew.CompiledDelegate(); Assert.AreEqual(expected, actual); diff --git a/src/FastGenericNew.Tests/Units/GetFastNewTests/ExceptionsTest.cs b/src/FastGenericNew.Tests/Units/GetFastNewTests/ExceptionsTest.cs new file mode 100644 index 0000000..557001f --- /dev/null +++ b/src/FastGenericNew.Tests/Units/GetFastNewTests/ExceptionsTest.cs @@ -0,0 +1,74 @@ +namespace FastGenericNew.Tests.Units.GetFastNewTests; + +public class ExceptionsTest +{ + [Test()] + public void ExceptionInterface() + { + try + { + FastNew.GetCreateInstance(typeof(IEnumerable))(); + Assert.Fail("The expected exception is not thrown."); + } + catch (MissingMethodException e) + { + Assert.IsTrue(e.Message.StartsWith("Cannot create an instance of an interface")); + } + } + + [Test()] + public void ExceptionAbstract() + { + try + { + FastNew.GetCreateInstance(typeof(Stream))(); + Assert.Fail("The expected exception is not thrown."); + } + catch (MissingMethodException e) + { + Assert.IsTrue(e.Message.StartsWith("Cannot create an abstract class")); + } + } + + [Test()] + public void ExceptionPLString() + { + try + { + FastNew.GetCreateInstance(typeof(string))(); + Assert.Fail("The expected exception is not thrown."); + } + catch (MissingMethodException e) + { + Assert.IsTrue(e.Message.StartsWith("No match constructor found in type")); + } + } + + [Test()] + public void ExceptionNotFoundNoParameter() + { + try + { + FastNew.GetCreateInstance(typeof(DemoClassNoParamlessCtor))(); + Assert.Fail("The expected exception is not thrown."); + } + catch (MissingMethodException e) + { + Assert.IsTrue(e.Message.StartsWith("No match constructor found in type")); + } + } + + [Test()] + public void ExceptionNotFoundWithParameter() + { + try + { + FastNew.GetCreateInstance(typeof(DemoClass), typeof(DBNull))(DBNull.Value); + Assert.Fail("The expected exception is not thrown."); + } + catch (MissingMethodException e) + { + Assert.IsTrue(e.Message.StartsWith("No match constructor found in type")); + } + } +} diff --git a/src/FastGenericNew.Tests/Units/GetFastNewTests/ValueType.cs b/src/FastGenericNew.Tests/Units/GetFastNewTests/ValueType.cs new file mode 100644 index 0000000..880dfff --- /dev/null +++ b/src/FastGenericNew.Tests/Units/GetFastNewTests/ValueType.cs @@ -0,0 +1,13 @@ +namespace FastGenericNew.Tests.Units.GetFastNewTests; + +public class ValueTypes +{ + [TestCaseSourceGeneric(typeof(TestData), nameof(TestData.CommonValueTypes))] + [Parallelizable(ParallelScope.All)] + public void CommonTypes() + { + var expected = Activator.CreateInstance(); + var actual = FastNew.GetCreateInstance(typeof(T))(); + Assert.AreEqual(expected, actual); + } +} From 5ea6701688fd59f6abc0414e6d7aa10baa874495 Mon Sep 17 00:00:00 2001 From: Boring3 <16686147+Nyrest@users.noreply.github.com> Date: Thu, 15 Aug 2024 09:46:37 +0800 Subject: [PATCH 6/7] Fix MSB3277 warning --- .../FastGenericNew.Benchmarks.csproj | 5 +++-- src/FastGenericNew.Benchmarks/Program.cs | 5 ++--- .../FastGenericNew.SourceGenerator.csproj | 4 ++-- src/FastGenericNew/FastGenericNew.csproj | 1 + 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/FastGenericNew.Benchmarks/FastGenericNew.Benchmarks.csproj b/src/FastGenericNew.Benchmarks/FastGenericNew.Benchmarks.csproj index 03ea0d5..d5bd769 100644 --- a/src/FastGenericNew.Benchmarks/FastGenericNew.Benchmarks.csproj +++ b/src/FastGenericNew.Benchmarks/FastGenericNew.Benchmarks.csproj @@ -2,8 +2,8 @@ Exe - net6.0;net8.0 - $(TargetFrameworks);net461;net48 + net6.0;net8.0;net9.0 + $(TargetFrameworks);net462;net481 enable enable 10 @@ -25,6 +25,7 @@ + diff --git a/src/FastGenericNew.Benchmarks/Program.cs b/src/FastGenericNew.Benchmarks/Program.cs index 432e489..d8cc053 100644 --- a/src/FastGenericNew.Benchmarks/Program.cs +++ b/src/FastGenericNew.Benchmarks/Program.cs @@ -5,9 +5,8 @@ ManualConfig config = ManualConfig.Create(DefaultConfig.Instance); config.AddJob( - Job.Default.WithRuntime(ClrRuntime.Net461), - Job.Default.WithRuntime(ClrRuntime.Net48), - Job.Default.WithRuntime(CoreRuntime.Core31), + Job.Default.WithRuntime(ClrRuntime.Net462), + Job.Default.WithRuntime(ClrRuntime.Net481), Job.Default.WithRuntime(CoreRuntime.Core60), Job.Default.WithRuntime(CoreRuntime.Core80), Job.Default.WithRuntime(CoreRuntime.Core90) diff --git a/src/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.csproj b/src/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.csproj index 1b2d805..d4b22c0 100644 --- a/src/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.csproj +++ b/src/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.csproj @@ -1,9 +1,9 @@ - + netstandard2.0 - preview + 11.0 enable enable true diff --git a/src/FastGenericNew/FastGenericNew.csproj b/src/FastGenericNew/FastGenericNew.csproj index 44ee1b9..963b421 100644 --- a/src/FastGenericNew/FastGenericNew.csproj +++ b/src/FastGenericNew/FastGenericNew.csproj @@ -12,6 +12,7 @@ _generated true true + $(NoWarn);CS1591 From 59458dbc31a9385f74cddbebd1c32b6834000628 Mon Sep 17 00:00:00 2001 From: Boring3 <16686147+Nyrest@users.noreply.github.com> Date: Thu, 15 Aug 2024 10:19:03 +0800 Subject: [PATCH 7/7] Setting the default value of DisableGeneratorCache to true --- src/FastGenericNew.SourceGenerator/GeneratorOptions.cs | 2 +- .../GeneratorOptions.ctor.g.cs | 2 +- .../_GenerationInfo.g.cs | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/FastGenericNew.SourceGenerator/GeneratorOptions.cs b/src/FastGenericNew.SourceGenerator/GeneratorOptions.cs index 65b3090..5435cfc 100644 --- a/src/FastGenericNew.SourceGenerator/GeneratorOptions.cs +++ b/src/FastGenericNew.SourceGenerator/GeneratorOptions.cs @@ -29,7 +29,7 @@ public readonly partial record struct GeneratorOptions [GeneratorOption(true)] public bool AlertGeneratedFile { get; } - [GeneratorOption(false)] + [GeneratorOption(true)] public bool DisableGeneratorCache { get; } [GeneratorOption(false)] diff --git a/src/FastGenericNew.SourceGenerator/_generated/FastGenericNew.SourceGenerator.InternalGenerator/FastGenericNew.SourceGenerator.InternalGenerator.Generator/GeneratorOptions.ctor.g.cs b/src/FastGenericNew.SourceGenerator/_generated/FastGenericNew.SourceGenerator.InternalGenerator/FastGenericNew.SourceGenerator.InternalGenerator.Generator/GeneratorOptions.ctor.g.cs index 3de4407..bd9dec8 100644 --- a/src/FastGenericNew.SourceGenerator/_generated/FastGenericNew.SourceGenerator.InternalGenerator/FastGenericNew.SourceGenerator.InternalGenerator.Generator/GeneratorOptions.ctor.g.cs +++ b/src/FastGenericNew.SourceGenerator/_generated/FastGenericNew.SourceGenerator.InternalGenerator/FastGenericNew.SourceGenerator.InternalGenerator.Generator/GeneratorOptions.ctor.g.cs @@ -16,7 +16,7 @@ public GeneratorOptions(AnalyzerConfigOptionsProvider? provider) Namespace = options.GetOrDefault(nameof(Namespace), "FastGenericNew"); ForceFastNewDelegate = options.GetOrDefault(nameof(ForceFastNewDelegate), false); AlertGeneratedFile = options.GetOrDefault(nameof(AlertGeneratedFile), true); - DisableGeneratorCache = options.GetOrDefault(nameof(DisableGeneratorCache), false); + DisableGeneratorCache = options.GetOrDefault(nameof(DisableGeneratorCache), true); PrettyOutput = options.GetOrDefault(nameof(PrettyOutput), false); MultiThreadedGeneration = options.GetOrDefault(nameof(MultiThreadedGeneration), true); OutputGenerationInfo = options.GetOrDefault(nameof(OutputGenerationInfo), false); diff --git a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/_GenerationInfo.g.cs b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/_GenerationInfo.g.cs index 13e5c39..add7e3e 100644 --- a/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/_GenerationInfo.g.cs +++ b/src/FastGenericNew/_generated/FastGenericNew.SourceGenerator/FastGenericNew.SourceGenerator.Generator/_GenerationInfo.g.cs @@ -16,7 +16,7 @@ Namespace = FastGenericNew ForceFastNewDelegate = False AlertGeneratedFile = True - DisableGeneratorCache = False + DisableGeneratorCache = True PrettyOutput = True (default: False) MultiThreadedGeneration = True OutputGenerationInfo = True (default: False) @@ -35,7 +35,7 @@ FastGenericNew False True - False + True True True True