提交 f083d292 编写于 作者: Š Šimon Koníček

Adding a type parameter for ExpressionSyntax

上级 b12ae48c
......@@ -10,7 +10,7 @@ namespace Microsoft.CodeAnalysis.CSharp.SplitIntoNestedIfStatements
{
[ExportCodeRefactoringProvider(LanguageNames.CSharp, Name = PredefinedCodeRefactoringProviderNames.MergeNestedIfStatements), Shared]
internal sealed class CSharpMergeNestedIfStatementsCodeRefactoringProvider
: AbstractMergeNestedIfStatementsCodeRefactoringProvider<IfStatementSyntax>
: AbstractMergeNestedIfStatementsCodeRefactoringProvider<IfStatementSyntax, ExpressionSyntax>
{
protected override string IfKeywordText => SyntaxFacts.GetText(SyntaxKind.IfKeyword);
......@@ -31,9 +31,10 @@ protected override ImmutableArray<SyntaxNode> GetElseClauses(IfStatementSyntax i
return ImmutableArray.Create<SyntaxNode>(ifStatement.Else);
}
protected override IfStatementSyntax MergeIfStatements(IfStatementSyntax outerIfStatement, IfStatementSyntax innerIfStatement, SyntaxNode condition)
protected override IfStatementSyntax MergeIfStatements(
IfStatementSyntax outerIfStatement, IfStatementSyntax innerIfStatement, ExpressionSyntax condition)
{
return outerIfStatement.WithCondition((ExpressionSyntax)condition).WithStatement(innerIfStatement.Statement);
return outerIfStatement.WithCondition(condition).WithStatement(innerIfStatement.Statement);
}
}
}
......@@ -18,8 +18,9 @@
namespace Microsoft.CodeAnalysis.SplitIntoNestedIfStatements
{
internal abstract class AbstractMergeNestedIfStatementsCodeRefactoringProvider<
TIfStatementSyntax> : CodeRefactoringProvider
TIfStatementSyntax, TExpressionSyntax> : CodeRefactoringProvider
where TIfStatementSyntax : SyntaxNode
where TExpressionSyntax : SyntaxNode
{
protected abstract string IfKeywordText { get; }
......@@ -27,7 +28,8 @@ internal abstract class AbstractMergeNestedIfStatementsCodeRefactoringProvider<
protected abstract ImmutableArray<SyntaxNode> GetElseClauses(TIfStatementSyntax ifStatement);
protected abstract TIfStatementSyntax MergeIfStatements(TIfStatementSyntax outerIfStatement, TIfStatementSyntax innerIfStatement, SyntaxNode condition);
protected abstract TIfStatementSyntax MergeIfStatements(
TIfStatementSyntax outerIfStatement, TIfStatementSyntax innerIfStatement, TExpressionSyntax condition);
public sealed override async Task ComputeRefactoringsAsync(CodeRefactoringContext context)
{
......@@ -61,7 +63,7 @@ private async Task<Document> FixAsync(Document document, TextSpan span, ISyntaxF
Contract.ThrowIfFalse(IsTokenOfIfStatement(token, out var ifStatement));
Contract.ThrowIfFalse(IsFirstStatementOfIfStatement(syntaxFacts, ifStatement, out var parentIfStatement));
var newCondition = document.GetLanguageService<SyntaxGenerator>().LogicalAndExpression(
var newCondition = (TExpressionSyntax)document.GetLanguageService<SyntaxGenerator>().LogicalAndExpression(
syntaxFacts.GetIfStatementCondition(parentIfStatement),
syntaxFacts.GetIfStatementCondition(ifStatement));
......
......@@ -9,7 +9,7 @@ Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Namespace Microsoft.CodeAnalysis.VisualBasic.SplitIntoNestedIfStatements
<ExportCodeRefactoringProvider(LanguageNames.VisualBasic, Name:=PredefinedCodeRefactoringProviderNames.MergeNestedIfStatements), [Shared]>
Friend NotInheritable Class VisualBasicMergeNestedIfStatementsCodeRefactoringProvider
Inherits AbstractMergeNestedIfStatementsCodeRefactoringProvider(Of MultiLineIfBlockSyntax)
Inherits AbstractMergeNestedIfStatementsCodeRefactoringProvider(Of MultiLineIfBlockSyntax, ExpressionSyntax)
Protected Overrides ReadOnly Property IfKeywordText As String = SyntaxFacts.GetText(SyntaxKind.IfKeyword)
......@@ -27,8 +27,10 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.SplitIntoNestedIfStatements
Return ImmutableArray.ToImmutableArray(Of SyntaxNode)(ifStatement.ElseIfBlocks).Add(ifStatement.ElseBlock)
End Function
Protected Overrides Function MergeIfStatements(outerIfBlock As MultiLineIfBlockSyntax, innerIfBlock As MultiLineIfBlockSyntax, condition As SyntaxNode) As MultiLineIfBlockSyntax
Return outerIfBlock.WithIfStatement(outerIfBlock.IfStatement.WithCondition(DirectCast(condition, ExpressionSyntax))) _
Protected Overrides Function MergeIfStatements(outerIfBlock As MultiLineIfBlockSyntax,
innerIfBlock As MultiLineIfBlockSyntax,
condition As ExpressionSyntax) As MultiLineIfBlockSyntax
Return outerIfBlock.WithIfStatement(outerIfBlock.IfStatement.WithCondition(condition)) _
.WithStatements(innerIfBlock.Statements)
End Function
End Class
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册