Browse Source

Fixed bug in 'BetterConversion' implementation - converting to Func<> delegates is better than converting to Action<> delegates.

newNRvisualizers
Daniel Grunwald 14 years ago
parent
commit
e5217c2c13
  1. 4
      ICSharpCode.NRefactory.CSharp/Resolver/Conversions.cs
  2. 5
      ICSharpCode.NRefactory.ConsistencyCheck/Program.cs
  3. 3
      ICSharpCode.NRefactory.ConsistencyCheck/RandomizedOrderResolverTest.cs
  4. 14
      ICSharpCode.NRefactory.Tests/CSharp/Resolver/LambdaTests.cs

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

@ -849,9 +849,9 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver @@ -849,9 +849,9 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver
IType ret1 = m1.ReturnType;
IType ret2 = m2.ReturnType;
if (ret1.Kind == TypeKind.Void && ret2.Kind != TypeKind.Void)
return 1;
if (ret1.Kind != TypeKind.Void && ret2.Kind == TypeKind.Void)
return 2;
if (ret1.Kind != TypeKind.Void && ret2.Kind == TypeKind.Void)
return 1;
IType inferredRet = lambda.GetInferredReturnType(parameterTypes);
r = BetterConversion(inferredRet, ret1, ret2);

5
ICSharpCode.NRefactory.ConsistencyCheck/Program.cs

@ -30,14 +30,15 @@ namespace ICSharpCode.NRefactory.ConsistencyCheck @@ -30,14 +30,15 @@ namespace ICSharpCode.NRefactory.ConsistencyCheck
{
public static readonly string[] AssemblySearchPaths = {
@"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0",
@"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5",
@"C:\Windows\Microsoft.NET\Framework\v2.0.50727",
@"C:\Program Files (x86)\GtkSharp\2.12\lib\gtk-sharp-2.0",
@"C:\Program Files (x86)\GtkSharp\2.12\lib\Mono.Posix",
@"C:\work\SD\src\Tools\NUnit"
};
//public const string SolutionFile = @"C:\work\NRefactory\NRefactory.sln";
//public const string SolutionFile = @"C:\work\SD\SharpDevelop.sln";
public const string SolutionFile = @"C:\work\ILSpy\ILSpy.sln";
public const string SolutionFile = @"C:\work\SD\SharpDevelop.sln";
//public const string SolutionFile = @"C:\work\ILSpy\ILSpy.sln";
public const string TempPath = @"C:\temp";

3
ICSharpCode.NRefactory.ConsistencyCheck/RandomizedOrderResolverTest.cs

@ -19,6 +19,7 @@ @@ -19,6 +19,7 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Threading;
@ -155,7 +156,7 @@ namespace ICSharpCode.NRefactory.ConsistencyCheck @@ -155,7 +156,7 @@ namespace ICSharpCode.NRefactory.ConsistencyCheck
var l2 = (MethodListWithDeclaringType)val2;
return object.Equals(l1.DeclaringType, l2.DeclaringType)
&& Compare(l1, l2, type.BaseType);
} else if (type.IsArray || type.IsGenericType && (type.GetGenericTypeDefinition() == typeof(List<>) || type.GetGenericTypeDefinition() == typeof(IList<>) || type.GetGenericTypeDefinition() == typeof(ICollection<>) || type.GetGenericTypeDefinition() == typeof(IEnumerable<>))) {
} else if (type.IsArray || type.IsGenericType && (type.GetGenericTypeDefinition() == typeof(List<>) || type.GetGenericTypeDefinition() == typeof(ReadOnlyCollection<>) || type.GetGenericTypeDefinition() == typeof(IList<>) || type.GetGenericTypeDefinition() == typeof(ICollection<>) || type.GetGenericTypeDefinition() == typeof(IEnumerable<>))) {
Type elementType = type.IsArray ? type.GetElementType() : type.GetGenericArguments()[0];
object[] arr1 = ((IEnumerable)val1).Cast<object>().ToArray();
object[] arr2 = ((IEnumerable)val2).Cast<object>().ToArray();

14
ICSharpCode.NRefactory.Tests/CSharp/Resolver/LambdaTests.cs

@ -546,5 +546,19 @@ class Test { @@ -546,5 +546,19 @@ class Test {
var invoke = rr.Member.Parameters.Single().Type.GetDelegateInvokeMethod();
Assert.AreEqual("System.Int32", invoke.Parameters.Single().Type.ReflectionName);
}
[Test]
public void StartNewTask()
{
string program = @"using System;
class Test {
int Calculate() {}
static void Main() {
$System.Threading.Tasks.Task.Factory.StartNew(() => Calculate())$;
}}";
var rr = Resolve<CSharpInvocationResolveResult>(program);
Assert.IsFalse(rr.IsError);
Assert.AreEqual("System.Threading.Tasks.Task`1[[System.Int32]]", rr.Type.ReflectionName);
}
}
}

Loading…
Cancel
Save