开发者

how to identify local variable with same name as its parent/Container class

开发者_StackOverflowHi i want to develop static code analysis rule so that local variables do not shadow a name in its outer scope. can you help me hou to identify the if blocks/nested classes using the same names as in its outer scope.and also how to avoid method hiding of the parents' member methods.

Please help me creating an algorithm so that i can develop a static code analysis rule.


(EDIT: OP wasn't originally clear about the target language)

Assuming Java, use a Java parser that builds an AST. Implement the following algorithm:

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

This is a little inefficient in that it might scan some subtrees more than once.

Namespaces make this more complex for C# and C++. If you want to do this for those languages, I think you will need a full parser along with name resolution (symbol table). There's no gaurantee that a method is declared "under" the class declaration in those langauges, so a simple tree search won't do the trick. In that case, you'll have to add an additional syntax check for a namespace declaration, and verify that the namespace refers to a declared class by checking the symbol table.

For C++, you might use Clang or our C++ Front End.

I'm not sure what you can use to this for C#, since you need the symbol table. Perhaps Mono offers you sufficent access, but I didn't think they handled C# 3.0 or 4.0.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜