使用FxCop Introspection进行代码分析的无限循环

时间:2011-02-09 22:31:46

标签: stack-overflow code-analysis fxcop cyclic-reference

我正在尝试编写自定义FxCop代码分析规则 这将警告开发人员包含过于嵌套的代码块的方法, 并敦促他们重新分解这些烂摊子。

离。我试图避免以下情况:

if(condition)
{
   foreach(var item in items)
   {
       if(anotherCondition)
       {
           for(var product in item.Products)
           {
               // even more nested statement blocks...
           }
       }
   }
}

当我覆盖VisitBlock(Block block)方法时,我得到一个stackoverflow 计算块的深度,因为显然有一个循环引用 从块的一个属性到 块本身。 即对于某些i,以下情况属实:block.Statements [i] == block

为什么存在这样的循环引用?怎么避免呢? 谢谢!

1 个答案:

答案 0 :(得分:0)

经过一些研究,我发现我实际上有两个主要问题

  1. VisitXXX方法不访问 源代码 的抽象语法树中的节点 但实际上访问生成的IL中的节点。只需比较每种方法生成的IL指令 和每个方法生成的语句。体 我想知道如果FxCop我们可以取得什么 可以为我们提供真正的AST访客吗?
  2. 回答我的初步问题,防止开发人员写太多嵌套 代码块,我们应该自己扫描方法代码,我的意思是,取出SourceContext的{​​{1}}属性中的起始行和结束行,并跟踪每个 我们发现'{'和'}'。增加'{'的计数器并递减'}'的计数器。这应该有用,对吗?