从ObjectCreationExpressionSyntax获取Type + ConstructorInfo

时间:2015-08-31 20:46:11

标签: c# .net reflection code-analysis roslyn

我试图从ObjectCreationExpressionSyntax元素中获取类型和构造函数信息。

我首先需要评估创建的实例是ArgumentException还是从中派生的类。然后,我需要获得正在使用的ConstructorInfo(System.Reflection)。

public override void Initialize(AnalysisContext context)
{
    context.RegisterSyntaxNodeAction(c =>
    {
        var local = c.Node as ObjectCreationExpressionSyntax;

        if (local == null)
            return;

        ArgumentSyntax paramNameArgument;
        bool conditionsAreMet;

        // the code that's required to get both the Type and ConstructorInfo instances would go here

        if (conditionsAreMet)
        {
            c.ReportDiagnostic(Diagnostic.Create(Rule, paramNameArgument.GetLocation()));
        }
    }, SyntaxKind.ObjectCreationExpression);
}

ObjectCreationExpressionSyntax有一个Type属性,我很确定这将是起点。但是,我不太明白我该如何从中提取任何东西。

非常感谢任何指导。

更新

这里有两个代码示例我希望分析器进入:

示例1

public void MyMethod(string myParam)
{
    if (myParam == null)
        throw new ArgumentNullException("myParam"); // <--- analyzer should step in here

    // ...
}

示例2

public void MyOtherMethod(int myParam)
{
    if (myParam > 10)
        throw new ArgumentOutOfRangeException("myParam"); // <--- analyzer should step in here

    // ...
}

0 个答案:

没有答案