public override SyntaxNode VisitIdentifierName(IdentifierNameSyntax node)
            {
                if (this.semanticModel == null)
                {
                    this.semanticModel = this.document.GetSemanticModelAsync(this.cancellationToken).Result;
                }

                var symbolInfo = this.semanticModel.GetSymbolInfo(node, this.cancellationToken);

                if (symbolInfo.Symbol == null)
                {
                    return node;
                }
                    
                if ((symbolInfo.Symbol.Kind == SymbolKind.Field ||
                    symbolInfo.Symbol.Kind == SymbolKind.Property ||
                    symbolInfo.Symbol.Kind == SymbolKind.Method ||
                    symbolInfo.Symbol.Kind == SymbolKind.Event) &&
                    symbolInfo.Symbol.CanBeReferencedByName &&
                    !symbolInfo.Symbol.IsStatic &&
                    !HasThisAccess(node) && 
                    CanAnnotateProperty(node))
                {
                    this.addedAnnotations = true;
                    var trivia = node.GetLeadingTrivia();

                    var memberAccess = SyntaxFactory.MemberAccessExpression(
                        SyntaxKind.SimpleMemberAccessExpression,
                        SyntaxFactory.ThisExpression(),
                        node.WithoutLeadingTrivia());

                    return memberAccess.WithLeadingTrivia(trivia);
                }

                return base.VisitIdentifierName(node);
            }