Browse Source

Statements ending in select (i) now acts as if the statement was not parenthesized.

newNRvisualizers
Erik Källén 14 years ago
parent
commit
7ece3ce722
  1. 2
      ICSharpCode.NRefactory.CSharp/QueryExpressionExpander.cs
  2. 16
      ICSharpCode.NRefactory.Tests/CSharp/QueryExpressionExpanderTests.cs

2
ICSharpCode.NRefactory.CSharp/QueryExpressionExpander.cs

@ -297,7 +297,7 @@ namespace ICSharpCode.NRefactory.CSharp {
if (currentTransparentType.Count > 1) if (currentTransparentType.Count > 1)
return false; return false;
var unpacked = ParenthesizedExpression.UnpackParenthesizedExpression(expr); 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) { public override AstNode VisitQuerySelectClause(QuerySelectClause querySelectClause) {

16
ICSharpCode.NRefactory.Tests/CSharp/QueryExpressionExpanderTests.cs

@ -392,6 +392,22 @@ namespace ICSharpCode.NRefactory.CSharp {
}); });
} }
[Test]
public void TrivialSelectIsEliminatedAfterWhereEvenWhenParenthesized() {
var node = ParseUtilCSharp.ParseExpression<QueryExpression>("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] [Test]
public void TrivialSelectIsNotEliminatingWhenTheOnlyOperation() { public void TrivialSelectIsNotEliminatingWhenTheOnlyOperation() {
var node = ParseUtilCSharp.ParseExpression<QueryExpression>("from i in arr1 select i"); var node = ParseUtilCSharp.ParseExpression<QueryExpression>("from i in arr1 select i");

Loading…
Cancel
Save