Browse Source

Fixed bug in inner type result.

newNRvisualizers
Mike Krüger 14 years ago
parent
commit
dd4f73b314
  1. 25
      ICSharpCode.NRefactory.Tests/CSharp/Resolver/NameLookupTests.cs
  2. 4
      ICSharpCode.NRefactory/CSharp/Resolver/MemberLookup.cs

25
ICSharpCode.NRefactory.Tests/CSharp/Resolver/NameLookupTests.cs

@ -461,6 +461,31 @@ namespace A.B { @@ -461,6 +461,31 @@ namespace A.B {
Assert.AreEqual("A.B.C", trr.Type.FullName);
}
[Test]
public void InnerTypeResolve ()
{
string program = @"public class C<T> { public class Inner { } }
class TestClass {
void Test() {
$C<string>.Inner$ a;
}
}
";
TypeResolveResult trr = Resolve<TypeResolveResult>(program);
Assert.AreEqual("C.Inner", trr.Type.FullName);
program = @"public class C<T> { public class D<S,U> { public class Inner { } }}
class TestClass {
void Test() {
$C<string>.D<int,TestClass>.Inner$ a;
}
}
";
trr = Resolve<TypeResolveResult>(program);
Assert.AreEqual("C.D.Inner", trr.Type.FullName);
}
[Test, Ignore("parser is broken and produces IdentifierExpression instead of PrimitiveType")]
public void ShortMaxValueTest()
{

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

@ -166,7 +166,9 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -166,7 +166,9 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
if (!isInvocation) {
// Consider nested types only if it's not an invocation. The type parameter count must match in this case.
Predicate<ITypeDefinition> typeFilter = delegate (ITypeDefinition d) {
return d.TypeParameterCount == typeArgumentCount && d.Name == name && IsAccessible(d, true);
// inner types contain the type parameters of outer types. therefore this count has to been adjusted.
int correctedCount = d.TypeParameterCount - type.TypeParameterCount;
return correctedCount == typeArgumentCount && d.Name == name && IsAccessible(d, true);
};
types.AddRange(type.GetNestedTypes(context, typeFilter));
}

Loading…
Cancel
Save