From 05f8cfeb8194fc522317c3a1e358d96016f382ab Mon Sep 17 00:00:00 2001 From: Simon Lindgren Date: Mon, 11 Jun 2012 00:35:17 +0200 Subject: [PATCH] [CodeActions] Don't return a convert to extension method call code action if the call is already using extension method syntax. --- ...cationToExtensionMethodInvocationAction.cs | 2 +- ...ocationToExtensionMethodInvocationTests.cs | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/StaticMethodInvocationToExtensionMethodInvocationAction.cs b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/StaticMethodInvocationToExtensionMethodInvocationAction.cs index f5313122ff..5f06c577f4 100644 --- a/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/StaticMethodInvocationToExtensionMethodInvocationAction.cs +++ b/ICSharpCode.NRefactory.CSharp/Refactoring/CodeActions/StaticMethodInvocationToExtensionMethodInvocationAction.cs @@ -52,7 +52,7 @@ namespace ICSharpCode.NRefactory.CSharp.Refactoring if (invocationRR == null) yield break; var method = invocationRR.Member as IMethod; - if (method == null || !method.IsExtensionMethod) + if (method == null || !method.IsExtensionMethod || invocationRR.IsExtensionMethodInvocation) yield break; yield return new CodeAction(context.TranslateString("Convert to extension method call"), script => { var newArgumentList = invocation.Arguments.Skip(1).Select(arg => arg.Clone()).ToList(); diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeActions/StaticMethodInvocationToExtensionMethodInvocationTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeActions/StaticMethodInvocationToExtensionMethodInvocationTests.cs index c1bb1817a7..57d5212146 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeActions/StaticMethodInvocationToExtensionMethodInvocationTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeActions/StaticMethodInvocationToExtensionMethodInvocationTests.cs @@ -136,6 +136,25 @@ class C }"); } + [Test] + public void IgnoresIfAlreadyExtensionMethodCallSyntax() + { + TestWrongContext(@" +class A { } +static class B +{ + public static void Ext (this A a, int i); +} +class C +{ + void F() + { + A a = new A(); + a.$Ext (1); + } +}"); + } + [Test] public void IgnoresPropertyInvocation() {