private static SyntaxToken GetIdentifierOrKeywordAtPosition(SyntaxNode root, SourceLocation position) { var syntaxToken = root.FindTokenOnLeft(position); return syntaxToken.Kind.IsIdentifierOrKeyword() && syntaxToken.SourceRange.ContainsOrTouches(position) ? syntaxToken : null; }
private static bool IsInPropertyAccess(SyntaxNode root, SourceLocation position) { var token = root.FindTokenOnLeft(position); if (token == null || !token.SourceRange.ContainsOrTouches(position)) return false; var propertyAccess = token.Parent.AncestorsAndSelf().OfType<FieldAccessExpressionSyntax>().FirstOrDefault(); return propertyAccess != null && (propertyAccess.DotToken == token || propertyAccess.Name == token); }
private static bool IsInPropertyAccess(SyntaxNode root, SourceLocation position) { var token = root.FindTokenOnLeft(position); if (token == null || !token.SourceRange.ContainsOrTouches(position)) { return(false); } var propertyAccess = token.Parent.AncestorsAndSelf().OfType <FieldAccessExpressionSyntax>().FirstOrDefault(); return(propertyAccess != null && (propertyAccess.DotToken == token || propertyAccess.Name == token)); }
private static FieldAccessExpressionSyntax GetPropertyAccessExpression(SyntaxNode root, SourceLocation position) { var token = root.FindTokenOnLeft(position); var previous = token.GetPreviousToken(false, true); var dot = previous != null && previous.Kind == SyntaxKind.DotToken ? previous : token; var p = dot.Parent.AncestorsAndSelf().OfType<FieldAccessExpressionSyntax>().FirstOrDefault(); if (p != null) { var afterDot = p.DotToken.SourceRange.End <= position && position <= p.Name.SourceRange.End; if (afterDot) return p; } return null; }
internal static FieldAccessExpressionSyntax GetPropertyAccessExpression(SyntaxNode root, SourceLocation position) { var token = root.FindTokenOnLeft(position); var previous = (SyntaxToken)token.GetPreviousToken(false, true); var dot = previous != null && previous.Kind == SyntaxKind.DotToken ? previous : token; var p = dot.Parent.AncestorsAndSelf().OfType <FieldAccessExpressionSyntax>().FirstOrDefault(); if (p != null) { var afterDot = p.DotToken.SourceRange.End <= position && position <= p.Name.SourceRange.End; if (afterDot) { return(p); } } return(null); }