From e00a9b869619d1b6559c1944eedec1bc736c3315 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20Kr=C3=BCger?= Date: Wed, 23 Jan 2013 09:42:13 +0100 Subject: [PATCH] Fixed member lookup bug. --- .../Resolver/MemberLookup.cs | 5 +- .../CSharp/Resolver/MemberLookupTests.cs | 53 +++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/ICSharpCode.NRefactory.CSharp/Resolver/MemberLookup.cs b/ICSharpCode.NRefactory.CSharp/Resolver/MemberLookup.cs index ead362d155..c1d5a9e432 100644 --- a/ICSharpCode.NRefactory.CSharp/Resolver/MemberLookup.cs +++ b/ICSharpCode.NRefactory.CSharp/Resolver/MemberLookup.cs @@ -337,7 +337,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver return entity.Name == name && IsAccessible(entity, allowProtectedAccess); }; Predicate memberFilter = delegate(IUnresolvedMember entity) { - return entity.Name == name; + // NOTE: Atm destructors can be looked up with 'Finalize' + return entity.EntityType != EntityType.Indexer && + entity.EntityType != EntityType.Operator && + entity.Name == name; }; List lookupGroups = new List(); diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Resolver/MemberLookupTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Resolver/MemberLookupTests.cs index dc3159fae9..07050b6507 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/Resolver/MemberLookupTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/Resolver/MemberLookupTests.cs @@ -489,5 +489,58 @@ class C : B { var trr = Resolve(program); Assert.AreEqual("B+F", trr.Type.ReflectionName); } + + /// + /// Bug 9604 - Completion problem with indexers + /// + [Test] + public void TestBug9604() + { + string program = @"class Item +{ + public static int Foo = 42; + + public class Builder + { + public int Foo + { + get { return $Item.Foo$; } + } + + public object this[int field, int i] + { + get { return null; } + } + } +} +"; + var result = Resolve(program); + Assert.AreEqual("Item.Foo", result.Member.FullName); + } + + [Test] + public void Test9604OperatorCase() + { + string program = @"class op_Addition +{ + public static int Foo = 42; + + public class Builder + { + public int Foo + { + get { return $op_Addition.Foo$; } + } + + public static int operator + (Builder a, Builder b) + { + return 0; + } + } +} +"; + var result = Resolve(program); + Assert.AreEqual("op_Addition.Foo", result.Member.FullName); + } } }