2016-11-13 6 views
0

私は、APIの移行(AutoMapper V5 Profiles)のためのアナライザとcodefixを書くコンストラクタにprotected override Configure方法を変換しています:MethodDeclarationSyntaxをConstructorDeclarationSyntaxに変換する正規の方法は何ですか?

から:

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

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

に私がしましたメソッドノードをコンストラクタに変換する方法を見つけましたが、私はホワイトスペースを正しく取得するために多くの努力をしてきました。これは、メソッドをコンストラクタに変換する簡単な方法を見落としていないかどうかという疑問を招きます。

私の質問は:Roslynは既にMethodDeclarationSyntaxConstructorDeclarationSyntaxに変換するリファクタリングを提供していますか?またはthis LINQPad scriptより簡単な方法です。

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で

+0

あなたはメソッドの本体を取り出し、それを本体として持つコンストラクタを作成できませんか?その後、コンストラクタ全体をフォーマットすると、空白がきれいになります。 –

+0

いいえ、メソッド本体の既存の書式は 'NormalizeWhiteSpace()'で消去されるので、残しておきたいのです – Ties

+0

@Tiesは空の/ダミーのボディでコンストラクタをフォーマットしてから、すでに古いボディを追加しますフォーマットしました – m0sa

答えて

1

は、ちょうどフォーマッタアノテーションを追加します。

CodeFix以外では、Microsoft.CodeAnalysis.FormattingFormatter.Format()を使用してアノテーションを明示的に処理できます。

関連する問題