将MethodDeclarationSyntax转换为ConstructorDeclarationSyntax的规范方法是什么?

时间:2016-11-13 21:05:54

标签: c# roslyn roslyn-code-analysis

我正在为API迁移(AutoMapper V5 Profiles)编写分析器和codefix,将protected override Configure方法转换为构造函数:

从:

public class MappingProfile : Profile
{
    protected override Configure()
    {
        CreateMap<Foo, Bar>();
        RecognizePrefix("m_");
    }
}

public class MappingProfile : Profile
{
    public MappingProfile()
    {
        CreateMap<Foo, Bar>();
        RecognizePrefix("m_");
    }
}

我找到了将方法节点转换为构造函数的方法,但是我一直在努力争取空白。如果我没有忽略将方法转换为构造函数的简单方法,那么这就引出了一个问题。

所以我的问题是:Roslyn是否已经为您提供了将MethodDeclarationSyntax转换为ConstructorDeclarationSyntax的重构?或者比this LINQPad script更简单。

1 个答案:

答案 0 :(得分:1)

在CodeFix中,只需添加格式化程序注释:

SyntaxFactory
    .ConstructorDeclaration(constructorIdentifier)
    .‌​WithModifiers(Syntax‌​Factory.TokenList(Sy‌​ntaxFactory.Token(Sy‌​ntaxKind.PublicKeywo‌​rd)))
    .WithAttributeL‌​ists(oldMethodNode.A‌​ttributeLists)
    .WithP‌​arameterList(newPara‌​meterList)
    .WithBody(‌​newBody)
    .WithTriviaF‌​rom(oldMethodNode)
    .W‌​ithAdditionalAnnotat‌​ions(Formatter.Annot‌​ation)

这足以在代码修复中发挥作用,因为代码修复基础结构将处理注释。

在CodeFix之外,您可以使用Formatter.Format()中的Microsoft.CodeAnalysis.Formatting来明确处理注释。