From 8ff1e4c5b005d027a6104afc4c90d6c38777fbc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Wed, 2 May 2012 07:33:27 +0200 Subject: [PATCH] Fixed completion bug. --- .../Completion/CSharpCompletionEngine.cs | 12 ++++++--- .../CodeCompletion/CodeCompletionBugTests.cs | 25 +++++++++++++++++++ 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs index 068574349d..c99b7da8ff 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs +++ b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs @@ -2257,7 +2257,13 @@ namespace ICSharpCode.NRefactory.CSharp.Completion //var typeDef = resolveResult.Type.GetDefinition(); var result = new CompletionDataWrapper(this); bool includeStaticMembers = false; + + var lookup = new MemberLookup( + ctx.CurrentTypeDefinition, + Compilation.MainAssembly + ); + if (resolveResult is LocalResolveResult) { if (resolvedNode is IdentifierExpression) { var mrr = (LocalResolveResult)resolveResult; @@ -2266,6 +2272,8 @@ namespace ICSharpCode.NRefactory.CSharp.Completion } if (resolveResult is TypeResolveResult && type.Kind == TypeKind.Enum) { foreach (var field in type.GetFields ()) { + if (!lookup.IsAccessible(field, false)) + continue; result.AddMember(field); } foreach (var m in type.GetMethods ()) { @@ -2276,10 +2284,6 @@ namespace ICSharpCode.NRefactory.CSharp.Completion return result.Result; } - var lookup = new MemberLookup( - ctx.CurrentTypeDefinition, - Compilation.MainAssembly - ); bool isProtectedAllowed = resolveResult is ThisResolveResult ? true : lookup.IsProtectedAccessAllowed(type); bool skipNonStaticMembers = (resolveResult is TypeResolveResult); diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs index 8175576fe7..8e0f412b96 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs @@ -5187,5 +5187,30 @@ public class TestFoo Assert.IsNotNull(provider.Find("String"), "'String'not found."); }); } + + /// + /// Bug 4808 - Enums have an unknown 'split_char' member included in them. + /// + [Test()] + public void TestBug4808() + { + var provider = CreateProvider( +@"using System; + +enum Foo { A, B } +public class TestFoo +{ + void Bar () + { + $Foo.$ + } +} +" + ); + Assert.IsNotNull(provider.Find("A")); + Assert.IsNotNull(provider.Find("B")); + Assert.IsNull(provider.Find("split_char"), "'split_char' found."); + } + } }