我正在为 SonarQube for java 编写自定义规则,我想检查参数的值是否合格。例如,我想知道 String 是否符合特定模式。我只能测试参数是否为字符串,但我无法获得确切的值。 API 允许我这样做吗?
例如下面的代码
log.error("errorID:210134 It's an error");
我可以获取参数并测试字符串是否包含 errorID 吗?
另外,能否获取方法调用的变量是什么?
例如下面的代码
log.error("errorID:210134 It's an error");
我怎么知道日志是类 Logger 的对象?
最佳答案
以下应该可以解决问题:
- 查看方法调用的参数时,检查其种类是否为
STRING_LITERAL
,然后将参数转换为LiteralTree
。从那里,您将能够以String
的形式访问它的值(请注意,它将包含双引号)。 - 要检查调用是否在变量上完成,请从方法调用中获取
methodSelect()
表达式树。如果它的种类是MEMBER_SELECT
,则将其转换为MemberSelectExpressionTree
。从那里,检查expression()
的类型是否是IDENTIFIER
。如果是这样,那么您将能够获得IdentifierTree
及其关联的符号。然后您将能够判断调用该方法的符号是否为变量,检查其类型等。
关于java - 如何获取 Sonar 树的参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38862873/