如何区分参数与局部变量

时间:2017-01-27 13:32:45

标签: java sonarqube sonarqube5.1

我正在使用Sonar API分析源代码,我的一条规则是访问标识符。

我需要区分局部变量和参数,但我找不到一种简单的方法。我想到找到标识符的父项,直到找到Kind.METHOD或Kind.CONSTRUCTOR,并获取它与标识符匹配的参数列表。

还有其他办法吗?

1 个答案:

答案 0 :(得分:1)

可能有多种方法(主要依赖于语义API),但最简单的方法是让您的规则访问METHOD(MethodTree)以及IDENTIFIER。

  • 输入方法时,请存储与其每个参数关联的符号。
  • 访问标识符时,请检查关联的符号不是已知参数的一部分。

请注意,使用语义API,您还可以获取标识符的所有者,但对于参数和局部变量,它将是方法。因此,您需要执行其他步骤来区分这两种情况(您可能需要查看语法树中符号声明的位置,以及父树是否为参数列表...)