Skip to content

Commit

Permalink
Merge pull request #68432 from CyrusNajmabadi/extractMethodPerf
Browse files Browse the repository at this point in the history
Lift variable for performance in extract method
  • Loading branch information
CyrusNajmabadi committed Jun 3, 2023
2 parents 43913e6 + 75d322a commit a08e9e1
Showing 1 changed file with 20 additions and 31 deletions.
51 changes: 20 additions & 31 deletions src/Features/Core/Portable/ExtractMethod/SelectionResult.cs
Expand Up @@ -118,6 +118,7 @@ public bool ShouldPutAsyncModifier()
{
var firstToken = GetFirstTokenInSelection();
var lastToken = GetLastTokenInSelection();
var syntaxFacts = SemanticDocument.Project.Services.GetService<ISyntaxFactsService>();

for (var currentToken = firstToken;
currentToken.Span.End < lastToken.SpanStart;
Expand All @@ -129,7 +130,7 @@ public bool ShouldPutAsyncModifier()
//
// for the case above, even if the selection contains "await", it doesn't belong to the enclosing block
// which extract method is applied to
if (SemanticDocument.Project.Services.GetService<ISyntaxFactsService>().IsAwaitKeyword(currentToken)
if (syntaxFacts.IsAwaitKeyword(currentToken)
&& !UnderAnonymousOrLocalMethod(currentToken, firstToken, lastToken))
{
return true;
Expand All @@ -141,6 +142,8 @@ public bool ShouldPutAsyncModifier()

public bool ShouldCallConfigureAwaitFalse()
{
var syntaxFacts = SemanticDocument.Project.Services.GetService<ISyntaxFactsService>();

var firstToken = GetFirstTokenInSelection();
var lastToken = GetLastTokenInSelection();

Expand All @@ -149,49 +152,35 @@ public bool ShouldCallConfigureAwaitFalse()
foreach (var node in SemanticDocument.Root.DescendantNodesAndSelf())
{
if (!node.Span.OverlapsWith(span))
{
continue;
}

if (IsConfigureAwaitFalse(node) && !UnderAnonymousOrLocalMethod(node.GetFirstToken(), firstToken, lastToken))
{
return true;
}
}

return false;
}

private bool IsConfigureAwaitFalse(SyntaxNode node)
{
var syntaxFacts = SemanticDocument.Project.Services.GetService<ISyntaxFactsService>();
if (!syntaxFacts.IsInvocationExpression(node))
bool IsConfigureAwaitFalse(SyntaxNode node)
{
return false;
}
if (!syntaxFacts.IsInvocationExpression(node))
return false;

var invokedExpression = syntaxFacts.GetExpressionOfInvocationExpression(node);
if (!syntaxFacts.IsSimpleMemberAccessExpression(invokedExpression))
{
return false;
}
var invokedExpression = syntaxFacts.GetExpressionOfInvocationExpression(node);
if (!syntaxFacts.IsSimpleMemberAccessExpression(invokedExpression))
return false;

var name = syntaxFacts.GetNameOfMemberAccessExpression(invokedExpression);
var identifier = syntaxFacts.GetIdentifierOfSimpleName(name);
if (!syntaxFacts.StringComparer.Equals(identifier.ValueText, nameof(Task.ConfigureAwait)))
{
return false;
}
var name = syntaxFacts.GetNameOfMemberAccessExpression(invokedExpression);
var identifier = syntaxFacts.GetIdentifierOfSimpleName(name);
if (!syntaxFacts.StringComparer.Equals(identifier.ValueText, nameof(Task.ConfigureAwait)))
return false;

var arguments = syntaxFacts.GetArgumentsOfInvocationExpression(node);
if (arguments.Count != 1)
{
return false;
}
var arguments = syntaxFacts.GetArgumentsOfInvocationExpression(node);
if (arguments.Count != 1)
return false;

var argument = arguments[0];
var expression = syntaxFacts.GetExpressionOfArgument(argument);
return syntaxFacts.IsFalseLiteralExpression(expression);
var expression = syntaxFacts.GetExpressionOfArgument(arguments[0]);
return syntaxFacts.IsFalseLiteralExpression(expression);
}
}
}
}

0 comments on commit a08e9e1

Please sign in to comment.