Browse Source

[CodeAction] Convert lambda to delegate action no longer puts a

redundant () in the anonymous delegate.
newNRvisualizers
Mike Krüger 13 years ago
parent
commit
1b41ee02ca
  1. 1
      ICSharpCode.NRefactory.CSharp/Ast/Expressions/AnonymousMethodExpression.cs
  2. 7
      ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/ConvertLambdaToAnonymousDelegateAction.cs
  3. 22
      ICSharpCode.NRefactory.Tests/CSharp/CodeActions/ConvertLamdaToAnonymousDelegateTests.cs

1
ICSharpCode.NRefactory.CSharp/Ast/Expressions/AnonymousMethodExpression.cs

@ -80,6 +80,7 @@ namespace ICSharpCode.NRefactory.CSharp
public AnonymousMethodExpression (BlockStatement body, IEnumerable<ParameterDeclaration> parameters = null) public AnonymousMethodExpression (BlockStatement body, IEnumerable<ParameterDeclaration> parameters = null)
{ {
if (parameters != null) { if (parameters != null) {
hasParameterList = true;
foreach (var parameter in parameters) { foreach (var parameter in parameters) {
AddChild (parameter, Roles.Parameter); AddChild (parameter, Roles.Parameter);
} }

7
ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/ConvertLambdaToAnonymousDelegateAction.cs

@ -56,7 +56,6 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
}; };
} }
var method = new AnonymousMethodExpression (newBody, GetParameters(lambdaResolveResult.Parameters, context)); var method = new AnonymousMethodExpression (newBody, GetParameters(lambdaResolveResult.Parameters, context));
method.HasParameterList = true;
script.Replace(node, method); script.Replace(node, method);
}); });
} }
@ -64,6 +63,9 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
IEnumerable<ParameterDeclaration> GetParameters(IList<IParameter> parameters, RefactoringContext context) IEnumerable<ParameterDeclaration> GetParameters(IList<IParameter> parameters, RefactoringContext context)
{ {
if (parameters == null || parameters.Count == 0)
return null;
var result = new List<ParameterDeclaration> ();
foreach (var parameter in parameters) { foreach (var parameter in parameters) {
var type = context.CreateShortType(parameter.Type); var type = context.CreateShortType(parameter.Type);
var name = parameter.Name; var name = parameter.Name;
@ -72,8 +74,9 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring
modifier |= ParameterModifier.Ref; modifier |= ParameterModifier.Ref;
if (parameter.IsOut) if (parameter.IsOut)
modifier |= ParameterModifier.Out; modifier |= ParameterModifier.Out;
yield return new ParameterDeclaration(type, name, modifier); result.Add (new ParameterDeclaration(type, name, modifier));
} }
return result;
} }
} }
} }

22
ICSharpCode.NRefactory.Tests/CSharp/CodeActions/ConvertLamdaToAnonymousDelegateTests.cs

@ -72,6 +72,28 @@ class A
System.Console.WriteLine (i1); System.Console.WriteLine (i1);
}; };
} }
}");
}
[Test]
public void ParameterLessLambdaTest ()
{
Test<ConvertLambdaToAnonymousDelegateAction>(@"
class A
{
void F ()
{
System.Action = ()$ => { System.Console.WriteLine (); };
}
}", @"
class A
{
void F ()
{
System.Action = delegate {
System.Console.WriteLine ();
};
}
}"); }");
} }
} }

Loading…
Cancel
Save