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] 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