Browse Source

Use hyperlinks for the named arguments in object initializers.

pull/144/head
Daniel Grunwald 14 years ago
parent
commit
7c9013736e
  1. 5
      ICSharpCode.Decompiler/Ast/AstMethodBodyBuilder.cs
  2. 15
      ICSharpCode.Decompiler/DecompilerSettings.cs
  3. 3
      ICSharpCode.Decompiler/ILAst/InitializerPeepholeTransforms.cs

5
ICSharpCode.Decompiler/Ast/AstMethodBodyBuilder.cs

@ -710,11 +710,12 @@ namespace ICSharpCode.Decompiler.Ast
for (int i = 1; i < args.Count; i++) { for (int i = 1; i < args.Count; i++) {
Match m = objectInitializerPattern.Match(args[i]); Match m = objectInitializerPattern.Match(args[i]);
if (m.Success) { if (m.Success) {
MemberReferenceExpression mre = m.Get<MemberReferenceExpression>("left").Single();
initializer.Elements.Add( initializer.Elements.Add(
new NamedArgumentExpression { new NamedArgumentExpression {
Identifier = m.Get<MemberReferenceExpression>("left").Single().MemberName, Identifier = mre.MemberName,
Expression = m.Get<Expression>("right").Single().Detach() Expression = m.Get<Expression>("right").Single().Detach()
}); }.CopyAnnotationsFrom(mre));
} else { } else {
m = collectionInitializerPattern.Match(args[i]); m = collectionInitializerPattern.Match(args[i]);
if (m.Success) { if (m.Success) {

15
ICSharpCode.Decompiler/DecompilerSettings.cs

@ -179,6 +179,21 @@ namespace ICSharpCode.Decompiler
} }
} }
bool objectCollectionInitializers;
/// <summary>
/// Gets/Sets whether to use C# 3.0 object/collection initializers
/// </summary>
public bool ObjectOrCollectionInitializers {
get { return objectCollectionInitializers; }
set {
if (objectCollectionInitializers != value) {
objectCollectionInitializers = value;
OnPropertyChanged("ObjectCollectionInitializers");
}
}
}
public event PropertyChangedEventHandler PropertyChanged; public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName) protected virtual void OnPropertyChanged(string propertyName)

3
ICSharpCode.Decompiler/ILAst/InitializerPeepholeTransforms.cs

@ -146,6 +146,9 @@ namespace ICSharpCode.Decompiler.ILAst
/// </summary> /// </summary>
bool TransformObjectInitializers(List<ILNode> body, ILExpression expr, int pos) bool TransformObjectInitializers(List<ILNode> body, ILExpression expr, int pos)
{ {
if (!context.Settings.ObjectOrCollectionInitializers)
return false;
Debug.Assert(body[pos] == expr); // should be called for top-level expressions only Debug.Assert(body[pos] == expr); // should be called for top-level expressions only
ILVariable v; ILVariable v;
ILExpression newObjExpr; ILExpression newObjExpr;

Loading…
Cancel
Save