Browse Source

Fixed member lookup bug.

pull/32/merge
Mike Krüger 13 years ago
parent
commit
e00a9b8696
  1. 5
      ICSharpCode.NRefactory.CSharp/Resolver/MemberLookup.cs
  2. 53
      ICSharpCode.NRefactory.Tests/CSharp/Resolver/MemberLookupTests.cs

5
ICSharpCode.NRefactory.CSharp/Resolver/MemberLookup.cs

@ -337,7 +337,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -337,7 +337,10 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
return entity.Name == name && IsAccessible(entity, allowProtectedAccess);
};
Predicate<IUnresolvedMember> 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<LookupGroup> lookupGroups = new List<LookupGroup>();

53
ICSharpCode.NRefactory.Tests/CSharp/Resolver/MemberLookupTests.cs

@ -489,5 +489,58 @@ class C : B { @@ -489,5 +489,58 @@ class C : B {
var trr = Resolve<TypeResolveResult>(program);
Assert.AreEqual("B+F", trr.Type.ReflectionName);
}
/// <summary>
/// Bug 9604 - Completion problem with indexers
/// </summary>
[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<MemberResolveResult>(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<MemberResolveResult>(program);
Assert.AreEqual("op_Addition.Foo", result.Member.FullName);
}
}
}

Loading…
Cancel
Save