Browse Source

[Resolver] Fixed type inference use case.

Daniel: The fix may not be correct - it's hard to tell which side
effects that change will cause.
newNRvisualizers
Mike Krüger 13 years ago
parent
commit
58c4ec8010
  1. 2
      ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs
  2. 30
      ICSharpCode.NRefactory.Tests/CSharp/Resolver/LocalTypeInferenceTests.cs

2
ICSharpCode.NRefactory.CSharp/Resolver/CSharpResolver.cs

@ -1755,7 +1755,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -1755,7 +1755,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
if (method.TypeParameters.Count != typeArguments.Count)
continue;
SpecializedMethod sm = new SpecializedMethod(method, new TypeParameterSubstitution(null, typeArguments));
if (IsEligibleExtensionMethod(compilation, conversions, targetType, method, false, out inferredTypes))
if (IsEligibleExtensionMethod(compilation, conversions, targetType, method, true, out inferredTypes))
outputGroup.Add(sm);
} else {
if (IsEligibleExtensionMethod(compilation, conversions, targetType, method, true, out inferredTypes)) {

30
ICSharpCode.NRefactory.Tests/CSharp/Resolver/LocalTypeInferenceTests.cs

@ -210,5 +210,35 @@ static class ExtMethods { @@ -210,5 +210,35 @@ static class ExtMethods {
var rr = Resolve<TypeResolveResult>(program);
Assert.AreEqual("System.Int32", rr.Type.ReflectionName);
}
[Test]
public void InfertypeFromOverwrittenMethodArguments()
{
string program = @"using System.Collections.Generic;
using System.Linq;
public class A
{
}
public class B : A
{
}
class Program
{
static void Main(string[] args)
{
IEnumerable<B> list = new List<B>();
var arr = list.ToArray<A>();
$arr$.ToString();
}
}
";
var lrr = Resolve<LocalResolveResult>(program);
Assert.AreEqual("A[]", lrr.Type.FullName);
}
}
}

Loading…
Cancel
Save