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 { @@ -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) {

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

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

Loading…
Cancel
Save