2016-06-13 12 views
0

私はDiagnosticAnalyzerを使用してVS2015用のアナライザーを作成しました。特定のインタフェースを実装しているクラス/構造体がコンストラクタに特定のシグネチャを提供しているかどうかをチェックすることも想定されています。私はこのルールをどのように登録するのかについて少し迷っています。Roslyn診断登録

最初の2つのルールは、特定のメソッドまたはコンストラクタにのみ適用され、登録の仕方はうまく機能しますが、修正を検出するのに十分頻繁に呼び出されている間にこのクラス全体のルールが呼び出される回数を最小限に抑えるにはどうすればよいですか?

public override void Initialize(AnalysisContext context) 
{ 
    // Rule A applies to any method/constructor call. 
    context.RegisterSyntaxNodeAction(LiteralInMethodCallViolation, 
    SyntaxKind.InvocationExpression); 
    context.RegisterSyntaxNodeAction(LiteralInMethodCallViolation, 
    SyntaxKind.ObjectCreationExpression); 

    // Rule B applies to entire classes/structs. 
    context.RegisterSyntaxNodeAction(MissingConstructorViolation, 
    SyntaxKind.????); 
} 

編集:context.RegisterCodeBlockAction(...)を使用しては、より適切なようだが、私が得る唯一のブロックはメソッドとフィールドの宣言です。

答えて

0

いいえ、私の悪い、それは十分明らかです。作品:

context.RegisterSyntaxNodeAction(MissingConstructorViolation, 
            SyntaxKind.ClassDeclaration); 
    context.RegisterSyntaxNodeAction(MissingConstructorViolation, 
            SyntaxKind.StructDeclaration); 
関連する問題