|
|
@ -140,49 +140,72 @@ namespace ICSharpCode.NRefactory.Visitors |
|
|
|
return base.VisitLambdaExpression(lambdaExpression, data); |
|
|
|
return base.VisitLambdaExpression(lambdaExpression, data); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public override object VisitQueryExpression(QueryExpression queryExpression, object data) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
endLocationStack.Push(GetQueryVariableEndScope(queryExpression)); |
|
|
|
|
|
|
|
base.VisitQueryExpression(queryExpression, data); |
|
|
|
|
|
|
|
endLocationStack.Pop(); |
|
|
|
|
|
|
|
return null; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Location GetQueryVariableEndScope(QueryExpression queryExpression) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
return queryExpression.IntoClause.IsNull |
|
|
|
|
|
|
|
? queryExpression.EndLocation |
|
|
|
|
|
|
|
: queryExpression.IntoClause.StartLocation; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public override object VisitQueryExpressionFromClause(QueryExpressionFromClause fromClause, object data) |
|
|
|
public override object VisitQueryExpressionFromClause(QueryExpressionFromClause fromClause, object data) |
|
|
|
{ |
|
|
|
{ |
|
|
|
QueryExpression parentExpression = fromClause.Parent as QueryExpression; |
|
|
|
AddVariable(fromClause.Type, fromClause.Identifier, |
|
|
|
|
|
|
|
fromClause.StartLocation, CurrentEndLocation, |
|
|
|
|
|
|
|
false, true, fromClause.InExpression, null); |
|
|
|
|
|
|
|
return base.VisitQueryExpressionFromClause(fromClause, data); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public override object VisitQueryExpressionIntoClause(QueryExpressionIntoClause intoClause, object data) |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
QueryExpression parentExpression = intoClause.Parent as QueryExpression; |
|
|
|
if (parentExpression != null) { |
|
|
|
if (parentExpression != null) { |
|
|
|
AddVariable(fromClause.Type, fromClause.Identifier, |
|
|
|
Expression initializer = null; |
|
|
|
parentExpression.StartLocation, parentExpression.EndLocation, |
|
|
|
var selectClause = parentExpression.SelectOrGroupClause as QueryExpressionSelectClause; |
|
|
|
false, true, fromClause.InExpression, null); |
|
|
|
if (selectClause != null) { |
|
|
|
|
|
|
|
initializer = selectClause.Projection; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
var groupByClause = parentExpression.SelectOrGroupClause as QueryExpressionGroupClause; |
|
|
|
|
|
|
|
if (groupByClause != null) |
|
|
|
|
|
|
|
initializer = groupByClause.Projection; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
AddVariable(null, intoClause.IntoIdentifier, |
|
|
|
|
|
|
|
intoClause.StartLocation, GetQueryVariableEndScope(intoClause.ContinuedQuery), |
|
|
|
|
|
|
|
false, false, initializer, null); |
|
|
|
} |
|
|
|
} |
|
|
|
return base.VisitQueryExpressionFromClause(fromClause, data); |
|
|
|
return base.VisitQueryExpressionIntoClause(intoClause, data); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public override object VisitQueryExpressionJoinClause(QueryExpressionJoinClause joinClause, object data) |
|
|
|
public override object VisitQueryExpressionJoinClause(QueryExpressionJoinClause joinClause, object data) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (string.IsNullOrEmpty(joinClause.IntoIdentifier)) { |
|
|
|
if (string.IsNullOrEmpty(joinClause.IntoIdentifier)) { |
|
|
|
QueryExpression parentExpression = joinClause.Parent as QueryExpression; |
|
|
|
AddVariable(joinClause.Type, joinClause.Identifier, |
|
|
|
if (parentExpression != null) { |
|
|
|
joinClause.StartLocation, CurrentEndLocation, |
|
|
|
AddVariable(joinClause.Type, joinClause.Identifier, |
|
|
|
false, true, joinClause.InExpression, null); |
|
|
|
parentExpression.StartLocation, parentExpression.EndLocation, |
|
|
|
|
|
|
|
false, true, joinClause.InExpression, null); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
} else { |
|
|
|
AddVariable(joinClause.Type, joinClause.Identifier, |
|
|
|
AddVariable(joinClause.Type, joinClause.Identifier, |
|
|
|
joinClause.StartLocation, joinClause.EndLocation, |
|
|
|
joinClause.StartLocation, joinClause.EndLocation, |
|
|
|
false, true, joinClause.InExpression, null); |
|
|
|
false, true, joinClause.InExpression, null); |
|
|
|
|
|
|
|
|
|
|
|
QueryExpression parentExpression = joinClause.Parent as QueryExpression; |
|
|
|
AddVariable(joinClause.Type, joinClause.IntoIdentifier, |
|
|
|
if (parentExpression != null) { |
|
|
|
joinClause.StartLocation, CurrentEndLocation, |
|
|
|
AddVariable(joinClause.Type, joinClause.IntoIdentifier, |
|
|
|
false, false, joinClause.InExpression, null); |
|
|
|
parentExpression.StartLocation, parentExpression.EndLocation, |
|
|
|
|
|
|
|
false, false, joinClause.InExpression, null); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
return base.VisitQueryExpressionJoinClause(joinClause, data); |
|
|
|
return base.VisitQueryExpressionJoinClause(joinClause, data); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public override object VisitQueryExpressionLetClause(QueryExpressionLetClause letClause, object data) |
|
|
|
public override object VisitQueryExpressionLetClause(QueryExpressionLetClause letClause, object data) |
|
|
|
{ |
|
|
|
{ |
|
|
|
QueryExpression parentExpression = letClause.Parent as QueryExpression; |
|
|
|
AddVariable(null, letClause.Identifier, |
|
|
|
if (parentExpression != null) { |
|
|
|
letClause.StartLocation, CurrentEndLocation, |
|
|
|
AddVariable(null, letClause.Identifier, |
|
|
|
false, false, letClause.Expression, null); |
|
|
|
parentExpression.StartLocation, parentExpression.EndLocation, |
|
|
|
|
|
|
|
false, false, letClause.Expression, null); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return base.VisitQueryExpressionLetClause(letClause, data); |
|
|
|
return base.VisitQueryExpressionLetClause(letClause, data); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|