public async Task <SyntaxNode> GenerateBodyForCallSiteContainerAsync(CancellationToken cancellationToken)
        {
            var container           = _selectionResult.GetContainingScope();
            var variableMapToRemove = CreateVariableDeclarationToRemoveMap(
                _analyzerResult.GetVariablesToMoveIntoMethodDefinition(cancellationToken), cancellationToken);
            var firstStatementToRemove = _selectionResult.FirstStatement();
            var lastStatementToRemove  = _selectionResult.LastStatement();

            var statementsToInsert = await CreateStatementsOrInitializerToInsertAtCallSiteAsync(cancellationToken).ConfigureAwait(false);

            var callSiteGenerator =
                new CallSiteContainerRewriter(
                    container,
                    variableMapToRemove,
                    firstStatementToRemove,
                    lastStatementToRemove,
                    statementsToInsert);

            return(callSiteGenerator.Generate());
        }
예제 #2
0
        public AnalyzerResult Analyze()
        {
            var dataFlowAnalysis = _semanticModel.AnalyzeDataFlow(_selectionResult.FirstStatement(), _selectionResult.LastStatement());
            var symbolMap        = GetSymbolMap(_semanticModel);

            GenerateVariableInfoMap(_semanticModel, dataFlowAnalysis, symbolMap, out var variableInfoMap);

            var isInExpressionOrHasReturnStatement = IsInExpressionOrHasReturnStatement(_semanticModel);

            var(parameters, returnType, variableToUseAsReturnValue) =
                GetSignatureInformation(dataFlowAnalysis, variableInfoMap, isInExpressionOrHasReturnStatement);

            var typeParametersInDeclaration    = new List <ITypeParameterSymbol>();
            var typeParametersInConstraintList = new List <ITypeParameterSymbol>();
            var awaitTaskReturn         = false;
            var instanceMemberIsUsed    = false;
            var shouldBeReadOnly        = false;
            var endOfSelectionReachable = true;

            return(new AnalyzerResult(
                       _semanticDocument,
                       typeParametersInDeclaration,
                       typeParametersInConstraintList,
                       parameters,
                       variableToUseAsReturnValue,
                       returnType,
                       awaitTaskReturn,
                       instanceMemberIsUsed,
                       shouldBeReadOnly,
                       endOfSelectionReachable));
        }