Есть ли способ определить потенциальное значение переменной с помощью Roslyn?

Я использую Roslyn CTP и пытаюсь определить, имеет ли значение переменная в классе значение. Допустим, я пытаюсь определить, когда кто-то использует BinaryExpressionSyntax, чтобы определить, равна ли строка ничему "".

Например,:

private void StringLiteral(string a)
        {
            if (a == "")   //flagged because we do not see a explicit set of 'a'
            {
                Console.WriteLine("Empty String");
            }
            a="42";
            if (a == "")  //not flagged because 'a' has been set
            {
                Console.WriteLine("Empty String");
            }
}

я могу получить BinaryExpressionSyntax и проверить как левую, так и правую части, используя семантику и синтаксис, но я не вижу в отладчике ничего, что отслеживало бы возможное значение. Я знаю, что это может быть поверхностным, например.:

private void BooleanTest(string a, bool b)
        {

            if (b)   
            {
                a="";
            }
            if (!b)  
            {
                a="42";
            }
             if (a == "")  // Maybe 'a' is set maybe it isn't so we will probably not flag this one
            {
                Console.WriteLine("What Do I Do?");
            }
}

Можно ли с помощью Roslyn CTP определить, установлено ли потенциальное значение переменной? Я думаю, что это во многом будет играть роль в правилах StyleCOp/FxCop.

5
задан Jay 12 April 2012 в 19:34
поделиться