2017-05-23 9 views
1

我正在編寫一個應用程序,它將密鑰轉換爲使用RESX文件中的資源。此代碼與局部變量是工作前:羅斯林檢查如果字段聲明已分配給

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)); 
} 

然而,當我試圖讓dataFlowAnalysis我收到一個錯誤:

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

如何在理想情況下只需要看看是否有人已寫入該變量宣言之外。

回答

2

數據流的工作方式是一個單一的方法分析內執行的順序。
對於課程級別的字段沒有意義。

相反,你應該使用一個簡單的語法,訪問者(或SymbolFinder)搜索整個類分配到外地。

你可能還需要檢查它是否是一個ref參數曾經通過。