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);
        }
Example #3
0
        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);
        }