diff --git a/ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs b/ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs index 18ab1986cc..4b8b067770 100644 --- a/ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs +++ b/ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs @@ -2008,9 +2008,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver } } - bool parameterizeResultType = k > 0; - if (parameterizeResultType && typeArguments.All(t => t.Kind == TypeKind.UnboundTypeArgument)) - parameterizeResultType = false; + bool parameterizeResultType = !(typeArguments.Count != 0 && typeArguments.All(t => t.Kind == TypeKind.UnboundTypeArgument)); ResolveResult r = null; if (currentTypeDefinition != null) { @@ -2152,7 +2150,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver def = context.GetTypeDefinition(ns.NamespaceName, identifier, k, StringComparer.Ordinal); if (def != null) { if (firstResult == null) { - if (parameterizeResultType) + if (parameterizeResultType && k > 0) firstResult = new ParameterizedType(def, typeArguments); else firstResult = def; @@ -2238,9 +2236,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver { cancellationToken.ThrowIfCancellationRequested(); - bool parameterizeResultType = typeArguments.Count > 0; - if (parameterizeResultType && typeArguments.All(t => t.Kind == TypeKind.UnboundTypeArgument)) - parameterizeResultType = false; + bool parameterizeResultType = !(typeArguments.Count != 0 && typeArguments.All(t => t.Kind == TypeKind.UnboundTypeArgument)); NamespaceResolveResult nrr = target as NamespaceResolveResult; if (nrr != null) { @@ -2260,7 +2256,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver } ITypeDefinition def = context.GetTypeDefinition(nrr.NamespaceName, identifier, typeArguments.Count, StringComparer.Ordinal); if (def != null) { - if (parameterizeResultType) + if (parameterizeResultType && typeArguments.Count > 0) return new TypeResolveResult(new ParameterizedType(def, typeArguments)); else return new TypeResolveResult(def); diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Resolver/MemberLookupTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Resolver/MemberLookupTests.cs index dbb6d111f9..bbadec6685 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/Resolver/MemberLookupTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/Resolver/MemberLookupTests.cs @@ -144,6 +144,49 @@ public class Foo var lrr = Resolve(program); Assert.AreEqual("System.Int32", lrr.Type.FullName); } - + + [Test] + public void TestOuterTemplateParameterInDerivedClass() + { + string program = @"public class A +{ + public class B + { + public T field; + } +} + +public class Foo : A.B +{ + public void Bar () + { + $field$.ToString (); + } +}"; + var lrr = Resolve(program); + Assert.AreEqual("System.Int32", lrr.Type.FullName); + } + + [Test] + public void TestOuterTemplateParameterInDerivedClass2() + { + string program = @"public class A +{ + public class B + { + public T field; + } +} + +public class Foo : A +{ + public void Bar (B v) + { + $v.field$.ToString (); + } +}"; + var lrr = Resolve(program); + Assert.AreEqual("System.Int32", lrr.Type.FullName); + } } }