From 08636dbabcb0dbc0d5215cd848d0f692a7ed9451 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Thu, 21 Jun 2012 10:54:23 +0200 Subject: [PATCH] [Completion] Fixed named argument completion bug. --- .../Completion/CSharpCompletionEngine.cs | 18 +++++++++++++---- .../CodeCompletion/CodeCompletionBugTests.cs | 20 ++++++++++++++++++- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs index d0a15a05f4..3aab57bea7 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs +++ b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs @@ -1249,13 +1249,12 @@ namespace ICSharpCode.NRefactory.CSharp.Completion AddKeywords(wrapper, parameterTypePredecessorKeywords); } } - AddKeywords(wrapper, primitiveTypesKeywords); - if (currentMember != null) { + if (currentMember != null && (node is IdentifierExpression || node is SimpleType) && (node.Parent is ExpressionStatement || node.Parent is ForeachStatement || node.Parent is UsingStatement)) { wrapper.AddCustom("var"); + wrapper.AddCustom("dynamic"); } wrapper.Result.AddRange(factory.CreateCodeTemplateCompletionData()); - if (node != null && node.Role == Roles.Argument) { var resolved = ResolveExpression(node.Parent); var invokeResult = resolved != null ? resolved.Item1 as CSharpInvocationResolveResult : null; @@ -2213,6 +2212,17 @@ namespace ICSharpCode.NRefactory.CSharp.Completion ); } } + + foreach (var method in resolveResult.Methods) { + if (parameter < method.Parameters.Count && method.Parameters [parameter].Type.Kind == TypeKind.Delegate) { + AutoSelect = false; + AutoCompleteEmptyMatch = false; + } + foreach (var p in method.Parameters) { + result.AddNamedParameterVariable(p); + } + } + if (!controlSpace) { if (addedEnums.Count + addedDelegates.Count == 0) { return Enumerable.Empty(); @@ -3034,7 +3044,7 @@ namespace ICSharpCode.NRefactory.CSharp.Completion "true", "false", "typeof", "checked", "unchecked", "from", "break", "checked", "unchecked", "const", "continue", "do", "finally", "fixed", "for", "foreach", "goto", "if", "lock", "return", "stackalloc", "switch", "throw", "try", "unsafe", - "using", "while", "yield", "dynamic", "var", "dynamic", + "using", "while", "yield", "catch" }; static string[] globalLevelKeywords = new string [] { diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs index 80cae089e7..a180ae9ca5 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs @@ -4386,7 +4386,25 @@ namespace Test Assert.IsNotNull (provider.Find ("foo:"), "'foo:' not found."); }); } - + [Test()] + public void TestNamedParameters2 () + { + var provider = CreateCtrlSpaceProvider ( +@"class MyClass { + string Bar { get; set; } + + void MethodOne(string foo="""", string bar="""") + { + } + + void MethodTwo() { + MethodOne($$); + } +}"); + Assert.IsNotNull (provider.Find ("bar:"), "'bar:' not found."); + Assert.IsNotNull (provider.Find ("foo:"), "'foo:' not found."); + } + [Test()] public void TestNamedParametersConstructorCase () {