2017-05-23 5 views
1

에 할당 된 경우 Roslyn 확인 나는 키를 RESX 파일의 리소스를 사용하도록 변환하는 앱을 작성하고 있습니다. 이 코드는 전에 지역 변수와 함께 일하고 :필드 선언이

Additional information: statementOrExpression is not a StatementSyntax or an ExpressionSyntax.

방법 단지 누군가가이 변수에 기록되었는지 확인해야 이상적 수 있습니다 : 나는 dataFlowAnalysis을 얻을 때

public static void AnalyzeConstDeclaration(SyntaxNodeAnalysisContext context) 
{ 
    var fieldDeclaration = (FieldDeclarationSyntax)context.Node; 

    if (false == IsValidFieldDeclaration(context, fieldDeclaration)) 
    { 
     return; 
    } 

    var firstVariable = fieldDeclaration.Declaration.Variables.FirstOrDefault(); 
    var dataFlowAnalysis = context.SemanticModel.AnalyzeDataFlow(firstVariable); 

    var variableSymbol = context.SemanticModel.GetDeclaredSymbol(firstVariable); 
    if (dataFlowAnalysis.WrittenOutside.Contains(variableSymbol)) 
    { 
     return; 
    } 


    var firstSymbol = context.SemanticModel.GetDeclaredSymbol(firstVariable); 

    context.ReportDiagnostic(Diagnostic.Create(Rule, context.Node.GetLocation(), firstSymbol.Name)); 
} 

그러나 나는 오류가 발생 선언 밖에서.

답변

2

DataFlow는 단일 메서드 내에서 실행 순서를 분석하여 작동합니다.
클래스 수준 필드에는 의미가 없습니다.

대신 간단한 구문 방문자 (또는 SymbolFinder)를 사용하여 전체 클래스에서 필드에 대한 할당을 검색해야합니다.

매개 변수가 ref 매개 변수로 전달되었는지 여부도 확인하고 싶을 것입니다.