Skip to content

Commit acfbf81

Browse files
Move helper
1 parent 07aeb41 commit acfbf81

File tree

2 files changed

+24
-25
lines changed

2 files changed

+24
-25
lines changed

src/Features/Core/Portable/ExtractMethod/MethodExtractor.Analyzer.cs

Lines changed: 3 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -51,28 +51,6 @@ protected Analyzer(TSelectionResult selectionResult, bool localFunction, Cancell
5151

5252
var syntaxKinds = this.SyntaxFacts.SyntaxKinds;
5353
_nonNoisySyntaxKindSet = [syntaxKinds.WhitespaceTrivia, syntaxKinds.EndOfLineTrivia];
54-
55-
}
56-
57-
/// <summary>f
58-
/// convert text span to node range for the flow analysis API
59-
/// </summary>
60-
private (TExecutableStatementSyntax firstStatement, TExecutableStatementSyntax lastStatement) GetFlowAnalysisNodeRange()
61-
{
62-
var first = this.SelectionResult.GetFirstStatement();
63-
var last = this.SelectionResult.GetLastStatement();
64-
65-
// single statement case
66-
if (first == last ||
67-
first.Span.Contains(last.Span))
68-
{
69-
return (first, first);
70-
}
71-
72-
// multiple statement case
73-
var firstUnderContainer = this.SelectionResult.GetFirstStatementUnderContainer();
74-
var lastUnderContainer = this.SelectionResult.GetLastStatementUnderContainer();
75-
return (firstUnderContainer, lastUnderContainer);
7654
}
7755

7856
protected abstract bool IsInPrimaryConstructorBaseType();
@@ -369,7 +347,7 @@ private DataFlowAnalysis GetDataFlowAnalysisData()
369347
if (SelectionResult.IsExtractMethodOnExpression)
370348
return this.SemanticModel.AnalyzeDataFlow(SelectionResult.GetNodeForDataFlowAnalysis());
371349

372-
var (firstStatement, lastStatement) = GetFlowAnalysisNodeRange();
350+
var (firstStatement, lastStatement) = this.SelectionResult.GetFlowAnalysisNodeRange();
373351
return this.SemanticModel.AnalyzeDataFlow(firstStatement, lastStatement);
374352
}
375353

@@ -380,7 +358,7 @@ private bool IsEndOfSelectionReachable()
380358
return true;
381359
}
382360

383-
var (firstStatement, lastStatement) = GetFlowAnalysisNodeRange();
361+
var (firstStatement, lastStatement) = this.SelectionResult.GetFlowAnalysisNodeRange();
384362
var analysis = this.SemanticModel.AnalyzeControlFlow(firstStatement, lastStatement);
385363
return analysis.EndPointIsReachable;
386364
}
@@ -772,7 +750,7 @@ private bool ContainsReturnStatementInSelectedCode()
772750
{
773751
Contract.ThrowIfTrue(SelectionResult.IsExtractMethodOnExpression);
774752

775-
var (firstStatement, lastStatement) = GetFlowAnalysisNodeRange();
753+
var (firstStatement, lastStatement) = this.SelectionResult.GetFlowAnalysisNodeRange();
776754
var controlFlowAnalysisData = this.SemanticDocument.SemanticModel.AnalyzeControlFlow(firstStatement, lastStatement);
777755

778756
return ContainsReturnStatementInSelectedCode(controlFlowAnalysisData.ExitPoints);

src/Features/Core/Portable/ExtractMethod/SelectionResult.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,27 @@ bool IsConfigureAwaitFalse(SyntaxNode node)
180180
}
181181
}
182182

183+
/// <summary>f
184+
/// convert text span to node range for the flow analysis API
185+
/// </summary>
186+
public (TExecutableStatementSyntax firstStatement, TExecutableStatementSyntax lastStatement) GetFlowAnalysisNodeRange()
187+
{
188+
var first = this.GetFirstStatement();
189+
var last = this.GetLastStatement();
190+
191+
// single statement case
192+
if (first == last ||
193+
first.Span.Contains(last.Span))
194+
{
195+
return (first, first);
196+
}
197+
198+
// multiple statement case
199+
var firstUnderContainer = this.GetFirstStatementUnderContainer();
200+
var lastUnderContainer = this.GetLastStatementUnderContainer();
201+
return (firstUnderContainer, lastUnderContainer);
202+
}
203+
183204
/// <summary>
184205
/// create a new root node from the given root after adding annotations to the tokens
185206
///

0 commit comments

Comments
 (0)