Browse Source

Report parameter instead of its name token in the result map, unpack parenthesized expressions.

newNRvisualizers
Erik Källén 13 years ago
parent
commit
0deb852e6d
  1. 32
      ICSharpCode.NRefactory.CSharp/QueryExpressionExpander.cs
  2. 80
      ICSharpCode.NRefactory.Tests/CSharp/QueryExpressionExpanderTests.cs

32
ICSharpCode.NRefactory.CSharp/QueryExpressionExpander.cs

@ -13,14 +13,14 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -13,14 +13,14 @@ namespace ICSharpCode.NRefactory.CSharp {
/// <summary>
/// Maps original range variables to some node in the new tree that represents them.
/// </summary>
public IDictionary<Identifier, Identifier> RangeVariables { get; private set; }
public IDictionary<Identifier, AstNode> RangeVariables { get; private set; }
/// <summary>
/// Maps clauses to method calls. The keys will always be either a <see cref="QueryClause"/> or a <see cref="QueryOrdering"/>
/// </summary>
public IDictionary<AstNode, Expression> Expressions { get; private set; }
public QueryExpressionExpansionResult(AstNode astNode, IDictionary<Identifier, Identifier> rangeVariables, IDictionary<AstNode, Expression> expressions) {
public QueryExpressionExpansionResult(AstNode astNode, IDictionary<Identifier, AstNode> rangeVariables, IDictionary<AstNode, Expression> expressions) {
AstNode = astNode;
RangeVariables = rangeVariables;
Expressions = expressions;
@ -91,7 +91,7 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -91,7 +91,7 @@ namespace ICSharpCode.NRefactory.CSharp {
return null;
}
public IDictionary<Identifier, Identifier> rangeVariables = new Dictionary<Identifier, Identifier>();
public IDictionary<Identifier, AstNode> rangeVariables = new Dictionary<Identifier, AstNode>();
public IDictionary<AstNode, Expression> expressions = new Dictionary<AstNode, Expression>();
Dictionary<string, Expression> activeRangeVariableSubstitutions = new Dictionary<string, Expression>();
@ -110,7 +110,7 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -110,7 +110,7 @@ namespace ICSharpCode.NRefactory.CSharp {
if (currentTransparentType.Count == 1) {
var clonedRangeVariable = (Identifier)currentTransparentType[0].Item1.Clone();
if (!rangeVariables.ContainsKey(currentTransparentType[0].Item1))
rangeVariables[currentTransparentType[0].Item1] = clonedRangeVariable;
rangeVariables[currentTransparentType[0].Item1] = param;
param.AddChild(clonedRangeVariable, Roles.Identifier);
}
else {
@ -219,8 +219,9 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -219,8 +219,9 @@ namespace ICSharpCode.NRefactory.CSharp {
body = AddMemberToCurrentTransparentType(resultParam, queryFromClause.IdentifierToken, new IdentifierExpression(queryFromClause.Identifier), false);
}
var resultSelector = CreateLambda(new[] { resultParam, CreateParameter(clonedIdentifier) }, body);
rangeVariables[queryFromClause.IdentifierToken] = clonedIdentifier;
var resultSelectorParam2 = CreateParameter(clonedIdentifier);
var resultSelector = CreateLambda(new[] { resultParam, resultSelectorParam2 }, body);
rangeVariables[queryFromClause.IdentifierToken] = resultSelectorParam2;
return currentResult.Invoke("SelectMany", innerSelector, resultSelector);
}
@ -244,8 +245,8 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -244,8 +245,8 @@ namespace ICSharpCode.NRefactory.CSharp {
var inExpression = VisitNested(queryJoinClause.InExpression, null);
var key1SelectorFirstParam = CreateParameterForCurrentRangeVariable();
var key1Selector = CreateLambda(new[] { key1SelectorFirstParam }, VisitNested(queryJoinClause.OnExpression, key1SelectorFirstParam));
var key2Param = Identifier.Create(queryJoinClause.JoinIdentifier);
var key2Selector = CreateLambda(new[] { CreateParameter(key2Param) }, VisitNested(queryJoinClause.EqualsExpression, null));
var key2Param = CreateParameter(Identifier.Create(queryJoinClause.JoinIdentifier));
var key2Selector = CreateLambda(new[] { key2Param }, VisitNested(queryJoinClause.EqualsExpression, null));
var resultSelectorFirstParam = CreateParameterForCurrentRangeVariable();
@ -269,8 +270,8 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -269,8 +270,8 @@ namespace ICSharpCode.NRefactory.CSharp {
if (resultSelectorBody == null)
resultSelectorBody = AddMemberToCurrentTransparentType(resultSelectorFirstParam, queryJoinClause.IntoIdentifierToken, new IdentifierExpression(queryJoinClause.IntoIdentifier), false);
var intoParam = Identifier.Create(queryJoinClause.IntoIdentifier);
var resultSelector = CreateLambda(new[] { resultSelectorFirstParam, CreateParameter(intoParam) }, resultSelectorBody);
var intoParam = CreateParameter(Identifier.Create(queryJoinClause.IntoIdentifier));
var resultSelector = CreateLambda(new[] { resultSelectorFirstParam, intoParam }, resultSelectorBody);
rangeVariables[queryJoinClause.IntoIdentifierToken] = intoParam;
return currentResult.Invoke("GroupJoin", inExpression, key1Selector, key2Selector, resultSelector);
@ -292,12 +293,19 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -292,12 +293,19 @@ namespace ICSharpCode.NRefactory.CSharp {
return current;
}
bool IsSingleRangeVariable(Expression expr) {
if (currentTransparentType.Count > 1)
return false;
var unpacked = ParenthesizedExpression.UnpackParenthesizedExpression(expr);
return expr is IdentifierExpression && ((IdentifierExpression)expr).Identifier == currentTransparentType[0].Item1.Name;
}
public override AstNode VisitQuerySelectClause(QuerySelectClause querySelectClause) {
if (eatSelect) {
eatSelect = false;
return currentResult;
}
else if (currentTransparentType.Count == 1 && ((QueryExpression)querySelectClause.Parent).Clauses.Count > 2 && querySelectClause.Expression is IdentifierExpression && ((IdentifierExpression)querySelectClause.Expression).Identifier == currentTransparentType[0].Item1.Name) {
else if (((QueryExpression)querySelectClause.Parent).Clauses.Count > 2 && IsSingleRangeVariable(querySelectClause.Expression)) {
// A simple query that ends with a trivial select should be removed.
return currentResult;
}
@ -311,7 +319,7 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -311,7 +319,7 @@ namespace ICSharpCode.NRefactory.CSharp {
var param = CreateParameterForCurrentRangeVariable();
var keyLambda = CreateLambda(new[] { param }, VisitNested(queryGroupClause.Key, param));
if (currentTransparentType.Count == 1 && queryGroupClause.Projection is IdentifierExpression && ((IdentifierExpression)queryGroupClause.Projection).Identifier == currentTransparentType[0].Item1.Name) {
if (IsSingleRangeVariable(queryGroupClause.Projection)) {
// We are grouping by the single active range variable, so we can use the single argument form of GroupBy
return currentResult.Invoke("GroupBy", keyLambda);
}

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

@ -40,7 +40,7 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -40,7 +40,7 @@ namespace ICSharpCode.NRefactory.CSharp {
var actual = new QueryExpressionExpander().ExpandQueryExpression(node);
AssertCorrect(actual.AstNode, "args.Select(a => int.Parse(a))");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] { Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Arguments, 0).Parameters, 0).NameToken) });
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, 16), actual.AstNode) });
}
@ -50,7 +50,7 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -50,7 +50,7 @@ namespace ICSharpCode.NRefactory.CSharp {
var actual = new QueryExpressionExpander().ExpandQueryExpression(node);
AssertCorrect(actual.AstNode, "args.Cast<object>().Select(a => int.Parse(a))");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] { Tuple.Create(new TextLocation(1, 13), (AstNode)ElementAt(ElementAt(astNode.Arguments, 0).Parameters, 0).NameToken) });
AssertLookupCorrect(actual.RangeVariables, new[] { Tuple.Create(new TextLocation(1, 13), (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, 23), actual.AstNode) });
}
@ -61,7 +61,7 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -61,7 +61,7 @@ namespace ICSharpCode.NRefactory.CSharp {
AssertCorrect(actual.AstNode, "args.Select(a => new { a, b = int.Parse(a) }).Select(x0 => x0.a + x0.b.ToString())");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] {
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Parameters, 0).NameToken),
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Parameters, 0)),
Tuple.Create(new TextLocation(1, 20), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Body.Initializers, 1).NameToken),
});
AssertLookupCorrect(actual.Expressions, new[] {
@ -78,7 +78,7 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -78,7 +78,7 @@ namespace ICSharpCode.NRefactory.CSharp {
AssertCorrect(actual.AstNode, "args.Select(a => new { a, b = int.Parse(a) }).Select(x0 => new { x0, c = x0.b + 1 }).Select(x1 => x1.x0.a + x1.x0.b.ToString() + x1.c.ToString())");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] {
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 0).Parameters, 0).NameToken),
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 0).Parameters, 0)),
Tuple.Create(new TextLocation(1, 20), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 0).Body.Initializers, 1).NameToken),
Tuple.Create(new TextLocation(1, 41), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Body.Initializers, 1).NameToken),
});
@ -97,8 +97,8 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -97,8 +97,8 @@ namespace ICSharpCode.NRefactory.CSharp {
AssertCorrect(actual.AstNode, "arr1.SelectMany(i => arr2, (i, j) => i + j)");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] {
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Arguments, 0).Parameters, 0).NameToken),
Tuple.Create(new TextLocation(1, 21), (AstNode)ElementAt(ElementAt(astNode.Arguments, 1).Parameters, 1).NameToken),
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Arguments, 0).Parameters, 0)),
Tuple.Create(new TextLocation(1, 21), (AstNode)ElementAt(ElementAt(astNode.Arguments, 1).Parameters, 1)),
});
AssertLookupCorrect(actual.Expressions, new[] {
Tuple.Create(new TextLocation(1, 1), (AstNode)astNode.Target.Target),
@ -114,9 +114,9 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -114,9 +114,9 @@ namespace ICSharpCode.NRefactory.CSharp {
AssertCorrect(actual.AstNode, "outer.Select(i => new { i, j = F(i) }).SelectMany(x0 => x0.j.Result, (x1, k) => x1.i + x1.j + k)");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] {
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Parameters, 0).NameToken),
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Parameters, 0)),
Tuple.Create(new TextLocation(1, 21), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Body.Initializers, 1).NameToken),
Tuple.Create(new TextLocation(1, 35), (AstNode)ElementAt(ElementAt(astNode.Arguments, 1).Parameters, 1).NameToken),
Tuple.Create(new TextLocation(1, 35), (AstNode)ElementAt(ElementAt(astNode.Arguments, 1).Parameters, 1)),
});
AssertLookupCorrect(actual.Expressions, new[] {
Tuple.Create(new TextLocation(1, 1), (AstNode)astNode.Target.Target.Target.Target),
@ -133,9 +133,9 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -133,9 +133,9 @@ namespace ICSharpCode.NRefactory.CSharp {
AssertCorrect(actual.AstNode, "outer.Select(i => new { i, j = F(i) }).SelectMany(x0 => x0.j.Result, (x1, k) => new { x1, k }).Select(x2 => new { x2, l = x2.x1.i + x2.x1.j + x2.k }).Select(x3 => x3.x2.x1.i + x3.x2.x1.j + x3.x2.k + x3.l)");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] {
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Target.Target.Arguments, 0).Parameters, 0).NameToken),
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Target.Target.Arguments, 0).Parameters, 0)),
Tuple.Create(new TextLocation(1, 21), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Target.Target.Arguments, 0).Body.Initializers, 1).NameToken),
Tuple.Create(new TextLocation(1, 35), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 1).Parameters, 1).NameToken),
Tuple.Create(new TextLocation(1, 35), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 1).Parameters, 1)),
Tuple.Create(new TextLocation(1, 53), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Body.Initializers, 1).NameToken),
});
AssertLookupCorrect(actual.Expressions, new[] {
@ -154,8 +154,8 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -154,8 +154,8 @@ namespace ICSharpCode.NRefactory.CSharp {
AssertCorrect(actual.AstNode, "arr1.SelectMany(i => arr2, (i, j) => new { i, j }).Select(x0 => new { x0, k = x0.i + x0.j }).Select(x1 => x1.x0.i + x1.x0.j + x1.k)");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] {
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 0).Parameters, 0).NameToken),
Tuple.Create(new TextLocation(1, 21), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 1).Parameters, 1).NameToken),
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 0).Parameters, 0)),
Tuple.Create(new TextLocation(1, 21), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 1).Parameters, 1)),
Tuple.Create(new TextLocation(1, 35), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Body.Initializers, 1).NameToken),
});
AssertLookupCorrect(actual.Expressions, new[] {
@ -173,9 +173,9 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -173,9 +173,9 @@ namespace ICSharpCode.NRefactory.CSharp {
AssertCorrect(actual.AstNode, "arr1.SelectMany(i => arr2, (i, j) => new { i, j }).SelectMany(x0 => arr3, (x1, k) => x1.i + x1.j + k)");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] {
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Parameters, 0).NameToken),
Tuple.Create(new TextLocation(1, 21), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 1).Parameters, 1).NameToken),
Tuple.Create(new TextLocation(1, 36), (AstNode)ElementAt(ElementAt(astNode.Arguments, 1).Parameters, 1).NameToken),
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Parameters, 0)),
Tuple.Create(new TextLocation(1, 21), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 1).Parameters, 1)),
Tuple.Create(new TextLocation(1, 36), (AstNode)ElementAt(ElementAt(astNode.Arguments, 1).Parameters, 1)),
});
AssertLookupCorrect(actual.Expressions, new[] {
Tuple.Create(new TextLocation(1, 1), (AstNode)astNode.Target.Target.Target.Target),
@ -192,7 +192,7 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -192,7 +192,7 @@ namespace ICSharpCode.NRefactory.CSharp {
AssertCorrect(actual.AstNode, "arr.GroupBy(i => i.field)");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] {
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Arguments, 0).Parameters, 0).NameToken),
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),
@ -207,7 +207,7 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -207,7 +207,7 @@ namespace ICSharpCode.NRefactory.CSharp {
AssertCorrect(actual.AstNode, "arr.GroupBy(i => i.field, i => i.something)");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] {
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Arguments, 0).Parameters, 0).NameToken),
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),
@ -222,7 +222,7 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -222,7 +222,7 @@ namespace ICSharpCode.NRefactory.CSharp {
AssertCorrect(actual.AstNode, "arr.Select(i => new { i, j = F(i) }).GroupBy(x0 => x0.i.field, x1 => x1.i)");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] {
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Parameters, 0).NameToken),
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Parameters, 0)),
Tuple.Create(new TextLocation(1, 19), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Body.Initializers, 1).NameToken),
});
AssertLookupCorrect(actual.Expressions, new[] {
@ -239,8 +239,8 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -239,8 +239,8 @@ namespace ICSharpCode.NRefactory.CSharp {
AssertCorrect(actual.AstNode, "arr1.Join(arr2, i => i.keyi, j => j.keyj, (i, j) => i + j)");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] {
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Arguments, 1).Parameters, 0).NameToken),
Tuple.Create(new TextLocation(1, 21), (AstNode)ElementAt(ElementAt(astNode.Arguments, 2).Parameters, 0).NameToken),
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Arguments, 1).Parameters, 0)),
Tuple.Create(new TextLocation(1, 21), (AstNode)ElementAt(ElementAt(astNode.Arguments, 2).Parameters, 0)),
});
AssertLookupCorrect(actual.Expressions, new[] {
Tuple.Create(new TextLocation(1, 1), (AstNode)astNode.Target.Target),
@ -256,8 +256,8 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -256,8 +256,8 @@ namespace ICSharpCode.NRefactory.CSharp {
AssertCorrect(actual.AstNode, "arr1.Join(arr2, i => i.keyi, j => j.keyj, (i, j) => new { i, j }).Select(x0 => new { x0, k = x0.i + x0.j }).Select(x1 => x1.x0.i + x1.x0.j + x1.k)");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] {
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 1).Parameters, 0).NameToken),
Tuple.Create(new TextLocation(1, 21), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 2).Parameters, 0).NameToken),
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 1).Parameters, 0)),
Tuple.Create(new TextLocation(1, 21), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 2).Parameters, 0)),
Tuple.Create(new TextLocation(1, 59), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Body.Initializers, 1).NameToken),
});
AssertLookupCorrect(actual.Expressions, new[] {
@ -275,9 +275,9 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -275,9 +275,9 @@ namespace ICSharpCode.NRefactory.CSharp {
AssertCorrect(actual.AstNode, "arr1.Select(i => new { i, j = F(i) }).Join(arr2, x0 => x0.j.keyj, k => k.keyk, (x1, k) => x1.i + x1.j + k)");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] {
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Parameters, 0).NameToken),
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Parameters, 0)),
Tuple.Create(new TextLocation(1, 20), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Body.Initializers, 1).NameToken),
Tuple.Create(new TextLocation(1, 34), (AstNode)ElementAt(ElementAt(astNode.Arguments, 2).Parameters, 0).NameToken),
Tuple.Create(new TextLocation(1, 34), (AstNode)ElementAt(ElementAt(astNode.Arguments, 2).Parameters, 0)),
});
AssertLookupCorrect(actual.Expressions, new[] {
Tuple.Create(new TextLocation(1, 1), (AstNode)astNode.Target.Target.Target.Target),
@ -294,8 +294,8 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -294,8 +294,8 @@ namespace ICSharpCode.NRefactory.CSharp {
AssertCorrect(actual.AstNode, "arr1.GroupJoin(arr2, i => i.keyi, j => j.keyj, (i, g) => F(i, g))");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] {
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Arguments, 1).Parameters, 0).NameToken),
Tuple.Create(new TextLocation(1, 60), (AstNode)ElementAt(ElementAt(astNode.Arguments, 3).Parameters, 1).NameToken),
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Arguments, 1).Parameters, 0)),
Tuple.Create(new TextLocation(1, 60), (AstNode)ElementAt(ElementAt(astNode.Arguments, 3).Parameters, 1)),
});
AssertLookupCorrect(actual.Expressions, new[] {
Tuple.Create(new TextLocation(1, 1), (AstNode)astNode.Target.Target),
@ -311,8 +311,8 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -311,8 +311,8 @@ namespace ICSharpCode.NRefactory.CSharp {
AssertCorrect(actual.AstNode, "arr1.GroupJoin(arr2, i => i.keyi, j => j.keyj, (i, g) => new { i, g }).Select(x0 => new { x0, k = x0.i + x0.g }).Select(x1 => x1.x0.i + x1.x0.g + x1.k)");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] {
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 1).Parameters, 0).NameToken),
Tuple.Create(new TextLocation(1, 60), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 3).Parameters, 1).NameToken),
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 1).Parameters, 0)),
Tuple.Create(new TextLocation(1, 60), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 3).Parameters, 1)),
Tuple.Create(new TextLocation(1, 66), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Body.Initializers, 1).NameToken),
});
AssertLookupCorrect(actual.Expressions, new[] {
@ -330,9 +330,9 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -330,9 +330,9 @@ namespace ICSharpCode.NRefactory.CSharp {
AssertCorrect(actual.AstNode, "arr1.Select(i => new { i, j = F(i) }).GroupJoin(arr2, x0 => x0.j.keyj, k => k.keyk, (x1, g) => F(x1.i, x1.j, g))");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] {
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Parameters, 0).NameToken),
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Parameters, 0)),
Tuple.Create(new TextLocation(1, 20), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Body.Initializers, 1).NameToken),
Tuple.Create(new TextLocation(1, 73), (AstNode)ElementAt(ElementAt(astNode.Arguments, 3).Parameters, 1).NameToken),
Tuple.Create(new TextLocation(1, 73), (AstNode)ElementAt(ElementAt(astNode.Arguments, 3).Parameters, 1)),
});
AssertLookupCorrect(actual.Expressions, new[] {
Tuple.Create(new TextLocation(1, 1), (AstNode)astNode.Target.Target.Target.Target),
@ -349,7 +349,7 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -349,7 +349,7 @@ namespace ICSharpCode.NRefactory.CSharp {
AssertCorrect(actual.AstNode, "arr1.Where(i => i > 5).Select(i => i + 1)");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] {
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Parameters, 0).NameToken),
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Parameters, 0)),
});
AssertLookupCorrect(actual.Expressions, new[] {
Tuple.Create(new TextLocation(1, 1), (AstNode)astNode.Target.Target.Target.Target),
@ -365,7 +365,7 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -365,7 +365,7 @@ namespace ICSharpCode.NRefactory.CSharp {
AssertCorrect(actual.AstNode, "arr1.Select(i => new { i, j = i + 1 }).Where(x0 => x0.i > x0.j).Select(x1 => x1.i + x1.j)");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] {
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 0).Parameters, 0).NameToken),
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 0).Parameters, 0)),
Tuple.Create(new TextLocation(1, 20), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 0).Body.Initializers, 1).NameToken),
});
AssertLookupCorrect(actual.Expressions, new[] {
@ -383,7 +383,7 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -383,7 +383,7 @@ namespace ICSharpCode.NRefactory.CSharp {
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).NameToken),
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),
@ -399,7 +399,7 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -399,7 +399,7 @@ namespace ICSharpCode.NRefactory.CSharp {
AssertCorrect(actual.AstNode, "arr1.Select(i => i)");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] {
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Arguments, 0).Parameters, 0).NameToken),
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),
@ -414,7 +414,7 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -414,7 +414,7 @@ namespace ICSharpCode.NRefactory.CSharp {
AssertCorrect(actual.AstNode, "arr1.OrderBy(i => i.field1)");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] {
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Arguments, 0).Parameters, 0).NameToken),
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),
@ -431,7 +431,7 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -431,7 +431,7 @@ namespace ICSharpCode.NRefactory.CSharp {
AssertCorrect(actual.AstNode, "arr1.Select(i => new { i, j = i + 1 }).OrderBy(x0 => x0.i + x0.j).Select(x1 => x1.i)");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] {
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 0).Parameters, 0).NameToken),
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 0).Parameters, 0)),
Tuple.Create(new TextLocation(1, 20), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 0).Body.Initializers, 1).NameToken),
});
AssertLookupCorrect(actual.Expressions, new[] {
@ -451,7 +451,7 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -451,7 +451,7 @@ namespace ICSharpCode.NRefactory.CSharp {
AssertCorrect(actual.AstNode, "arr1.OrderBy(i => i.field1).ThenBy(i => i.field2)");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] {
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Arguments, 0).Parameters, 0).NameToken),
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.Target.Target),
@ -484,9 +484,9 @@ namespace ICSharpCode.NRefactory.CSharp { @@ -484,9 +484,9 @@ namespace ICSharpCode.NRefactory.CSharp {
AssertCorrect(actual.AstNode, "arr1.SelectMany(i => arr2, (i, j) => i + j).Where(a => a > 5).Select(a => a + 1)");
dynamic astNode = actual.AstNode;
AssertLookupCorrect(actual.RangeVariables, new[] {
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 0).Parameters, 0).NameToken),
Tuple.Create(new TextLocation(1, 21), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 1).Parameters, 1).NameToken),
Tuple.Create(new TextLocation(1, 49), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Parameters, 0).NameToken),
Tuple.Create(new TextLocation(1, 6), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 0).Parameters, 0)),
Tuple.Create(new TextLocation(1, 21), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Target.Target.Arguments, 1).Parameters, 1)),
Tuple.Create(new TextLocation(1, 49), (AstNode)ElementAt(ElementAt(astNode.Target.Target.Arguments, 0).Parameters, 0)),
});
AssertLookupCorrect(actual.Expressions, new[] {
Tuple.Create(new TextLocation(1, 1), (AstNode)astNode.Target.Target.Target.Target),

Loading…
Cancel
Save