diff --git a/ICSharpCode.NRefactory.CSharp/QueryExpressionExpander.cs b/ICSharpCode.NRefactory.CSharp/QueryExpressionExpander.cs index 1b679b935f..35902a21a2 100644 --- a/ICSharpCode.NRefactory.CSharp/QueryExpressionExpander.cs +++ b/ICSharpCode.NRefactory.CSharp/QueryExpressionExpander.cs @@ -297,7 +297,7 @@ namespace ICSharpCode.NRefactory.CSharp { if (currentTransparentType.Count > 1) return false; var unpacked = ParenthesizedExpression.UnpackParenthesizedExpression(expr); - return expr is IdentifierExpression && ((IdentifierExpression)expr).Identifier == currentTransparentType[0].Item1.Name; + return unpacked is IdentifierExpression && ((IdentifierExpression)unpacked).Identifier == currentTransparentType[0].Item1.Name; } public override AstNode VisitQuerySelectClause(QuerySelectClause querySelectClause) { diff --git a/ICSharpCode.NRefactory.Tests/CSharp/QueryExpressionExpanderTests.cs b/ICSharpCode.NRefactory.Tests/CSharp/QueryExpressionExpanderTests.cs index b799579704..641b9a69cf 100644 --- a/ICSharpCode.NRefactory.Tests/CSharp/QueryExpressionExpanderTests.cs +++ b/ICSharpCode.NRefactory.Tests/CSharp/QueryExpressionExpanderTests.cs @@ -392,6 +392,22 @@ namespace ICSharpCode.NRefactory.CSharp { }); } + [Test] + public void TrivialSelectIsEliminatedAfterWhereEvenWhenParenthesized() { + var node = ParseUtilCSharp.ParseExpression("from i in arr1 where i > 5 select (i)"); + var actual = new QueryExpressionExpander().ExpandQueryExpressions(node); + AssertCorrect(actual.AstNode, "arr1.Where(i => i > 5)"); + dynamic astNode = actual.AstNode; + AssertLookupCorrect(actual.RangeVariables, new[] { + Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Arguments, 0).Parameters, 0)), + }); + AssertLookupCorrect(actual.Expressions, new[] { + Tuple.Create(new TextLocation(1, 1), (AstNode)astNode.Target.Target), + Tuple.Create(new TextLocation(1, 22), (AstNode)astNode), + Tuple.Create(new TextLocation(1, 28), (AstNode)astNode), + }); + } + [Test] public void TrivialSelectIsNotEliminatingWhenTheOnlyOperation() { var node = ParseUtilCSharp.ParseExpression("from i in arr1 select i");