private static LocalDeclarationStatementSyntax GetNewLocalDeclaration(
            ConditionalExpressionSyntax conditionalExpression,
            LocalDeclarationStatementSyntax localDeclaration,
            SemanticModel semanticModel)
        {
            bool isVar = localDeclaration.Declaration.Type.IsVar;

            localDeclaration = localDeclaration.RemoveNode(
                conditionalExpression.Parent,
                SyntaxRemoveOptions.KeepExteriorTrivia);

            if (isVar)
            {
                ITypeSymbol typeSymbol = semanticModel.GetTypeInfo(conditionalExpression).Type;

                if (typeSymbol != null && typeSymbol.Kind != SymbolKind.ErrorType)
                {
                    localDeclaration = localDeclaration.ReplaceNode(
                        localDeclaration.Declaration.Type,
                        TypeSyntaxRefactoring.CreateTypeSyntax(typeSymbol).WithAdditionalAnnotations(Simplifier.Annotation));
                }
            }

            return(localDeclaration);
        }
예제 #2
0
        public static async Task <Document> RefactorAsync(
            Document document,
            ExpressionSyntax expression,
            ITypeSymbol typeSymbol,
            CancellationToken cancellationToken)
        {
            SyntaxNode root = await document.GetSyntaxRootAsync(cancellationToken);

            SemanticModel semanticModel = await document.GetSemanticModelAsync(cancellationToken);

            TypeSyntax type = TypeSyntaxRefactoring.CreateTypeSyntax(typeSymbol)
                              .WithAdditionalAnnotations(Simplifier.Annotation);

            CastExpressionSyntax castExpression = SyntaxFactory.CastExpression(type, expression)
                                                  .WithTriviaFrom(expression);

            root = root.ReplaceNode(expression, castExpression);

            return(document.WithSyntaxRoot(root));
        }