diff --git a/ChangeLog.md b/ChangeLog.md index 4066e8867d..27943f6dea 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Fixed - Fix [RCS1234](https://josefpihrt.github.io/docs/roslynator/analyzers/RCS1234) ([PR](https://github.com/dotnet/roslynator/pull/1233)) +- Fix refactoring [Inline method](https://josefpihrt.github.io/docs/roslynator/refactorings/RR0062) ([PR](https://github.com/dotnet/roslynator/pull/1234)) ## [4.6.1] - 2023-10-23 diff --git a/src/Refactorings/CSharp/Refactorings/InlineDefinition/InlineAnalyzer.cs b/src/Refactorings/CSharp/Refactorings/InlineDefinition/InlineAnalyzer.cs index 156a0d5a06..b4a1191dfb 100644 --- a/src/Refactorings/CSharp/Refactorings/InlineDefinition/InlineAnalyzer.cs +++ b/src/Refactorings/CSharp/Refactorings/InlineDefinition/InlineAnalyzer.cs @@ -66,7 +66,7 @@ public async Task ComputeRefactoringsAsync(RefactoringContext context, TNode nod declarationSemanticModel = await document.GetSemanticModelAsync(context.CancellationToken).ConfigureAwait(false); } - InlineRefactoring refactoring = CreateRefactoring(context.Document, nodeIncludingConditionalAccess, enclosingType, symbol, declaration, parameterInfos, semanticModel, declarationSemanticModel, context.CancellationToken); + InlineRefactoring refactoring = CreateRefactoring(context.Document, nodeIncludingConditionalAccess, enclosingType, symbol, declaration, parameterInfos, semanticModel, declarationSemanticModel); string title = CSharpFacts.GetTitle(declaration); @@ -107,6 +107,5 @@ protected abstract InlineRefactoring CreateRefacto TDeclaration declaration, ImmutableArray parameterInfos, SemanticModel nodeSemanticModel, - SemanticModel declarationSemanticModel, - CancellationToken cancellationToken); + SemanticModel declarationSemanticModel); } diff --git a/src/Refactorings/CSharp/Refactorings/InlineDefinition/InlineMethodAnalyzer.cs b/src/Refactorings/CSharp/Refactorings/InlineDefinition/InlineMethodAnalyzer.cs index 00c73a68bd..44995dd666 100644 --- a/src/Refactorings/CSharp/Refactorings/InlineDefinition/InlineMethodAnalyzer.cs +++ b/src/Refactorings/CSharp/Refactorings/InlineDefinition/InlineMethodAnalyzer.cs @@ -202,10 +202,9 @@ protected override InlineRefactoring parameterInfos, SemanticModel nodeSemanticModel, - SemanticModel declarationSemanticModel, - CancellationToken cancellationToken) + SemanticModel declarationSemanticModel) { - return new InlineMethodRefactoring(document, node, nodeEnclosingType, symbol, declaration, parameterInfos, nodeSemanticModel, declarationSemanticModel, cancellationToken); + return new InlineMethodRefactoring(document, node, nodeEnclosingType, symbol, declaration, parameterInfos, nodeSemanticModel, declarationSemanticModel); } protected override RefactoringDescriptor GetDescriptor() diff --git a/src/Refactorings/CSharp/Refactorings/InlineDefinition/InlineMethodRefactoring.cs b/src/Refactorings/CSharp/Refactorings/InlineDefinition/InlineMethodRefactoring.cs index eb9c411b58..5f9b8aa11b 100644 --- a/src/Refactorings/CSharp/Refactorings/InlineDefinition/InlineMethodRefactoring.cs +++ b/src/Refactorings/CSharp/Refactorings/InlineDefinition/InlineMethodRefactoring.cs @@ -18,8 +18,7 @@ public InlineMethodRefactoring( MethodDeclarationSyntax declaration, ImmutableArray parameterInfos, SemanticModel nodeSemanticModel, - SemanticModel declarationSemanticModel, - CancellationToken cancellationToken) : base(document, node, nodeEnclosingType, symbol, declaration, parameterInfos, nodeSemanticModel, declarationSemanticModel, cancellationToken) + SemanticModel declarationSemanticModel) : base(document, node, nodeEnclosingType, symbol, declaration, parameterInfos, nodeSemanticModel, declarationSemanticModel) { } diff --git a/src/Refactorings/CSharp/Refactorings/InlineDefinition/InlinePropertyAnalyzer.cs b/src/Refactorings/CSharp/Refactorings/InlineDefinition/InlinePropertyAnalyzer.cs index e3107436a3..573409c5aa 100644 --- a/src/Refactorings/CSharp/Refactorings/InlineDefinition/InlinePropertyAnalyzer.cs +++ b/src/Refactorings/CSharp/Refactorings/InlineDefinition/InlinePropertyAnalyzer.cs @@ -129,10 +129,9 @@ protected override InlineRefactoring parameterInfos, SemanticModel nodeSemanticModel, - SemanticModel declarationSemanticModel, - CancellationToken cancellationToken) + SemanticModel declarationSemanticModel) { - return new InlinePropertyRefactoring(document, node, nodeEnclosingType, symbol, declaration, parameterInfos, nodeSemanticModel, declarationSemanticModel, cancellationToken); + return new InlinePropertyRefactoring(document, node, nodeEnclosingType, symbol, declaration, parameterInfos, nodeSemanticModel, declarationSemanticModel); } protected override RefactoringDescriptor GetDescriptor() diff --git a/src/Refactorings/CSharp/Refactorings/InlineDefinition/InlinePropertyRefactoring.cs b/src/Refactorings/CSharp/Refactorings/InlineDefinition/InlinePropertyRefactoring.cs index 2db6e8106d..0e2c63eb3a 100644 --- a/src/Refactorings/CSharp/Refactorings/InlineDefinition/InlinePropertyRefactoring.cs +++ b/src/Refactorings/CSharp/Refactorings/InlineDefinition/InlinePropertyRefactoring.cs @@ -19,8 +19,7 @@ public InlinePropertyRefactoring( PropertyDeclarationSyntax declaration, ImmutableArray parameterInfos, SemanticModel invocationSemanticModel, - SemanticModel declarationSemanticModel, - CancellationToken cancellationToken) : base(document, node, nodeEnclosingType, symbol, declaration, parameterInfos, invocationSemanticModel, declarationSemanticModel, cancellationToken) + SemanticModel declarationSemanticModel) : base(document, node, nodeEnclosingType, symbol, declaration, parameterInfos, invocationSemanticModel, declarationSemanticModel) { } diff --git a/src/Refactorings/CSharp/Refactorings/InlineDefinition/InlineRefactoring.cs b/src/Refactorings/CSharp/Refactorings/InlineDefinition/InlineRefactoring.cs index 4451b40fc2..af9baa752d 100644 --- a/src/Refactorings/CSharp/Refactorings/InlineDefinition/InlineRefactoring.cs +++ b/src/Refactorings/CSharp/Refactorings/InlineDefinition/InlineRefactoring.cs @@ -29,8 +29,7 @@ protected InlineRefactoring( TDeclaration declaration, ImmutableArray parameterInfos, SemanticModel invocationSemanticModel, - SemanticModel declarationSemanticModel, - CancellationToken cancellationToken) + SemanticModel declarationSemanticModel) { Document = document; Node = node; @@ -40,7 +39,6 @@ protected InlineRefactoring( ParameterInfos = parameterInfos; InvocationSemanticModel = invocationSemanticModel; DeclarationSemanticModel = declarationSemanticModel; - CancellationToken = cancellationToken; } public abstract SyntaxNode BodyOrExpressionBody { get; } @@ -63,14 +61,12 @@ protected InlineRefactoring( public SemanticModel DeclarationSemanticModel { get; } - public CancellationToken CancellationToken { get; } - public virtual Task InlineAsync( SyntaxNode node, ExpressionSyntax expression, CancellationToken cancellationToken = default) { - ExpressionSyntax newExpression = RewriteExpression(node, expression); + ExpressionSyntax newExpression = RewriteExpression(node, expression, cancellationToken); return Document.ReplaceNodeAsync(node, newExpression, cancellationToken); } @@ -84,7 +80,7 @@ public virtual async Task InlineAndRemoveAsync( { DocumentEditor editor = await DocumentEditor.CreateAsync(Document, cancellationToken).ConfigureAwait(false); - ExpressionSyntax newExpression = RewriteExpression(node, expression); + ExpressionSyntax newExpression = RewriteExpression(node, expression, cancellationToken); editor.ReplaceNode(node, newExpression); @@ -104,9 +100,9 @@ public virtual async Task InlineAndRemoveAsync( } } - private ParenthesizedExpressionSyntax RewriteExpression(SyntaxNode node, ExpressionSyntax expression) + private ParenthesizedExpressionSyntax RewriteExpression(SyntaxNode node, ExpressionSyntax expression, CancellationToken cancellationToken) { - return RewriteNode(expression) + return RewriteNode(expression, cancellationToken) .WithTriviaFrom(node) .Parenthesize() .WithFormatterAnnotation(); @@ -119,7 +115,7 @@ public virtual Task InlineAsync( { int count = statements.Count; - StatementSyntax[] newStatements = RewriteStatements(statements); + StatementSyntax[] newStatements = RewriteStatements(statements, cancellationToken); newStatements[0] = newStatements[0].WithLeadingTrivia(expressionStatement.GetLeadingTrivia()); newStatements[count - 1] = newStatements[count - 1].WithTrailingTrivia(expressionStatement.GetTrailingTrivia()); @@ -147,7 +143,7 @@ public virtual async Task InlineAndRemoveAsync( { DocumentEditor editor = await DocumentEditor.CreateAsync(Document, cancellationToken).ConfigureAwait(false); - StatementSyntax[] newStatements = RewriteStatements(statements); + StatementSyntax[] newStatements = RewriteStatements(statements, cancellationToken); int count = statements.Count; @@ -183,28 +179,28 @@ public virtual async Task InlineAndRemoveAsync( } } - private StatementSyntax[] RewriteStatements(SyntaxList statements) + private StatementSyntax[] RewriteStatements(SyntaxList statements, CancellationToken cancellationToken) { var newStatements = new StatementSyntax[statements.Count]; for (int i = 0; i < statements.Count; i++) - newStatements[i] = RewriteNode(statements[i]).WithFormatterAnnotation(); + newStatements[i] = RewriteNode(statements[i], cancellationToken).WithFormatterAnnotation(); return newStatements; } - private T RewriteNode(T node) where T : SyntaxNode + private T RewriteNode(T node, CancellationToken cancellationToken) where T : SyntaxNode { - Dictionary symbolMap = GetSymbolsToRename(); + Dictionary symbolMap = GetSymbolsToRename(cancellationToken); - Dictionary replacementMap = GetReplacementMap(node, symbolMap); + Dictionary replacementMap = GetReplacementMap(node, symbolMap, cancellationToken); var rewriter = new InlineRewriter(replacementMap); return (T)rewriter.Visit(node); } - private Dictionary GetReplacementMap(SyntaxNode node, Dictionary symbolMap) + private Dictionary GetReplacementMap(SyntaxNode node, Dictionary symbolMap, CancellationToken cancellationToken) { var replacementMap = new Dictionary(); @@ -216,7 +212,7 @@ private Dictionary GetReplacementMap(SyntaxNode node, Dictio { var identifierName = (IdentifierNameSyntax)descendant; - ISymbol symbol = DeclarationSemanticModel.GetSymbol(identifierName, CancellationToken); + ISymbol symbol = DeclarationSemanticModel.GetSymbol(identifierName, cancellationToken); if (symbol is not null) { @@ -286,7 +282,7 @@ private Dictionary GetReplacementMap(SyntaxNode node, Dictio case SyntaxKind.ForEachStatement: case SyntaxKind.ForEachVariableStatement: { - ISymbol symbol = DeclarationSemanticModel.GetDeclaredSymbol(descendant, CancellationToken); + ISymbol symbol = DeclarationSemanticModel.GetDeclaredSymbol(descendant, cancellationToken); Debug.Assert(symbol is not null || (descendant as ForEachVariableStatementSyntax)?.Variable?.Kind() == SyntaxKind.TupleExpression, kind.ToString()); @@ -327,12 +323,12 @@ static bool ParameterEquals(in ParameterInfo parameterInfo, IParameterSymbol par } } - private Dictionary GetSymbolsToRename() + private Dictionary GetSymbolsToRename(CancellationToken cancellationToken) { ImmutableArray declarationSymbols = DeclarationSemanticModel.GetDeclaredSymbols( BodyOrExpressionBody, excludeAnonymousTypeProperty: true, - cancellationToken: CancellationToken); + cancellationToken: cancellationToken); if (!declarationSymbols.Any()) return null; @@ -347,7 +343,7 @@ private Dictionary GetSymbolsToRename() ImmutableArray invocationSymbols = InvocationSemanticModel.GetSymbolsDeclaredInEnclosingSymbol( position, excludeAnonymousTypeProperty: true, - cancellationToken: CancellationToken); + cancellationToken: cancellationToken); invocationSymbols = invocationSymbols.AddRange(InvocationSemanticModel.LookupSymbols(position));