public override object Visit(Mono.CSharp.Linq.Join join) { var result = new QueryJoinClause(); var location = LocationsBag.GetLocations(join); result.AddChild(new CSharpTokenNode(Convert(join.Location), QueryJoinClause.JoinKeywordRole), QueryJoinClause.JoinKeywordRole); if (join.IdentifierType != null) result.AddChild(ConvertToType(join.IdentifierType), QueryJoinClause.TypeRole); result.AddChild(Identifier.Create(join.JoinVariable.Name, Convert(join.JoinVariable.Location)), QueryJoinClause.JoinIdentifierRole); if (join.IdentifierType != null) result.AddChild(ConvertToType(join.IdentifierType), QueryJoinClause.TypeRole); if (location != null) result.AddChild(new CSharpTokenNode(Convert(location [0]), QueryJoinClause.InKeywordRole), QueryJoinClause.InKeywordRole); if (join.Expr != null) result.AddChild((Expression)join.Expr.Accept(this), QueryJoinClause.InExpressionRole); if (location != null && location.Count > 1) result.AddChild(new CSharpTokenNode(Convert(location [1]), QueryJoinClause.OnKeywordRole), QueryJoinClause.OnKeywordRole); var outer = join.OuterSelector.Statements.FirstOrDefault() as ContextualReturn; if (outer != null) result.AddChild((Expression)outer.Expr.Accept(this), QueryJoinClause.OnExpressionRole); if (location != null && location.Count > 2) result.AddChild(new CSharpTokenNode(Convert(location [2]), QueryJoinClause.EqualsKeywordRole), QueryJoinClause.EqualsKeywordRole); var inner = join.InnerSelector.Statements.FirstOrDefault() as ContextualReturn; if (inner != null) result.AddChild((Expression)inner.Expr.Accept(this), QueryJoinClause.EqualsExpressionRole); return result; }
public override object Visit(Mono.CSharp.Linq.GroupJoin groupJoin) { var result = new QueryJoinClause(); var location = LocationsBag.GetLocations(groupJoin); result.AddChild(new CSharpTokenNode(Convert(groupJoin.Location), QueryJoinClause.JoinKeywordRole), QueryJoinClause.JoinKeywordRole); // mcs seems to have swapped IntoVariable with JoinVariable, so we'll swap it back here result.AddChild(Identifier.Create(groupJoin.IntoVariable.Name, Convert(groupJoin.IntoVariable.Location)), QueryJoinClause.JoinIdentifierRole); if (location != null) result.AddChild(new CSharpTokenNode(Convert(location [0]), QueryJoinClause.InKeywordRole), QueryJoinClause.InKeywordRole); if (groupJoin.Expr != null) result.AddChild((Expression)groupJoin.Expr.Accept(this), QueryJoinClause.InExpressionRole); if (location != null && location.Count > 1) result.AddChild(new CSharpTokenNode(Convert(location [1]), QueryJoinClause.OnKeywordRole), QueryJoinClause.OnKeywordRole); var outer = groupJoin.OuterSelector.Statements.FirstOrDefault() as ContextualReturn; if (outer != null) result.AddChild((Expression)outer.Expr.Accept(this), QueryJoinClause.OnExpressionRole); if (location != null && location.Count > 2) result.AddChild(new CSharpTokenNode(Convert(location [2]), QueryJoinClause.EqualsKeywordRole), QueryJoinClause.EqualsKeywordRole); var inner = groupJoin.InnerSelector.Statements.FirstOrDefault() as ContextualReturn; if (inner != null) result.AddChild((Expression)inner.Expr.Accept(this), QueryJoinClause.EqualsExpressionRole); if (location != null && location.Count > 3) result.AddChild(new CSharpTokenNode(Convert(location [3]), QueryJoinClause.IntoKeywordRole), QueryJoinClause.IntoKeywordRole); result.AddChild(Identifier.Create(groupJoin.JoinVariable.Name, Convert(groupJoin.JoinVariable.Location)), QueryJoinClause.IntoIdentifierRole); return result; }
public override object Visit (Mono.CSharp.Linq.GroupJoin join) { var result = new QueryJoinClause (); var location = LocationsBag.GetLocations (join); result.AddChild (new CSharpTokenNode (Convert (join.Location), "join".Length), QueryJoinClause.JoinKeywordRole); result.AddChild (Identifier.Create (join.JoinVariable.Name, Convert (join.JoinVariable.Location)), Identifier.Roles.Identifier); if (location != null) result.AddChild (new CSharpTokenNode (Convert (location[0]), "in".Length), QueryJoinClause.InKeywordRole); result.AddChild ((Expression)join.Expr.Accept (this), QueryJoinClause.Roles.Expression); if (location != null) result.AddChild (new CSharpTokenNode (Convert (location[1]), "on".Length), QueryJoinClause.OnKeywordRole); // TODO: on expression if (location != null) result.AddChild (new CSharpTokenNode (Convert (location[2]), "equals".Length), QueryJoinClause.EqualsKeywordRole); // TODO: equals expression if (location != null) result.AddChild (new CSharpTokenNode (Convert (location[3]), "into".Length), QueryJoinClause.IntoKeywordRole); result.AddChild (Identifier.Create (join.JoinVariable.Name, Convert (join.JoinVariable.Location)), Identifier.Roles.Identifier); return result; }