public override SyntaxNode VisitIdentifierName(IdentifierNameSyntax node) { if (!(node.Parent is MemberAccessExpressionSyntax) || ((MemberAccessExpressionSyntax)node.Parent).Expression == node) { if (node.GetContainingMethod() == null) { return base.VisitIdentifierName(node); } var containingType = node.GetContainingType(); if (containingType == null || !containingType.Name.StartsWith(enclosingTypeName)) return node; var symbol = semanticModel.GetSymbolInfo(node).Symbol; var isObjectInitializer = node.Parent != null && node.Parent.Parent is InitializerExpressionSyntax; if (!isObjectInitializer) { if (symbol == null || (new[] { SymbolKind.Field, SymbolKind.Event, SymbolKind.Method, SymbolKind.Property }.Contains(symbol.Kind) && !symbol.ContainingType.Name.StartsWith(enclosingTypeName) && !symbol.IsStatic)) { return SyntaxFactory.MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression, SyntaxFactory.IdentifierName("_this"), node); } } } return base.VisitIdentifierName(node); }