如何识别与其父/ Container类同名的局部变量

时间:2011-04-07 07:29:10

标签: c# code-analysis

您好我想开发静态代码分析规则,以便局部变量不会在其外部作用域中隐藏名称。 你可以帮我识别if块/嵌套类,使用与其外部范围相同的名称。还有如何避免隐藏父类成员方法的方法。

请帮我创建一个算法,以便我可以开发静态代码分析规则。

1 个答案:

答案 0 :(得分:1)

(编辑:OP最初并未明确目标语言)

假设Java,使用构建AST的Java解析器。实现以下算法:

for all Java source files F of interest
    parse F
    for all nodes N of F
        if N is a "class declaration" for a class C
            for all methods M under N
                for all nodes m in M
                    if m is a declaration with name C
                       report "found " m " in " M " shadowing " C
                    endif
                endfor
           endfor
       endif
   endfor
endfor

这有点低效,因为它可能不止一次扫描一些子树。

命名空间使C#和C ++变得更加复杂。如果你想这样做 对于那些语言,我认为你需要一个完整的解析器以及名称解析(符号表)。 没有任何关于在这些语言中的“声明”下声明方法的方法, 所以简单的树搜索不会起作用。在那种情况下,你会 必须为命名空间声明添加额外的语法检查,并验证命名空间 通过检查符号表来引用声明的类。

对于C ++,您可以使用Clang或我们的C++ Front End

我不确定你能为C#使用什么,因为你需要符号表。也许Mono为您提供了足够的访问权限,但我认为他们没有处理C#3.0或4.0。