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)); }
private BlockSyntax SplitOrMoveDeclarationIntoMethodDefinition(BlockSyntax body, CancellationToken cancellationToken) { var statements = body.Statements; var postProcessor = new PostProcessor(_semanticDocument.SemanticModel, _selectionResult.FirstStatement().SpanStart); var variables = _analyzerResult.GetVariablesToSplitOrMoveIntoMethodDefinition(cancellationToken); var declarationStatements = CreateDeclarationStatements(variables); declarationStatements = postProcessor.MergeDeclarationStatements(declarationStatements); return(SyntaxFactory.Block(declarationStatements.Concat(statements))); }
public static void ReplaceRangeNodes(this SyntaxEditor editor, SelectionResult selectionResult, IEnumerable <SyntaxNode> nodes) { var firstStatement = selectionResult.FirstStatement(); var firstNodeToInsert = nodes.First(); editor.ReplaceNode(firstStatement, firstNodeToInsert); foreach (var statementSyntax in selectionResult.OtherThanFirstStatements()) { editor.RemoveNode(statementSyntax); } var otherNodes = nodes.Skip(1); if (!otherNodes.Any()) { return; } editor.InsertAfter(firstStatement, otherNodes); }