From 5218417fa8eab2486dd1bfec529e8d5543b9d2ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Wed, 14 Dec 2011 11:58:53 +0100 Subject: [PATCH] Improved completion of enums. --- .../Completion/CSharpCompletionEngine.cs | 18 +++++++++++++++++ .../CodeCompletion/CodeCompletionBugTests.cs | 20 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs index 29e2715260..dcecc63840 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs +++ b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs @@ -741,6 +741,24 @@ namespace ICSharpCode.NRefactory.CSharp.Completion AddKeywords (wrapper, primitiveTypesKeywords); wrapper.Result.AddRange (factory.CreateCodeTemplateCompletionData ()); + + if (node.Role == AstNode.Roles.Argument) { + var resolved = ResolveExpression (CSharpParsedFile, node.Parent, Unit); + var invokeResult = resolved != null ? resolved.Item1 as CSharpInvocationResolveResult : null; + if (invokeResult != null) { + int argNum = 0; + foreach (var arg in node.Parent.Children.Where (c => c.Role == AstNode.Roles.Argument)) { + if (arg == node) + break; + argNum++; + } + var param = argNum < invokeResult.Member.Parameters.Count ? invokeResult.Member.Parameters [argNum] : null; + if (param != null && param.Type.Kind == TypeKind.Enum) { + AddEnumMembers (wrapper, param.Type, state); + } + } + } + } static bool IsInSwitchContext (AstNode node) diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs index 0e9a2d14fe..078b63d069 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs @@ -428,7 +428,27 @@ namespace ThisOne { Assert.IsNotNull (provider); Assert.IsNotNull (provider.Find ("Other.TheEnum"), "Other.TheEnum not found."); } + + [Test()] + public void TestInnerEnum () + { + var provider = CreateProvider ( +@"class Other { + public enum TheEnum { One, Two } + public Other (TheEnum e) { } +} + +public class Test { + public void TestMethod () { + $new Other (O$ + } +}"); + Assert.IsNotNull (provider); + Assert.IsNotNull (provider.Find ("Other.TheEnum"), "'Other.TheEnum' not found."); + } + + /// /// Bug 318834 - autocompletion kicks in when inputting decimals ///