diff --git a/ICSharpCode.Decompiler/Ast/AstMethodBodyBuilder.cs b/ICSharpCode.Decompiler/Ast/AstMethodBodyBuilder.cs index 47bbec344..bf60d2b92 100644 --- a/ICSharpCode.Decompiler/Ast/AstMethodBodyBuilder.cs +++ b/ICSharpCode.Decompiler/Ast/AstMethodBodyBuilder.cs @@ -710,11 +710,12 @@ namespace ICSharpCode.Decompiler.Ast for (int i = 1; i < args.Count; i++) { Match m = objectInitializerPattern.Match(args[i]); if (m.Success) { + MemberReferenceExpression mre = m.Get("left").Single(); initializer.Elements.Add( new NamedArgumentExpression { - Identifier = m.Get("left").Single().MemberName, + Identifier = mre.MemberName, Expression = m.Get("right").Single().Detach() - }); + }.CopyAnnotationsFrom(mre)); } else { m = collectionInitializerPattern.Match(args[i]); if (m.Success) { diff --git a/ICSharpCode.Decompiler/DecompilerSettings.cs b/ICSharpCode.Decompiler/DecompilerSettings.cs index b4fd86485..78ccf7e60 100644 --- a/ICSharpCode.Decompiler/DecompilerSettings.cs +++ b/ICSharpCode.Decompiler/DecompilerSettings.cs @@ -179,6 +179,21 @@ namespace ICSharpCode.Decompiler } } + bool objectCollectionInitializers; + + /// + /// Gets/Sets whether to use C# 3.0 object/collection initializers + /// + public bool ObjectOrCollectionInitializers { + get { return objectCollectionInitializers; } + set { + if (objectCollectionInitializers != value) { + objectCollectionInitializers = value; + OnPropertyChanged("ObjectCollectionInitializers"); + } + } + } + public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) diff --git a/ICSharpCode.Decompiler/ILAst/InitializerPeepholeTransforms.cs b/ICSharpCode.Decompiler/ILAst/InitializerPeepholeTransforms.cs index 9853fed92..7c70b5c6f 100644 --- a/ICSharpCode.Decompiler/ILAst/InitializerPeepholeTransforms.cs +++ b/ICSharpCode.Decompiler/ILAst/InitializerPeepholeTransforms.cs @@ -146,6 +146,9 @@ namespace ICSharpCode.Decompiler.ILAst /// bool TransformObjectInitializers(List body, ILExpression expr, int pos) { + if (!context.Settings.ObjectOrCollectionInitializers) + return false; + Debug.Assert(body[pos] == expr); // should be called for top-level expressions only ILVariable v; ILExpression newObjExpr;