diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs index 3a8e052827..ccd760e30f 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs +++ b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs @@ -472,6 +472,30 @@ namespace ICSharpCode.NRefactory.CSharp.Completion return null; } } + if (n != null && n.Parent is InvocationExpression) { + var invokeResult = ResolveExpression (identifierStart.Item1, ((InvocationExpression)n.Parent).Target, identifierStart.Item3); + var mgr = invokeResult != null ? invokeResult.Item1 as MethodGroupResolveResult : null; + if (mgr != null) { + foreach (var method in mgr.Methods) { + foreach (var p in method.Parameters) { + contextList.AddVariable (p); + } + } + } + } + + if (n != null && n.Parent is ObjectCreateExpression) { + var invokeResult = ResolveExpression (identifierStart.Item1, n.Parent, identifierStart.Item3); + var mgr = invokeResult != null ? invokeResult.Item1 as ResolveResult : null; + + if (mgr != null) { + foreach (var constructor in mgr.Type.GetConstructors ()) { + foreach (var p in constructor.Parameters) { + contextList.AddVariable (p); + } + } + } + } if (n is Identifier && n.Parent is ForeachStatement) { if (controlSpace) diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs index 0c73efc007..5349523302 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs @@ -4054,5 +4054,47 @@ namespace Test }"); Assert.IsTrue (provider == null || provider.Count == 0, "provider should be empty."); } + + [Test()] + public void TestNamedParameters () + { + CombinedProviderTest ( +@"class MyClass { + string Bar { get; set; } + + void MethodOne(string foo="""", string bar="""") + { + } + + void MethodTwo() { + $MethodOne(b$ + } +}", provider => { + Assert.IsNotNull (provider.Find ("bar"), "'bar' not found."); + Assert.IsNotNull (provider.Find ("foo"), "'foo' not found."); + }); + } + + [Test()] + public void TestNamedParametersConstructorCase () + { + CombinedProviderTest ( +@"class MyClass { + MyClass(string foo="""", string bar="""") + { + } + + void MethodTwo() { + $new MyClass(b$ + } +}", provider => { + Assert.IsNotNull (provider.Find ("bar"), "'bar' not found."); + Assert.IsNotNull (provider.Find ("foo"), "'foo' not found."); + }); + } + + + + } }