From 49368caf1c630b41980051925314c8bbc41d04c3 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sat, 12 Jul 2025 13:46:35 +0200 Subject: [PATCH] Rename option to "UseObjectCreationOfGenericTypeParameter" --- .../ReplaceMethodCallsWithOperators.cs | 2 +- ICSharpCode.Decompiler/DecompilerSettings.cs | 18 +++++++++--------- .../IL/Transforms/ExpressionTransforms.cs | 3 +++ ...TransformCollectionAndObjectInitializers.cs | 4 ++++ 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/ICSharpCode.Decompiler/CSharp/Transforms/ReplaceMethodCallsWithOperators.cs b/ICSharpCode.Decompiler/CSharp/Transforms/ReplaceMethodCallsWithOperators.cs index 271cd54b9..37e8409d4 100644 --- a/ICSharpCode.Decompiler/CSharp/Transforms/ReplaceMethodCallsWithOperators.cs +++ b/ICSharpCode.Decompiler/CSharp/Transforms/ReplaceMethodCallsWithOperators.cs @@ -138,7 +138,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms break; */ case "System.Activator.CreateInstance": - if (context.Settings.GenericTypeInstantiation && + if (context.Settings.UseObjectCreationOfGenericTypeParameter && arguments.Length == 0 && method.TypeArguments.Count == 1 && IsInstantiableTypeParameter(method.TypeArguments[0])) diff --git a/ICSharpCode.Decompiler/DecompilerSettings.cs b/ICSharpCode.Decompiler/DecompilerSettings.cs index 2cfeab0e2..6a0078a8d 100644 --- a/ICSharpCode.Decompiler/DecompilerSettings.cs +++ b/ICSharpCode.Decompiler/DecompilerSettings.cs @@ -63,7 +63,7 @@ namespace ICSharpCode.Decompiler liftNullables = false; yieldReturn = false; useImplicitMethodGroupConversion = false; - genericTypeInstantiation = false; + useObjectCreationOfGenericTypeParameter = false; } if (languageVersion < CSharp.LanguageVersion.CSharp3) { @@ -211,7 +211,7 @@ namespace ICSharpCode.Decompiler if (anonymousTypes || objectCollectionInitializers || automaticProperties || queryExpressions || expressionTrees) return CSharp.LanguageVersion.CSharp3; - if (anonymousMethods || liftNullables || yieldReturn || useImplicitMethodGroupConversion || genericTypeInstantiation) + if (anonymousMethods || liftNullables || yieldReturn || useImplicitMethodGroupConversion || useObjectCreationOfGenericTypeParameter) return CSharp.LanguageVersion.CSharp2; return CSharp.LanguageVersion.CSharp1; } @@ -987,21 +987,21 @@ namespace ICSharpCode.Decompiler } } - bool genericTypeInstantiation = true; + bool useObjectCreationOfGenericTypeParameter = true; /// - /// Gets/Sets whether to use generic type instantiation for generic types with new() constraint. + /// Gets/Sets whether to use object creation expressions for generic types with new() constraint. /// true: T t = new T(); /// false: T t = Activator.CreateInstance<T>() /// [Category("C# 2.0 / VS 2005")] - [Description("DecompilerSettings.GenericTypeInstantiation")] - public bool GenericTypeInstantiation { - get { return genericTypeInstantiation; } + [Description("DecompilerSettings.UseObjectCreationOfGenericTypeParameter")] + public bool UseObjectCreationOfGenericTypeParameter { + get { return useObjectCreationOfGenericTypeParameter; } set { - if (genericTypeInstantiation != value) + if (useObjectCreationOfGenericTypeParameter != value) { - genericTypeInstantiation = value; + useObjectCreationOfGenericTypeParameter = value; OnPropertyChanged(); } } diff --git a/ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs b/ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs index f73f624f1..c6ce6443a 100644 --- a/ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs +++ b/ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs @@ -532,7 +532,10 @@ namespace ICSharpCode.Decompiler.IL.Transforms inst.Condition.AcceptVisitor(this); if (new NullableLiftingTransform(context).Run(inst)) + { + context.Step("NullableLiftingTransform", inst); return; + } if (TransformDynamicAddAssignOrRemoveAssign(inst)) return; diff --git a/ICSharpCode.Decompiler/IL/Transforms/TransformCollectionAndObjectInitializers.cs b/ICSharpCode.Decompiler/IL/Transforms/TransformCollectionAndObjectInitializers.cs index ea32c3972..908138ca9 100644 --- a/ICSharpCode.Decompiler/IL/Transforms/TransformCollectionAndObjectInitializers.cs +++ b/ICSharpCode.Decompiler/IL/Transforms/TransformCollectionAndObjectInitializers.cs @@ -76,6 +76,10 @@ namespace ICSharpCode.Decompiler.IL.Transforms instType = defaultVal.Type; break; case Call c when c.Method.FullNameIs("System.Activator", "CreateInstance") && c.Method.TypeArguments.Count == 1: + if (!context.Settings.UseObjectCreationOfGenericTypeParameter) + { + return; + } instType = c.Method.TypeArguments[0]; blockKind = BlockKind.ObjectInitializer; break;