From e397b87c6bd11339a55818565a6729afd81dd42d Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 21 Feb 2009 17:27:20 +0000 Subject: [PATCH] Fixed bug in "Find references": MemberLookupHelper.IsSimilarMember could return true when comparing a field with a local variable. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/branches/3.0@3818 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- src/Main/Base/Test/MemberLookupHelperTests.cs | 17 +++++++++++++---- .../Project/Src/MemberLookupHelper.cs | 10 ++++++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/Main/Base/Test/MemberLookupHelperTests.cs b/src/Main/Base/Test/MemberLookupHelperTests.cs index 9715bfc627..6404b27b2a 100644 --- a/src/Main/Base/Test/MemberLookupHelperTests.cs +++ b/src/Main/Base/Test/MemberLookupHelperTests.cs @@ -20,6 +20,7 @@ namespace ICSharpCode.SharpDevelop.Tests { IProjectContent msc; // = ProjectContentRegistry.Mscorlib; IProjectContent swf; // = ProjectContentRegistry.GetProjectContentForReference("System.Windows.Forms", "System.Windows.Forms"); + DefaultClass dummyClass; IMethod methodForGenericCalls; [TestFixtureSetUp] @@ -32,10 +33,10 @@ namespace ICSharpCode.SharpDevelop.Tests DefaultProjectContent dpc = new DefaultProjectContent(); dpc.ReferencedContents.Add(msc); DefaultCompilationUnit cu = new DefaultCompilationUnit(dpc); - DefaultClass c = new DefaultClass(cu, "DummyClass"); - cu.Classes.Add(c); - methodForGenericCalls = new DefaultMethod(c, "DummyMethod"); - c.Methods.Add(methodForGenericCalls); + dummyClass = new DefaultClass(cu, "DummyClass"); + cu.Classes.Add(dummyClass); + methodForGenericCalls = new DefaultMethod(dummyClass, "DummyMethod"); + dummyClass.Methods.Add(methodForGenericCalls); } IReturnType DictionaryRT { @@ -428,5 +429,13 @@ namespace ICSharpCode.SharpDevelop.Tests Assert.AreEqual(1, properties.Where(m=>m.Name=="CanRaiseEvents").Count()); Assert.AreEqual(1, methods.Where(m=>m.Name=="AdjustFormScrollbars").Count()); } + + [Test] + public void LocalVariableAndFieldAreNotSimilarMembers() + { + IField field = new DefaultField(dummyClass.DefaultReturnType, "Test", ModifierEnum.None, DomRegion.Empty, dummyClass); + IField local = new DefaultField.LocalVariableField(dummyClass.DefaultReturnType, "Test", DomRegion.Empty, dummyClass); + Assert.IsFalse(MemberLookupHelper.IsSimilarMember(local, field)); + } } } diff --git a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/MemberLookupHelper.cs b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/MemberLookupHelper.cs index 9a1b36ad41..f58edd1163 100644 --- a/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/MemberLookupHelper.cs +++ b/src/Main/ICSharpCode.SharpDevelop.Dom/Project/Src/MemberLookupHelper.cs @@ -808,6 +808,16 @@ namespace ICSharpCode.SharpDevelop.Dom return false; } } + IField f1 = member1 as IField; + IField f2 = member2 as IField; + if (f1 != null || f2 != null) { + if (f1 != null && f2 != null) { + if (f1.IsLocalVariable != f2.IsLocalVariable || f1.IsParameter != f2.IsParameter) + return false; + } else { + return false; + } + } return true; }