Browse Source

Rename option to "UseObjectCreationOfGenericTypeParameter"

pull/3497/head
Siegfried Pammer 1 week ago
parent
commit
49368caf1c
  1. 2
      ICSharpCode.Decompiler/CSharp/Transforms/ReplaceMethodCallsWithOperators.cs
  2. 18
      ICSharpCode.Decompiler/DecompilerSettings.cs
  3. 3
      ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs
  4. 4
      ICSharpCode.Decompiler/IL/Transforms/TransformCollectionAndObjectInitializers.cs

2
ICSharpCode.Decompiler/CSharp/Transforms/ReplaceMethodCallsWithOperators.cs

@ -138,7 +138,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
break; break;
*/ */
case "System.Activator.CreateInstance": case "System.Activator.CreateInstance":
if (context.Settings.GenericTypeInstantiation && if (context.Settings.UseObjectCreationOfGenericTypeParameter &&
arguments.Length == 0 && arguments.Length == 0 &&
method.TypeArguments.Count == 1 && method.TypeArguments.Count == 1 &&
IsInstantiableTypeParameter(method.TypeArguments[0])) IsInstantiableTypeParameter(method.TypeArguments[0]))

18
ICSharpCode.Decompiler/DecompilerSettings.cs

@ -63,7 +63,7 @@ namespace ICSharpCode.Decompiler
liftNullables = false; liftNullables = false;
yieldReturn = false; yieldReturn = false;
useImplicitMethodGroupConversion = false; useImplicitMethodGroupConversion = false;
genericTypeInstantiation = false; useObjectCreationOfGenericTypeParameter = false;
} }
if (languageVersion < CSharp.LanguageVersion.CSharp3) if (languageVersion < CSharp.LanguageVersion.CSharp3)
{ {
@ -211,7 +211,7 @@ namespace ICSharpCode.Decompiler
if (anonymousTypes || objectCollectionInitializers || automaticProperties if (anonymousTypes || objectCollectionInitializers || automaticProperties
|| queryExpressions || expressionTrees) || queryExpressions || expressionTrees)
return CSharp.LanguageVersion.CSharp3; return CSharp.LanguageVersion.CSharp3;
if (anonymousMethods || liftNullables || yieldReturn || useImplicitMethodGroupConversion || genericTypeInstantiation) if (anonymousMethods || liftNullables || yieldReturn || useImplicitMethodGroupConversion || useObjectCreationOfGenericTypeParameter)
return CSharp.LanguageVersion.CSharp2; return CSharp.LanguageVersion.CSharp2;
return CSharp.LanguageVersion.CSharp1; return CSharp.LanguageVersion.CSharp1;
} }
@ -987,21 +987,21 @@ namespace ICSharpCode.Decompiler
} }
} }
bool genericTypeInstantiation = true; bool useObjectCreationOfGenericTypeParameter = true;
/// <summary> /// <summary>
/// Gets/Sets whether to use generic type instantiation for generic types with <c>new()</c> constraint. /// Gets/Sets whether to use object creation expressions for generic types with <c>new()</c> constraint.
/// true: <c>T t = new T();</c> /// true: <c>T t = new T();</c>
/// false: <c>T t = Activator.CreateInstance&lt;T&gt;()</c> /// false: <c>T t = Activator.CreateInstance&lt;T&gt;()</c>
/// </summary> /// </summary>
[Category("C# 2.0 / VS 2005")] [Category("C# 2.0 / VS 2005")]
[Description("DecompilerSettings.GenericTypeInstantiation")] [Description("DecompilerSettings.UseObjectCreationOfGenericTypeParameter")]
public bool GenericTypeInstantiation { public bool UseObjectCreationOfGenericTypeParameter {
get { return genericTypeInstantiation; } get { return useObjectCreationOfGenericTypeParameter; }
set { set {
if (genericTypeInstantiation != value) if (useObjectCreationOfGenericTypeParameter != value)
{ {
genericTypeInstantiation = value; useObjectCreationOfGenericTypeParameter = value;
OnPropertyChanged(); OnPropertyChanged();
} }
} }

3
ICSharpCode.Decompiler/IL/Transforms/ExpressionTransforms.cs

@ -532,7 +532,10 @@ namespace ICSharpCode.Decompiler.IL.Transforms
inst.Condition.AcceptVisitor(this); inst.Condition.AcceptVisitor(this);
if (new NullableLiftingTransform(context).Run(inst)) if (new NullableLiftingTransform(context).Run(inst))
{
context.Step("NullableLiftingTransform", inst);
return; return;
}
if (TransformDynamicAddAssignOrRemoveAssign(inst)) if (TransformDynamicAddAssignOrRemoveAssign(inst))
return; return;

4
ICSharpCode.Decompiler/IL/Transforms/TransformCollectionAndObjectInitializers.cs

@ -76,6 +76,10 @@ namespace ICSharpCode.Decompiler.IL.Transforms
instType = defaultVal.Type; instType = defaultVal.Type;
break; break;
case Call c when c.Method.FullNameIs("System.Activator", "CreateInstance") && c.Method.TypeArguments.Count == 1: 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]; instType = c.Method.TypeArguments[0];
blockKind = BlockKind.ObjectInitializer; blockKind = BlockKind.ObjectInitializer;
break; break;

Loading…
Cancel
Save