From 79b8b00d291dfb685a84e596ffbff7e07a097d8a Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Mon, 13 Feb 2012 17:26:33 +0100 Subject: [PATCH] Fix bug in output type inference for explicitly typed lambdas. --- .../Resolver/TypeInference.cs | 2 +- .../CSharp/Resolver/LambdaTests.cs | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/ICSharpCode.NRefactory.CSharp/Resolver/TypeInference.cs b/ICSharpCode.NRefactory.CSharp/Resolver/TypeInference.cs index 4fe3359515..9d7ca54225 100644 --- a/ICSharpCode.NRefactory.CSharp/Resolver/TypeInference.cs +++ b/ICSharpCode.NRefactory.CSharp/Resolver/TypeInference.cs @@ -372,7 +372,7 @@ namespace ICSharpCode.NRefactory.CSharp.Resolver { // C# 4.0 spec: ยง7.5.2.4 Output types LambdaResolveResult lrr = e as LambdaResolveResult; - if (lrr != null && lrr.IsImplicitlyTyped || e is MethodGroupResolveResult) { + if (lrr != null || e is MethodGroupResolveResult) { IMethod m = GetDelegateOrExpressionTreeSignature(t); if (m != null) { return new[] { m.ReturnType }; diff --git a/ICSharpCode.NRefactory.Tests/CSharp/Resolver/LambdaTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/Resolver/LambdaTests.cs index 7e54b8c730..aa80fc4977 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/Resolver/LambdaTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/Resolver/LambdaTests.cs @@ -17,6 +17,7 @@ // DEALINGS IN THE SOFTWARE. using System; +using System.Linq; using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.TypeSystem.Implementation; using NUnit.Framework; @@ -420,6 +421,24 @@ class TestClass { Assert.IsTrue(c.IsValid); } + [Test] + public void RaisePropertyChanged_WithExpressionLambda() + { + string program = @"using System; +using System.Linq.Expressions; +class Test { + void RaisePropertyChanged(Expression> propertyExpression) {} + void RaisePropertyChanged(string propertyName) {} + string MyProperty { get {} } + void Test() { + $RaisePropertyChanged(() => MyProperty)$; + } +}"; + var rr = Resolve(program); + Assert.IsFalse(rr.IsError); + Assert.AreEqual("propertyExpression", rr.Member.Parameters.Single().Name); + } + /* TODO write test for this class A {