From dce53cb312aeb013db220b1027a47d5f3d7eff68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Mon, 13 Feb 2012 14:53:09 +0100 Subject: [PATCH] Fixed code completion bug. --- .../Completion/CSharpCompletionEngine.cs | 9 +++- .../CodeCompletion/CodeCompletionBugTests.cs | 53 ++++++++++++++++--- 2 files changed, 53 insertions(+), 9 deletions(-) diff --git a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs index a3b52455ed..f61098ba13 100644 --- a/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs +++ b/ICSharpCode.NRefactory.CSharp/Completion/CSharpCompletionEngine.cs @@ -1816,8 +1816,9 @@ namespace ICSharpCode.NRefactory.CSharp.Completion // Console.WriteLine (currentMember != null ? currentMember.IsStatic : "currentMember == null"); if (resolvedNode.Annotation () == null) { //tags the created expression as part of an object create expression. + var filteredList = new List (); foreach (var member in type.GetMembers ()) { -// Console.WriteLine ("member:" + member); +// Console.WriteLine ("member:" + member + member.IsShadowing); if (!lookup.IsAccessible (member, isProtectedAllowed)) { // Console.WriteLine ("skip access: " + member.FullName); continue; @@ -1841,7 +1842,13 @@ namespace ICSharpCode.NRefactory.CSharp.Completion continue; if (member.EntityType == EntityType.Operator) continue; + if (member.IsShadowing) + filteredList.RemoveAll (m => m.Name == member.Name); + filteredList.Add (member); + } + + foreach (var member in filteredList) { // Console.WriteLine ("add : "+ member.FullName + " --- " + member.IsStatic); result.AddMember (member); } diff --git a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs index 9fd9885d80..2fd5501739 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/CodeCompletion/CodeCompletionBugTests.cs @@ -28,6 +28,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using NUnit.Framework; using ICSharpCode.NRefactory.TypeSystem.Implementation; @@ -1697,23 +1698,59 @@ class A } /// - /// Bug 2793 - op_Equality should not be offered in the completion list + /// Bug 3370 -MD ignores member hiding /// [Test()] - public void Test2793 () + public void TestBug3370 () { CombinedProviderTest ( @" class A { - public static void Main (string[] args) - { - $System.Action.$ - } + $public override $ } ", provider => { - Assert.IsNull (provider.Find ("op_Equality"), "'op_Equality' found."); - Assert.IsNull (provider.Find ("op_Inequality"), "'op_Inequality' found."); + Assert.IsNotNull (provider.Find ("ToString"), "'ToString' not found."); + Assert.IsNull (provider.Find ("Finalize"), "'Finalize' found."); + }); + } + + /// + /// Bug 2793 - op_Equality should not be offered in the completion list + /// + [Test()] + public void Test2793 () + { + CombinedProviderTest ( +@" +using System; + +public class MyClass +{ + public class A + { + public event EventHandler MouseClick; + } + + public class B : A + { + public new event EventHandler MouseClick; + } + + public class C : B + { + public new void MouseClick () + { + } + } + + static public void Main () + { + C myclass = new C (); + $myclass.$ + } +}", provider => { + Assert.AreEqual (1, provider.Data.Where(c => c.DisplayText == "MouseClick").Count ()); }); }