44
44
return match.Get(referencedGroupName).Last().IsMatch(other);
47
public override S AcceptVisitor<T, S>(IPatternAstVisitor<T, S> visitor, T data)
49
return visitor.VisitBackreference(this, data);
54
/// Matches identifier expressions that have the same identifier as the referenced variable/type definition/method definition.
56
public class IdentifierExpressionBackreference : Pattern
58
readonly string referencedGroupName;
60
public string ReferencedGroupName {
61
get { return referencedGroupName; }
64
public IdentifierExpressionBackreference(string referencedGroupName)
66
if (referencedGroupName == null)
67
throw new ArgumentNullException("referencedGroupName");
68
this.referencedGroupName = referencedGroupName;
71
public override bool DoMatch(INode other, Match match)
73
CSharp.IdentifierExpression ident = other as CSharp.IdentifierExpression;
74
if (ident == null || ident.TypeArguments.Any())
76
CSharp.AstNode referenced = (CSharp.AstNode)match.Get(referencedGroupName).Last();
77
if (referenced == null)
79
return ident.Identifier == referenced.GetChildByRole(CSharp.AstNode.Roles.Identifier).Name;
82
public override S AcceptVisitor<T, S>(IPatternAstVisitor<T, S> visitor, T data)
84
return visitor.VisitIdentifierExpressionBackreference(this, data);