Browse Source

Revert "Fixed type parameter substitution bug."

The old behaviour was correct.

This reverts commit c43a501ec4.
pull/32/merge
Mike Krüger 13 years ago
parent
commit
8ca2d99ebc
  1. 21
      ICSharpCode.NRefactory.Tests/CSharp/Resolver/MemberLookupTests.cs
  2. 4
      ICSharpCode.NRefactory/TypeSystem/Implementation/TypeParameterSubstitution.cs

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

@ -542,26 +542,5 @@ class C : B {
var result = Resolve<MemberResolveResult>(program); var result = Resolve<MemberResolveResult>(program);
Assert.AreEqual("op_Addition.Foo", result.Member.FullName); Assert.AreEqual("op_Addition.Foo", result.Member.FullName);
} }
/// <summary>
/// Bug 10201 - Wrong generics expansion for base recursive types
/// </summary>
[Test]
public void TestBug10201()
{
string program = @"public interface IA<T>
{
}
public class G<U, V> : IA<$G<V, string>$>
{}
";
var rr = Resolve<TypeResolveResult>(program);
var baseType = rr.Type.DirectBaseTypes.First().TypeArguments.First () as ParameterizedType;
Assert.AreEqual("G", baseType.Name);
Assert.AreEqual(2, baseType.TypeParameterCount);
Assert.AreEqual(TypeKind.TypeParameter, baseType.TypeArguments [0].Kind);
Assert.AreEqual("System.String", baseType.TypeArguments [1].FullName);
}
} }
} }

4
ICSharpCode.NRefactory/TypeSystem/Implementation/TypeParameterSubstitution.cs

@ -148,11 +148,7 @@ namespace ICSharpCode.NRefactory.TypeSystem.Implementation
public override IType VisitTypeParameter(ITypeParameter type) public override IType VisitTypeParameter(ITypeParameter type)
{ {
int index = type.Index; int index = type.Index;
if (classTypeArguments != null && type.OwnerType == EntityType.TypeDefinition) { if (classTypeArguments != null && type.OwnerType == EntityType.TypeDefinition) {
// Don't substitute type parameters that are part of the type arguments.
if (classTypeArguments.Contains (type))
return type;
if (index >= 0 && index < classTypeArguments.Count) if (index >= 0 && index < classTypeArguments.Count)
return classTypeArguments[index]; return classTypeArguments[index];
else else

Loading…
Cancel
Save