コード例 #1
0
        public static async Task ComputeRefactoringsAsync(RefactoringContext context, MemberAccessExpressionSyntax memberAccess)
        {
            if (context.IsRefactoringEnabled(RefactoringIdentifiers.AddUsingStaticDirective) &&
                memberAccess.Expression?.IsMissing == false &&
                memberAccess.Name?.IsMissing == false &&
                context.SupportsSemanticModel)
            {
                memberAccess = GetTopmostMemberAccessExpression(memberAccess);

                if (context.Span.IsBetweenSpans(memberAccess.Expression))
                {
                    SemanticModel semanticModel = await context.GetSemanticModelAsync().ConfigureAwait(false);

                    var typeSymbol = semanticModel
                                     .GetSymbolInfo(memberAccess.Expression, context.CancellationToken)
                                     .Symbol as INamedTypeSymbol;

                    if (typeSymbol?.IsStaticClass() == true &&
                        (typeSymbol.IsPublic() || typeSymbol.IsInternal()) &&
                        !SyntaxUtility.IsUsingStaticDirectiveInScope(memberAccess, typeSymbol, semanticModel, context.CancellationToken))
                    {
                        context.RegisterRefactoring($"using static {typeSymbol.ToString()};",
                                                    cancellationToken =>
                        {
                            return(RefactorAsync(
                                       context.Document,
                                       typeSymbol.ToString(),
                                       memberAccess,
                                       cancellationToken));
                        });
                    }
                }
            }
        }